{"product_id":"listwa-startowa-do-ocieplenia-z-siatka","title":"Listwa startowa do ocieplenia z siatką","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(34px, 4.6vw, 62px);\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  \/* --- HERO ALERT NA GORZE --- *\/\n  .mistrz-hero-alert {\n    position: relative;\n    z-index: 5;\n    overflow: hidden;\n    margin: 4px 0 28px;\n    padding: 28px 30px;\n    border-radius: 18px;\n    background: linear-gradient(135deg, #ff0000 0%, #9b0000 100%);\n    color: #ffffff;\n    display: flex;\n    align-items: center;\n    gap: 20px;\n    box-shadow: 0 18px 40px rgba(255,0,0,0.32);\n    animation: mistrzAlertPulse 2.6s ease-in-out infinite;\n  }\n\n  .mistrz-hero-alert::after {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    background:\n      linear-gradient(110deg, transparent 0%, transparent 44%, rgba(255,255,255,0.22) 49%, transparent 55%, transparent 100%);\n    transform: translateX(-130%);\n    animation: mistrzShine 6s ease-in-out infinite;\n    pointer-events: none;\n  }\n\n  .mistrz-hero-alert-icon {\n    font-size: 52px;\n    line-height: 1;\n    flex-shrink: 0;\n    filter: drop-shadow(0 3px 6px rgba(0,0,0,0.25));\n  }\n\n  .mistrz-hero-alert-text {\n    font-family: 'Anton', sans-serif;\n    font-size: clamp(20px, 2.9vw, 34px);\n    line-height: 1.08;\n    letter-spacing: 0.4px;\n    text-transform: uppercase;\n    position: relative;\n    z-index: 1;\n  }\n\n  .mistrz-hero-alert-text small {\n    display: block;\n    margin-top: 8px;\n    font-family: Arial, sans-serif;\n    font-size: clamp(14px, 1.5vw, 16px);\n    line-height: 1.4;\n    font-weight: 700;\n    letter-spacing: 0.2px;\n    text-transform: none;\n    color: #ffeaea;\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  \/* --- Blok wysylki --- *\/\n  .mistrz-notice {\n    position: relative;\n    z-index: 4;\n    overflow: hidden;\n    margin-top: 22px;\n    padding: 24px 26px;\n    border-radius: 16px;\n    border: 2px solid rgba(255, 0, 0, 0.28);\n    background: linear-gradient(135deg, #ffffff 0%, #fff4f4 100%);\n    box-shadow: 0 10px 24px rgba(0,0,0,0.06);\n  }\n\n  .mistrz-notice-head {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 10px;\n    font-family: 'Anton', sans-serif;\n    font-size: clamp(18px, 2vw, 22px);\n    line-height: 1.05;\n    color: var(--red);\n    text-transform: uppercase;\n    letter-spacing: 0.4px;\n  }\n\n  .mistrz-notice p {\n    margin: 0;\n    font-family: Arial, sans-serif;\n    font-size: 15.5px;\n    line-height: 1.65;\n    font-weight: 700;\n    color: #222222;\n  }\n\n  .mistrz-notice b {\n    color: #000000;\n  }\n\n  \/* --- Blok transportu --- *\/\n  .mistrz-transport {\n    position: relative;\n    z-index: 4;\n    overflow: hidden;\n    margin-top: 16px;\n    padding: 26px;\n    border-radius: 16px;\n    background: #111111;\n    color: #ffffff;\n    box-shadow: 0 14px 30px rgba(0,0,0,0.16);\n  }\n\n  .mistrz-transport::before {\n    content: \"\";\n    position: absolute;\n    top: -80px;\n    right: -80px;\n    width: 240px;\n    height: 240px;\n    background: radial-gradient(circle, rgba(255,0,0,0.22), transparent 62%);\n    filter: blur(6px);\n    animation: mistrzRedGlow 10s ease-in-out infinite alternate;\n    pointer-events: none;\n  }\n\n  .mistrz-transport-title {\n    margin: 0 0 10px;\n    font-family: 'Anton', sans-serif;\n    font-size: clamp(20px, 2.2vw, 26px);\n    line-height: 1.05;\n    text-transform: uppercase;\n    letter-spacing: 0.4px;\n    color: #ffffff;\n    position: relative;\n    z-index: 2;\n  }\n\n  .mistrz-transport-title span {\n    color: var(--red);\n  }\n\n  .mistrz-transport p {\n    margin: 0 0 18px;\n    max-width: 760px;\n    font-family: Arial, sans-serif;\n    font-size: 15.5px;\n    line-height: 1.6;\n    font-weight: 700;\n    color: #eaeaea;\n    position: relative;\n    z-index: 2;\n  }\n\n  .mistrz-phone {\n    display: inline-flex;\n    align-items: center;\n    gap: 12px;\n    padding: 14px 26px;\n    border-radius: 999px;\n    background: var(--red);\n    color: #ffffff !important;\n    font-family: 'Anton', sans-serif;\n    font-size: clamp(20px, 2.4vw, 26px);\n    letter-spacing: 1px;\n    text-decoration: none;\n    box-shadow: 0 10px 26px rgba(255,0,0,0.35);\n    transition: transform 0.3s ease, box-shadow 0.3s ease;\n    position: relative;\n    z-index: 2;\n  }\n\n  .mistrz-phone:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 14px 32px rgba(255,0,0,0.48);\n  }\n\n  .mistrz-phone svg {\n    width: 24px;\n    height: 24px;\n    flex-shrink: 0;\n  }\n\n  .mistrz-contact-row {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    position: relative;\n    z-index: 2;\n  }\n\n  .mistrz-mail {\n    display: inline-flex;\n    align-items: center;\n    gap: 12px;\n    padding: 14px 26px;\n    border-radius: 999px;\n    background: transparent;\n    color: #ffffff !important;\n    border: 2px solid rgba(255,255,255,0.35);\n    font-family: 'Anton', sans-serif;\n    font-size: clamp(17px, 2vw, 22px);\n    letter-spacing: 0.6px;\n    text-decoration: none;\n    transition: transform 0.3s ease, border-color 0.3s ease, background 0.3s ease;\n  }\n\n  .mistrz-mail:hover {\n    transform: translateY(-2px);\n    border-color: var(--red);\n    background: rgba(255,0,0,0.10);\n  }\n\n  .mistrz-mail svg {\n    width: 22px;\n    height: 22px;\n    flex-shrink: 0;\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% { opacity: 0.45; transform: scale(1); }\n    50% { opacity: 0.75; transform: scale(1.006); }\n  }\n\n  @keyframes mistrzRedGlow {\n    0% { opacity: 0.25; transform: translate3d(0, 0, 0) scale(1); }\n    100% { opacity: 0.45; transform: translate3d(-18px, 12px, 0) scale(1.08); }\n  }\n\n  @keyframes mistrzShine {\n    0% { transform: translateX(-130%); opacity: 0; }\n    42% { transform: translateX(-130%); opacity: 0; }\n    55% { opacity: 0.45; }\n    72% { transform: translateX(130%); opacity: 0; }\n    100% { transform: translateX(130%); opacity: 0; }\n  }\n\n  @keyframes mistrzBoxMove {\n    0% { left: -90%; opacity: 0; }\n    35% { opacity: 0; }\n    50% { opacity: 0.8; }\n    70% { left: 130%; opacity: 0; }\n    100% { left: 130%; opacity: 0; }\n  }\n\n  @keyframes mistrzAlertPulse {\n    0%, 100% { box-shadow: 0 18px 40px rgba(255,0,0,0.28); }\n    50% { box-shadow: 0 18px 52px rgba(255,0,0,0.55); }\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    .mistrz-notice,\n    .mistrz-transport {\n      padding: 20px 18px;\n    }\n\n    .mistrz-hero-alert {\n      flex-direction: column;\n      text-align: center;\n      gap: 12px;\n      padding: 22px 18px;\n    }\n  }\n\u003c\/style\u003e\n\n\u003csection class=\"mistrz-product-desc\"\u003e\n  \u003cdiv class=\"mistrz-blood-frame\" id=\"mistrzBloodFrameListwa\"\u003e\n    \u003ccanvas class=\"mistrz-blood-canvas\" id=\"mistrzBloodCanvasListwa\"\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        Listwa startowa do ocieplenia z siatką (18–23 cm) \u003cstrong\u003eMISTRZ\u003c\/strong\u003e\n      \u003c\/h2\u003e\n\n      \u003cdiv class=\"mistrz-lead\"\u003e\n        Fundament każdej porządnej elewacji! \u003cspan\u003eZ tą listwą pierwszy rząd styropianu idzie prosto jak od linijki.\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mistrz-hero-alert\"\u003e\n        \u003cdiv class=\"mistrz-hero-alert-icon\"\u003e⚠\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-hero-alert-text\"\u003e\n          Zamawiasz powyżej 10 sztuk? Najpierw kontakt telefoniczny lub mailowy!\n          \u003csmall\u003ePrzy większych zamówieniach transport i szczegóły ustalamy indywidualnie - dzwoń +48 884 820 219 lub pisz na mistrzjaroslaw@op.pl.\u003c\/small\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mistrz-copy\"\u003e\n        \u003cp\u003e\n          Zaczynasz ocieplać chałupę? \u003cb\u003eBez dobrego startu nawet nie rozrabiaj kleju!\u003c\/b\u003e\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          To nie jest zwykły plastik, tylko solidna listwa z \u003cb\u003eregulowaną szerokością od 18 do 23 centymetrów\u003c\/b\u003e. Nieważne, jak gruby styropian kładziesz - dopasujesz ją bez problemu.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Zintegrowana siatka (którą dobrze widać na zdjęciach produktu) sprawia, że od razu ładnie i szczelnie zamkniesz dół elewacji, a potem płynnie przejdziesz do zaciągania klejem.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          \u003cb\u003eKoniec z kombinowaniem i prowizorką - tu ma być solidnie!\u003c\/b\u003e\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Ustawiasz poziom, kołkujesz i lecisz z tematem. Z tą listwą elewacja trzyma się jak trzeba, a \u003cb\u003erobota idzie dwa razy szybciej.\u003c\/b\u003e\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\"\u003e65 zł \/ szt.\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"mistrz-info-box\"\u003e\n          \u003cdiv class=\"mistrz-info-label\"\u003eWydajność\u003c\/div\u003e\n          \u003cdiv class=\"mistrz-info-value\"\u003e\n            Jedna sztuka to aż 2 metry bieżące listwy.\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"mistrz-info-box\"\u003e\n          \u003cdiv class=\"mistrz-info-label\"\u003eRegulacja\u003c\/div\u003e\n          \u003cdiv class=\"mistrz-info-value\"\u003e\n            Szerokość od 18 do 23 cm - dopasujesz ją do ocieplenia na wymiar.\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\"\u003eRegulacja 18–23 cm\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag\"\u003eZintegrowana siatka\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag red\"\u003e2 mb \/ szt.\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag\"\u003eProsty montaż\u003c\/div\u003e\n        \u003cdiv class=\"mistrz-tag red\"\u003eMocny start elewacji\u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mistrz-notice\"\u003e\n        \u003cdiv class=\"mistrz-notice-head\"\u003e\n          ⚠ Koszty wysyłki - UWAGA GABARYT!\n        \u003c\/div\u003e\n        \u003cp\u003e\n          Listwy to długi (2 metry!) i nieporęczny element, więc kurierzy z automatu liczą to jako gabaryt. Systemowo \u003cb\u003ewysyłka wynosi 70 zł za każde 10 sztuk\u003c\/b\u003e (np. 1–10 szt. = 70 zł, 11–20 szt. = 140 zł itd.).\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"mistrz-transport\"\u003e\n        \u003cdiv class=\"mistrz-transport-title\"\u003e\n          Zamawiasz \u003cspan\u003epowyżej 10 sztuk?\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cp\u003e\n          Spokojnie - z MISTRZEM zawsze idzie się dogadać! Przy większych zamówieniach na całą elewację \u003cb\u003eskontaktuj się bezpośrednio - telefonicznie lub mailowo\u003c\/b\u003e - a transport i całą resztę dogadamy indywidualnie, żeby wszystko się zgadzało.\n        \u003c\/p\u003e\n        \u003cdiv class=\"mistrz-contact-row\"\u003e\n          \u003ca class=\"mistrz-phone\" href=\"tel:+48884820219\"\u003e\n            \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n              \u003cpath d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" fill=\"currentColor\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\n            +48 884 820 219\n          \u003c\/a\u003e\n          \u003ca class=\"mistrz-mail\" href=\"mailto:mistrzjaroslaw@op.pl\"\u003e\n            \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n              \u003cpath d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2zm0 2v.01L12 11l8-4.99V6H4zm16 2.24-7.47 4.67c-.33.2-.73.2-1.06 0L4 8.24V18h16V8.24z\" fill=\"currentColor\"\u003e\u003c\/path\u003e\n            \u003c\/svg\u003e\n            mistrzjaroslaw@op.pl\n          \u003c\/a\u003e\n        \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('mistrzBloodCanvasListwa');\n    var frame = document.getElementById('mistrzBloodFrameListwa');\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) return { x: pad + p, y: pad };\n      p -= w;\n\n      if (p \u003c h) return { x: pad + w, y: pad + p };\n      p -= h;\n\n      if (p \u003c w) return { x: pad + w - p, y: pad + h };\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":54185456140626,"sku":null,"price":69.0,"currency_code":"PLN","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1079\/3939\/7970\/files\/att.vVslBPlBRk3LUl6S5WdL3xG2ADudd6JlGU5JqVhycx4.jpg?v=1785933977","url":"https:\/\/mistrzjaroslaw.pl\/products\/listwa-startowa-do-ocieplenia-z-siatka","provider":"Mistrz Jarosław","version":"1.0","type":"link"}