PageSourceSearch

https://botanic.com.pl/pl/basket

html botanic.com.pl collected 2026-10-07 23:22:50 UTC 145,869 bytes, 2,480 lines download raw bytes

1
2<!doctype html>
3<html lang="pl">
4<head>
5                <title>Twój koszyk - Botanic</title>
6    <meta charset="utf-8">
7    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0, user-scalable=yes, interactive-widget=resizes-content">
8    <meta name="description" content="">
9    <meta name="keywords" content="">
10
11            <meta name="view-transition" content="same-origin" />
12        <meta content="https://botanic.com.pl/userdata/public/skins/7f68b08a74977525acdb9dc1b97fc796_copy_27/assets/og-botanic-1200x630.png" property="og:image">
13<meta content="1200" property="og:image:width">
14<meta content="630" property="og:image:height">
15<meta content="Botanic" property="og:image:alt">
16<meta content="noindex,nofollow" name="robots">
17<meta content="Botanic" property="og:site_name">
18
19    
20        
21                        
21<script>
22                (function () {
23                    const defaultConsents = {
24                        ad_storage: 'denied',
25                        ad_user_data: 'denied',
26                        ad_personalization: 'denied',
27                        analytics_storage: 'denied'
28                    };
29
30                    window.dataLayer = window.dataLayer || [];
31
32                    function gtag() {
33                        window.dataLayer.push(arguments);
34                    }
35
36                    gtag('consent', 'default', defaultConsents);
37                })();
38            </script>
38
39            
40            <meta name="format-detection" content="telephone=no">
41    
42    <link rel="dns-prefetch" href="//www.googletagmanager.com">
43    <link rel="dns-prefetch" href="//www.google-analytics.com">
44    <link rel="dns-prefetch" href="https://fonts.gstatic.com">
45    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
46    <link rel="preload" href="//botanic.com.pl/userdata/public/skins/7f68b08a74977525acdb9dc1b97fc796_copy_27/cache/MzM6MTc6NS4yNi41Ng.css" as="style">
47    <link rel="stylesheet" href="//botanic.com.pl/userdata/public/skins/7f68b08a74977525acdb9dc1b97fc796_copy_27/cache/MzM6MTc6NS4yNi41Ng.css" type="text/css" data-turbo-track="reload">
48
49    <meta name="turbo-cache-control" content="no-cache">
50
51            <link rel="icon" href="/environment/cache/images/storefrontImages_318d9e17-aa15-4a4d-b438-773695c3fcc2_0_0.png">
52        </head>
53<body>
54    <div class="grid"><a href="#main" class="link__skip-link">Przejdź do głównej treści</a></div>
55    <header id="main-header" class="context-25">
56        <div class="grid grid_full" style="background-color: rgb(255, 255, 255);" data-skin-grid-section-id="12bd68b5-66ab-4832-9355-5e012bc674aa"><div class="grid__row" data-skin-grid-row-id="ca8c22c4-d7ef-4757-9ee9-57fcf7761f29"><div class="grid__col grid__col_xs-12 grid__col_sm-12 grid__col_lg-12 grid__col_xxl-12" data-skin-grid-column-id="31f48ce6-ad2c-461b-a8c4-e84170188f85"><div 
57            class="module" 
58            data-module-name="000652b2-bce7-21f1-9102-f9d74be4814a" 
59            data-module-id="627" 
60            data-module-instance="6496"><link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJnecnFHGPezSQ.woff2">
61<link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecnFHGPc.woff2">
62<link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/poppins/v20/pxiByp8kv8JHgFVrLCz7Z1JlFd2JQEl8qw.woff2">
63<link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/poppins/v20/pxiByp8kv8JHgFVrLCz7Z1xlFd2JQEk.woff2">
64<link rel="preload" as="font" type="font/woff2" crossorigin href="https://fonts.gstatic.com/s/notosans/v35/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a7du3mhPy0.woff2">
65<link id="iconsPath" href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg">
66<header class="bn-hdr">
67  <div class="bn-top"><div class="grid"><div class="grid__row grid__row_container-width"><div class="grid__col grid__col_xs-12"><div class="bn-hdr__inner">
68    <span class="bn-top__msg is-active"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10z"/><path d="M2 21c0-3 1.85-5.36 5.08-6"/></svg>Producent szklarni ogrodowych, wiat i zadaszeń basenowych</span>
69    <span class="bn-top__msg"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>Konstrukcje z poliwęglanu — sprawdzone w polskich ogrodach</span>
70    <span class="bn-top__msg"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="1" y="3" width="15" height="13"/><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"/><circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/></svg>Dostawa na terenie całej Polski</span>
71    <span class="bn-top__msg"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"/></svg>Większy projekt? Skontaktuj się z naszym działem handlowym</span>
72  </div></div></div></div></div>
73
74  <div class="bn-main"><div class="grid"><div class="grid__row grid__row_container-width"><div class="grid__col grid__col_xs-12"><div class="bn-hdr__inner">
75    <a class="bn-logo" href="/" aria-label="Botanic — strona główna"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDYyMjEgMTM0OCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij4KICAgIDxyZWN0IGlkPSJQYWdlLTIiIHNlcmlmOmlkPSJQYWdlIDIiIHg9IjAiIHk9IjAiIHdpZHRoPSI2MjIxIiBoZWlnaHQ9IjEzN
75DcuMzMzIiBzdHlsZT0iZmlsbDpub25lOyIvPgogICAgPGc+CiAgICAgICAgPGNsaXBQYXRoIGlkPSJfY2xpcDEiPgogICAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNjIyMSIgaGVpZ2h0PSIxMzQ3LjMzMyIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGcgY2xpcC1wYXRoPSJ1cmwoI19jbGlwMSkiPgogICAgICAgICAgICA8Zz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik03MDUuOTUsODY4LjI4OUM3MDUuOTUsNzA2LjIyIDU5NC4yOTYsNTk2LjM2NyA0NjQuNjI5LDU5Ni4zNjdDMzMxLjM2LDU5Ni4zNjcgMjIxLjUwNyw3MDQuNDE5IDIyMS41MDcsODY4LjI4OUMyMjEuNTA3LDEwMzAuMzc2IDMzMS4zNiwxMTQwLjIzIDQ2NC42MjksMTE0MC4yM0M1OTQuMjk1LDExNDAuMjMgNzA1Ljk1LDEwMzAuMzc3IDcwNS45NSw4NjguMjg5TTIxNy45MDUsMTMyNS43MTRMMCwxMzI1LjcxNEwwLDQ3LjFMMjMyLjMxNSw0Ny4xTDIzMi4zMTUsNTIwLjcxN0MyODIuNzQ4LDQ0My4yODUgMzk0LjM4NCwzODUuNjY1IDUxMy4yNjEsMzg1LjY2NUM3NDcuMzU5LDM4NS42NjUgOTQwLjA2Niw1ODEuOTU2IDk0MC4wNjYsODY2LjQ4N0M5NDAuMDY2LDExNTEuMDM2IDc0Ny4zNTksMTM0Ny4zMjcgNTA5LjY0LDEzNDcuMzI3QzM4Ny4xNzksMTM0Ny4zMjcgMjY4LjMzOCwxMjg2LjA4NyAyMTcuOTA1LDEyMDEuNDVMMjE3LjkwNSwxMzI1LjcxNFoiIHN0eWxlPSJmaWxsOnJnYigyNyw2NCw0MCk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjc2MC41OTgsMTMxMS4zMDZDMjcyMi43OTIsMTMzMi45MiAyNjY1LjE1NCwxMzQ3LjMyOSAyNTg5LjUyMywxMzQ3LjMyOUMyNDAwLjQzNiwxMzQ3LjMyOSAyMjgzLjM3OCwxMjM1LjY3NSAyMjgzLjM3OCwxMDM3LjU4MkwyMjgzLjM3OCw1OTQuNTQ4TDIxNTMuNzEyLDU5NC41NDhMMjE1My43MTIsNDA3LjI2M0wyMjkwLjU4Myw0MDcuMjYzTDIyOTAuNTgzLDE5OC4zNjNMMjUxNy40OTQsMTM4Ljk0M0wyNTE3LjQ5NCw0MDcuMjYzTDI3MzkuMDAyLDQwNy4yNjNMMjczOS4wMDIsNTk0LjU0OEwyNTE3LjQ5NCw1OTQuNTQ4TDI1MTcuNDk0LDEwMDUuMTYxQzI1MTcuNDk0LDEwOTguODA0IDI1NjYuMTI2LDExMzguNDMgMjY1Mi41NjQsMTEzOC40M0MyNjc3Ljc2MiwxMTM4LjQzIDI3MjIuNzkyLDExMzEuMjI1IDI3NjAuNTk4LDExMDkuNjExTDI3NjAuNTk4LDEzMTEuMzA2WiIgc3R5bGU9ImZpbGw6cmdiKDI3LDY0LDQwKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNDQzLjA3NSw5NTIuOTMxTDM0NDMuMDc1LDkxOC43MjdMMzI1Ny41OTEsOTQyLjEyNEMzMTU2Ljc0NCw5NTQuNzMyIDMwOTkuMTA2LDk5Ni4xNDEgMzA5OS4xMDYsMTA2Mi43ODRDMzA5OS4xMDYsMTEyNS44MDcgMzE1MS4zNCwxMTY1LjQzMyAzMjI2Ljk3MSwxMTY1LjQzM0MzMzQ1LjgzLDExNjUuNDMzIDM0NDMuMDc1LDEwNjguMTg4IDM0NDMuMDc1LDk1Mi45MzFNMzI2Ni41OTcsMzg1LjY1M0MzNTAwLjcxMywzODUuNjUzIDM2NjkuOTg3LDUxMy41MTggMzY2OS45ODcsNzQ1LjgzM0wzNjY5Ljk4NywxMzI1LjcxOUwzNDUyLjA4MiwxMzI1LjcxOUwzNDUyLjA4MiwxMTk3Ljg1NEMzMzk0LjQ0NCwxMjkxLjQ5NyAzMjk1LjQxNiwxMzQ3LjMzMyAzMTc0Ljc1NiwxMzQ3LjMzM0MzMDAxLjg2MiwxMzQ3LjMzMyAyODc1Ljc5OCwxMjM3LjQ4IDI4NzUuNzk4LDEwODYuMTk5QzI4NzUuNzk4LDkyNS45MTMgMjk5NC42NzUsODM0LjA3MSAzMjA4Ljk2LDgwMS42NjhMMzQ0MS4yNzUsNzY3LjQ0NkwzNDQxLjI3NSw3NDIuMjNDMzQ0MS4yNzUsNjQ2Ljc4NiAzMzY1LjY0NCw1OTAuOTUgMzI0OC41ODYsNTkwLjk1QzMxMjYuMTI1LDU5MC45NSAzMDE0LjQ3LDY0My4xODQgMjk0Ni4wNDQsNjkzLjYxN0wyOTQ2LjA0NCw0NzMuODkyQzMwMjMuNDc2LDQyMy40NzcgMzE0Mi4zMzUsMzg1LjY1MyAzMjY2LjU5OCwzODUuNjUzIiBzdHlsZT0iZmlsbDpyZ2IoMjcsNjQsNDApO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTQ0MzUuMjg2LDM4NS42NkM0NjQ3LjgwNiwzODUuNjYgNDc5MS44NjMsNTI3LjkzNCA0NzkxLjg2Myw3NjcuNDM2TDQ3OTEuODYzLDEzMjUuNzA4TDQ1NTcuNzQ3LDEzMjUuNzA4TDQ1NTcuNzQ3LDc5Ni4yNTRDNDU1Ny43NDcsNjYzLjAwNCA0NDc4LjUxNCw1OTQuNTU5IDQzNzQuMDY0LDU5NC41NTlDNDIxOS4xODEsNTk0LjU1OSA0MTYxLjU2Miw3MzMuMjMxIDQxNjEuNTYyLDg1Mi4wOUw0MTYxLjU2MiwxMzI1LjcwN0wzOTI3LjQ0NiwxMzI1LjcwN0wzOTI3LjQ0Niw0MDcuMjU1TDQxNTIuNTU2LDQwNy4yNTVMNDE1Mi41NTYsNTMxLjUzNkM0MjA0Ljc3Miw0NDMuMjc5IDQyOTYuNjMyLDM4NS42NTkgNDQzNS4yODUsMzg1LjY1OSIgc3R5bGU9ImZpbGw6cmdiKDI3LDY0LDQwKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01MDQ3LjUzMiw0MDcuMjZMNTI4MS42NDgsNDA3LjI2TDUyODEuNjQ4LDEzMjUuNzEyTDUwNDcuNTMyLDEzMjUuNzEyTDUwNDcuNTMyLDQwNy4yNlpNNTI5OS42NDEsMTQwLjc0MUM1Mjk5LjY0MSwyMTYuMzcyIDUyNDAuMjIxLDI3NC4wMSA1MTY2LjM5MSwyNzQuMDFDNTA5MC43NiwyNzQuMDEgNTAyOS41MiwyMTYuMzcyIDUwMjkuNTIsMTQwLjc0MUM1MDI5LjUyLDY1LjExIDUwOTAuNzYsNy40NzIgNTE2Ni4zOTEsNy40NzJDNTI0MC4yMjEsNy40NzIgNTI5OS42NDEsNjUuMTEgNTI5OS42NDEsMTQwLjc0MSIgc3R5bGU9ImZpbGw6cmdiKDI3LDY0LDQwKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02MjE2LjIzOSw2NjIuOTk3QzYxNTUuMDE3LDYxOS43NjkgNjA2Ni43Niw1OTYuMzU0IDU5OTQuNzMxLDU5Ni4zNTRDNTgzMC44NDMsNTk2LjM1NCA1NzE5LjIwNiw3MDguMDA4IDU3MTkuMjA2LDg2OC4yOTVDNTcxOS4yMDYsMTAxNy43NzQgNTgyMy42NTYsMTEzNi42MzMgNTk5NC43MzEsMTEzNi42MzNDNjA3My45ODMsMTEzNi42MzMgNjE1OC42MDEsMTExNS4wMTkgNjIxOC4wNCwxMDY4LjE4OEw2MjE4LjA0LDEyODkuNjk2QzYxNT
75EuNDE1LDEzMzEuMTIzIDYwNTAuNTY3LDEzNDcuMzM0IDU5NjUuOTEyLDEzNDcuMzM0QzU2ODYuNzY3LDEzNDcuMzM0IDU0ODEuNDcsMTE0MC4yMTcgNTQ4MS40Nyw4NjguMjk1QzU0ODEuNDcsNTk0LjU1MyA1NjgzLjE4MywzODUuNjU0IDU5NjcuNzE0LDM4NS42NTRDNjA1Mi4zNTEsMzg1LjY1NCA2MTQ3Ljc5NSw0MDUuNDY3IDYyMTYuMjM5LDQ0My4yOTJMNjIxNi4yMzksNjYyLjk5OUw2MjE2LjIzOSw2NjIuOTk3WiIgc3R5bGU9ImZpbGw6cmdiKDI3LDY0LDQwKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTYzLjA4MSwxMTMzLjAxOUMxNDE3LjIwNCwxMTMzLjAxOSAxMzEyLjc1NCwxMDE3Ljc2MiAxMzEyLjc1NCw4NjYuNUMxMzEyLjc1NCw3MTUuMjIgMTQxNy4yMDQsNTk5Ljk2MyAxNTYzLjA4MSw1OTkuOTYzQzE3MDcuMTM4LDU5OS45NjMgMTgxMS42MDYsNzE1LjIyIDE4MTEuNjA2LDg2Ni41QzE4MTEuNjA2LDEwMTcuNzYyIDE3MDcuMTM4LDExMzMuMDE5IDE1NjMuMDgxLDExMzMuMDE5TTE2NTYuODY5LDM5My44ODRMMTcxNS43MDcsMzkzLjg4NEMxOTAyLjY4MywzOTMuODg0IDIwNTQuMjczLDI0Mi4yOTQgMjA1NC4yNzMsNTUuMzE4TDE5MDcuNDg3LDU1LjMxOEMxNzIzLjI0LDU1LjMxOCAxNTczLjY3LDIwMi41OTYgMTU2OS4zNCwzODUuODA2QzE1NjcuMjQ4LDM4NS43ODggMTU2NS4xOTIsMzg1LjY2IDE1NjMuMDgxLDM4NS42NkMxNTYwLjM3LDM4NS42NiAxNTU3LjcxNCwzODUuODA2IDE1NTUuMDIxLDM4NS44NDJDMTU1MC43MDksMjAyLjYxNCAxNDAxLjEzOSw1NS4zMTggMTIxNi44NTYsNTUuMzE4TDEwNzAuMDg4LDU1LjMxOEMxMDcwLjA4OCwyNDIuMjk0IDEyMjEuNjc4LDM5My44ODQgMTQwOC42NTQsMzkzLjg4NEwxNDY4LjcyOSwzOTMuODg0QzEyMzYuMTk2LDQzNC43NjUgMTA3Ni44MzgsNjI1Ljg5IDEwNzYuODM4LDg2Ni41MDFDMTA3Ni44MzgsMTEzOC40MjMgMTI4MC4zMzQsMTM0Ny4zMjMgMTU2My4wODIsMTM0Ny4zMjNDMTg0NC4wMSwxMzQ3LjMyMyAyMDQ3LjUwNiwxMTM4LjQyMyAyMDQ3LjUwNiw4NjYuNTAxQzIwNDcuNTA2LDYyNS44OSAxODg4LjE2Niw0MzQuNzY2IDE2NTYuODcsMzkzLjg4NCIgc3R5bGU9ImZpbGw6cmdiKDM5LDEwNCwzNSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=" width="300" height="65" alt="Botanic"></a>
76    <div class="bn-phone">
77      <span class="bn-phone__icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg></span>
78      <span><a class="bn-phone__num" href="tel:+48833070023">+48 833 070 023</a><span class="bn-phone__hours">Pon.–Pt. 8:00–17:00</span></span>
79    </div>
80    <form class="bn-search" action="/pl/s" method="post" role="search">
81      <input type="search" name="search" placeholder="Wpisz, czego szukasz" aria-label="Wyszukiwarka produktów">
82      <button type="submit" aria-label="Szukaj"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg></button>
83    </form>
84    <nav class="bn-actions" aria-label="Konto i koszyk">
85      <a href="/contact"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 18v-6a9 9 0 0 1 18 0v6"/><path d="M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 1 2-2v-3a2 2 0 0 1-2-2H3z"/></svg><span>Kontakt</span></a>
86      <a href="/pl/login"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg><span>Zaloguj</span></a>
87      <a class="bn-cart" href="/pl/basket"><svg width="23" height="23" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 0 1-8 0"/></svg><span class="bn-cart__badge">0</span><span>Koszyk</span></a>
88      <button type="button" class="bn-burger" aria-label="Menu"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#1a1a1a" stroke-width="2.2" stroke-linecap="round"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg></button>
89    </nav>
90  </div></div></div></div></div>
91
92  <nav class="bn-nav" aria-label="Główna nawigacja"><div class="grid"><div class="grid__row grid__row_container-width"><div class="grid__col grid__col_xs-12"><div class="bn-hdr__inner">
93    <div class="bn-nav__item"><a class="bn-nav__link" href="/pl/i/Opinie-klientow/24">Opinie klientów</a></div>
94    <div class="bn-nav__item">
95      <a class="bn-nav__link" href="/wszystkie-szklarnie">Szklarnie ogrodowe <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></a>
96      <div class="bn-sub">
97        <span class="bn-sub__group">Szklarnie z poliwęglanu</span>
98        <a href="/szklarnie-partner">Szklarnie Partner</a>
99        <a href="/szklarnie-rolnik">Szklarnie Rolnik</a>
100        <a href="/duze-szklarnie-ogrodowe">Duże szklarnie ogrodowe</a>
101        <a href="/tunele-ogrodowe-z-poliweglanu">Tunele ogrodowe</a>
102        <div class="bn-sub__sep"></div>
103        <a href="/akcesoria-do-szklarni">Akcesoria do szklarni</a>
104      </div>
105    </div>
106    <div class="bn-nav__item"><a class="bn-nav__link" href="/wiaty-samochodowe">Wiaty samochodowe</a></div>
107    <div class="bn-nav__item"><a class="bn-nav__link" href="/pl/c/Zadaszenia-basenowe/50">Zadaszenia basenowe</a></div>
108    <div class="bn-nav__item">
109      <a class="bn-nav__link" href="/grzadki-i-klomby">Grządki i klomby <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg></a>
110      <div class="bn-sub">
111        <a href="/grzadki-ogrodowe">Grządki ogrodowe</a>
112        <a href="/klomby-ogrodowe">Klomby ogrodowe</a>
113        <a href="/kompostowniki">Kompostowniki</a>
114      </div>
115    </div>
116    <div class="bn-nav__item"><a class="bn-nav__link" href="/realizacje">Realizacje</a></div><div class="bn-nav__item"><a class="bn-nav__link" href="/pl/i/Zostan-Partnerem-B2B/35">Zostań Partnerem B2B</a></div><div class="bn-nav__item"><a class="bn-nav__link" href="/rekrutacja">Rekrutacja</a></div>
117  </div></div></div></div></nav>
118</header>
119
120
121<script>
122(function(){
123  if(window.__bnHdrInit)return; window.__bnHdrInit=1;
124  function init(){
125    var hdr=document.querySelector('.bn-hdr');
126    if(!hdr||hdr.dataset.bnReady)return;
127    hdr.dataset.bnReady='1';
128    syncCart();
129  }
130  function syncCart(){
131    try{
132      var ind=document.querySelector('#main-header .indicator[data-value], basket-preview .indicator, [data-basket-count]');
133      var hdr=document.querySelector('.bn-hdr');
134      if(!hdr)return;
135      var badge=hdr.querySelector('.bn-cart__badge');
136      if(!badge)return;
137      var v=ind?(ind.getAttribute('data-value')||ind.textContent||'').trim():'';
138      if(!v||v==='0'){badge.style.display='none';}else{badge.style.display='';badge.textContent=v;}
139    }catch(e){}
140  }
141  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init();
142  setTimeout(syncCart,1500);
143  /* rotacja topbara (4s): zapytania w momencie ticku — węzły po SPA są nowe */
144  setInterval(function(){
145    var msgs=document.querySelectorAll('.bn-hdr .bn-top__msg');
146    if(msgs.length>1){
147      var cur=document.querySelector('.bn-hdr .bn-top__msg.is-active');
148      var i=[].indexOf.call(msgs,cur);
149      if(cur)cur.classList.remove('is-active');
150      var next=msgs[((i<0?0:i)+1)%msgs.length];
151      next.classList.add('is-active');
152    }
153  },4000);
154  /* burger: delegacja */
155  document.addEventListener('click',function(e){
156    var b=e.target.closest?e.target.closest('.bn-burger'):null;
157    if(b){
158      var hdr=b.closest('.bn-hdr');
159      var nav=hdr?hdr.querySelector('.bn-nav'):null;
160      if(nav)nav.classList.toggle('is-open');
161    }
162  });
163  /* syncCart po SPA / zmianach koszyka: observer na document (przeżywa podmianę body) */
164/* Jedna wspolna magistrala obserwatora DOM zamiast osobnego MutationObservera
165   w kazdym module. Dwie kolejki: natychmiastowa (przenoszenie blokow — musi
166   zdazyc w tej samej klatce, inaczej po nawigacji SPA mignie natywna stopka)
167   i odlozona o 150 ms (synchronizacja licznikow — tak bylo i wczesniej). */
168  window.__bnDomWatch=window.__bnDomWatch||(function(){var now=[],later=[],t=null,mo=null;function flush(){t=null;for(var i=0;i<later.length;i++){try{later[i]();}catch(e){}}}function tick(){for(var i=0;i<now.length;i++){try{now[i]();}catch(e){}}if(later.length){if(t)clearTimeout(t);t=setTimeout(flush,150);}}return function(fn,defer){(defer?later:now).push(fn);if(!mo){mo=new MutationObserver(tick);mo.observe(document,{childList:true,subtree:true});}};})();
169  window.__bnDomWatch(syncCart,true);
170})();
171</script>
171</div></div></div></div><div class="grid" style="background-color: var(--globalBodyBackgroundColor);" data-skin-grid-section-id="4fd3340c-1c63-4b83-a445-fc4968aaae4d"><div class="grid__row" data-skin-grid-row-id="979df87c-3d3b-423b-8474-d55a57d20288"><div class="grid__col grid__col_xs-grow" data-skin-grid-column-id="aef08df4-756d-4e0b-a772-a66f1dcc6fe0"><div class="grid__row" data-skin-grid-row-id="ca065155-a5bd-42bf-9d47-16f84934e140"><div class="grid__col gc__contact__bar grid__col_xs-grow grid__col_sm-grow grid__col_lg-grow grid__col_xxl-grow" data-skin-grid-column-id="5159799f-d2c9-49b9-8531-66caef88d284"></div><div class="grid__col grid__col_xs-grow grid__col_sm-grow grid__col_lg-grow grid__col_xxl-grow gc__rownaj__w__prawo" data-skin-grid-column-id="e8ced1e9-b3f7-4c33-81ef-dfc70e0e9668"></div></div></div></div></div><div class="grid pt-xs-0 pb-xs-0 pt-sm-0 pb-sm-0 pt-lg-0 pb-lg-0 pt-xxl-0 pb-xxl-0 mt-xs-2 mb-xs-1 mt-sm-2 mb-sm-1 mt-lg-2 mb-lg-1 mt-xxl-2 mb-xxl-1" data-skin-grid-section-id="3cf42b18-0df7-49cc-bca1-c862d3801bd9">
172    
173    <div class="grid__row grid__row_xs-hcenter grid__row_sm-hleft grid__row_lg-hleft grid__row_xxl-hcenter grid__row_xs-vcenter grid__row_sm-vcenter grid__row_lg-vcenter grid__row_xxl-vcenter" data-skin-grid-element-custom-name="Nagłówek z logo i socjalami" data-skin-grid-row-id="2f8991ab-4778-400e-afa3-5e6eba93eea3">
174        <div class="grid__col hidden-xs-only grid__col_xs-4 grid__col_sm-4 grid__col_lg-4 grid__col_xxl-4" data-skin-grid-element-custom-name="Social media" data-skin-grid-column-id="c3e25f4a-ac8d-4708-9d88-715ed0b59bc8">
175            
176        </div>
177        
178        <div class="grid__col gc__main__logo__container grid__col_xs-auto grid__col_sm-auto grid__col_lg-grow grid__col_xxl-4" data-skin-grid-column-id="7ddbfcd9-e112-4bb4-8449-24421f33d91b">
179            <div 
180            class="module" 
181            data-module-name="logo" 
182            data-module-id="49" 
183            data-module-instance="6586">
184
185
186    <figure class="logo">
187        <a href="/" >
188                    
189    
190    <picture
191                    class="image"
192            >
193                    
194                                        
195                            <source
196                    srcset="/environment/cache/images/storefrontImages_1d70c3b1-0404-4649-b04b-0e5d9cf299d9_265_0.webp 1x"
197                    type="webp"
198                                    >
199                    
200        <img 
201                            src="/environment/cache/images/storefrontImages_1d70c3b1-0404-4649-b04b-0e5d9cf299d9_265_0.webp"
202                            width="265"
203                            height="68"
204                            alt="Szablony Shoper od GrowCommerce - strona główna"
205                            title="Szablony Shoper od GrowCommerce"
206                            class="logo"
207                            fetchpriority="high"
208            >
209    </picture>
210
211        </a>
212    </figure>
213
214<script type="application/ld+json">
215    {
216        "@context": [
217            "http://schema.org/",
218            { "@base": "https://botanic.com.pl/" }
219        ],
220        "@type": "OnlineStore",
221        "@id": "22bdbcb658ad0f939a54f364776fb2a1bdb0f3f3",
222        "name": "Botanic",
223        "legalName": "Botanic",
224        "logo": "/environment/cache/images/storefrontImages_1d70c3b1-0404-4649-b04b-0e5d9cf299d9_265_0.webp",
225        "url": "https://botanic.com.pl/"
226    }
227</script>
227
228</div>
229        </div>
230        <div class="grid__col gc__main__menu__header grid__col_xs-4 grid__col_sm-4 grid__col_lg-4 grid__col_xxl-4 hidden-xs-only hidden-sm-only hidden-md-only" data-skin-grid-column-id="f4f4f4ba-0f02-4de5-8828-8ff3924b58af"><div 
231            class="module" 
232            data-module-name="basket_preview" 
233            data-module-id="39" 
234            data-module-instance="6518"> 
235
236    
237        
238
239                        <basket-preview
240                is-with-value                sheet
241                basket-url="/pl/basket"
242                basket-delivery-payment-url="/pl/basket/step2"
243                module-instance-id="6518"
244            >
245                <h-sheet-opener name="basket-preview-sheet">
246                    <span class="sr-only">Produkty w koszyku: 0. Zobacz szczegóły</span>
247                    <div class="labeled-icon">
248                        <div class="indicator" data-value="0">
249                                            
250            
251    <svg class="
252            icon
253            
254            
255            
256            
257                        labeled-icon__icon
258        "
259                        aria-hidden="true"
260        focusable="false"
261            >
262        <use href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-basket" xlink:href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-basket"></use>
263    </svg>
264
265                        </div>
266                        <div class="labeled-icon__signature font_bold" aria-hidden="true">Koszyk</div>
267                    </div>
268                </h-sheet-opener>
269
270                <h-sheet id="basket-preview-sheet" hidden>
271                    <h-sheet-header>
272                        <p class="section-title section-title_s">Produkty w koszyku</p>
273
274                        <h-sheet-close class="btn btn_icon sheet__btn-right">
275                            <span class="sr-only">Zamknij okno</span>
276                            <h-icon icon-name="icon-x" aria-hidden="true"></h-icon>
277                        </h-sheet-close>
278                    </h-sheet-header>
279
280                    <h-sheet-body>
281                        <div class="basket-preview">
282                            <div class="grid__row grid__row_xs-vcenter">
283                                <div class="grid__col">
284                                                    
285            
286    <svg class="
287            icon
288            
289            
290            
291            
292                        icon_xxl
293        "
294                        aria-hidden="true"
295        focusable="false"
296            >
297        <use href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-basket" xlink:href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-basket"></use>
298    </svg>
299
300                                </div>
301                                <div class="grid__col">
302                                    <p class="p align_center" tabindex="0">Twój koszyk jest pusty</p>
303                                </div>
304                            </div>
305                        </div>
306                    </h-sheet-body>
307
308                </h-sheet>
309            </basket-preview>
310        
311    
312</div></div>
313        
314        
315    </div>
316</div>
317<div class="grid" data-skin-grid-section-id="41ee4628-187b-4999-a806-ac1d5880422c">
318    <div class="grid__row" data-skin-grid-row-id="490be876-3909-4f03-9fd5-c516ad3f2f96">
319        <div class="grid__col grid__col_xs-12" data-skin-grid-column-id="c0377a2e-5715-4e52-b5a3-863b54536cd3">
320            
321        </div>
322    </div>
323</div>    </header>
324<main class="context-25" id="main" tabindex="-1">
325    <div class="grid">
326    <div class="grid__row">
327        <div class="grid__col grid__col_xs-12">
328            <div 
329            class="module" 
330            data-module-name="basket_step1_title" 
331            data-module-id="125" 
332            data-module-instance="6523">
333                                    <h1
334            class="section-title header header_h1 basket-header"
335                                            >Twój koszyk</h1>
336    </div>
337        </div>
338    </div>
339
340    <div class="grid__row mb-xs-4">
341        <div class="grid__col grid__col_xs-12 grid__col_md-7 grid__col_lg-8 mb-xs-2">
342            <div 
343            class="module" 
344            data-module-name="basket_products_list" 
345            data-module-id="19" 
346            data-module-instance="6519"><basket-products class="basket-products basket-module">
347    <div slot="loader" class="loader p-all-xs-4">
348        <div class="loader__spinner"></div>
349    </div>
350</basket-products></div>
351            
352            <div 
353            class="module" 
354            data-module-name="basket_loyalty" 
355            data-module-id="120" 
356            data-module-instance="6514">
357
358
359</div>
360        </div>
361
362        <div class="grid__col grid__col_xs-12 grid__col_md-5 grid__col_lg-4">
363            <div 
364            class="module" 
365            data-module-name="basket_login" 
366            data-module-id="44" 
367            data-module-instance="6513">
368
369
370
371<auth-controller>
372    <div slot="logged-out" class="basket-module">
373                        <div class="basket-module__content basket-login hidden-xs-only grid__row grid__row_xs-hbetween grid__row_xs-vcenter">
374        <div class="grid__col">
375            <h2 class="section-title section-title_s">Masz już konto?</h2>
376        </div>
377        <div class="grid__col">
378            <login-modal-opener class="btn btn_s btn_secondary">
379                                
380            
381    <svg class="
382            icon
383            
384            
385            
386            
387                        btn__icon btn__icon_left
388        "
389                        aria-hidden="true"
390        focusable="false"
391            >
392        <use href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-user" xlink:href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-user"></use>
393    </svg>
394
395                Zaloguj się
396            </login-modal-opener>
397        </div>
398    </div>
399
400    <div class="basket-module__content visible-xs-only">
401        <div class="grid__row grid__row_xs-hbetween grid__row_xs-vcenter">
402            <div class="grid__col">
403                <h2 class="section-title section-title_secondary">
404                    Masz już konto?
405                </h2>
406            </div>
407            <div class="grid__col">
408                <login-modal-opener class="btn btn_xs btn_secondary">
409                                    
410            
411    <svg class="
412            icon
413            
414            
415            
416            
417                        btn__icon btn__icon_left
418        "
419                        aria-hidden="true"
420        focusable="false"
421            >
422        <use href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-user" xlink:href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-user"></use>
423    </svg>
424
425                    Zaloguj się
426                </login-modal-opener>
427            </div>
428        </div>
429    </div>
430
431                        
432    <hr 
433        class="separator   mb-xs-0 mt-xs-0 separator_tertiary "
434        aria-hidden="true"
435    >
436    </hr>
437
438
439    <div class="basket-module__content_tertiary">
440        <p class="p_xs">Możesz kontynuować bez logowania.</p>
441    </div>
442
443            </div>
444</auth-controller>
445</div><div 
446            class="module" 
447            data-module-name="basket_summary" 
448            data-module-id="59" 
449            data-module-instance="6525">
450<basket-summary class="basket-module" url="/pl/basket/step2">
451    <div slot="loader" class="loader p-all-xs-4">
452        <div class="loader__spinner"></div>
453    </div>
454</basket-summary>
455</div>
456        </div>
457    </div>
458</div>
459<div class="grid">
460    <div class="grid__row grid__row_xs-hcenter grid__row_sm-hcenter grid__row_lg-hcenter grid__row_xxl-hcenter grid__row_xs-vcenter grid__row_sm-vcenter grid__row_lg-vcenter grid__row_xxl-vcenter mt-xs-7 mt-sm-7 mt-lg-7 mt-xxl-7">
461        <div class="grid__col grid__col_xs-12 grid__col_sm-12 grid__col_lg-12 grid__col_xxl-12">
462            <div 
463            class="module" 
464            data-module-name="0007ada2-409b-21f0-8002-0960ada74704" 
465            data-module-id="152" 
466            data-module-instance="6646">
467    <div class="gc__trustbadges__scroll-wrapper">
468
469                    <div class="gc__trustbadges__body--nowoczesny">
470                                                                                                                                                                                    
471                                                                                                
472                                                                                                                                                                
473                        <div class="gc__trustbadges__item--nowoczesny gc__icon__1 gc__cta-hover-enabled">
474                            <div class="gc__trustbadges__item__icon-wrapper">
475                                                                    <svg class="gc-info-icon-item__icon icon" aria-hidden="true" focusable="false">
476                                        <use xlink:href="/assets/img/icons/symbol-defs.svg#icon-shield"></use>
477                                    </svg>
478                                                            </div>
479
480                                                            <span class="gc__trustbadges__item__title">Bezpieczeństwo</span>
481                                                                                        <div class="gc__trustbadges__item__description"> Robiąc zakupy w naszym sklepie online, możesz czuć się w pełni bezpieczny.</div>
482                            
483                                                            <div class="gc__trustbadges__item__cta-wrapper">
484                                    <a href="&#x2F;" class="gc__trustbadges__item__cta-button"
485                                    title="Sprawd&#x017A;"
486                                    >
487                                        Sprawdź
488                                    </a>
489                                </div>
490                                                    </div>
491                                                                                                                                                                                                        
492                                                                                                
493                                                                                                                                                                
494                        <div class="gc__trustbadges__item--nowoczesny gc__icon__2 gc__cta-hover-enabled">
495                            <div class="gc__trustbadges__item__icon-wrapper">
496                                                                    <svg class="gc-info-icon-item__icon icon" aria-hidden="true" focusable="false">
497                                        <use xlink:href="/assets/img/icons/symbol-defs.svg#icon-box"></use>
498                                    </svg>
499                                                            </div>
500
501                                                            <span class="gc__trustbadges__item__title">Dostawa</span>
502                                                                                        <div class="gc__trustbadges__item__description">Kurier, Paczkomat, Megaskrytka czy odbiór osobisty? Ty decydujesz.</div>
503                            
504                                                            <div class="gc__trustbadges__item__cta-wrapper">
505                                    <a href="&#x2F;" class="gc__trustbadges__item__cta-button"
506                                    title="Sprawd&#x017A;"
507                                    >
508                                        Sprawdź
509                                    </a>
510                                </div>
511                                                    </div>
512                                                                                                                                                                                                        
513                                                                                                
514                                                                                                                                                                
515                        <div class="gc__trustbadges__item--nowoczesny gc__icon__3 gc__cta-hover-enabled">
516                            <div class="gc__trustbadges__item__icon-wrapper">
517                                                                    <svg class="gc-info-icon-item__icon icon" aria-hidden="true" focusable="false">
518                                        <use xlink:href="/assets/img/icons/symbol-defs.svg#icon-credit-card"></use>
519                                    </svg>
520                                                            </div>
521
522                                                            <span class="gc__trustbadges__item__title">Płatność</span>
523                                                                                        <div class="gc__trustbadges__item__description">Spośród różnorodnych form płatności wybierz najlepszą opcję dla siebie.</div>
524                            
525                                                            <div class="gc__trustbadges__item__cta-wrapper">
526                                    <a href="&#x2F;" class="gc__trustbadges__item__cta-button"
527                                    title="Sprawd&#x017A;"
528                                    >
529                                        Sprawdź
530                                    </a>
531                                </div>
532                                                    </div>
533                                                                                                                                                                                                        
534                                                                                                
535                                                                                                                                                                
536                        <div class="gc__trustbadges__item--nowoczesny gc__icon__4 gc__cta-hover-enabled">
537                            <div class="gc__trustbadges__item__icon-wrapper">
538                                                                    <svg class="gc-info-icon-item__icon icon" aria-hidden="true" focusable="false">
539                                        <use xlink:href="/assets/img/icons/symbol-defs.svg#icon-tool"></use>
540                                    </svg>
541                                                            </div>
542
543                                                            <span class="gc__trustbadges__item__title">Montaż</span>
544                                                                                        <div class="gc__trustbadges__item__description">Jeśli zechcesz, profesjonalni montażyści złożą Twoją pergolę za Ciebie.</div>
545                            
546                                                            <div class="gc__trustbadges__item__cta-wrapper">
547                                    <a href="&#x2F;" class="gc__trustbadges__item__cta-button"
548                                    title="Sprawd&#x017A;"
549                                    >
550                                        Sprawdź
551                                    </a>
552                                </div>
553                                                    </div>
554                                                                                                                                                                                                        
555                                                                                                
556                                                                                                                                                                
557                        <div class="gc__trustbadges__item--nowoczesny gc__icon__5 gc__cta-hover-enabled">
558                            <div class="gc__trustbadges__item__icon-wrapper">
559                                                                    <svg class="gc-info-icon-item__icon icon" aria-hidden="true" focusable="false">
560                                        <use xlink:href="/assets/img/icons/symbol-defs.svg#icon-basket"></use>
561                                    </svg>
562                                                            </div>
563
564                                                            <span class="gc__trustbadges__item__title">Darmowa wysyłka</span>
565                                                                                        <div class="gc__trustbadges__item__description">Wysyłka gratis  dla zakupów już od 1999zł</div>
566                            
567                                                            <div class="gc__trustbadges__item__cta-wrapper">
568                                    <a href="&#x2F;" class="gc__trustbadges__item__cta-button"
569                                    title="Sprawd&#x017A;"
570                                    >
571                                        Sprawdź
572                                    </a>
573                                </div>
574                                                    </div>
575                                                </div>
576        
577    </div>
578
579</div><div 
580            class="module" 
581            data-module-name="roster_product_recommendation" 
582            data-module-id="8" 
583            data-module-instance="6620">
584        
585    
586                    
587    
588    
589
590    
591    
592    
593
594    </div>
595        </div>
596    </div>
597</div></main>
598
599
600
601
602
603                                                            
604<script id="skinSettings" type="application/json">
605    {
606        "currency": "PLN",
607        "locale": "pl_PL",
608        "decimalSeparator": ",",
609        "thousandSeparator": " ",
610        "recaptchaSiteKey": "6Le4tYEpAAAAAP3ZMzqruaaLJMcxP7oRFVly2Ang",
611        "recaptchaEnabled": "1",
612        "isFullRegistrationMode": "",
613        "registrationType": "0",
614        "isGuestCheckoutEnabled": "",
615        "isCookieInformationEnabled": "1",
616        "isRegistrationEnabled": "1",
617        "isBuyingEnabledToUnregistered": "1",
618        "contextId": "25",
619        "licenseData": "1791415370101414386",
620        "showNetPrices": "",
621        "showGrossPrices": "1",
622        "showAdditionalTaxInfo": "",
623        "loginDisplayMode": "sheet",
624        "isShoperSSOActive": "1",
625        "lastUrl": ""
626    }
627</script>
627
628
629<script id="localesAndCurrenciesSettings" type="application/json">
630    {
631        "locales": [{"locale":"pl_PL","region":"Polska","name":"polski","url":"\/","currencyCode":"PLN","localized":{"name":"polski","region":"Polska"}}],
632        "currencies": [{"code":"PLN","name":"z\u0142oty polski","symbol":"z\u0142"}]
633    }
634</script>
634
635
636<script id="featureFlags" type="application/json">
637    {
638        "dev_basket_merging": "",
639        "dev_mobile_search_layer": "",
640        "select_shipping_country_on_shipping_step": "",
641        "create_basket_queue": "",
642        "dev_storefront_basket_set_default_country_fix": "",
643        "payments_santander_installments_calculator": "",
644        "storefront_registration": "1",
645        "p24_payment_hide_none_pln_payments": "1",
646        "dev_payments_p24_gopay_googlepay_in_all_currencies": "1",
647        "payments_basket_stripe_card": "",
648        "dev_payments_basket_stripe_card_storefront": "1",
649        "dev_storefront_form_honeypot": "1",
650        "dev_geoloc": "1",
651        "dev_gift_cards": "1",
652        "dev_geoloc_currency_param_fix": "1",
653        "dev_storefront_menu_optimization": "1",
654        "dev_storefront_menu_categories_optimization": "",
655        "dev_storefront_menu_progressive_loading": "",
656        "dev_inpost_pay_button": "",
657        "dev_google_customer_reviews_widget_fix": "1",
658        "dev_enable_analytics_events_with_prefix": "1",
659        "dev_disable_analytics_events_without_prefix": "",
660        "dev_payments_basket_p24_apple_pay": "1",
661        "dev_payments_basket_stripe_apple_pay": "1",
662        "dev_payments_basket_apple_pay": "1",
663        "dev_storefront_address_form_save": "1",
664        "dev_storefront_turbo_restore_loaded_event": "1",
665        "dev_accordion_optimization": "",
666        "dev_phoenix_lazy_loader_optimization": "1",
667        "stock_optimization": "1",
668        "dev_consent_mode_init_fix": "1",
669        "dev_remember_create_basket_queue": "",
670        "dev_remember_order_queue": "",
671        "dev_storefront_stock_optimization": "",
672        "dev_gift_cards_payment_check": "1",
673        "dev_google_analytics_refactor": "",
674        "dev_search_close_aria_hidden_fix": "1",
675        "dev_cached_select_options": "1",
676        "dev_search_fixes": "1",
677        "dev_google_reviews_sticky_bars_fix": "1",
678        "dev_search_focus_trap_fix": "1",
679        "dev_search_close_aria_hidden_fix": "1",
680        "dev_recaptcha_fix": "1",
681        "dev_filters_mobile_focus_trap": "1",
682        "dev_email_redirect_fix": "1",
683        "dev_markets": "",
684        "dev_sso_default_payment_method_fix": "1",
685        "dev_vat_eu_visibility_fix": "1",
686        "dev_recaptcha_social_register_fix": "1",
687        "dev_select_width_optimization": "1",
688        "dev_payments_popular_subchannels": "",
689        "dev_components_scheduling_optimization": "",
690        "dev_components_resolve_order_optimization": ""
691    }
692</script>
692
693
694
695
696    <div id="my-grecaptcha-badge" data-turbolinks-permanent></div>
697
698<login-modal>
699                
700            <div hidden class="social-login-providers" slot="additional-login-providers">
701            <div class="text-separator pb-xs-1">
702                <div class="separator" aria-hidden="true"></div>
703                <span class="text-separator__content">lub</span>
704                <div class="separator" aria-hidden="true"></div>
705            </div>
706
707                            <a data-turbo="false" class="btn btn_full-width mb-xs-2 shoper_sso btn_outline" href="/pl/login/shoper_sso">
708                                            Zaloguj przez
709                        <img width="85" height="19" class="shoper_sso__logo shoper_sso__logo_dark" src="https://dcsaascdn.net/img/logo-shoper-one-white.svg" alt="Zaloguj się przez Shoper One logo">
710                        <img width="85" height="19" class="shoper_sso__logo shoper_sso__logo_light" src="https://dcsaascdn.net/img/logo-shoper-one-dark.svg" alt="Zaloguj się przez Shoper One logo">
711                                    </a>
712                            <a data-turbo="false" class="btn btn_full-width mb-xs-2 facebook btn_outline" href="/pl/login/facebook">
713                                            <img width="16" height="16" class="btn__icon btn__icon_left" src="/assets/img/icons/facebook_logo.svg" alt="Zaloguj przez Facebooka logo">
714                        Zaloguj przez Facebooka
715                                    </a>
716                            <a data-turbo="false" class="btn btn_full-width mb-xs-2 google btn_outline" href="/pl/login/google">
717                                            <img width="16" height="16" class="btn__icon btn__icon_left" src="/assets/img/icons/google_logo.svg" alt="Zaloguj przez Google logo">
718                        Zaloguj przez Google
719                                    </a>
720            
721                                            <small class="d-block color_secondary mb-xs-2">
722                    Logowanie przez Facebook i Google do Botanic świadczone jest w ramach usługi Shoper ONE.
723                </small>
724                    </div>
725    
726</login-modal>
727
728<register-modal>
729                
730            <div hidden class="social-login-providers" slot="additional-login-providers">
731            <div class="text-separator pb-xs-1">
732                <div class="separator" aria-hidden="true"></div>
733                <span class="text-separator__content">lub</span>
734                <div class="separator" aria-hidden="true"></div>
735            </div>
736
737                            <a data-turbo="false" class="btn btn_full-width mb-xs-2 shoper_sso btn_outline" href="/pl/login/shoper_sso">
738                                            Zaloguj przez
739                        <img width="85" height="19" class="shoper_sso__logo shoper_sso__logo_dark" src="https://dcsaascdn.net/img/logo-shoper-one-white.svg" alt="Zaloguj się przez Shoper One logo">
740                        <img width="85" height="19" class="shoper_sso__logo shoper_sso__logo_light" src="https://dcsaascdn.net/img/logo-shoper-one-dark.svg" alt="Zaloguj się przez Shoper One logo">
741                                    </a>
742                            <a data-turbo="false" class="btn btn_full-width mb-xs-2 facebook btn_outline" href="/pl/login/facebook">
743                                            <img width="16" height="16" class="btn__icon btn__icon_left" src="/assets/img/icons/facebook_logo.svg" alt="Zaloguj przez Facebooka logo">
744                        Zaloguj przez Facebooka
745                                    </a>
746                            <a data-turbo="false" class="btn btn_full-width mb-xs-2 google btn_outline" href="/pl/login/google">
747                                            <img width="16" height="16" class="btn__icon btn__icon_left" src="/assets/img/icons/google_logo.svg" alt="Zaloguj przez Google logo">
748                        Zaloguj przez Google
749                                    </a>
750            
751                                            <small class="d-block color_secondary mb-xs-2">
752                    Logowanie przez Facebook i Google do Botanic świadczone jest w ramach usługi Shoper ONE.
753                </small>
754                    </div>
755    
756</register-modal>
757
758<remind-password-modal></remind-password-modal>
759
760<added-to-basket-modal url="/pl/basket"></added-to-basket-modal>
761
762<h-backdrop></h-backdrop>
763
764
765
766<div id="flash-messenger" data-turbo-permanent>
767    <flash-messenger class="flash-messenger flash-messenger_fixed" name="global"></flash-messenger>
768</div>
769
770<div id="aria-live-polite" role="region" aria-live="polite" aria-atomic="true" class="sr-only" data-turbo-permanent></div>
771<div id="aria-live-assertive" role="alert" aria-live="assertive" aria-atomic="true" class="sr-only" data-turbo-permanent></div>
772
773            <aside class="js__footer-extension">
774                <div class="grid">
775                    <div class="grid__row grid__row_xs-hcenter mt-sm-1 mt-lg-4 mb-xs-2">
776                        <div class="grid__col grid__col_xs-12 grid__col_xs-hcenter">
777                            <hr class="separator separator_secondary" aria-hidden="true">
778                                        <a 
779                href="https://www.shoper.pl/premium/"
780                target="_blank" 
781                rel="noopener" 
782                title="Sklep internetowy Shoper Premium"
783                class="link_no-underline link_secondary p_xs color_main">Sklep internetowy <b>Shoper Premium</b></a>
784                        </div>
785                    </div>
786                </div>
787            </aside>
788<div 
789                class="module_type-integration" 
790                data-integration-module-name="0007ada2-423d-21f0-aa02-0727428d8ebc" 
791                data-integration-module-id="153"><template id="gc__basket_empty_state_template">
792  <section class="gc-basket-empty-state" aria-labelledby="gc-basket-empty-state-title">
793    <svg class="gc-basket-empty-state__icon" viewBox="0 0 48 48" aria-hidden="true" focusable="false">
794      <path d="M7 9h5l3.6 20h21.2l4.2-14H14"></path>
795      <path d="M18 35h17"></path>
796      <circle cx="19" cy="40" r="2.5"></circle>
797      <circle cx="35" cy="40" r="2.5"></circle>
798    </svg>
799    <div class="gc-basket-empty-state__message" role="status" aria-live="polite" aria-atomic="true">
800      <h1 id="gc-basket-empty-state-title" class="gc-basket-empty-state__title">Twój koszyk jest pusty.</h1>
801      <p class="gc-basket-empty-state__text">Dodaj produkty, aby przejść do zamówienia.</p>
802    </div>
803    <a class="btn btn_primary gc-basket-empty-state__cta" href="/">Wróć do zakupów</a>
804  </section>
805</template>
806
807</div><div 
808                class="module_type-integration" 
809                data-integration-module-name="0007ada2-461b-21f0-8402-7b9f31987c3f" 
810                data-integration-module-id="156">    
811<style>
812
813    /* --- General Footer Styling --- */
814    footer#main-footer,
815    aside.js__footer-extension {
816                background: #101010;
817        
818        .contact-info__header,
819            h1,h2,h3,h4,h5,h6,.label{
820            color: #FFFFFF;
821            }
822  
823    .gc__footer__trust__badges{
824          border-bottom: 1px solid #413e38;
825    }
826	.mt-lg-8,
827    .grid_full>.grid__row:not(.gc__last__footer__section) {
828      
829      > .grid__col{
830        border-bottom: 1px solid #413e38;
831      }
832    }
833
834        .icon{
835            stroke: #FFFFFF;
836        }
837        
838        color: #D5D5CB;
839        
840        p.contact-info__details-working-hours,
841        .gc__trustbadges__badge__body,
842        .gc__footer__info__words{
843            color: #D5D5CB;
844        }
845    }
846    
847    /* --- Headings --- */
848    footer#main-footer h3.overline.footer-group__title,
849    aside.js__footer-extension h3.overline.footer-group__title {
850        color: #FFFFFF;
851    }
852
853    /* --- Links --- */
854    footer#main-footer a,
855    aside.js__footer-extension a {
856        color: #8FA116;
857    }
858    
859    footer#main-footer a:hover,
860    aside.js__footer-extension a:hover {
861        color: #8FA116 !important;
862        text-decoration: underline;
863    }
864
865    /* --- External Link Icon --- */
866    footer#main-footer a.link_secondary[target='_blank']::after,
867    footer#main-footer .link_secondary[target='_blank']::after,
868    aside.js__footer-extension a.link_secondary[target='_blank']::after,
869    aside.js__footer-extension .link_secondary[target='_blank']::after {
870        background-color: #D5D5CB;
871    }
872
873    /* --- Social Media Icons Coloring --- */
874        footer#main-footer .gc__social__container a img,
875    footer#main-footer .footer-social-media__item img,
876    footer#main-footer .footer-social-media__item svg,
877    aside.js__footer-extension .gc__social__container a img,
878    aside.js__footer-extension .footer-social-media__item img,
879    aside.js__footer-extension .footer-social-media__item svg {
880                        
881                    filter: brightness(0) saturate(100%) invert(43%) sepia(95%) saturate(687%) hue-rotate(35deg) brightness(108%) contrast(83%);
882            }
883        
884    .gc__footer__newsletter {
885        .control__element_flex {
886            border: 2px solid #cacabe; 
887            transition: border-color .2s ease-in-out;
888            -webkit-text-fill-color: #FFFFFF;
889            
890            input {
891                -webkit-text-fill-color: #FFFFFF;
892            }
893        }
894
895        .control__element_flex.is-focused {
896            border-color: #ffffff; 
897        }
898        
899        .input__control + .input__label {
900            color: #aaaaaa; 
901        }
902
903        .input__control input {
904            color: #FFFFFF;
905        }
906
907        .newsletter__submit-button {
908            background-color: #8FA116;
909            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23FFFFFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3Cpolyline points='12 5 19 12 12 19'%3E%3C/polyline%3E%3C/svg%3E");
910            transition: background-color .2s ease-in-out;
911        }
912
913        .newsletter__submit-button:hover {
914            filter: brightness(1.15); /* Delikatne rozjaśnienie koloru linku */
915        }
916    }
917</style></div><div 
918                class="module_type-integration" 
919                data-integration-module-name="0007ada2-46f3-21f0-8802-7f04ceb346e2" 
920                data-integration-module-id="159"><!-- gc-version:2026-09-04-unavailable-x -->
921<style type="text/css">
922    :root {
923        /* --- Add to Cart Button (Default State) --- */
924        --gc-product-tile-button-border-color: #101010;
925        --gc-product-tile-button-bg-color: #101010;
926        --gc-product-tile-button-text-color: #FFFFFF;
927
928        /* --- Add to Cart Button (Hover State) --- */
929        --gc-product-tile-button-border-color-hover: #101010;
930        --gc-product-tile-button-bg-color-hover: #FFFFFF;
931        --gc-product-tile-button-text-color-hover: #101010;
932
933        /* --- Notify Me Button (Default State) --- */
934        --gc-product-tile-notify-border-color: #666666;
935        --gc-product-tile-notify-bg-color: #f5f5f5;
936        --gc-product-tile-notify-text-color: #666666;
937
938        /* --- Notify Me Button (Hover State) --- */
939        --gc-product-tile-notify-border-color-hover: #333333;
940        --gc-product-tile-notify-bg-color-hover: #e0e0e0;
941        --gc-product-tile-notify-text-color-hover: #333333;
942
943        /* --- Animated Border --- */
944                --gc-product-tile-animated-border-color: #101010;
945        
946        /* --- Image Standardization --- */
947                --gc-product-tile-image-border-radius: 8px;
948                        --gc-product-tile-image-aspect-ratio: 1 / 1;
949                    }
950
951    .btn_primary {
952        background-color: var(--gc-product-tile-button-bg-color);
953        color: var(--gc-product-tile-button-text-color);
954        border: 1px solid var(--gc-product-tile-button-border-color);
955        stroke: var(--gc-product-tile-button-text-color);
956        transition: color 0.25s ease-in-out, background-color 0.25s ease-in-out, border-color 0.25s ease-in-out, box-shadow 0.25s ease-in-out;
957        .btn__icon{
958         stroke: var(--gc-product-tile-button-text-color);
959        }
960    }
961    
962    /* Notify Me Button Styles */
963    availability-notifier-btn .btn_secondary {
964        background-color: var(--gc-product-tile-notify-bg-color);
965        color: var(--gc-product-tile-notify-text-color);
966        border: 1px solid var(--gc-product-tile-notify-border-color);
967        stroke: var(--gc-product-tile-notify-text-color);
968        overflow: hidden;
969        transition: color 0.25s ease-in-out, background-color 0.25s ease-in-out, border-color 0.25s ease-in-out, box-shadow 0.25s ease-in-out;
970        .btn__icon{
971         stroke: currentColor;
972        }
973    }
974    
975    availability-notifier-btn .btn_secondary:hover,
976    availability-notifier-btn .btn_secondary:focus-visible {
977        background-color: var(--gc-product-tile-notify-bg-color-hover);
978        color: var(--gc-product-tile-notify-text-color-hover);
979        border-color: var(--gc-product-tile-notify-border-color-hover);
980        stroke: var(--gc-product-tile-notify-text-color-hover);
981        .btn__icon{
982         stroke: currentColor;
983        }
984    }
985    
986    /* View Product Button uses same styles as Add to Cart */
987    .btn_secondary:not(availability-notifier-btn .btn_secondary) {
988        border: 1px solid var(--gc-product-tile-button-border-color);
989        stroke: var(--gc-product-tile-button-text-color);
990        overflow: hidden;
991        transition: color 0.25s ease-in-out, background-color 0.25s ease-in-out, border-color 0.25s ease-in-out, box-shadow 0.25s ease-in-out;
992        .btn__icon{
993         stroke: currentColor;
994        }
995    }
996    
997    .btn_secondary:not(availability-notifier-btn .btn_secondary):hover {
998        fill: var(--gc-product-tile-button-text-color-hover);
999        border-color: var(--gc-product-tile-button-border-color-hover);
1000        stroke: var(--gc-product-tile-button-border-color-hover);
1001        .btn__icon{
1002         stroke: currentColor;
1003        }
1004    }    
1005    
1006    .btn_primary:hover {
1007        background-color: var(--gc-product-tile-button-bg-color-hover);
1008        color: var(--gc-product-tile-button-text-color-hover);
1009        border-color: var(--gc-product-tile-button-border-color-hover);
1010        stroke: var(--gc-product-tile-button-text-color-hover);
1011        .btn__icon{
1012        stroke: var(--gc-product-tile-button-text-color-hover);
1013        }
1014    }
1015    
1016        
1017    
1018        
1019        
1020        
1021    
1022        @media (max-width: 767px) {
1023        .product-tile {
1024            display: grid;
1025            grid-template-columns: 1fr auto !important;
1026            grid-template-areas: "header header" "content footer";
1027            align-items: end;
1028
1029            .product-tile__header { grid-area: header; grid-column: 1 / -1 !important; }
1030            .product-tile__content { grid-area: content; margin-right: 5px;}
1031            .product-tile__footer { grid-area: footer; grid-column: 2 / 3 !important;
1031 grid-row: 2 !important; }
1032            buy-button, availability-notifier-btn { position: static; }
1033        }
1034
1035        /* Add to Cart Button */
1036        .product-tile__footer-btn .btn_primary {
1037                            width: 44px !important;
1038        height: 44px !important;
1039        padding: 0;
1040        border-radius: 50%;
1041        border-width: 1.5px;
1042        box-sizing: border-box;
1043        box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.1);
1044        font-size: 0;
1045        color: transparent;
1046    
1047
1048        &:before {
1049            content: '+';
1050            font-size: 28px; 
1051            font-weight: 300;  
1052            line-height: 44px;
1053            text-align: center;
1054            display: block;
1055            width: 100%;
1056            height: 100%;
1057            color: var(--gc-product-tile-button-text-color);
1058            transition: color 0.25s ease-in-out;
1059        }
1060
1061        &:hover {
1062            background-color: var(--gc-product-tile-button-bg-color-hover) !important;
1063            border-color: var(--gc-product-tile-button-border-color-hover) !important;
1064             
1065            &:before {
1066                color: var(--gc-product-tile-button-text-color-hover);
1067            }
1068        }
1069    
1070        }
1071
1072        /* Notify Me Button */
1073                .product-tile availability-notifier-btn .btn_secondary {
1074                            width: 44px !important;
1075        height: 44px !important;
1076        padding: 0;
1077        border-radius: 50%;
1078        border-width: 1.5px;
1079        box-sizing: border-box;
1080        box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.1);
1081        font-size: 0;
1082        color: transparent;
1083    
1084
1085        &:before {
1086            content: '';
1087            font-size: 0px !important;
1088            /* Bell icon SVG mask */
1089            -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9'%3E%3C/path%3E%3Cpath d='M13.73 21a2 2 0 0 1-3.46 0'%3E%3C/path%3E%3C/svg%3E") center/60% no-repeat;
1090            mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9'%3E%3C/path%3E%3Cpath d='M13.73 21a2 2 0 0 1-3.46 0'%3E%3C/path%3E%3C/svg%3E") center/60% no-repeat;
1091            background-color: var(--gc-product-tile-notify-text-color);
1092            transition: background-color 0.25s ease-in-out;
1093            display: block;
1094            width: 100%;
1095            height: 100%;
1096        }
1097
1098        &:hover {
1099            background-color: var(--gc-product-tile-notify-bg-color-hover) !important;
1100            border-color: var(--gc-product-tile-notify-border-color-hover) !important;
1101             
1102            &:before {
1103                background-color: var(--gc-product-tile-notify-text-color-hover);
1104            }
1105        }
1106    
1107        }
1108                
1109        /* View Product Button */
1110                .product-tile__footer a.btn_primary:not(.product-tile__footer-btn .btn_primary) {
1111                            width: 44px !important;
1112        height: 44px !important;
1113        padding: 0;
1114        border-radius: 50%;
1115        border-width: 1.5px;
1116        box-sizing: border-box;
1117        box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.1);
1118        font-size: 0;
1119        color: transparent;
1120    
1121
1122        &:before {
1123            content: '';
1124            font-size: 0px !important;
1125            /* Arrow right icon SVG mask */
1126            -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3Cpolyline points='12,5 19,12 12,19'%3E%3C/polyline%3E%3C/svg%3E") center/60% no-repeat;
1127            mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3Cpolyline points='12,5 19,12 12,19'%3E%3C/polyline%3E%3C/svg%3E") center/60% no-repeat;
1128            background-color: var(--gc-product-tile-button-text-color);
1129            transition: background-color 0.25s ease-in-out;
1130            display: block;
1131            width: 100%;
1132            height: 100%;
1133        }
1134
1135        &:hover {
1136            background-color: var(--gc-product-tile-button-bg-color-hover) !important;
1137            border-color: var(--gc-product-tile-button-border-color-hover) !important;
1138             
1139            &:before {
1140                background-color: var(--gc-product-tile-button-text-color-hover);
1141            }
1142        }
1143    
1144        }
1145            }
1146    
1147        @media (max-width: 767px) {
1148        .product-tile .product-tile__footer > .btn_special-disabled {
1149                            width: 44px !important;
1150        height: 44px !important;
1151        padding: 0;
1152        border-radius: 50%;
1153        border-width: 1.5px;
1154        box-sizing: border-box;
1155        box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.1);
1156        font-size: 0;
1157        color: transparent;
1158    
1159        display: inline-flex !important;
1160        align-items: center;
1161        justify-content: center;
1162        min-width: 44px !important;
1163        max-width: 44px !important;
1164        background-color: var(--neutralColors400, #7d90b5) !important;
1165        border-color: transparent !important;
1166
1167        &:before {
1168            content: '×';
1169            color: var(--neutralColors0, #fff);
1170            font-size: 28px;
1171            font-weight: 300;
1172            line-height: 1;
1173        }
1174    
1175        }
1176    }
1177        
1178        .product-tile:hover {
1179      position: relative;
1180    }
1181    .product-tile:hover:before,
1182    .product-tile:hover:after {
1183      content: '';
1184      position: absolute;
1185      top: 0;
1186      left: 0;
1187      width: 100%;
1188      height: 100%;
1189      box-sizing: border-box;
1190      transition: transform 0.2s ease-out;
1191      pointer-events: none;
1192      z-index: 1;
1192 /* Upewnij się, że ramka jest na wierzchu */
1193    }
1194    .product-tile:hover:before {
1195      border-bottom: 1px solid var(--gc-product-tile-animated-border-color);
1196      border-left: 1px solid var(--gc-product-tile-animated-border-color);
1197      transform: scale(1);
1198      transform-origin: 0 100%;
1199    }
1200    .product-tile:hover:after {
1201      border-top: 1px solid var(--gc-product-tile-animated-border-color);
1202      border-right: 1px solid var(--gc-product-tile-animated-border-color);
1203      transform: scale(1);
1204      transform-origin: 100% 0%;
1205    }
1206    
1207            .product-tile__image {
1208        position: relative;
1209        width: 100%;
1210        overflow: hidden;
1211        border-radius: var(--gc-product-tile-image-border-radius, 8px);
1212    }
1213
1214    .product-tile__image a {
1215        display: block;
1216        position: relative;
1217        width: 100%;
1218        aspect-ratio: var(--gc-product-tile-image-aspect-ratio, 1 / 1);
1219        overflow: hidden;
1220        border-radius: var(--gc-product-tile-image-border-radius, 8px);
1221    }
1222
1223    .product-tile__image a .image,
1224    .product-tile__image picture {
1225        position: absolute;
1226        top: 0;
1227        left: 0;
1228        width: 100%;
1229        height: 100%;
1230        overflow: hidden;
1231        border-radius: var(--gc-product-tile-image-border-radius, 8px);
1232    }
1233
1234    .product-tile__image img {
1235        width: 100%;
1236        height: 100% !important;
1237        object-fit: contain;
1238        object-position: center;
1239        border-radius: var(--gc-product-tile-image-border-radius, 8px);
1240        max-height: none !important;
1241    }
1242
1243    .product-tile__image .ribbon-group {
1244        position: absolute;
1245        z-index: 2;
1246    }
1247
1248    .product-tile__favourites {
1249        z-index: 3;
1250    }
1251    
1252        
1253        
1254            .product-tile__image { position: relative; }
1255    .product-tile__image_primary,
1256    .product-tile__image_secondary { transition: opacity 0.3s ease-in-out; }
1257    .product-tile__image_primary { opacity: 1; }
1258    .product-tile__image_secondary { position: absolute; top: 0; left: 0; width: 100%; opacity: 0; }
1259    /* Desktop hover — tylko gdy jest drugie zdjęcie */
1260    .product-tile:has(.product-tile__image_secondary):hover .product-tile__image_primary { opacity: 0; }
1261    .product-tile:has(.product-tile__image_secondary):hover .product-tile__image_secondary { opacity: 1; }
1262    /* Mobile/touch — active */
1263    .product-tile:has(.product-tile__image_secondary):active .product-tile__image_primary { opacity: 0; }
1264    .product-tile:has(.product-tile__image_secondary):active .product-tile__image_secondary { opacity: 1; }
1265    @media (hover: none) {
1266        .product-tile:has(.product-tile__image_secondary):active .product-tile__image_primary { opacity: 0; }
1267        .product-tile:has(.product-tile__image_secondary):active .product-tile__image_secondary { opacity: 1; }
1268    }
1269    </style>
1270
1271    <style>
1272        @media (min-width: 768px) and (max-width: 1919px) {
1273          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-mobile-bars {
1274            display: flex !important;
1275            width: auto;
1276            right: 40px;
1277            background: transparent;
1278            bottom: 120px;
1279            border: 0px;
1280            box-shadow: none;
1281          }
1282          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-mobile-bars .sticky-mobile-bars__total-and-pay-container {
1283            border-radius: 8px;
1284          }
1285          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-mobile-bars .sticky-mobile-bars__total-and-pay-container .sticky-mobile-bars__total-and-pay {
1286            background: #fff;
1287            box-shadow: 0 -2px 20px rgba(0, 0, 0, 0.15), 0 -8px 30px rgba(0, 0, 0, 0.12);
1288            border-top: 2px solid #ddd;
1289            padding: 20px 20px 24px;
1290            position: relative;
1291            z-index: 100;
1292            border: 1px solid #9d9d9d;
1293            border-radius: 8px;
1294          }
1295          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-mobile-bars__buy-button-container.fade-transition-end {
1296            flex: 1;
1297            display: flex;
1298            width: auto;
1299            right: 20px;
1300            bottom: 120px;
1301            border-radius: 8px;
1302            padding: 6px 12px;
1303            border: 1px solid #e0e0e0;
1304            background: #fff;
1305            box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.2);
1306          }
1307          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-mobile-bars__buy-button-container.fade-transition-end auth-controller.product-actions__wrapper {
1308            display: flex;
1309            justify-content: center;
1310            align-items: center;
1311          }
1312          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-mobile-bars__menu-container {
1313            display: none !important;
1314            visibility: hidden !important;
1315            opacity: 0 !important;
1316            height: 0 !important;
1317            overflow: hidden !important;
1318          }
1319          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-mobile-bars__menu,
1320          .module_type-integration[data-integration-module-name="sticky_mobile_bars"] .sticky-menu {
1321            display: none !important;
1322          }
1323        }
1324    </style>
1325</div><div 
1326                class="module_type-integration" 
1327                data-integration-module-name="0007ada2-a9ac-21f0-8a02-4d1f9233b2c1" 
1328                data-integration-module-id="172"></div><div 
1329                class="module_type-integration" 
1330                data-integration-module-name="0007ada2-bff0-21f0-b502-59dd0ef40dec" 
1331                data-integration-module-id="175"><template id="gc-carousel-slide-template">
1332  <li class="splide__slide">
1333    <product-tile
1334      class="product-tile"
1335      product-id=""
1336      name=""
1337      price=""
1338      producer=""
1339      category=""
1340      currency="PLN"
1341      list=""
1342      id=""
1343      categoryid=""
1344      availability=""
1345      relatedids=""
1346    >
1347      <div class="product-tile__row product-tile__header">
1348        <div class="product-tile__row product-tile_row_image">
1349          <div class="product-tile__image">
1350            <div class="ribbon-group ribbon-group_absolute">
1351              <!-- JS nadpisze innerHTML, np. wstążką Nowość -->
1352            </div>
1353
1354            <product-link
1355              id=""
1356              name=""
1357              price=""
1358              producer=""
1359              category=""
1360              currency="PLN"
1361              list=""
1362            >
1363              <a href="#" title="" aria-label="">
1364                <picture class="image product-tile__image_primary">
1365                  <source srcset="" type="image/webp">
1366                  <img src="" alt="" title="" width="500" height="500" loading="lazy">
1367                </picture>
1368
1369                <picture class="image product-tile__image_secondary">
1370                  <source srcset="" type="image/webp">
1371                  <img src="" alt="" title="" width="500" height="500" loading="lazy">
1372                </picture>
1373              </a>
1374            </product-link>
1375          </div>
1376        </div>
1377
1378        <span class="product-tile__codes"></span>
1379
1380        <product-link
1381          id=""
1382          name=""
1383          price=""
1384          producer=""
1385          category=""
1386          currency="PLN"
1387          list=""
1388        >
1389          <a href="#" title="" class="link_no-underline">
1390            <h3 class="product-tile__name product-tile__name_fixed-height">
1391              <!-- JS wstawi nazwę -->
1392            </h3>
1393          </a>
1394        </product-link>
1395      </div>
1396
1397<div class="product-tile__row product-tile__content">
1398  <div class="product-tile__row-btn">
1399    <a href="#" class="btn btn_s btn_primary">
1400      Zobacz produkt
1401    </a>
1402  </div>
1403</div>
1404    </product-tile>
1405  </li>
1406</template>
1407</div><div 
1408                class="module_type-integration" 
1409                data-integration-module-name="customer_privacy" 
1410                data-integration-module-id="81">
1411
1412    <consents-modal privacy-policy-page-id="" modal-label="Ustawienia plików cookies" hidden>
1413        <header slot="base-header">
1414            <h2 class="font_semibold h2">Dbamy o Twoją prywatność</h2>
1415        </header>
1416
1417        <div slot="base-content">
1418            <div class="p p_s color_secondary">
1419                <p>Pliki cookies i pokrewne im technologie umożliwiają poprawne działanie strony i pomagają nam dostosować ofertę do Twoich potrzeb. Możesz zaakceptować wykorzystanie przez nas wszystkich tych plików i przejść do sklepu lub dostosować użycie plików do swoich preferencji, wybierając opcję "Dostosuj zgody".</p>
1420
1421                                    <p>
1422                        <consents-show-privacy-policy class="link link_secondary">Więcej o plikach cookies przeczytasz w naszej Polityce prywatności.</consents-show-privacy-policy>
1423                    </p>
1424                            </div>
1425        </div>
1426
1427        <consents-accept-necessary slot="base-buttons" class="btn btn_outline">Zaakceptuj tylko niezbędne</consents-accept-necessary>
1428        <consents-show-advanced slot="base-buttons" class="btn btn_outline">Dostosuj zgody</consents-show-advanced>
1429        <consents-accept-all slot="base-buttons" class="btn btn_primary">Zaakceptuj wszystkie</consents-accept-all>
1430
1431        <header slot="advanced-header">
1432            <h2 class="font_semibold h2">Ustawienia plików cookies</h2>
1433        </header>
1434
1435        <consents-show-base slot="advanced-header" class="btn btn_icon" aria-label="Zamknij okno">
1436                            
1437            
1438    <svg class="
1439            icon
1440            icon_l
1441            
1442            
1443            
1444                        btn__icon
1445        "
1446                        aria-hidden="true"
1447        focusable="false"
1448            >
1449        <use href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-x" xlink:href="/userdata/public/storefront/images/22316bac-95a8-44eb-8a4c-e43a3368ed92.svg#icon-x"></use>
1450    </svg>
1451
1452        </consents-show-base>
1453
1454        <div slot="advanced-content">
1455            <div class="mb-xs-2 color_secondary">
1456                <p>W tym miejscu możesz określić swoje preferencje w zakresie wykorzystywania przez nas plików cookies.</p>
1457            </div>
1458
1459            <div class="control">
1460                <consents-checkbox label="Zaznacz wszystko" name="all"></consents-checkbox>
1461            </div>
1462
1463            <div class="control">
1464                <consents-checkbox class="mb-xs-2" label="Niezbędne do działania strony" checked disabled>
1465                    <div slot><p>Te pliki są niezbędne do działania naszej strony internetowej, dlatego też nie możesz ich wyłączyć.</p></div>
1466                </consents-checkbox>
1467            </div>
1468
1469            <div class="control">
1470                <consents-checkbox class="mb-xs-2" label="Funkcjonalne" name="functionalConsent">
1471                    <div slot><p>Te pliki umożliwiają Ci korzystanie z pozostałych funkcji strony internetowej (innych niż niezbędne do jej działania). Ich włączenie da Ci dostęp do pełnej funkcjonalności strony.</p></div>
1472                </consents-checkbox>
1473            </div>
1474
1475            <div class="control">
1476                <consents-checkbox class="mb-xs-2" label="Analityczne" name="analyticsConsent">
1477                    <div slot><p>Te pliki pozwalają nam na dokonanie analiz dotyczących naszego sklepu internetowego, co może przyczynić się do jego lepszego funkcjonowania i dostosowania do potrzeb Użytkowników.</p></div>
1478                </consents-checkbox>
1479            </div>
1480
1481            <div class="control">
1482                <consents-checkbox class="mb-xs-2" label="Analityczne dostawcy oprogramowania" name="platformAnalyticsConsent">
1483                    <div slot>Dane wykorzystywane przez dostawcę oprogramowania sklepu - cyber_Folks S.A. Na ich podstawie dokonywane są analizy, związane z rozwojem oprogramowania, oraz mierzona jest skuteczność kampanii reklamowych. Nie są łączone z innymi informacjami, podawanymi podczas rejestracji i składania zamówienia. Więcej na ten temat przeczytasz w <a href="https://www.shoper.pl/static/dokumenty/polityka-prywatnosci-dla-osob-odwiedzajacych-sklepy-internetowe.pdf" target="_blank" rel="noopener" data-label="Otwieranie w nowej karcie" aria-label="Polityka plików cookies Shoper - otwiera się w nowej karcie">Polityce plików cookies Shoper</a>.</div>
1484                </consents-checkbox>
1485            </div>
1486
1487            <div class="control">
1488                <consents-checkbox class="mb-xs-2" label="Marketingowe" name="marketingConsent">
1489                    <div slot><p>Dzięki tym plikom możemy prowadzić działania marketingowe.</p></div>
1490                </consents-checkbox>
1491            </div>
1492        </div>
1493
1494        <consents-show-base slot="advanced-buttons" class="btn btn_outline">Anuluj</consents-show-base>
1495        <consents-save slot="advanced-buttons" class="btn btn_primary">Zapisz ustawienia</consents-save>
1496    </consents-modal>
1497</div><div 
1498                class="module_type-integration" 
1499                data-integration-module-name="shop_analytics" 
1500                data-integration-module-id="89"></div><div 
1501                class="module_type-integration" 
1502                data-integration-module-name="google_analytics" 
1503                data-integration-module-id="90">
1503<script class="js__google-analytic-config" type="application/json">
1504    {
1505        "trackingId": "G-59ZWDP9ZH4",
1506        "containerId": "GTM-5KCPK6FS",
1507        "layerName": "dataLayer",
1508        "isGTM": "0"
1509    }
1510</script>
1510</div><div 
1511                class="module_type-integration" 
1512                data-integration-module-name="google_analytics_shoper_campaigns" 
1513                data-integration-module-id="91">        
1514        </div><div 
1515                class="module_type-integration" 
1516                data-integration-module-name="facebook_business_extension" 
1517                data-integration-module-id="99">        
1518                    
1518<script class="js__fbe-config" type="application/json">
1519                {
1520                    "pixelId": "447975941356148"
1521                }
1522            </script>
1522
1523        </div><div 
1524                class="module_type-integration" 
1525                data-integration-module-name="0005f4fd-2731-21ef-ba02-ade33ab46bf4" 
1526                data-integration-module-id="98">
1527
1528
1529
1530   
1530<script class="js__google-analytic-config" type="application/json">
1531          {
1532              "trackingId": "G-3Q5ZV276CY",
1533              "isGTM": "0"
1534          }
1535   </script>
1535
1536
1537
1538
1539
1540</div><div 
1541                class="module_type-integration" 
1542                data-integration-module-name="0006db8d-4365-21ef-9902-55c0d39831d5" 
1543                data-integration-module-id="138"></div><div 
1544                class="module_type-integration" 
1545                data-integration-module-name="0007c731-08a9-21f1-aa02-613a003d59bb" 
1546                data-integration-module-id="140"></div><div 
1547                class="module_type-integration" 
1548                data-integration-module-name="00051c99-a594-21ef-b402-5d7c70a416a9" 
1549                data-integration-module-id="178"><div class="MXcomfinoModulemain" data-module-id="00051c99-a594-21ef-b402-5d7c70a416a9">
1550    
1550<script class="MXModuleConfigScript" type="application/json">
1551      []
1552    </script>
1552
1553    
1553<script class="MXShopHash" type="text/plain">
1554        550
1555    </script>
1555
1556    
1556<script class="MXComfinoConfigAllJson" type="application/json">{"payment_id":"21","payment_show_logo":"0","widget_key":"1a5ec68d-786d-4ba3-aec9-75fa3083a307","widget_type":"standard","widget_offer_type":"INSTALLMENTS_ZERO_PERCENT","app_domain":"comfino"}</script>
1556
1557</div></div><div 
1558                class="module_type-integration" 
1559                data-integration-module-name="0007ada2-4ef0-21f1-a902-cf04c43a4db1" 
1560                data-integration-module-id="181">
1561
1562    
1563            
1564                        <style>
1565            .gc__btt{position:fixed;bottom:calc(var(--gc-btt-bottom,32px) + env(safe-area-inset-bottom,0px));z-index:50;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(12px) scale(.82);transition:opacity .28s cubic-bezier(.16,1,.3,1),transform .38s cubic-bezier(.34,1.56,.64,1),visibility 0s linear .28s;--gc-btt-progress:100}
1566            .gc__btt.gc__btt--pos-right{right:var(--gc-btt-side,32px)}
1567            .gc__btt.gc__btt--pos-left{left:var(--gc-btt-side,32px)}
1568            .gc__btt.gc__btt--visible{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1);transition:opacity .28s cubic-bezier(.16,1,.3,1),transform .38s cubic-bezier(.34,1.56,.64,1),visibility 0s linear 0s}
1569            .gc__btt__btn{position:relative;display:inline-flex;align-items:center;justify-content:flex-start;gap:0;width:48px;height:48px;min-width:48px;min-height:48px;padding:0;border:0;border-radius:999px;cursor:pointer;font:inherit;font-weight:600;font-size:13px;letter-spacing:.01em;line-height:1;white-space:nowrap;overflow:hidden;background:var(--gc-btt-bg,#0a0a0a);color:var(--gc-btt-fg,#fafafa);box-shadow:0 3px 6px rgba(0,0,0,.14),0 14px 32px -8px rgba(0,0,0,.42);transition:width .32s cubic-bezier(.16,1,.3,1),padding .32s cubic-bezier(.16,1,.3,1),gap .32s cubic-bezier(.16,1,.3,1),box-shadow .26s ease,background-color .22s ease}
1570            .gc__btt__btn:hover{box-shadow:0 5px 10px rgba(0,0,0,.20),0 22px 48px -10px rgba(0,0,0,.58)}
1571            .gc__btt__btn:active{box-shadow:0 2px 4px rgba(0,0,0,.18),0 8px 18px -6px rgba(0,0,0,.34);transition-duration:.08s}
1572            .gc__btt__btn:focus-visible{outline:2px solid var(--gc-btt-fg,#fafafa);outline-offset:3px}
1573            .gc__btt__visual{position:relative;display:grid;flex:0 0 48px;width:48px;height:48px;place-items:center}
1574            .gc__btt__progress{position:absolute;inset:0;width:48px;height:48px;transform:rotate(-90deg);pointer-events:none}
1575            .gc__btt__progress-track,.gc__btt__progress-value{fill:none;stroke:currentColor;stroke-width:1.6;vector-effect:non-scaling-stroke}
1576            .gc__btt__progress-track{opacity:0}
1577            .gc__btt--with-ring .gc__btt__progress-track{opacity:.2}
1578            .gc__btt__progress-value{opacity:.92;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:var(--gc-btt-progress,100)}
1579            @keyframes gc__btt__bob{0%,100%{transform:translateY(1.5px)}50%{transform:translateY(-1.5px)}}
1580            .gc__btt__icon{position:relative;z-index:1;flex:none;width:18px;height:18px;will-change:transform}
1581            .gc__btt--visible .gc__btt__icon{animation:gc__btt__bob 2.4s ease-in-out infinite}
1582            .gc__btt__btn:hover .gc__btt__icon{animation-duration:1.6s}
1583            .gc__btt__label{display:none;white-space:nowrap}
1584            .gc__btt--pill_always .gc__btt__btn{width:auto;padding:0 18px 0 0;gap:8px}
1585            .gc__btt--pill_always .gc__btt__label{display:inline}
1586            .gc__btt--pill_hover .gc__btt__label{display:inline;max-width:0;opacity:0;transform:translateX(-4px);transition:max-width .32s cubic-bezier(.16,1,.3,1),opacity .22s cubic-bezier(.16,1,.3,1),transform .32s cubic-bezier(.16,1,.3,1)}
1587            .gc__btt--pill_hover .gc__btt__btn:hover,.gc__btt--pill_hover .gc__btt__btn:focus-visible{width:auto;padding:0 18px 0 0;gap:8px}
1588            .gc__btt--pill_hover .gc__btt__btn:hover .gc__btt__label,.gc__btt--pill_hover .gc__btt__btn:focus-visible .gc__btt__label{max-width:120px;opacity:1;transform:translateX(0)}
1589            @media (max-width:1023.98px){.gc__btt{display:none!important}}
1590            @media (hover:none){.gc__btt{display:none!important}}
1591            @media (prefers-reduced-motion:reduce){.gc__btt,.gc__btt__btn,.gc__btt--pill_hover .gc__btt__label{transition:none!important}.gc__btt--visible .gc__btt__icon{animation:none}}
1592        </style>
1593    
1594    <gc-back-to-top
1595        id="gc-btt-"
1596        class="gc__btt gc__btt--circle gc__btt--pos-right gc__btt--with-ring"
1597        data-options="&#x7B;&quot;position&quot;&#x3A;&quot;right&quot;,&quot;shape&quot;&#x3A;&quot;circle&quot;,&quot;label&quot;&#x3A;&quot;&quot;,&quot;threshold&quot;&#x3A;600,&quot;smoothScroll&quot;&#x3A;1,&quot;bottomOffset&quot;&#x3A;32,&quot;sideOffset&quot;&#x3A;32&#x7D;"
1598        style="--gc-btt-bg: #0a0a0a; --gc-btt-fg: #fafafa; --gc-btt-bottom: 32px; --gc-btt-side: 32px; display: none;"
1599        aria-hidden="true"
1600    >
1601        <button
1602            class="gc__btt__btn"
1603            type="button"
1604            tabindex="-1"
1605            aria-label="Back to top of page"
1606        >
1607            <span class="gc__btt__visual" aria-hidden="true">
1608                <svg
1609                    class="gc__btt__progress"
1610                    width="48"
1611                    height="48"
1612                    viewBox="0 0 48 48"
1613                    aria-hidden="true"
1614                    focusable="false"
1615                >
1616                    <circle class="gc__btt__progress-track" cx="24" cy="24" r="22" pathLength="100"/>
1617                    <circle class="gc__btt__progress-value" cx="24" cy="24" r="22" pathLength="100"/>
1618                </svg>
1619                <svg
1620                    class="gc__btt__icon"
1621                    width="18"
1622                    height="18"
1623                    viewBox="0 0 24 24"
1624                    fill="none"
1625                    stroke="currentColor"
1626                    stroke-width="2"
1627                    stroke-linecap="round"
1628                    stroke-linejoin="round"
1629                    aria-hidden="true"
1630                    focusable="false"
1631                >
1632                    <path d="M12 19V5"/>
1633                    <path d="m5 12 7-7 7 7"/>
1634                </svg>
1635            </span>
1636            <span class="gc__btt__label">Back to top</span>
1637        </button>
1638    </gc-back-to-top>
1639
1640</div><div 
1641                class="module_type-integration" 
1642                data-integration-module-name="0007ada2-6be3-21f1-a102-b166e4326246" 
1643                data-integration-module-id="183"></div><div 
1644                class="module_type-integration" 
1645                data-integration-module-name="000652b2-bce7-21f1-ac02-a30a72be35d8" 
1646                data-integration-module-id="609"><!-- ============================================================================================
1647     RINGOSTAT — MODEL DZIAŁANIA I CZEGO NIE WOLNO ROBIĆ.  PRZECZYTAJ PRZED ZMIANAMI W NUMERACH.
1648     ============================================================================================
1649
1650     MODEL. Ringostat podmienia numer statyczny na dynamiczny (call tracking) w DWÓCH trybach:
1651
1652     TRYB 1 — PODSTAWIENIE ZAAWANSOWANE (ten, o który nam chodzi).
1653       Obejmuje elementy wskazane XPath-ami w panelu Ringostata. Przy PIERWSZYM skanie strony
1654       skrypt Ringostata dla takiego elementu:
1655         • nadaje atrybuty  rngst-id / rngst-geogroup,
1656         • USUWA z niego  href,
1657         • podmienia treść na maskę  „+48 pokaż numer"  (<span style="cursor:pointer">),
1658         • podpina WŁASNĄ obsługę kliknięcia, która odsłania numer dynamiczny.
1659       Efekt = dokładnie wymaganie klienta: najpierw „pokaż numer", numer dopiero po kliknięciu.
1660
1661     TRYB 2 — PODSTAWIENIE PROSTE (fallback).
1662       Zwykła podmiana tekstu numeru statycznego na dynamiczny. BEZ rngst-id, BEZ maski,
1663       BEZ kliknięcia — numer widać od razu. Tak wygląda KAŻDY element, którego tryb 1 nie objął.
1664
1665     WARUNEK KONIECZNY TRYBU 1: element musi być w DOM ZANIM Ringostat zrobi pierwszy skan.
1666     Skrypt Ringostata ładuje się async, więc wszystko, co siedzi w statycznym HTML tego modułu,
1667     zdąża. Sekcja Kontakt klonowana z <template> też zdąża, bo klonujemy ją synchronicznie.
1668
1669     --------------------------------------------------------------------------------------------
1670     CZEGO NIE WOLNO — każdy z tych błędów już wystąpił i został potwierdzony pomiarem na żywo
1671     --------------------------------------------------------------------------------------------
1672
1673     [1] NIE WOŁAJ  ringostatRestartSubstitution().
1674         Pomiar na TEJ SAMEJ stopce, dwie podstrony:
1675             strona główna (bez restartu):  rngst-id="1",  href usunięty,  „pokaż numer",  klik OK
1676             /contact      (z restartem):   rngst-id=null, href wrócił,    goły numer,     klik martwy
1677         Restart NIE „doskanowuje" strony — KASUJE tryb 1 na CAŁEJ stronie i zostawia tryb 2.
1678         Dlatego jeden restart wołany w popupie albo na Kontakcie zabijał również nagłówek i stopkę.
1679
1680     [2] NIE BUDUJ elementu z numerem w JS po załadowaniu strony.
1681         Nie istnieje podczas pierwszego skanu → dostanie najwyżej tryb 2. Dlatego popup
1682         „Porozmawiaj" leży w HTML statycznie (ukryty CSS-em), a JS tylko go otwiera i zamyka.
1683
1684     [3] NIE PRZENOŚ węzła z numerem między miejscami (np. nagłówek → modal).
1685         Psuje miejsce źródłowe i nie naprawia docelowego.
1686
1687     [4] NIE DODAWAJ globalnych „guardów" przechwytujących klik w numer
1688         (preventDefault + symulowany .click() + pętla restartów) — blokują natywny klik Ringostata.
1689
1690     [5] NIE WPISUJ ręcznie tekstu „pokaż numer" w markup.
1691         Maskę rysuje Ringostat. Nasz markup ma zawierać ZWYKŁY numer statyczny +48 833 070 023,
1692         inaczej Ringostat nie ma czego dopasować i element nie zostanie objęty podmianą w ogóle.
1693
1694     --------------------------------------------------------------------------------------------
1695     GDZIE SĄ NUMERY — 4 miejsca, wszystkie wg tej samej zasady: statycznie w HTML, numer statyczny
1696     --------------------------------------------------------------------------------------------
1697       .bn-phone__num      — nagłówek
1698       .bn-footer__phone   — stopka
1699       .bn-ct__qcard       — kafelek „Telefon" na /contact (moduł 324 — render serwerowy)
1700       .bn-consult-phone   — popup „Porozmawiaj" na karcie produktu
1701
1702     --------------------------------------------------------------------------------------------
1703     DIAGNOSTYKA gdy któreś miejsce pokazuje numer OD RAZU (bez maski)
1704     --------------------------------------------------------------------------------------------
1705     W konsoli przeglądarki:
1706         ['.bn-phone__num','.bn-footer__phone','.bn-ct__qcard','.bn-consult-phone']
1707           .forEach(s=>{var e=document.querySelector(s);
1708             console.log(s, e?e.getAttribute('rngst-id'):'BRAK', e?e.textContent.trim().slice(0,22):'');});
1709
1710     • rngst-id ma wartość  → tryb 1 działa, maska i klik po stronie Ringostata.
1711     • rngst-id = null      → element NIE jest objęty XPath-ami w panelu Ringostata dla tej domeny.
1712                              To konfiguracja w panelu Ringostat — NIE do naprawienia z tego kodu.
1713     UWAGA: podgląd sklepu (sklep689102.shoparena.pl) i produkcja (botanic.com.pl) mogą mieć RÓŻNE
1714     pokrycie XPath. Zmierzone: na podglądzie nagłówek bywa bez rngst-id (tryb 2 → numer od razu),
1715     a stopka z rngst-id="1" (tryb 1 → maska). Testuj świadomie, na której domenie patrzysz.
1716     ============================================================================================ -->
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733<!-- Popup „Porozmawiaj" — STATYCZNIE w HTML (nie budowany JS-em), bo tylko wtedy 
1733numer trafia
1734     do pierwszego skanu Ringostata i dostaje maskę „pokaż numer" + działający klik, dokładnie jak
1735     nagłówek i stopka. Wcześniej popup powstawał dynamicznie i trzeba było wołać
1736     ringostatRestartSubstitution() — a ten restart KASUJE podstawienie zaawansowane na całej
1737     stronie (zdejmuje rngst-id, przywraca href, gubi maskę i klik). Overlay jest ukryty przez CSS
1738     (opacity:0;visibility:hidden), więc obecność na każdej podstronie niczego nie psuje. -->
1739<div class="bn-consult-overlay">
1740  <div class="bn-consult-modal">
1741    <button class="bn-consult-close" type="button" aria-label="Zamknij">&times;</button>
1742    <div class="bn-consult-ico"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M6.6 10.8c1.4 2.8 3.8 5.2 6.6 6.6l2.2-2.2c.3-.3.7-.4 1-.2 1.1.4 2.3.6 3.6.6.6 0 1 .4 1 1V20c0 .6-.4 1-1 1C10.6 21 3 13.4 3 4c0-.6.4-1 1-1h3.5c.6 0 1 .4 1 1 0 1.3.2 2.5.6 3.6.1.4 0 .8-.3 1l-2.2 2.2z"/></svg></div>
1743    <h3>Porozmawiaj z doradcą</h3>
1744    <p class="bn-consult-lead">Masz pytania o wybór szklarni, montaż lub dostawę? Zadzwoń do naszego działu handlowego — pomożemy dobrać model idealny dla Ciebie.</p>
1745    <a class="bn-consult-phone" href="tel:+48833070023"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M6.6 10.8c1.4 2.8 3.8 5.2 6.6 6.6l2.2-2.2c.3-.3.7-.4 1-.2 1.1.4 2.3.6 3.6.6.6 0 1 .4 1 1V20c0 .6-.4 1-1 1C10.6 21 3 13.4 3 4c0-.6.4-1 1-1h3.5c.6 0 1 .4 1 1 0 1.3.2 2.5.6 3.6.1.4 0 .8-.3 1l-2.2 2.2z"/></svg><span>+48 833 070 023</span></a>
1746    <p class="bn-consult-hours"><strong>Pon.–Pt. 8:00–17:00</strong></p>
1747  </div>
1748</div>
1749
1750
1751<!-- Ringostat: call-tracking + podmiana numeru (instalacja globalna) -->
1752<script type="text/javascript">
1753  /* Early render (578): the loader starts with the platform JS after the first screen is shown; without the bootstrap it starts at once. */
1754  (window.__bnEarlyDefer||function(f){f();})(function(){(function (d,s,u,e,p) {
1755    p=d.getElementsByTagName(s)[0],e=d.createElement(s),
1756    e.async=1,e.src=u,p.parentNode.insertBefore(e,p);
1757  })(document,'script','https://script.ringostat.com/v4/9e/9e356d287a9a9cf2b946ea34321899aa911a4e62.js');});
1758  var pw=function(){
1759    if(typeof(ringostatAnalytics)==='undefined'){setTimeout(pw,100);}
1760    else{ringostatAnalytics.sendHit('pageview');}
1761  };
1762  pw();
1763</script>
1763
1764
1765
1766</div><div 
1767                class="module_type-integration" 
1768                data-integration-module-name="000652b2-bce7-21f1-9c02-15feb3f55517" 
1769                data-integration-module-id="613">    
1770    
1771    
1772    
1773</div><div 
1774                class="module_type-integration" 
1775                data-integration-module-name="000652b2-bce7-21f1-9502-d59c003bbf34" 
1776                data-integration-module-id="615">
1776<script>window._edrone=window._edrone||{};if(!window._edrone.app_id){window._edrone.app_id='off-in-skin';window._edrone.init=function(){};}</script>
vendor: 1 bytes, line 1776
1776
1777<script>
1778(function () {
1779  'use strict';
1780  if (window.__bnGcScriptsOff) return;
1781  window.__bnGcScriptsOff = 1;
1782  function offIds(root) {
1783    var ids = [];
1784    if (!root.querySelector('.gc__siema-slider-container, [data-gc-src], img.gc__siema-image-deferred')) ids.push('172');
1785    if (!(window.matchMedia && window.matchMedia('(min-width: 1024px) and (hover: hover)').matches)) ids.push('181');
1786    if (!root.querySelector('product-list, filters-aggregator, [data-gc-listing-toolbar], .side-menu-categories')) ids.push('433');
1787    return ids;
1788  }
1789  // Off for this page: take data-src away (only if the script is not loaded yet). On: give it back.
1790  function apply(script, ids) {
1791    var off = ids.indexOf(script.getAttribute('data-script-module-id')) > -1;
1792    if (off && script.hasAttribute('data-src') && !script.getAttribute('src')) {
1793      script.setAttribute('data-bn-src-off', script.getAttribute('data-src'));
1794      script.removeAttribute('data-src');
1795    } else if (!off && script.hasAttribute('data-bn-src-off')) {
1796      script.setAttribute('data-src', script.getAttribute('data-bn-src-off'));
1797      script.removeAttribute('data-bn-src-off');
1798    }
1799  }
1800  function applyAll(root, ids) {
1801    var list = root.querySelectorAll('script[data-script-module-id]');
1802    for (var i = 0; i < list.length; i++) apply(list[i], ids);
1803  }
1804  // First load: the script tags come after this module in the HTML, so catch them as the parser adds them.
1805  var ids = offIds(document);
1806  var mo = new MutationObserver(function (records) {
1807    for (var r = 0; r < records.length; r++) {
1808      var added = records[r].addedNodes;
1809      for (var n = 0; n < added.length; n++) {
1810        var node = added[n];
1811        if (node.nodeType === 1 && node.tagName === 'SCRIPT' && node.hasAttribute('data-script-module-id')) apply(node, ids);
1812      }
1813    }
1814  });
1815  mo.observe(document.documentElement, { childList: true, subtree: true });
1816  document.addEventListener('DOMContentLoaded', function () { applyAll(document, ids); mo.disconnect(); }, { once: true });
1817  // SPA (Turbo): the module scripts live in div#scripts[data-turbo-permanent], so the tags of the previous page
1818  // stay. Decide by the incoming page and fix the tags that will stay, before the platform loads scripts.
1819  document.addEventListener('turbo:before-render', function (event) {
1820    var body = event.detail && event.detail.newBody;
1821    if (!body) return;
1822    var next = offIds(body);
1823    applyAll(document, next);
1824    applyAll(body, next);
1825  });
1826})();
1827</script>
vendor: 1 bytes, line 1827
1827
1828<script>
1829(function () {
1830  'use strict';
1831  if (window.__bnLazyFrames) return;
1832  window.__bnLazyFrames = 1;
1833  var io = 'IntersectionObserver' in window ? new IntersectionObserver(function (entries) {
1834    for (var i = 0; i < entries.length; i++) if (entries[i].isIntersecting) load(entries[i].target);
1835  }, { rootMargin: '1200px 0px' }) : null;
1836  function load(frame) {
1837    var src = frame.getAttribute('data-bn-lazy-src');
1838    if (!src) return;
1839    if (io) io.unobserve(frame);
1840    frame.removeAttribute('data-bn-lazy-src');
1841    frame.setAttribute('src', src);
1842  }
1843  function scan() {
1844    var list = document.querySelectorAll('iframe[data-bn-lazy-src]');
1845    for (var i = 0; i < list.length; i++) { if (io) io.observe(list[i]); else load(list[i]); }
1846  }
1847  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', scan); else scan();
1848  document.addEventListener('turbo:load', scan);
1849})();
1850</script>
vendor: 1 bytes, line 1850
1850
1851<script>
1852(function () {
1853  'use strict';
1854  var KEY = '__bnScriptDeferralController';
1855  if (window[KEY]) return;
1856  // Order confirmation (/basket/done/…): <basket-done> emits `purchased` as soon as it renders, and the
1857  // platform never replays a purchase to analytics clients that subscribe later. Holding GTM/gtag here
1858  // until the first gesture dropped the purchase (GA4, Ads, Bing) for every buyer who had not moved yet.
1859  // knowledge_base/gtm-dubli-zdarzen-2026-09-25.md
1860  if (/\/basket\/done(\/|$)/.test(location.pathname)) return;
1861  var NP = Node.prototype, EP = Element.prototype;
1862  var original = { insertBefore: NP.insertBefore, appendChild: NP.appendChild, append: EP.append, prepend: EP.prepend };
1863  var wrappers = {};
1864  var held = [];
1865  var entries = new WeakMap();
1866  var released = false;
1867  var armed = false;
1868  var gestures = ['pointerdown', 'keydown', 'touchstart', 'wheel', 'scroll', 'mousemove'];
1869  var holdIds = { recaptcha: true, 'shopLayer-script': true, 'dataLayer-script': true, 'gtag-jssdk-dataLayer': true };
1870
1871  function shouldHold(node) {
1872    if (released || !node || node.nodeType !== 1 || node.tagName !== 'SCRIPT') return false;
1873    if (Object.prototype.hasOwnProperty.call(holdIds, node.id)) return true;
1874    var src = node.getAttribute('src');
1875    if (!src) return false;
1876    try {
1877      var url = new URL(src, document.baseURI);
1878      return /^(www\.)?googletagmanager\.com$/i.test(url.hostname) && /^(\/gtm\.js|\/gtag\/js)$/.test(url.pathname);
1879    } catch (_) { return false; }
1880  }
1881
1882  function markerFor(node) {
1883    var entry = entries.get(node);
1884    if (!entry) {
1885      entry = { node: node, marker: document.createComment('deferred script') };
1886      entries.set(node, entry);
1887      held.push(entry);
1888    }
1889    return entry.marker;
1890  }
1891
1892  function restore() {
1893    // A later integration may wrap our methods. Never overwrite its wrapper;
1894    // the released wrappers below become transparent delegates in that case.
1895    if (NP.insertBefore === wrappers.insertBefore) NP.insertBefore = original.insertBefore;
1896    if (NP.appendChild === wrappers.appendChild) NP.appendChild = original.appendChild;
1897    if (EP.append === wrappers.append) EP.append = original.append;
1898    if (EP.prepend === wrappers.prepend) EP.prepend = original.prepend;
1899  }
1900
1901  var scheduled = false;
1902  function onGesture() {
1903    // Odlozone skrypty wypuszczamy PO namalowaniu klatki tego gestu. Wstawienie
1904    // 
1904<script> to parsowanie i wykonanie GTM/gtag, a dopoki ono trwa, przegladarka
1905    // nie pokaze reakcji na dotkniecie - dokladnie to mierzy INP. Moment startu
1906    // skryptow bez zmian: nadal pierwszy gest, tylko kilkadziesiat ms pozniej.
1907    // focusin/submit zostaja natychmiastowe: formularz moze od razu potrzebowac reCAPTCHY.
1908    if (released || scheduled) return;
1909    scheduled = true;
1910    disarm();
1911    var run = function () { release('gesture'); };   // release jest idempotentny
1912    // requestAnimationFrame nie przychodzi w ukrytej karcie, a odchodzacy
1913    // odwiedzajacy ma trafic do analityki - stad zapasowy timer i visibilitychange.
1914    setTimeout(run, 300);
1915    document.addEventListener('visibilitychange', function () { if (document.hidden) run(); }, { once: true });
1916    if (typeof requestAnimationFrame === 'function') {
1917      requestAnimationFrame(function () { requestAnimationFrame(function () {
1918        if (typeof requestIdleCallback === 'function') requestIdleCallback(run, { timeout: 150 }); else run();
1919      }); });
1920    } else run();
1921  }
1922  function onFocus(event) {
1923    if (event.target && event.target.closest && event.target.closest('form')) release('form-focus');
1924  }
1925  function onSubmit() { release('submit'); }
1926  function arm() {
1927    if (armed || released) return;
1928    armed = true;
1929    gestures.forEach(function (name) { window.addEventListener(name, onGesture, { capture: true, passive: true }); });
1930    window.addEventListener('focusin', onFocus, true);
1931    document.addEventListener('submit', onSubmit, true);
1932  }
1933  function disarm() {
1934    gestures.forEach(function (name) { window.removeEventListener(name, onGesture, true); });
1935    window.removeEventListener('focusin', onFocus, true);
1936    document.removeEventListener('submit', onSubmit, true);
1937    armed = false;
1938  }
1939
1940  function release(reason) {
1941    if (released) return;
1942    released = true;
1943    disarm();
1944    restore();
1945    var inserted = 0, discarded = 0;
1946    held.forEach(function (entry) {
1947      var marker = entry.marker;
1948      // A removed page/placeholder means its pending script was cancelled.
1949      if (!marker.isConnected || !marker.parentNode) { discarded++; return; }
1950      try {
1951        original.insertBefore.call(marker.parentNode, entry.node, marker);
1952        marker.remove();
1953        inserted++;
1954      } catch (error) {
1955        console.error('[Botanic script deferral] Cannot release deferred script', error);
1956      }
1957    });
1958    window.__bnDeferred = { releasedAt: Date.now(), reason: reason, count: inserted, discarded: discarded };
1959    window.__bnRecaptcha = window.__bnDeferred;
1960    held = [];
1961    entries = new WeakMap();
1962  }
1963
1964  wrappers.insertBefore = function (node, reference) {
1965    if (!shouldHold(node) || node.isConnected) return original.insertBefore.call(this, node, reference);
1966    // Native insertion validates parent/reference before the gesture is armed.
1967    original.insertBefore.call(this, markerFor(node), reference);
1968    arm();
1969    return node;
1970  };
1971  wrappers.appendChild = function (node) {
1972    if (!shouldHold(node) || node.isConnected) return original.appendChild.call(this, node);
1973    original.appendChild.call(this, markerFor(node));
1974    arm();
1975    return node;
1976  };
1977  function variadic(method, parent, nodes) {
1978    var deferred = false;
1979    var values = Array.prototype.map.call(nodes, function (node) {
1980      if (!shouldHold(node) || node.isConnected) return node;
1981      deferred = true;
1982      return markerFor(node);
1983    });
1984    var result = original[method].apply(parent, values);
1985    if (deferred) arm();
1986    return result;
1987  }
1988  wrappers.append = function () { return variadic('append', this, arguments); };
1989  wrappers.prepend = function () { return variadic('prepend', this, arguments); };
1990
1991  window[KEY] = { release: release };
1992  try {
1993    NP.insertBefore = wrappers.insertBefore;
1994    NP.appendChild = wrappers.appendChild;
1995    if (original.append) EP.append = wrappers.append;
1996    if (original.prepend) EP.prepend = wrappers.prepend;
1997  } catch (error) {
1998    release('installation-failed');
1999    console.error('[Botanic script deferral] Installation failed', error);
2000  }
2001})();
2002</script>
2002
2003</div><div 
2004                class="module_type-integration" 
2005                data-integration-module-name="000652b2-bce7-21f1-b802-b1a9f4ec1178" 
2006                data-integration-module-id="623">
2006<script>
2007(function () {
2008  'use strict';
2009  if (window.__bnMetaPixel) return;          /* Turbo пере-исполняет скрипты body */
2010
2011  var CFG = {
2012    pageViewWindowMs:    30000,  /* повтор PageView по тому же path в окне — дроп; 0 = выкл */
2013    viewContentWindowMs: 30000,  /* повтор ViewContent (path + content_ids) — дроп; 0 = выкл */
2014    addToCartWindowMs:    1200,  /* защита от двойного клика/двойного emit; 0 = выкл */
2015    listMode:         'rename',  /* ViewContent за просмотр СПИСКА товаров (VIEW_ITEM_LIST):
2016                                    'rename' — переименовать в кастомное ViewCategory (док. Meta:
2017                                               ViewContent = карточка товара; списки — ViewCategory
2018                                               через trackCustom, 5–10 id),
2019                                    'drop'   — погасить совсем,
2020                                    'keep'   — оставить как есть (поведение платформы) */
2021    listIdsCap:              10,  /* Meta рекомендует 5–10 content_ids в ViewCategory */
2022    disableAutoConfig:   false,  /* true = гасит авто-события пикселя (SubscribedButtonClick),
2023                                    но заодно и Automatic Advanced Matching — по умолчанию выкл,
2024                                    правильнее выключить в Events Manager */
2025    productPathRe:      /\/p\//, /* признак страницы товара: /pl/p/Nazwa/113 */
2026    logLimit:              300
2027  };
2028
2029  var st = {
2030    cfg: CFG,
2031    t0: Math.round(performance.now()),        /* когда встал хук */
2032    fbqAtInstall: typeof window.fbq,          /* 'undefined' = успели раньше платформы */
2033    kept: 0, dropped: 0, log: [], last: {}
2034  };
2035  window.__bnMetaPixel = st;
2036
2037  st.summary = function () {
2038    var o = {};
2039    for (var i = 0; i < st.log.length; i++) {
2040      var r = st.log[i], k = r.event + ' ' + r.action + (r.reason ? ':' + r.reason : '');
2041      o[k] = (o[k] || 0) + 1;
2042    }
2043    return o;
2044  };
2045
2046  function note(action, name, reason) {
2047    if (st.log.length < CFG.logLimit) {
2048      st.log.push({
2049        t: Math.round(performance.now()),
2050        path: location.pathname,
2051        event: name, action: action, reason: reason || ''
2052      });
2053    }
2054    if (action === 'drop') { st.dropped++; } else { st.kept++; }
2055  }
2056
2057  /* fbq('track'|'trackCustom', name, data) | fbq('trackSingle'|'trackSingleCustom', pixel, name, data) */
2058  function parse(args) {
2059    var m = args[0];
2060    if (m === 'track' || m === 'trackCustom') return { name: args[1], data: args[2] };
2061    if (m === 'trackSingle' || m === 'trackSingleCustom') return { name: args[2], data: args[3] };
2062    return null;
2063  }
2064
2065  function idList(data) {
2066    var c = data && data.content_ids;
2067    if (!c) return [];
2068    return (Object.prototype.toString.call(c) === '[object Array]') ? c : [c];
2069  }
2070
2071  function isList(data) {
2072    var ids = idList(data);
2073    return ids.length !== 1 || !CFG.productPathRe.test(location.pathname);
2074  }
2075
2076  /* {act:'pass'} | {act:'drop', why} | {act:'rename', to:'ViewCategory'} */
2077  function decide(name, data) {
2078    var now = Date.now(), key, win, renameTo = null;
2079
2080    if (name === 'PageView') {
2081      key = 'PV|' + location.pathname;
2082      win = CFG.pageViewWindowMs;
2083
2084    } else if (name === 'ViewContent') {
2085      var ids = idList(data);
2086      if (isList(data)) {
2087        if (CFG.listMode === 'drop') return { act: 'drop', why: 'list' };
2088        if (CFG.listMode === 'rename') renameTo = 'ViewCategory';
2089      }
2090      key = (renameTo || 'VC') + '|' + location.pathname + '|' + ids.slice().sort().join(',');
2091      win = CFG.viewContentWindowMs;
2092
2093    } else if (name === 'AddToCart') {
2094      key = 'ATC|' + idList(data).slice().sort().join(',') + '|' + (data && data.value);
2095      win = CFG.addToCartWindowMs;
2096
2097    } else {
2098      return { act: 'pass' };                 /* Purchase, InitiateCheckout, Search… — как есть */
2099    }
2100
2101    if (win) {
2102      var prev = st.last[key];
2103      if (prev && (now - prev) < win) return { act: 'drop', why: 'repeat' };
2104      st.last[key] = now;                     /* метку двигаем ТОЛЬКО когда пропустили */
2105    }
2106    return renameTo ? { act: 'rename', to: renameTo } : { act: 'pass' };
2107  }
2108
2109  /* trackSingle -> trackSingleCustom, track -> trackCustom, с новым именем */
2110  function rebuild(args, to) {
2111    var a = Array.prototype.slice.call(args), nameIdx, data;
2112    if (a[0] === 'track') { a[0] = 'trackCustom'; nameIdx = 1; }
2113    else if (a[0] === 'trackSingle') { a[0] = 'trackSingleCustom'; nameIdx = 2; }
2114    else return a;
2115    a[nameIdx] = to;
2116    data = a[nameIdx + 1];
2117    if (data && data.content_ids && data.content_ids.length > CFG.listIdsCap) {
2118      var copy = {}, k;
2119      for (k in data) { if (Object.prototype.hasOwnProperty.call(data, k)) copy[k] = data[k]; }
2120      copy.content_ids = data.content_ids.slice(0, CFG.listIdsCap);
2121      a[nameIdx + 1] = copy;
2122    }
2123    return a;
2124  }
2125
2126  var autoCfgDone = {};
2127
2128  function wrap(fn) {
2129    if (typeof Proxy !== 'function') return fn;
2130    try {
2131      return new Proxy(fn, {
2132        apply: function (target, thisArg, args) {
2133          try {
2134            var p = parse(args);
2135            if (p && p.name) {
2136              var d = decide(p.name, p.data);
2137              if (d.act === 'drop') { note('drop', p.name, d.why); return undefined; }
2138              if (d.act === 'rename') {
2139                note('rename', p.name, '-> ' + d.to);
2140                return target.apply(thisArg, rebuild(args, d.to));
2141              }
2142              note('keep', p.name);
2143            }
2144          } catch (e) { /* сомнение — в пользу события */ }
2145
2146          var res = target.apply(thisArg, args);
2147
2148          if (CFG.disableAutoConfig && args[0] === 'init' && args[1] && !autoCfgDone[args[1]]) {
2149            autoCfgDone[args[1]] = 1;
2150            try { target.apply(thisArg, ['set', 'autoConfig', false, args[1]]); } catch (e) {}
2151          }
2152          return res;
2153        }
2154      });
2155    } catch (e) { return fn; }
2156  }
2157
2158  var slot = {};
2159  ['fbq', '_fbq'].forEach(function (prop) {
2160    var current = window[prop];
2161    try {
2162      Object.defineProperty(window, prop, {
2163        configurable: true,
2164        enumerable: true,
2165        get: function () { return slot[prop]; },
2166        set: function (v) { slot[prop] = (typeof v === 'function') ? wrap(v) : v; }
2167      });
2168    } catch (e) { return; }
2169    if (current !== undefined) { window[prop] = current; }
2170  });
2171})();
2172</script>
2172</div><div 
2173                class="module_type-integration" 
2174                data-integration-module-name="000652b2-bce7-21f1-9602-1b7fbec78728" 
2175                data-integration-module-id="630"><!-- BN-FOOTER-FALLBACK-2026-08-19: tylko dla stron bez osobnego modułu Footer -->
2176<template id="bn-footer-fallback-template"><footer class="bn-footer">
2177  <div class="bn-fwrap">
2178    <div class="bn-footer__main">
2179      <div class="bn-footer__col bn-footer__brand">
2180        <a class="bn-footer__logo" href="/" aria-label="Botanic"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCA2MjIxIDEzNTIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM6c2VyaWY9Imh0dHA6Ly93d3cuc2VyaWYuY29tLyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyI+PHJlY3QgaWQ9IlBhZ2UtMiIg
2180c2VyaWY6aWQ9IlBhZ2UgMiIgeD0iMCIgeT0iMCIgd2lkdGg9IjYyMjEiIGhlaWdodD0iMTM1MS4zMzMiIHN0eWxlPSJmaWxsOm5vbmU7Ii8+PGNsaXBQYXRoIGlkPSJfY2xpcDEiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSI2MjIxIiBoZWlnaHQ9IjEzNTEuMzMzIi8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjX2NsaXAxKSI+PGcgaWQ9IkxheWVyLTEiIHNlcmlmOmlkPSJMYXllciAxIj48L2c+PGc+PHBhdGggZD0iTTcwNS45NSw4NzIuMjg5YzAsLTE2Mi4wNjkgLTExMS42NTQsLTI3MS45MjIgLTI0MS4zMjEsLTI3MS45MjJjLTEzMy4yNjksMCAtMjQzLjEyMiwxMDguMDUyIC0yNDMuMTIyLDI3MS45MjJjMCwxNjIuMDg3IDEwOS44NTMsMjcxLjk0MSAyNDMuMTIyLDI3MS45NDFjMTI5LjY2NiwwIDI0MS4zMjEsLTEwOS44NTMgMjQxLjMyMSwtMjcxLjk0MW0tNDg4LjA0NSw0NTcuNDI1bC0yMTcuOTA1LDBsMCwtMTI3OC42MTRsMjMyLjMxNSwtMGwwLDQ3My42MTdjNTAuNDMzLC03Ny40MzIgMTYyLjA2OSwtMTM1LjA1MiAyODAuOTQ2LC0xMzUuMDUyYzIzNC4wOTgsMCA0MjYuODA1LDE5Ni4yOTEgNDI2LjgwNSw0ODAuODIyYzAsMjg0LjU0OSAtMTkyLjcwNyw0ODAuODQgLTQzMC40MjYsNDgwLjg0Yy0xMjIuNDYxLDAgLTI0MS4zMDIsLTYxLjI0IC0yOTEuNzM1LC0xNDUuODc3bDAsMTI0LjI2M1oiIHN0eWxlPSJmaWxsOiNmMGY3ZWQ7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PHBhdGggZD0iTTI3NjAuNTk4LDEzMTUuMzA2Yy0zNy44MDYsMjEuNjE0IC05NS40NDQsMzYuMDIzIC0xNzEuMDc1LDM2LjAyM2MtMTg5LjA4NywwIC0zMDYuMTQ1LC0xMTEuNjU0IC0zMDYuMTQ1LC0zMDkuNzQ3bDAsLTQ0My4wMzRsLTEyOS42NjYsMGwwLC0xODcuMjg1bDEzNi44NzEsMGwwLC0yMDguOWwyMjYuOTExLC01OS40MmwwLDI2OC4zMmwyMjEuNTA4LDBsMCwxODcuMjg1bC0yMjEuNTA4LDBsMCw0MTAuNjEzYzAsOTMuNjQzIDQ4LjYzMiwxMzMuMjY5IDEzNS4wNywxMzMuMjY5YzI1LjE5OCwwIDcwLjIyOCwtNy4yMDUgMTA4LjAzNCwtMjguODE5bDAsMjAxLjY5NVoiIHN0eWxlPSJmaWxsOiNmMGY3ZWQ7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PHBhdGggZD0iTTM0NDMuMDc1LDk1Ni45MzFsMCwtMzQuMjA0bC0xODUuNDg0LDIzLjM5N2MtMTAwLjg0NywxMi42MDggLTE1OC40ODUsNTQuMDE3IC0xNTguNDg1LDEyMC42NmMwLDYzLjAyMyA1Mi4yMzQsMTAyLjY0OSAxMjcuODY1LDEwMi42NDljMTE4Ljg1OSwwIDIxNi4xMDQsLTk3LjI0NSAyMTYuMTA0LC0yMTIuNTAybS0xNzYuNDc4LC01NjcuMjc4YzIzNC4xMTYsMCA0MDMuMzksMTI3Ljg2NSA0MDMuMzksMzYwLjE4bDAsNTc5Ljg4NmwtMjE3LjkwNSwwbDAsLTEyNy44NjVjLTU3LjYzOCw5My42NDMgLTE1Ni42NjYsMTQ5LjQ3OSAtMjc3LjMyNiwxNDkuNDc5Yy0xNzIuODk0LDAgLTI5OC45NTgsLTEwOS44NTMgLTI5O
2180C45NTgsLTI2MS4xMzRjMCwtMTYwLjI4NiAxMTguODc3LC0yNTIuMTI4IDMzMy4xNjIsLTI4NC41MzFsMjMyLjMxNSwtMzQuMjIybDAsLTI1LjIxNmMwLC05NS40NDQgLTc1LjYzMSwtMTUxLjI4IC0xOTIuNjg5LC0xNTEuMjhjLTEyMi40NjEsMCAtMjM0LjExNiw1Mi4yMzQgLTMwMi41NDIsMTAyLjY2N2wwLC0yMTkuNzI1Yzc3LjQzMiwtNTAuNDE1IDE5Ni4yOTEsLTg4LjIzOSAzMjAuNTU0LC04OC4yMzkiIHN0eWxlPSJmaWxsOiNmMGY3ZWQ7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PHBhdGggZD0iTTQ0MzUuMjg2LDM4OS42NmMyMTIuNTIsMCAzNTYuNTc3LDE0Mi4yNzQgMzU2LjU3NywzODEuNzc2bDAsNTU4LjI3MmwtMjM0LjExNiwwbDAsLTUyOS40NTRjMCwtMTMzLjI1IC03OS4yMzMsLTIwMS42OTUgLTE4My42ODMsLTIwMS42OTVjLTE1NC44ODMsMCAtMjEyLjUwMiwxMzguNjcyIC0yMTIuNTAyLDI1Ny41MzFsMCw0NzMuNjE3bC0yMzQuMTE2LDBsMCwtOTE4LjQ1MmwyMjUuMTEsMGwwLDEyNC4yODFjNTIuMjE2LC04OC4yNTcgMTQ0LjA3NiwtMTQ1Ljg3NyAyODIuNzI5LC0xNDUuODc3IiBzdHlsZT0iZmlsbDojZjBmN2VkO2ZpbGwtcnVsZTpub256ZXJvOyIvPjxwYXRoIGQ9Ik01MDQ3LjUzMiw0MTEuMjZsMjM0LjExNiwwbDAsOTE4LjQ1MmwtMjM0LjExNiwwbDAsLTkxOC40NTJabTI1Mi4xMDksLTI2Ni41MTljMCw3NS42MzEgLTU5LjQyLDEzMy4yNjkgLTEzMy4yNSwxMzMuMjY5Yy03NS42MzEsMCAtMTM2Ljg3MSwtNTcuNjM4IC0xMzYuODcxLC0xMzMuMjY5YzAsLTc1LjYzMSA2MS4yNCwtMTMzLjI2OSAxMzYuODcxLC0xMzMuMjY5YzczLjgzLDAgMTMzLjI1LDU3LjYzOCAxMzMuMjUsMTMzLjI2OSIgc3R5bGU9ImZpbGw6I2YwZjdlZDtmaWxsLXJ1bGU6bm9uemVybzsiLz48cGF0aCBkPSJNNjIxNi4yMzksNjY2Ljk5N2MtNjEuMjIyLC00My4yMjggLTE0OS40NzksLTY2LjY0MyAtMjIxLjUwOCwtNjYuNjQzYy0xNjMuODg4LDAgLTI3NS41MjUsMTExLjY1NCAtMjc1LjUyNSwyNzEuOTQxYzAsMTQ5LjQ3OSAxMDQuNDUsMjY4LjMzOCAyNzUuNTI1LDI2OC4zMzhjNzkuMjUyLDAgMTYzLjg3LC0yMS42MTQgMjIzLjMwOSwtNjguNDQ1bDAsMjIxLjUwOGMtNjYuNjI1LDQxLjQyNyAtMTY3LjQ3Myw1Ny42MzggLTI1Mi4xMjgsNTcuNjM4Yy0yNzkuMTQ1LDAgLTQ4NC40NDIsLTIwNy4xMTcgLTQ4NC40NDIsLTQ3OS4wMzljMCwtMjczLjc0MiAyMDEuNzEzLC00ODIuNjQxIDQ4Ni4yNDQsLTQ4Mi42NDFjODQuNjM3LDAgMTgwLjA4MSwxOS44MTMgMjQ4LjUyNSw1Ny42MzhsMCwyMTkuNzA3WiIgc3R5bGU9ImZpbGw6I2YwZjdlZDtmaWxsLXJ1bGU6bm9uemVybzsiLz48cGF0aCBkPSJNMTU2My4wODEsMTEzNy4wMTljLTE0NS44NzcsMCAtMjUwLjMyNywtMTE1LjI1NyAtMjUwLjMyNywtMjY2LjUxOWMwLC0xNTEuMjggMTA0LjQ1LC0yNjYuNTM3IDI1MC4zMjcsLTI2Ni41MzdjMTQ0LjA1NywwIDI0OC41MjUsMTE1LjI1NyAyNDguNTI1LDI2Ni41MzdjMCwxNTEuMjYyIC0xMDQuNDY4LDI2Ni41MTkgLTI0OC41MjUsMjY2LjUxOW05My43ODgsLTczOS4xMzVsNTguODM4LDBjMTg2Ljk3NiwwIDMzOC41NjYsLTE1MS41OSAzMzguNTY2LC0zMzguNTY2bC0xNDYuNzg2LDBjLTE4NC4yNDcsMCAtMzMzLjgxNywxNDcuMjc4IC0zMzguMTQ3LDMzMC40ODhjLTIuMDkyLC0wLjAxOCAtNC4xNDgsLTAuMTQ2IC02LjI1OSwtMC4xNDZjLTIuNzExLDAgLTUuMzY3LDAuMTQ2IC04LjA2LDAuMTgyYy00LjMxMiwtMTgzLjIyOCAtMTUzLjg4MiwtMzMwLjUyNCAtMzM4LjE2NSwtMzMwLjUyNGwtMTQ2Ljc2OCwwYzAsMTg2Ljk3NiAxNTEuNTksMzM4LjU2NiAzMzguNTY2LDMzOC41NjZsNjAuMDc1LDBjLTIzMi41MzMsNDAuODgxIC0zOTEuODkxLDIzMi4wMDYgLTM5MS44OTEsNDcyLjYxN2MwLDI3MS45MjIgMjAzLjQ5Niw0ODAuODIyIDQ4Ni4yNDQsNDgwLjgyMmMyODAuOTI4LDAgNDg0LjQyNCwtMjA4LjkgNDg0LjQyNCwtNDgwLjgyMmMwLC0yNDAuNjExIC0xNTkuMzQsLTQzMS43MzUgLTM5MC42MzYsLTQ3Mi42MTciIHN0eWxlPSJmaWxsOiNiY2ZkYWM7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PC9nPjwvZz48L3N2Zz4=" alt="Botanic"></a>
2181        <p class="bn-footer__about">Producent szklarni ogrodowych z poliwęglanu, wiat samochodowych i&nbsp;zadaszeń basenowych.</p>
2182        <div class="bn-footer__contact">
2183          <a class="bn-footer__phone" href="tel:+48833070023"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>+48 833 070 023</a>
2184          <div class="bn-footer__hours">Pon.–Pt. 8:00–17:00</div>
2185        </div>
2186      </div>
2187      <div class="bn-footer__col">
2188        <h3 class="bn-footer__title">Kategorie</h3>
2189        <ul class="bn-footer__list">
2190          <li><a href="/szklarnie">Szklarnie z poliwęglanu</a></li>
2191          <li><a href="/wiaty-samochodowe">Wiaty samochodowe</a></li>
2192          <li><a href="/grzadki-i-klomby">Grządki i klomby</a></li>
2193          <li><a href="/pl/c/Zadaszenia-basenowe/50">Zadaszenia basenowe</a></li>
2194        </ul>
2195      </div>
2196      <div class="bn-footer__col">
2197        <h3 class="bn-footer__title">Informacje</h3>
2198        <ul class="bn-footer__list">
2199          <li><a href="/o-nas">O nas</a></li>
2200          <li><a href="/pl/i/Jak-wybrac-szklarnie.-Poradnik/33">Jak wybrać szklarnię. Poradnik</a></li>
2201          <li><a href="/pl/i/Malowanie-konstrukcji/23">Malowanie konstrukcji</a></li>
2202          <li><a href="/pl/i/Tasmy-i-profile/37">Taśmy i profile</a></li>
2203          <li><a href="/formy-platnosci">Formy płatności</a></li>
2204          <li><a href="/pl/blog">Blog</a></li>
2205          <li><a href="/realizacje">Realizacje</a></li>
2206          <li><a href="/montaz-szklarni">Montaż szklarni</a></li>
2207          <li><a href="/pl/i/Nasi-Partnerzy/36">Nasi Partnerzy</a></li>
2208          <li><a href="/mapa-strony">Mapa strony</a></li>
2209          <li><a href="/contact">Kontakt</a></li>
2210        </ul>
2211      </div>
2212      <div class="bn-footer__col">
2213        <h3 class="bn-footer__title">Pomoc</h3>
2214        <ul class="bn-footer__list">
2215          <li><a href="/pl/i/Zwroty-i-reklamacje/7">Zwroty i reklamacje</a></li>
2216          <li><a href="/pl/i/Program-afiliacyjny-Botanic/21">Program afiliacyjny Botanic</a></li>
2217          <li><a href="/faq">FAQ</a></li>
2218          <li><a href="/regulamin">Regulamin sklepu</a></li>
2219          <li><a href="/polityka-prywatnosci">Polityka prywatności</a></li>
2220          <li><a href="/jak-kupic-na-raty">Jak kupić na raty?</a></li>
2221          <li><a href="/pl/i/Zostan-Partnerem-B2B/35">Zostań Partnerem B2B</a></li>
2222        </ul>
2223      </div>
2224    </div>
2225    <div class="bn-footer__bottom">
2226      <p>© 2026 Botanic. Wszystkie prawa zastrzeżone.</p>
2227    </div>
2228  </div>
2229  <button class="bn-totop" type="button" aria-label="Przewiń do góry"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"/></svg></button>
2230</footer></template>
2231<script>
2232(function(){
2233  function mountFallback(){
2234    if(document.querySelector(".bn-footer"))return;
2235    var t=document.getElementById("bn-footer-fallback-template");
2236    if(!t)return;
2237    var frag=t.content.cloneNode(true);
2238    var nativeFooter=document.getElementById("main-footer");
2239    if(nativeFooter&&nativeFooter.parentNode)nativeFooter.parentNode.insertBefore(frag,nativeFooter);
2240    else document.body.appendChild(frag);
2241  }
2242  if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",mountFallback);else mountFallback();
2243})();
2244</script>
2244</div><div 
2245                class="module_type-integration" 
2246                data-integration-module-name="000652b2-bce7-21f1-bd02-137e7f90380f" 
2247                data-integration-module-id="631">
2248<script>
2249/* Listing kategorii: przenieś opis kategorii POD listę produktów (niektóre kategorie, np. „Szklarnie ogrodowe" /wszystkie-szklarnie, mają wielki blok opisu NAD produktami — klient chce produkty od razu, opis niżej). Kolumna produktów: [nagłówek(tytuł+licznik), opis, lista]. Przenosimy bloki między nagłówkiem a listą pod listę. */
2250(function(){
2251  function run(){
2252    var view=document.querySelector('.gc__category__view');
2253    if(!view)return false;if(view.__bnDescMoved)return true;
2254    var list=view.querySelector('product-list');
2255    if(!list)return false;
2256    /* kolumna produktów = bezpośrednie dziecko wiersza view, które zawiera product-list;
2257       listRow = bezpośrednie dziecko tej kolumny zawierające product-list */
2258    var row=view.children[0]||view;
2259    var prodCol=null;
2260    [].forEach.call(row.children,function(c){if(c.querySelector&&c.querySelector('product-list'))prodCol=c;});
2261    if(!prodCol)return false;
2262    var listRow=null;
2263    [].forEach.call(prodCol.children,function(c){if(c===list||(c.querySelector&&c.querySelector('product-list')))listRow=c;});
2264    if(!listRow)return false;
2265    var kids=[].slice.call(prodCol.children);
2266    var li=kids.indexOf(listRow);
2267    if(li<1){view.__bnDescMoved=1;return true;}
2268    var anchor=listRow.nextSibling, moved=0;
2269    for(var i=1;i<li;i++){ /* i=0 to nagłówek (tytuł+licznik) — zostaje na górze */
2270      var el=kids[i];
2271      if(el.querySelector&&(el.querySelector('product-list')||el.querySelector('.tile-grid')))continue;
2272      if((el.textContent||'').trim().length<80)continue;
2273      prodCol.insertBefore(el,anchor);
2274      moved++;
2275    }
2276    view.__bnDescMoved=1;return true;
2277  }
2278  /* Bez listingu nie ma na co czekac: na stronie glownej, karcie produktu i
2279     stronach informacyjnych 40 prob co 300 ms chodzilo na pusto. */
2280  var t=0;function boot(){var done=function(){document.documentElement.classList.add('bn-cat-ready');};
2281    if(run()){done();return;}
2282    if(!document.querySelector('.gc__category__view,.gc__main__category__column,product-list')){done();return;}
2283    if(t++<40){setTimeout(boot,300);return;}
2284    done();}
2285  window.__bnCatDescBoot=boot;
2286  boot();
2287})();
2288</script>
2288
2289
2290<script>
2291/* Listing: ujednolić przyciski kart — WSZYSTKIE „Zobacz produkt" (link do produktu), po lewej; ukryj natywne przyciski w tym „Do koszyka"/quick-add (decyzja klienta 2026-07: „dodaj do koszyka ma nie istnieć — też ma być zobacz produkt"). */
2292(function(){
2293  function urlOf(t){
2294    var a=t.querySelector('.product-tile__image a[href]')||t.querySelector('.product-tile__name a[href]')||t.querySelector('a.product-tile__name[href]')||t.querySelector('a[href*="/p/"]')||t.querySelector('a[href]:not([href="#"]):not([href=""])');
2295    return a?a.getAttribute('href'):null;
2296  }
2297  function run(){
2298    var tiles=document.querySelectorAll('.tile-grid .product-tile');
2299    [].forEach.call(tiles,function(t){
2300      if(t.__bnCta)return;
2301      var footer=t.querySelector('.product-tile__footer');
2302      var href=urlOf(t);
2303      if(!footer||!href)return;
2304      [].forEach.call(footer.querySelectorAll('.btn_primary,button,a.btn,a[class*="button"]'),function(b){b.style.setProperty('display','none','important');});
2305      if(!footer.querySelector('.bn-tile-cta')){
2306        var a=document.createElement('a');
2307        a.className='bn-tile-cta';a.setAttribute('href',href);a.textContent='Zobacz produkt';
2308        footer.appendChild(a);
2309      }
2310      t.__bnCta=1;
2311    });
2312  }
2313  var mo;
2314  function boot(){
2315    run();
2316    if(!mo){
2317      /* Bez siatki kafelkow nie ma czego obserwowac - obserwator na <body> chodzil
2318         na pusto przez 15 s na kazdej stronie bez listingu. Gdy kafelki pojawia sie
2319         pozniej (SPA), wspolna magistrala zawola boot() ponownie. */
2320      var g=document.querySelector('.gc__category__view')||document.querySelector('.tile-grid');
2321      if(!g)return;
2322      mo=new MutationObserver(function(){run();});
2323      mo.observe(g,{childList:true,subtree:true});
2324      setTimeout(function(){if(mo){mo.disconnect();mo=null;}},15000);
2325    }
2326  }
2327  window.__bnCatCtaBoot=boot;
2328})();
2329</script>
2329
2330
2331<script>
2332/* ===== SPA-obwódka: oryginalne inline-skrypty przebiegały przy każdej SPA-nawigacji;
2333   moduł wykonuje się raz — adaptacje restartuje wspólny obserwator document (debounce 150 ms). ===== */
2334(function(){
2335  var t=null;
2336  function call(f){try{f&&f();}catch(e){}}
2337  function bootAll(){
2338    call(window.__bnCatDescBoot);
2339    call(window.__bnCatCtaBoot);
2340  }
2341  if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',bootAll);else bootAll();
2342  setTimeout(bootAll,1500);
2343/* Jedna wspolna magistrala obserwatora DOM zamiast osobnego MutationObservera
2344   w kazdym module. Dwie kolejki: natychmiastowa (przenoszenie blokow — musi
2345   zdazyc w tej samej klatce, inaczej po nawigacji SPA mignie natywna stopka)
2346   i odlozona o 150 ms (synchronizacja licznikow — tak bylo i wczesniej). */
2347  window.__bnDomWatch=window.__bnDomWatch||(function(){var now=[],later=[],t=null,mo=null;function flush(){t=null;for(var i=0;i<later.length;i++){try{later[i]();}catch(e){}}}function tick(){for(var i=0;i<now.length;i++){try{now[i]();}catch(e){}}if(later.length){if(t)clearTimeout(t);t=setTimeout(flush,150);}}return function(fn,defer){(defer?later:now).push(fn);if(!mo){mo=new MutationObserver(tick);mo.observe(document,{childList:true,subtree:true});}};})();
2348  /* Skrypt modulu integracyjnego wykonuje sie ponownie przy kazdej nawigacji
2349     SPA (Turbo podstawia nowe <body> razem z nim), wiec subskrybujemy raz.
2350     bootAll siega po window.__bnCatDescBoot/__bnCatCtaBoot, ktore kazde
2351     wykonanie nadpisuje swiezymi, wiec zachowanie zostaje to samo. */
2352  if(!window.__bnTilesBound){window.__bnTilesBound=1;window.__bnDomWatch(bootAll,true);}
2353})();
2354</script>
2354</div><div 
2355                class="module_type-integration" 
2356                data-integration-module-name="000652b2-bce7-21f1-8b02-83f221733c92" 
2357                data-integration-module-id="632"><footer class="bn-footer">
2358  <div class="bn-fwrap">
2359    <div class="bn-footer__main">
2360      <div class="bn-footer__col bn-footer__brand">
2361        <a class="bn-footer__logo" href="/" aria-label="Botanic"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCA2MjIxIDEzNTIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM6c2VyaWY9Imh0dHA6Ly93d3cuc2VyaWYuY29tLyIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoyOyI+PHJlY3QgaWQ9IlBhZ2UtMiIg
2361c2VyaWY6aWQ9IlBhZ2UgMiIgeD0iMCIgeT0iMCIgd2lkdGg9IjYyMjEiIGhlaWdodD0iMTM1MS4zMzMiIHN0eWxlPSJmaWxsOm5vbmU7Ii8+PGNsaXBQYXRoIGlkPSJfY2xpcDEiPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSI2MjIxIiBoZWlnaHQ9IjEzNTEuMzMzIi8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjX2NsaXAxKSI+PGcgaWQ9IkxheWVyLTEiIHNlcmlmOmlkPSJMYXllciAxIj48L2c+PGc+PHBhdGggZD0iTTcwNS45NSw4NzIuMjg5YzAsLTE2Mi4wNjkgLTExMS42NTQsLTI3MS45MjIgLTI0MS4zMjEsLTI3MS45MjJjLTEzMy4yNjksMCAtMjQzLjEyMiwxMDguMDUyIC0yNDMuMTIyLDI3MS45MjJjMCwxNjIuMDg3IDEwOS44NTMsMjcxLjk0MSAyNDMuMTIyLDI3MS45NDFjMTI5LjY2NiwwIDI0MS4zMjEsLTEwOS44NTMgMjQxLjMyMSwtMjcxLjk0MW0tNDg4LjA0NSw0NTcuNDI1bC0yMTcuOTA1LDBsMCwtMTI3OC42MTRsMjMyLjMxNSwtMGwwLDQ3My42MTdjNTAuNDMzLC03Ny40MzIgMTYyLjA2OSwtMTM1LjA1MiAyODAuOTQ2LC0xMzUuMDUyYzIzNC4wOTgsMCA0MjYuODA1LDE5Ni4yOTEgNDI2LjgwNSw0ODAuODIyYzAsMjg0LjU0OSAtMTkyLjcwNyw0ODAuODQgLTQzMC40MjYsNDgwLjg0Yy0xMjIuNDYxLDAgLTI0MS4zMDIsLTYxLjI0IC0yOTEuNzM1LC0xNDUuODc3bDAsMTI0LjI2M1oiIHN0eWxlPSJmaWxsOiNmMGY3ZWQ7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PHBhdGggZD0iTTI3NjAuNTk4LDEzMTUuMzA2Yy0zNy44MDYsMjEuNjE0IC05NS40NDQsMzYuMDIzIC0xNzEuMDc1LDM2LjAyM2MtMTg5LjA4NywwIC0zMDYuMTQ1LC0xMTEuNjU0IC0zMDYuMTQ1LC0zMDkuNzQ3bDAsLTQ0My4wMzRsLTEyOS42NjYsMGwwLC0xODcuMjg1bDEzNi44NzEsMGwwLC0yMDguOWwyMjYuOTExLC01OS40MmwwLDI2OC4zMmwyMjEuNTA4LDBsMCwxODcuMjg1bC0yMjEuNTA4LDBsMCw0MTAuNjEzYzAsOTMuNjQzIDQ4LjYzMiwxMzMuMjY5IDEzNS4wNywxMzMuMjY5YzI1LjE5OCwwIDcwLjIyOCwtNy4yMDUgMTA4LjAzNCwtMjguODE5bDAsMjAxLjY5NVoiIHN0eWxlPSJmaWxsOiNmMGY3ZWQ7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PHBhdGggZD0iTTM0NDMuMDc1LDk1Ni45MzFsMCwtMzQuMjA0bC0xODUuNDg0LDIzLjM5N2MtMTAwLjg0NywxMi42MDggLTE1OC40ODUsNTQuMDE3IC0xNTguNDg1LDEyMC42NmMwLDYzLjAyMyA1Mi4yMzQsMTAyLjY0OSAxMjcuODY1LDEwMi42NDljMTE4Ljg1OSwwIDIxNi4xMDQsLTk3LjI0NSAyMTYuMTA0LC0yMTIuNTAybS0xNzYuNDc4LC01NjcuMjc4YzIzNC4xMTYsMCA0MDMuMzksMTI3Ljg2NSA0MDMuMzksMzYwLjE4bDAsNTc5Ljg4NmwtMjE3LjkwNSwwbDAsLTEyNy44NjVjLTU3LjYzOCw5My42NDMgLTE1Ni42NjYsMTQ5LjQ3OSAtMjc3LjMyNiwxNDkuNDc5Yy0xNzIuODk0LDAgLTI5OC45NTgsLTEwOS44NTMgLTI5O
2361C45NTgsLTI2MS4xMzRjMCwtMTYwLjI4NiAxMTguODc3LC0yNTIuMTI4IDMzMy4xNjIsLTI4NC41MzFsMjMyLjMxNSwtMzQuMjIybDAsLTI1LjIxNmMwLC05NS40NDQgLTc1LjYzMSwtMTUxLjI4IC0xOTIuNjg5LC0xNTEuMjhjLTEyMi40NjEsMCAtMjM0LjExNiw1Mi4yMzQgLTMwMi41NDIsMTAyLjY2N2wwLC0yMTkuNzI1Yzc3LjQzMiwtNTAuNDE1IDE5Ni4yOTEsLTg4LjIzOSAzMjAuNTU0LC04OC4yMzkiIHN0eWxlPSJmaWxsOiNmMGY3ZWQ7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PHBhdGggZD0iTTQ0MzUuMjg2LDM4OS42NmMyMTIuNTIsMCAzNTYuNTc3LDE0Mi4yNzQgMzU2LjU3NywzODEuNzc2bDAsNTU4LjI3MmwtMjM0LjExNiwwbDAsLTUyOS40NTRjMCwtMTMzLjI1IC03OS4yMzMsLTIwMS42OTUgLTE4My42ODMsLTIwMS42OTVjLTE1NC44ODMsMCAtMjEyLjUwMiwxMzguNjcyIC0yMTIuNTAyLDI1Ny41MzFsMCw0NzMuNjE3bC0yMzQuMTE2LDBsMCwtOTE4LjQ1MmwyMjUuMTEsMGwwLDEyNC4yODFjNTIuMjE2LC04OC4yNTcgMTQ0LjA3NiwtMTQ1Ljg3NyAyODIuNzI5LC0xNDUuODc3IiBzdHlsZT0iZmlsbDojZjBmN2VkO2ZpbGwtcnVsZTpub256ZXJvOyIvPjxwYXRoIGQ9Ik01MDQ3LjUzMiw0MTEuMjZsMjM0LjExNiwwbDAsOTE4LjQ1MmwtMjM0LjExNiwwbDAsLTkxOC40NTJabTI1Mi4xMDksLTI2Ni41MTljMCw3NS42MzEgLTU5LjQyLDEzMy4yNjkgLTEzMy4yNSwxMzMuMjY5Yy03NS42MzEsMCAtMTM2Ljg3MSwtNTcuNjM4IC0xMzYuODcxLC0xMzMuMjY5YzAsLTc1LjYzMSA2MS4yNCwtMTMzLjI2OSAxMzYuODcxLC0xMzMuMjY5YzczLjgzLDAgMTMzLjI1LDU3LjYzOCAxMzMuMjUsMTMzLjI2OSIgc3R5bGU9ImZpbGw6I2YwZjdlZDtmaWxsLXJ1bGU6bm9uemVybzsiLz48cGF0aCBkPSJNNjIxNi4yMzksNjY2Ljk5N2MtNjEuMjIyLC00My4yMjggLTE0OS40NzksLTY2LjY0MyAtMjIxLjUwOCwtNjYuNjQzYy0xNjMuODg4LDAgLTI3NS41MjUsMTExLjY1NCAtMjc1LjUyNSwyNzEuOTQxYzAsMTQ5LjQ3OSAxMDQuNDUsMjY4LjMzOCAyNzUuNTI1LDI2OC4zMzhjNzkuMjUyLDAgMTYzLjg3LC0yMS42MTQgMjIzLjMwOSwtNjguNDQ1bDAsMjIxLjUwOGMtNjYuNjI1LDQxLjQyNyAtMTY3LjQ3Myw1Ny42MzggLTI1Mi4xMjgsNTcuNjM4Yy0yNzkuMTQ1LDAgLTQ4NC40NDIsLTIwNy4xMTcgLTQ4NC40NDIsLTQ3OS4wMzljMCwtMjczLjc0MiAyMDEuNzEzLC00ODIuNjQxIDQ4Ni4yNDQsLTQ4Mi42NDFjODQuNjM3LDAgMTgwLjA4MSwxOS44MTMgMjQ4LjUyNSw1Ny42MzhsMCwyMTkuNzA3WiIgc3R5bGU9ImZpbGw6I2YwZjdlZDtmaWxsLXJ1bGU6bm9uemVybzsiLz48cGF0aCBkPSJNMTU2My4wODEsMTEzNy4wMTljLTE0NS44NzcsMCAtMjUwLjMyNywtMTE1LjI1NyAtMjUwLjMyNywtMjY2LjUxOWMwLC0xNTEuMjggMTA0LjQ1LC0yNjYuNTM3IDI1MC4zMjcsLTI2Ni41MzdjMTQ0LjA1NywwIDI0OC41MjUsMTE1LjI1NyAyNDguNTI1LDI2Ni41MzdjMCwxNTEuMjYyIC0xMDQuNDY4LDI2Ni41MTkgLTI0OC41MjUsMjY2LjUxOW05My43ODgsLTczOS4xMzVsNTguODM4LDBjMTg2Ljk3NiwwIDMzOC41NjYsLTE1MS41OSAzMzguNTY2LC0zMzguNTY2bC0xNDYuNzg2LDBjLTE4NC4yNDcsMCAtMzMzLjgxNywxNDcuMjc4IC0zMzguMTQ3LDMzMC40ODhjLTIuMDkyLC0wLjAxOCAtNC4xNDgsLTAuMTQ2IC02LjI1OSwtMC4xNDZjLTIuNzExLDAgLTUuMzY3LDAuMTQ2IC04LjA2LDAuMTgyYy00LjMxMiwtMTgzLjIyOCAtMTUzLjg4MiwtMzMwLjUyNCAtMzM4LjE2NSwtMzMwLjUyNGwtMTQ2Ljc2OCwwYzAsMTg2Ljk3NiAxNTEuNTksMzM4LjU2NiAzMzguNTY2LDMzOC41NjZsNjAuMDc1LDBjLTIzMi41MzMsNDAuODgxIC0zOTEuODkxLDIzMi4wMDYgLTM5MS44OTEsNDcyLjYxN2MwLDI3MS45MjIgMjAzLjQ5Niw0ODAuODIyIDQ4Ni4yNDQsNDgwLjgyMmMyODAuOTI4LDAgNDg0LjQyNCwtMjA4LjkgNDg0LjQyNCwtNDgwLjgyMmMwLC0yNDAuNjExIC0xNTkuMzQsLTQzMS43MzUgLTM5MC42MzYsLTQ3Mi42MTciIHN0eWxlPSJmaWxsOiNiY2ZkYWM7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PC9nPjwvZz48L3N2Zz4=" alt="Botanic"></a>
2362        <p class="bn-footer__about">Producent szklarni ogrodowych z poliwęglanu, wiat samochodowych i&nbsp;zadaszeń basenowych.</p>
2363        <div class="bn-footer__contact">
2364          <a class="bn-footer__phone" href="tel:+48833070023"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>+48 833 070 023</a>
2365          <div class="bn-footer__hours">Pon.–Pt. 8:00–17:00</div>
2366        </div>
2367      </div>
2368      <div class="bn-footer__col">
2369        <h2 class="bn-footer__title">Kategorie</h2>
2370        <ul class="bn-footer__list">
2371          <li><a href="/szklarnie">Szklarnie z poliwęglanu</a></li>
2372          <li><a href="/wiaty-samochodowe">Wiaty samochodowe</a></li>
2373          <li><a href="/grzadki-i-klomby">Grządki i klomby</a></li>
2374          <li><a href="/pl/c/Zadaszenia-basenowe/50">Zadaszenia basenowe</a></li>
2375        </ul>
2376      </div>
2377      <div class="bn-footer__col">
2378        <h2 class="bn-footer__title">Informacje</h2>
2379        <ul class="bn-footer__list">
2380          <li><a href="/o-nas">O nas</a></li>
2381          <li><a href="/pl/i/Jak-wybrac-szklarnie.-Poradnik/33">Jak wybrać szklarnię. Poradnik</a></li>
2382          <li><a href="/pl/i/Malowanie-konstrukcji/23">Malowanie konstrukcji</a></li>
2383          <li><a href="/pl/i/Tasmy-i-profile/37">Taśmy i profile</a></li>
2384          <li><a href="/formy-platnosci">Formy płatności</a></li>
2385          <li><a href="/pl/blog">Blog</a></li>
2386          <li><a href="/realizacje">Realizacje</a></li>
2387          <li><a href="/montaz-szklarni">Montaż szklarni</a></li>
2388          <li><a href="/pl/i/Nasi-Partnerzy/36">Nasi Partnerzy</a></li>
2389          <li><a href="/mapa-strony">Mapa strony</a></li>
2390          <li><a href="/contact">Kontakt</a></li>
2391        </ul>
2392      </div>
2393      <div class="bn-footer__col">
2394        <h2 class="bn-footer__title">Pomoc</h2>
2395        <ul class="bn-footer__list">
2396          <li><a href="/pl/i/Zwroty-i-reklamacje/7">Zwroty i reklamacje</a></li>
2397          <li><a href="/pl/i/Program-afiliacyjny-Botanic/21">Program afiliacyjny Botanic</a></li>
2398          <li><a href="/faq">FAQ</a></li>
2399          <li><a href="/regulamin">Regulamin sklepu</a></li>
2400          <li><a href="/polityka-prywatnosci">Polityka prywatności</a></li>
2401          <li><a href="/jak-kupic-na-raty">Jak kupić na raty?</a></li>
2402          <li><a href="/pl/i/Zostan-Partnerem-B2B/35">Zostań Partnerem B2B</a></li>
2403        </ul>
2404      </div>
2405    </div>
2406    <div class="bn-footer__bottom">
2407      <p>© 2026 Botanic. Wszystkie prawa zastrzeżone.</p>
2408    </div>
2409  </div>
2410  <button class="bn-totop" type="button" aria-label="Przewiń do góry"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"/></svg></button>
2411</footer></div><div 
2412                class="module_type-integration" 
2413                data-integration-module-name="000652b2-bce7-21f1-9202-7ddddc447704" 
2414                data-integration-module-id="643"></div><div 
2415                class="module_type-integration" 
2416                data-integration-module-name="0007ada2-a3c4-21f1-ba02-eb91070d7cc6" 
2417                data-integration-module-id="433">
2418<div
2419  class="gc-category-enhancements"
2420  data-gc-category-enhancements
2421  data-desktop-sidebar="1"
2422  data-desktop-categories="1"
2423  data-quick-filters-desktop="0"
2424  data-quick-filters-mobile="1"
2425  data-price-slider="1"
2426  data-collapse-groups="1"
2427  data-open-price="1"
2428  data-filter-search="1"
2429  data-desktop-scale="1"
2430  data-mobile-view="1"
2431  hidden
2432  aria-hidden="true"
2433></div>
2434</div>
2435
2436
2437<div id="scripts" data-turbo-permanent>
2438    <link id="app-translations" href="//botanic.com.pl/userdata/public/skins/7f68b08a74977525acdb9dc1b97fc796_copy_27/cache/MzM6MTc6NS4yNi41Ng.pl_PL.json" type="text/script" crossorigin/>
2439
2440                        
2440<script type="module" src="//botanic.com.pl/application/assets/storefront/storefrontApp.CsApItsi.min.js"></script>
2440
2441                                
2441<script type="module" src="//botanic.com.pl/application/assets/storefront/phoenixComponentsLazyLoader.BefGyk50.min.js"></script>
2441
2442                                
2442<script type="module" data-src="/userdata/public/storefront/js/110_de32438e7aae7b5449a40005b77206762cbc6cab.js" data-script-module-id="110"></script>
2442
2443                                
2443<script type="module" data-src="/userdata/public/storefront/js/111_f0f1a013787c945a45e0ecfacf99636a585458ae.js" data-script-module-id="111"></script>
2443
2444                                
2444<script type="module" data-src="/userdata/public/storefront/js/138_659f19e1fdfa6b5f8555fdba8ef2463711d87b40.js" data-script-module-id="138"></script>
2444
2445                                
2445<script type="module" data-src="/userdata/public/storefront/js/140_9f966b868feff1ca0e2df559ea80685b1feecdc4.js" data-script-module-id="140"></script>
2445
2446                                
2446<script type="module" data-src="/userdata/public/storefront/js/142_06bd4d5d641b6cf3d40a7b06b9996a3299636276.js" data-script-module-id="142"></script>
2446
2447                                
2447<script type="module" data-src="/userdata/public/storefront/js/145_a993d258baaecb8bec21f6f735597253fd3f787f.js" data-script-module-id="145"></script>
2447
2448                                
2448<script type="module" data-src="/userdata/public/storefront/js/147_ceaa0b49157afe9dbd204918ec52e546e69ae206.js" data-script-module-id="147"></script>
2448
2449                                
2449<script type="module" data-src="/userdata/public/storefront/js/148_f5efd1b7c03b37d77da7e0bbbf21d20b7edca07a.js" data-script-module-id="148"></script>
2449
2450                                
2450<script type="module" data-src="/userdata/public/storefront/js/149_f33fe3e7b7ea6922dee5bd4d5bc41f0e7d6b858b.js" data-script-module-id="149"></script>
2450
2451                                
2451<script type="module" data-src="/userdata/public/storefront/js/153_6ed97f65ac00618a93368e98a6303fbba7bc23cf.js" data-script-module-id="153"></script>
2451
2452                                
2452<script type="module" data-src="/userdata/public/storefront/js/159_6656c35a41d4994dea8d8d9ee50aab1e6aaf9f49.js" data-script-module-id="159"></script>
2452
2453                                
2453<script type="module" data-src="/userdata/public/storefront/js/162_7d8a7c7247c6898b93582f0d3f452731fbc490c4.js" data-script-module-id="162"></script>
2453
2454                                
2454<script type="module" data-src="/userdata/public/storefront/js/165_93a52c4d3a681be5181efd4706799649c7fc0cca.js" data-script-module-id="165"></script>
2454
2455                                
2455<script type="module" data-src="/userdata/public/storefront/js/166_75c8eb5cd4938a8195ca520ec7caee6d85cd3f9c.js" data-script-module-id="166"></script>
2455
2456                                
2456<script type="module" data-src="/userdata/public/storefront/js/167_f93d5e42591fc42767694888e9d1ce36cab24811.js" data-script-module-id="167"></script>
2456
2457                                
2457<script type="module" data-src="/userdata/public/storefront/js/169_bf0268affa8a7036f495f45abaff4926dfeef6d1.js" data-script-module-id="169"></script>
2457
2458                                
2458<script type="module" data-src="/userdata/public/storefront/js/170_adadcf6676a57074c86f7630724d7f57262d9463.js" data-script-module-id="170"></script>
2458
2459                                
2459<script type="module" data-src="/userdata/public/storefront/js/172_d578172038e4c7c087a3b0e62c51c1fd6189b302.js" data-script-module-id="172"></script>
2459
2460                                
2460<script type="module" data-src="/userdata/public/storefront/js/173_438429fb3f926ea5b23f220b75e7a5e185c313a6.js" data-script-module-id="173"></script>
2460
2461                                
2461<script type="module" data-src="/userdata/public/storefront/js/174_8c4ea70871eabb43952f905becc42556dabb632a.js" data-script-module-id="174"></script>
2461
2462                                
2462<script type="module" data-src="/userdata/public/storefront/js/175_3060b5c80a693625b93e64698dad52debdb5ab68.js" data-script-module-id="175"></script>
2462
2463                                
2463<script type="module" data-src="/userdata/public/storefront/js/177_8cba5d441e19383c8a61a4f3e1477408d268bafd.js" data-script-module-id="177"></script>
2463
2464                                
2464<script type="module" data-src="/userdata/public/storefront/js/178_58ae91ccdf4d600d2cfa972505cbf4ce599fcc6b.js" data-script-module-id="178"></script>
2464
2465                                
2465<script type="module" data-src="/userdata/public/storefront/js/179_bd1426d4fb008588c8bfd1b4b394457e0ac843a9.js" data-script-module-id="179"></script>
2465
2466                                
2466<script type="module" data-src="/userdata/public/storefront/js/181_a12fcbba06a8038ad0b7dc28854468e86ff4176b.js" data-script-module-id="181"></script>
2466
2467                                
2467<script type="module" data-src="/userdata/public/storefront/js/184_15b67d540cba1421e1db2e8d484a6d1f388bb756.js" data-script-module-id="184"></script>
2467
2468                                
2468<script type="module" data-src="/userdata/public/storefront/js/433_e9c5bc8e15a4f9417a02445a223ced6087ab310e.js" data-script-module-id="433"></script>
2468
2469                                
2469<script type="module" data-src="/userdata/public/storefront/js/609_a0816bafbbed9eba2fcf11d56cbc0ad1def672c0.js" data-script-module-id="609"></script>
2469
2470                                
2470<script type="module" data-src="/userdata/public/storefront/js/610_82642d3f8216227932a0ae3dc8822fc88f863bdf.js" data-script-module-id="610"></script>
2470
2471                                
2471<script type="module" data-src="/userdata/public/storefront/js/611_666c5f8c648f92596402cbe7761256928e51d66c.js" data-script-module-id="611"></script>
2471
2472                                
2472<script type="module" data-src="/userdata/public/storefront/js/612_9ebd9cb2b59288a4630821f6d5c83679e00760c0.js" data-script-module-id="612"></script>
2472
2473                                
2473<script type="module" data-src="/userdata/public/storefront/js/613_ae05bb2da894a3b3de446b2b92b3523db9f17ad0.js" data-script-module-id="613"></script>
2473
2474                                
2474<script type="module" data-src="/userdata/public/storefront/js/620_1eb063986af385efce69b101c484213bd0cf4cb3.js" data-script-module-id="620"></script>
2474
2475                                
2475<script type="module" data-src="/userdata/public/storefront/js/625_5ced1a50a6aad4b26c3d79a88c66452f1ad62fee.js" data-script-module-id="625"></script>
2475
2476                                
2476<script type="module" data-src="/userdata/public/storefront/js/626_597c26153bd73bb55f9dfdc233523bf57415cc2b.js" data-script-module-id="626"></script>
2476
2477                                
2477<script type="module" data-src="/userdata/public/storefront/js/638_d320b9cd62cc265857655342bc3a82ba055d952a.js" data-script-module-id="638"></script>
2477
2478            </div>
2479</body>
2480</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.