{"product_id":"miara-miernicza-3m","title":"Miara miernicza 3M","description":"\u003cstyle\u003e\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Anton\u0026display=swap');\n\n  .mistrz-product-desc {\n    --red: #ff0000;\n    --dark-red: #9b0000;\n    --black: #0f0f0f;\n    --white: #ffffff;\n    --light: #f4f4f4;\n\n    position: relative;\n    width: 100%;\n    max-width: 1150px;\n    margin: 36px auto;\n    padding: 18px;\n    font-family: 'Anton', sans-serif;\n    box-sizing: border-box;\n  }\n\n  .mistrz-blood-frame {\n    position: relative;\n    border-radius: 22px;\n    padding: 5px;\n    background: #ffffff;\n    overflow: hidden;\n    box-shadow:\n      0 16px 38px rgba(0, 0, 0, 0.10),\n      0 0 0 1px rgba(255, 0, 0, 0.12);\n    transform-style: preserve-3d;\n    perspective: 900px;\n    transition: transform 0.45s ease;\n  }\n\n  .mistrz-blood-frame::before {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    border-radius: 22px;\n    background:\n      linear-gradient(120deg, rgba(255, 0, 0, 0.08), transparent 30%, rgba(255, 0, 0, 0.07) 58%, transparent 82%),\n      radial-gradient(circle at 15% 25%, rgba(255, 0, 0, 0.09), transparent 24%),\n      radial-gradient(circle at 85% 70%, rgba(255, 0, 0, 0.08), transparent 26%);\n    animation: mistrzFramePulse 8s ease-in-out infinite;\n    pointer-events: none;\n    z-index: 1;\n  }\n\n  .mistrz-blood-canvas {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    z-index: 2;\n    pointer-events: none;\n  }\n\n  .mistrz-desc-inner {\n    position: relative;\n    z-index: 3;\n    overflow: hidden;\n    border-radius: 18px;\n    background:\n      linear-gradient(135deg, #ffffff 0%, #f4f4f4 52%, #ffffff 100%);\n    padding: 38px;\n    min-height: 440px;\n    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.04);\n  }\n\n  .mistrz-desc-inner::before {\n    content: \"\";\n    position: absolute;\n    top: -120px;\n    right: -130px;\n    width: 330px;\n    height: 330px;\n    background: radial-gradient(circle, rgba(255, 0, 0, 0.08), transparent 62%);\n    filter: blur(8px);\n    animation: mistrzRedGlow 10s ease-in-out infinite alternate;\n    pointer-events: none;\n  }\n\n  .mistrz-desc-inner::after {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    background:\n      linear-gradient(110deg, transparent 0%, transparent 44%, rgba(255,255,255,0.45) 49%, transparent 55%, transparent 100%);\n    transform: translateX(-130%);\n    animation: mistrzShine 12s ease-in-out infinite;\n    pointer-events: none;\n  }\n\n  .mistrz-top-label {\n    display: inline-flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 18px;\n    padding: 9px 16px;\n    border-radius: 999px;\n    background: #111111;\n    color: #ffffff;\n    font-size: 15px;\n    letter-spacing: 0.7px;\n    text-transform: uppercase;\n    box-shadow: 0 8px 22px rgba(0,0,0,0.14);\n  }\n\n  .mistrz-top-label span {\n    color: var(--red);\n  }\n\n  .mistrz-title {\n    margin: 0 0 14px;\n    color: #111111;\n    font-size: clamp(38px, 5vw, 70px);\n    line-height: 0.98;\n    letter-spacing: 0.3px;\n    text-transform: none;\n  }\n\n  .mistrz-title strong {\n    color: var(--red);\n    font-weight: 400;\n  }\n\n  .mistrz-lead {\n    margin: 0 0 24px;\n    max-width: 850px;\n    font-size: clamp(22px, 2.4vw, 34px);\n    line-height: 1.15;\n    color: #111111;\n  }\n\n  .mistrz-lead span {\n    color: var(--red);\n  }\n\n  .mistrz-copy {\n    max-width: 950px;\n    position: relative;\n    z-index: 4;\n  }\n\n  .mistrz-copy p {\n    margin: 0 0 18px;\n    font-family: Arial, sans-serif;\n    font-size: 17px;\n    line-height: 1.75;\n    font-weight: 700;\n    color: #222222;\n  }\n\n  .mistrz-copy b {\n    color: #000000;\n  }\n\n  .mistrz-info-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 14px;\n    margin-top: 28px;\n    position: relative;\n    z-index: 4;\n  }\n\n  .mistrz-info-box {\n    position: relative;\n    overflow: hidden;\n    padding: 20px;\n    border-radius: 16px;\n    background: #ffffff;\n    border: 2px solid rgba(255, 0, 0, 0.10);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.06);\n    transform: translateZ(0);\n    transition: transform 0.35s ease, box-shadow 0.35s ease;\n  }\n\n  .mistrz-info-box:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 14px 28px rgba(0,0,0,0.10);\n  }\n\n  .mistrz-info-box::before {\n    content: \"\";\n    position: absolute;\n    top: 0;\n    left: -90%;\n    width: 55%;\n    height: 100%;\n    background: linear-gradient(90deg, transparent, rgba(255,0,0,0.06), transparent);\n    animation: mistrzBoxMove 9s ease-in-out infinite;\n  }\n\n  .mistrz-info-label {\n    margin-bottom: 8px;\n    color: var(--red);\n    font-size: 18px;\n    line-height: 1;\n    text-transform: uppercase;\n  }\n\n  .mistrz-info-value {\n    font-family: Arial, sans-serif;\n    font-size: 16px;\n    line-height: 1.55;\n    font-weight: 800;\n    color: #111111;\n  }\n\n  .mistrz-price {\n    font-size: 28px;\n    font-family: 'Anton', sans-serif;\n    color: #111111;\n    font-weight: 400;\n  }\n\n  .mistrz-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 10px;\n    margin-top: 24px;\n    position: relative;\n    z-index: 4;\n  }\n\n  .mistrz-tag {\n    padding: 10px 14px;\n    border-radius: 999px;\n    background: #111111;\n    color: #ffffff;\n    font-size: 15px;\n    letter-spacing: 0.4px;\n    box-shadow: 0 8px 18px rgba(0,0,0,0.12);\n  }\n\n  .mistrz-tag.red {\n    background: var(--red);\n    color: #ffffff;\n  }\n\n  @keyframes mistrzFramePulse {\n    0%, 100% {\n      opacity: 0.45;\n      transform: scale(1);\n    }\n    50% {\n      opacity: 0.75;\n      transform: scale(1.006);\n    }\n  }\n\n  @keyframes mistrzRedGlow {\n    0% {\n      opacity: 0.25;\n      transform: translate3d(0, 0, 0) scale(1);\n    }\n    100% {\n      opacity: 0.45;\n      transform: translate3d(-18px, 12px, 0) scale(1.08);\n    }\n  }\n\n  @keyframes mistrzShine {\n    0% {\n      transform: translateX(-130%);\n      opacity: 0;\n    }\n    42% {\n      transform: translateX(-130%);\n      opacity: 0;\n    }\n    55% {\n      opacity: 0.45;\n    }\n    72% {\n      transform: translateX(130%);\n      opacity: 0;\n    }\n    100% {\n      transform: translateX(130%);\n      opacity: 0;\n    }\n  }\n\n  @keyframes mistrzBoxMove {\n    0% {\n      left: -90%;\n      opacity: 0;\n    }\n    35% {\n      opacity: 0;\n    }\n    50% {\n      opacity: 0.8;\n    }\n    70% {\n      left: 130%;\n      opacity: 0;\n    }\n    100% {\n      left: 130%;\n      opacity: 0;\n    }\n  }\n\n  @media (max-width: 850px) {\n    .mistrz-product-desc {\n      padding: 10px;\n      margin: 24px auto;\n    }\n\n    .mistrz-desc-inner {\n      padding: 26px 20px;\n      min-height: auto;\n    }\n\n    .mistrz-info-grid {\n      grid-template-columns: 1fr;\n    }\n\n    .mistrz-copy p {\n      font-size: 15.5px;\n      line-height: 1.7;\n    }\n\n    .mistrz-top-label {\n      font-size: 13px;\n    }\n  }\n\u003c\/style\u003e\n\n\u003csection class=\"mistrz-product-desc\"\u003e\n  \u003cdiv class=\"mistrz-blood-frame\" id=\"mistrzBloodFrameMiara\"\u003e\n    \u003ccanvas class=\"mistrz-blood-canvas\" id=\"mistrzBloodCanvasMiara\"\u003e\u003c\/canvas\u003e\n\n    \u003cdiv class=\"mistrz-desc-inner\"\u003e\n      \u003cdiv class=\"mistrz-top-label\"\u003e\n        Produkt \u003cspan\u003eMISTRZ\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003ch2 class=\"mistrz-title\"\u003e\n        Miara miernicza 3m \u003cstrong\u003eMISTRZ\u003c\/strong\u003e\n      \u003c\/h2\u003e\n\n      \u003cdiv class=\"mistrz-lead\"\u003e\n        Niezbędnik w każdej kieszeni spodni roboczych. \u003cspan\u003eSzybki pomiar, zero kombinowania!\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mistrz-copy\"\u003e\n        \u003cp\u003e\n          Klasyczna, automatycznie zwijana miarka o długości 3 metrów, która idealnie leży w dłoni.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Wyposażona w solidny hamulec, metalowy zaczep i porządną obudowę, która nie rozsypie się po pierwszym upadku na beton.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Sygnowana czerwonym logo \u003cb\u003eMISTRZ\u003c\/b\u003e - żeby na budowie nikt Ci jej przez przypadek nie „pożyczył”.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Niezastąpiona przy murowaniu, montażu i szybkich pomiarach „na już”. Prosty, niezawodny sprzęt od Mistrza Jarosława.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mistrz-info-grid\"\u003e\n        \u003cdiv class=\"mistrz-info-box\"\u003e\n          \u003cdiv class=\"mistrz-info-label\"\u003eCena\u003c\/div\u003e\n          \u003cdiv class=\"mistrz-info-value mistrz-price\"\u003e30 zł\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"mistrz-info-box\"\u003e\n          \u003cdiv class=\"mistrz-info-label\"\u003eDługość\u003c\/div\u003e\n          \u003cdiv class=\"mistrz-info-value\"\u003e\n            3 metry - idealna do codziennych prac.\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"mistrz-info-box\"\u003e\n          \u003cdiv class=\"mistrz-info-label\"\u003eWygoda\u003c\/div\u003e\n          \u003cdiv class=\"mistrz-info-value\"\u003e\n            Wytrzymała obudowa z poręczną smyczą na nadgarstek.\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mistrz-tags\"\u003e\n        \u003cdiv class=\"mistrz-tag red\"\u003e3 metry\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag\"\u003eAutomatyczne zwijanie\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag red\"\u003eSolidny hamulec\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag\"\u003eMetalowy zaczep\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag red\"\u003eSmycz na nadgarstek\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003cscript\u003e\n  (function () {\n    var canvas = document.getElementById('mistrzBloodCanvasMiara');\n    var frame = document.getElementById('mistrzBloodFrameMiara');\n\n    if (!canvas || !frame) return;\n\n    var ctx = canvas.getContext('2d');\n    var width = 0;\n    var height = 0;\n    var dpr = window.devicePixelRatio || 1;\n    var drops = [];\n    var running = true;\n\n    function resizeCanvas() {\n      var rect = frame.getBoundingClientRect();\n      width = rect.width;\n      height = rect.height;\n\n      canvas.width = width * dpr;\n      canvas.height = height * dpr;\n      canvas.style.width = width + 'px';\n      canvas.style.height = height + 'px';\n\n      ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n      createDrops();\n    }\n\n    function createDrops() {\n      drops = [];\n      var count = Math.max(18, Math.floor((width + height) \/ 62));\n\n      for (var i = 0; i \u003c count; i++) {\n        drops.push({\n          t: Math.random(),\n          speed: 0.00018 + Math.random() * 0.00032,\n          size: 2 + Math.random() * 4,\n          length: 18 + Math.random() * 38,\n          alpha: 0.12 + Math.random() * 0.18\n        });\n      }\n    }\n\n    function getPointOnRect(t) {\n      var pad = 9;\n      var w = width - pad * 2;\n      var h = height - pad * 2;\n      var perimeter = 2 * (w + h);\n      var p = (t % 1) * perimeter;\n\n      if (p \u003c w) {\n        return { x: pad + p, y: pad };\n      }\n\n      p -= w;\n\n      if (p \u003c h) {\n        return { x: pad + w, y: pad + p };\n      }\n\n      p -= h;\n\n      if (p \u003c w) {\n        return { x: pad + w - p, y: pad + h };\n      }\n\n      p -= w;\n\n      return { x: pad, y: pad + h - p };\n    }\n\n    function draw() {\n      if (!running) return;\n\n      ctx.clearRect(0, 0, width, height);\n\n      ctx.lineWidth = 1.2;\n      ctx.strokeStyle = 'rgba(255, 0, 0, 0.16)';\n      ctx.shadowColor = 'rgba(255, 0, 0, 0.25)';\n      ctx.shadowBlur = 8;\n      roundRect(ctx, 8, 8, width - 16, height - 16, 20);\n      ctx.stroke();\n\n      drops.forEach(function (drop) {\n        drop.t += drop.speed;\n\n        var p = getPointOnRect(drop.t);\n        var back = getPointOnRect(drop.t - drop.length \/ (2 * (width + height)));\n\n        var gradient = ctx.createLinearGradient(back.x, back.y, p.x, p.y);\n        gradient.addColorStop(0, 'rgba(255, 0, 0, 0)');\n        gradient.addColorStop(0.55, 'rgba(255, 0, 0,' + drop.alpha + ')');\n        gradient.addColorStop(1, 'rgba(150, 0, 0,' + (drop.alpha + 0.08) + ')');\n\n        ctx.beginPath();\n        ctx.lineCap = 'round';\n        ctx.lineWidth = drop.size;\n        ctx.strokeStyle = gradient;\n        ctx.shadowColor = 'rgba(255, 0, 0, 0.28)';\n        ctx.shadowBlur = 9;\n        ctx.moveTo(back.x, back.y);\n        ctx.lineTo(p.x, p.y);\n        ctx.stroke();\n\n        ctx.beginPath();\n        ctx.fillStyle = 'rgba(255, 0, 0,' + Math.min(0.42, drop.alpha + 0.12) + ')';\n        ctx.shadowColor = 'rgba(255, 0, 0, 0.35)';\n        ctx.shadowBlur = 8;\n        ctx.arc(p.x, p.y, drop.size * 0.45, 0, Math.PI * 2);\n        ctx.fill();\n      });\n\n      requestAnimationFrame(draw);\n    }\n\n    function roundRect(ctx, x, y, w, h, r) {\n      ctx.beginPath();\n      ctx.moveTo(x + r, y);\n      ctx.lineTo(x + w - r, y);\n      ctx.quadraticCurveTo(x + w, y, x + w, y + r);\n      ctx.lineTo(x + w, y + h - r);\n      ctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n      ctx.lineTo(x + r, y + h);\n      ctx.quadraticCurveTo(x, y + h, x, y + h - r);\n      ctx.lineTo(x, y + r);\n      ctx.quadraticCurveTo(x, y, x + r, y);\n      ctx.closePath();\n    }\n\n    frame.addEventListener('mousemove', function (e) {\n      var rect = frame.getBoundingClientRect();\n      var x = (e.clientX - rect.left) \/ rect.width - 0.5;\n      var y = (e.clientY - rect.top) \/ rect.height - 0.5;\n\n      frame.style.transform =\n        'rotateX(' + (-y * 1.1).toFixed(2) + 'deg) rotateY(' + (x * 1.1).toFixed(2) + 'deg)';\n    });\n\n    frame.addEventListener('mouseleave', function () {\n      frame.style.transform = 'rotateX(0deg) rotateY(0deg)';\n    });\n\n    if ('IntersectionObserver' in window) {\n      var observer = new IntersectionObserver(function(entries) {\n        entries.forEach(function(entry) {\n          running = entry.isIntersecting;\n          if (running) requestAnimationFrame(draw);\n        });\n      }, { threshold: 0.1 });\n\n      observer.observe(frame);\n    }\n\n    window.addEventListener('resize', resizeCanvas);\n\n    resizeCanvas();\n    requestAnimationFrame(draw);\n  })();\n\u003c\/script\u003e","brand":"Mistrz Jarosław","offers":[{"title":"Default Title","offer_id":53589253521746,"sku":null,"price":30.0,"currency_code":"PLN","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1079\/3939\/7970\/files\/Miara_drewniana_MISTRZ_1.png?v=1779959115","url":"https:\/\/mistrzjaroslaw.pl\/products\/miara-miernicza-3m","provider":"Mistrz Jarosław","version":"1.0","type":"link"}