1<!doctype html> 2<html lang="pl"> 3<head > 4 <meta charset="utf-8"/> 5<meta name="title" content="Blog"/> 6<meta name="robots" content="INDEX,FOLLOW"/> 7<meta name="viewport" content="width=device-width, initial-scale=1"/> 8<title>Blog</title>
9<script type="text/javascript"> window.dataLayer = window.dataLayer || []; 10 function gtag() { dataLayer.push(arguments) } 11 12 window.amConsentManager = window.amConsentManager || { 13 consentStates: { 14 denied: 'denied', 15 granted: 'granted' 16 }, 17 storageName: 'amConsentMode', 18 gdprCookie: { 19 cookieGroupName: 'amcookie_allowed', 20 allCookiesAllowed: '0' 21 }, 22 defaultConsentTypesData: {"ad_storage":{"default":"0","group":"1"},"analytics_storage":{"default":"0","group":"3"},"ad_user_data":{"default":"0","group":"2"},"ad_personalization":{"default":"0","group":"2"}}, 23 currentStoreId: 1, 24 init: function () { 25 this.setDefaultConsent(); 26 27 if (this.shouldResetConsentState()) { 28 this.resetAllowedCookiesGroups(); 29 this.removeCurrentConsentState(); 30 } else { 31 this.sendUpdateConsent(); 32 } 33 }, 34 setDefaultConsent: function () { 35 let consentState = {}; 36 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 37 consentState[type] = data.default === '1' ? this.consentStates.granted : this.consentStates.denied; 38 } 39 40 gtag('consent', 'default', consentState); 41 }, 42 updateConsent: function (consent) { 43 const storageConsent = this.getPersistedConsentTypeState(); 44 const consentState = {...storageConsent, ...consent}; 45 46 this.persistConsentTypeState(consentState); 47 this.sendUpdateConsent(); 48 }, 49 sendUpdateConsent: function () { 50 gtag('consent', 'update', this.getPersistedConsentTypeStateForGtag()); 51 }, 52 removeCurrentConsentState: function () { 53 this.persistConsentTypeState({}); 54 }, 55 getConsentTypeStateByGroupIds: function (groups) { 56 let consentTypeState = {}; 57 58 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 59 consentTypeState[type] = { 60 group: data.group, 61 status: (groups.includes(data.group) || groups.includes(this.gdprCookie.allCookiesAllowed)) 62 ? this.consentStates.granted 63 : this.consentStates.denied 64 } 65 } 66 67 return consentTypeState; 68 }, 69 persistConsentTypeState: function (consentTypeState) { 70 let persistedState = this.getPersistedConsentTypeState(false); 71 persistedState[this.currentStoreId] = consentTypeState; 72 localStorage.setItem(this.storageName, JSON.stringify(persistedState)); 73 }, 74 getPersistedConsentTypeState: function (forCurrentStore = true) { 75 let persistedStates = JSON.parse(localStorage.getItem(this.storageName)) ?? {}; 76 77 if (forCurrentStore) { 78 return persistedStates?.[this.currentStoreId] ?? {}; 79 } 80 81 return persistedStates; 82 }, 83 getPersistedConsentTypeStateForGtag: function () { 84 let consentTypeState = {}; 85 let persistedState = this.getPersistedConsentTypeState(); 86 87 for (const [type, data] of Object.entries(persistedState)) { 88 consentTypeState[type] = data.status; 89 } 90 91 return consentTypeState; 92 }, 93 shouldResetConsentState: function () { 94 const persistedConsentTypes = this.getPersistedConsentTypeState(); 95 96 if (Object.keys(persistedConsentTypes).length === 0 97 || Object.keys(persistedConsentTypes).length !== Object.keys(this.defaultConsentTypesData).length 98 || !document.cookie.includes(this.gdprCookie.cookieGroupName) 99 ) { 100 return true; 101 } 102 103 for (const [type, data] of Object.entries(persistedConsentTypes)) { 104 if (data.group !== this.defaultConsentTypesData[type].group) { 105 return true; 106 } 107 } 108 109 return false;
110 }, 111 resetAllowedCookiesGroups: function () { 112 document.cookie = this.gdprCookie.cookieGroupName + '=0;max-age=-1;domain=' + location.hostname; 113 } 114 }; 115 116 window.amConsentManager.init();</script>
116<script type="text/javascript"> window.amMicrosoftConsentManager = window.amMicrosoftConsentManager || { 117 microsoftPixels: [], 118 consentStates: { 119 denied: 'denied', 120 granted: 'granted' 121 }, 122 storageName: 'amMicrosoftConsentMode', 123 gdprCookie: { 124 cookieGroupName: 'amcookie_allowed', 125 allCookiesAllowed: '0' 126 }, 127 defaultConsentTypesData: {"ad_storage":{"default":"0","group":"1"}}, 128 currentStoreId: 1, 129 init: function () { 130 this.microsoftPixels = window.amPixelManager?.getActivePixels('bing') ?? []; 131 this.initStorage(); 132 this.setDefaultConsent(); 133 }, 134 initStorage: function () { 135 const persistedConsentTypes = this.getPersistedConsentTypeState(); 136 137 if (Object.keys(persistedConsentTypes).length !== 0 && !this.shouldResetConsentState(persistedConsentTypes)) { 138 return; 139 } 140 141 let consentState = {}; 142 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 143 consentState[type] = { 144 group: data.group, 145 status: data.default === '1' ? this.consentStates.granted : this.consentStates.denied 146 }; 147 } 148 149 this.resetAllowedCookiesGroups(); 150 this.persistConsentTypeState(consentState); 151 }, 152 setDefaultConsent: function () { 153 this.microsoftPixels.forEach(pixel => { 154 window[pixel.globalEventVariable]?.push('consent', 'default', this.getPersistedConsentTypeStateForUETtag()); 155 }); 156 }, 157 updateConsent: function (consent) { 158 const storageConsent = this.getPersistedConsentTypeState(); 159 const consentState = {...storageConsent, ...consent}; 160 161 this.persistConsentTypeState(consentState); 162 163 this.microsoftPixels.forEach(pixel => { 164 window[pixel.globalEventVariable]?.push('consent', 'default', this.getPersistedConsentTypeStateForUETtag()); 165 }); 166 }, 167 getConsentTypeStateByGroupIds: function (groups) { 168 let consentTypeState = {}; 169 170 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 171 consentTypeState[type] = { 172 group: data.group, 173 status: (groups.includes(data.group) || groups.includes(this.gdprCookie.allCookiesAllowed)) 174 ? this.consentStates.granted 175 : this.consentStates.denied 176 } 177 } 178 179 return consentTypeState; 180 }, 181 persistConsentTypeState: function (consentTypeState) { 182 let persistedState = this.getPersistedConsentTypeState(false); 183 persistedState[this.currentStoreId] = consentTypeState; 184 localStorage.setItem(this.storageName, JSON.stringify(persistedState)); 185 }, 186 getPersistedConsentTypeState: function (forCurrentStore = true) { 187 let persistedStates = JSON.parse(localStorage.getItem(this.storageName)) ?? {}; 188 189 if (forCurrentStore) { 190 return persistedStates?.[this.currentStoreId] ?? {}; 191 } 192 193 return persistedStates; 194 }, 195 getPersistedConsentTypeStateForUETtag: function () { 196 let consentTypeState = {}; 197 let persistedState = this.getPersistedConsentTypeState(); 198 199 for (const [type, data] of Object.entries(persistedState)) { 200 consentTypeState[type] = data.status; 201 } 202 203 return consentTypeState; 204 }, 205 shouldResetConsentState: function (persistedConsentTypes) { 206 if (Object.keys(persistedConsentTypes).length != Object.keys(this.defaultConsentTypesData).length 207 || !document.cookie.includes(this.gdprCookie.cookieGroupName) 208 ) { 209 return true; 210 } 211 212 for (const [type, data] of Object.entries(persistedConsentTypes)) { 213 if (data.group !== this.defaultConsentTypesData[type].group) { 214 return true; 215 } 216 } 217 218 return false;
219 }, 220 resetAllowedCookiesGroups: function () { 221 document.cookie = this.gdprCookie.cookieGroupName + '=0;max-age=-1;domain=' + location.hostname; 222 } 223 }; 224 225 window.addEventListener('am-pixel-bing-init', () => { 226 window.amMicrosoftConsentManager?.init(); 227 });</script>
227 <link rel="stylesheet" type="text/css" media="all" href="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/css/styles.css" /> 228<link rel="stylesheet" type="text/css" media="all" href="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/StripeIntegration_Payments/css/wallets.css" /> 229<link rel="stylesheet" type="text/css" media="all" href="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Magefan_Blog/css/design_valor/style-blog-post-list.css" />
230<script type="text/javascript" defer="defer" src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Smile_ElasticsuiteTracker/js/tracking.js"></script>
vendor: 1 bytes, line 230
230
231<script type="text/javascript" defer="true" src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Tooks_Customer/js/libphonenumber.js"></script>
vendor: 1 bytes, line 231
231
232<script type="text/javascript" defer="true" src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Hyva_CheckoutStripe/js/load-stripe.js"></script>
232 233<link rel="canonical" href="https://fera.pl/blog" /> 234<link rel="next" href="https://fera.pl/blog?page=2" /> 235<link rel="icon" type="image/x-icon" href="https://media.fera.pl/favicon/stores/1/favicon-fera.png" /> 236<link rel="shortcut icon" type="image/x-icon" href="https://media.fera.pl/favicon/stores/1/favicon-fera.png" /> 237<meta name="google-site-verification" content="c4qx6WUqrAllRtAtSIZbdlg6mqEn3DK2Q1SgaSUPVUY" />
237<script> 238 (() => { 239 const loadWebfonts = () => { 240 const link = document.createElement('link'); 241 link.rel = 'stylesheet'; 242 link.href = 'https\u003A\u002F\u002Fstatic.fera.pl\u002Fversion1790219430\u002Ffrontend\u002FTooks\u002Fdefault\u002Fpl_PL\u002Fcss\u002Fwebfonts.css'; 243 document.head.appendChild(link); 244 }; 245 246 if (document.readyState === 'loading') { 247 document.addEventListener('DOMContentLoaded', () => requestAnimationFrame(loadWebfonts)); 248 } else { 249 requestAnimationFrame(loadWebfonts); 250 } 251 })(); 252</script>
252 253<noscript><link rel="stylesheet" type="text/css" media="all" href="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/css/webfonts.css"></noscript>
254<script type="text/javascript">window.amga4PageType = 'other';</script>
vendor: 1 bytes, line 254
254
255<script type="text/javascript">window.dataLayer = window.dataLayer || []; 256window.getAmGa4Cookie = function () { 257 let cookies = {}; 258 document.cookie.split(';').forEach(function (el) { 259 let [key, value] = el.split('='); 260 cookies[key.trim()] = value; 261 }); 262 263 return cookies['amga4_customer'] 264 ? decodeURIComponent(cookies['amga4_customer']) 265 : '{}'; 266}; 267 268(function () { 269 /** 270 * @var {[Object]} 271 */ 272 const userProperties = JSON.parse(window.getAmGa4Cookie()); 273 274 if (userProperties.customerGroup) { 275 window.dataLayer.push({'customerGroup': userProperties.customerGroup}); 276 } 277 if (userProperties.customerId) { 278 window.dataLayer.push({'customerId': userProperties.customerId}); 279 } 280 /** 281 * @var {[Object]} 282 */ 283 const dataToPush = JSON.parse('[]'); 284 285 dataToPush.forEach((dataObject) => { 286 window.dataLayer.push(dataObject); 287 }); 288})(); 289</script>
289 290<!-- Google Tag Manager -->
291<script> 292 // Use window property instead of let to survive duplicate template renders (SyntaxError-safe) 293 window.dataLayer = window.dataLayer || []; 294 window.amGtmLoaded = window.amGtmLoaded || false; 295 function callAmGA4GTM () { 296 if (window.amGtmLoaded) return; 297 window.amGtmLoaded = true; 298 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 299 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 300 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 301 'https://www.googletagmanager.com/gtm.js?id='+i+dl;var n=d.querySelector('[nonce]'); 302 n&&j.setAttribute('nonce',n.nonce||n.getAttribute('nonce'));f.parentNode.insertBefore(j,f); 303 })(window,document,'script','dataLayer', 'GTM\u002DWVCP8K59'); 304 } 305 306 // Both consent modes route through here so the container never lands in the critical path: 307 // gtm.js pulls gtag.js and analytics.js after it, ~340 KB that otherwise competes with the 308 // hero image for bandwidth and pushes LCP out. Arming is idempotent â the consent branch may 309 // call it from several triggers. 310 window.armAmGA4GTM = window.armAmGA4GTM || (function () { 311 const events = ['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown', 'click']; 312 let armed = false; 313 let idleCallbackId; 314 let timeoutId; 315 316 function clearFallback() { 317 if (idleCallbackId !== undefined && 'cancelIdleCallback' in window) { 318 window.cancelIdleCallback(idleCallbackId); 319 } 320 if (timeoutId !== undefined) { 321 window.clearTimeout(timeoutId); 322 } 323 } 324 325 function loadGTM() { 326 events.forEach(type => window.removeEventListener(type, loadGTM)); 327 window.removeEventListener('load', scheduleFallback); 328 clearFallback(); 329 callAmGA4GTM(); 330 } 331 332 function scheduleFallback() { 333 if (window.amGtmLoaded) { 334 return; 335 } 336 if ('requestIdleCallback' in window) { 337 idleCallbackId = window.requestIdleCallback(loadGTM, {timeout: 4000}); 338 } else { 339 timeoutId = window.setTimeout(loadGTM, 2000); 340 } 341 } 342 343 return function arm() { 344 if (armed || window.amGtmLoaded) { 345 return; 346 } 347 armed = true; 348 events.forEach(type => window.addEventListener(type, loadGTM, {once: true, passive: true})); 349 if (document.readyState === 'complete') { 350 scheduleFallback(); 351 } else { 352 window.addEventListener('load', scheduleFallback, {once: true}); 353 } 354 }; 355 })(); 356</script>
356 357<!-- End Google Tag Manager --> 358
358<script> 359 window.armAmGA4GTM(); 360 </script>
360 361
361<script type="text/javascript"> window.amMicrosoftConsentManager = window.amMicrosoftConsentManager || { 362 microsoftPixels: [], 363 consentStates: { 364 denied: 'denied', 365 granted: 'granted' 366 }, 367 storageName: 'amMicrosoftConsentMode', 368 gdprCookie: { 369 cookieGroupName: 'amcookie_allowed', 370 allCookiesAllowed: '0' 371 }, 372 defaultConsentTypesData: {"ad_storage":{"default":"0","group":"1"}}, 373 currentStoreId: 1, 374 init: function () { 375 this.microsoftPixels = window.amPixelManager?.getActivePixels('bing') ?? []; 376 this.initStorage(); 377 this.setDefaultConsent(); 378 }, 379 initStorage: function () { 380 const persistedConsentTypes = this.getPersistedConsentTypeState(); 381 382 if (Object.keys(persistedConsentTypes).length !== 0 && !this.shouldResetConsentState(persistedConsentTypes)) { 383 return; 384 } 385 386 let consentState = {}; 387 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 388 consentState[type] = { 389 group: data.group, 390 status: data.default === '1' ? this.consentStates.granted : this.consentStates.denied 391 }; 392 } 393 394 this.resetAllowedCookiesGroups(); 395 this.persistConsentTypeState(consentState); 396 }, 397 setDefaultConsent: function () { 398 this.microsoftPixels.forEach(pixel => { 399 window[pixel.globalEventVariable]?.push('consent', 'default', this.getPersistedConsentTypeStateForUETtag()); 400 }); 401 }, 402 updateConsent: function (consent) { 403 const storageConsent = this.getPersistedConsentTypeState(); 404 const consentState = {...storageConsent, ...consent}; 405 406 this.persistConsentTypeState(consentState); 407 408 this.microsoftPixels.forEach(pixel => { 409 window[pixel.globalEventVariable]?.push('consent', 'default', this.getPersistedConsentTypeStateForUETtag()); 410 }); 411 }, 412 getConsentTypeStateByGroupIds: function (groups) { 413 let consentTypeState = {}; 414 415 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 416 consentTypeState[type] = { 417 group: data.group, 418 status: (groups.includes(data.group) || groups.includes(this.gdprCookie.allCookiesAllowed)) 419 ? this.consentStates.granted 420 : this.consentStates.denied 421 } 422 } 423 424 return consentTypeState; 425 }, 426 persistConsentTypeState: function (consentTypeState) { 427 let persistedState = this.getPersistedConsentTypeState(false); 428 persistedState[this.currentStoreId] = consentTypeState; 429 localStorage.setItem(this.storageName, JSON.stringify(persistedState)); 430 }, 431 getPersistedConsentTypeState: function (forCurrentStore = true) { 432 let persistedStates = JSON.parse(localStorage.getItem(this.storageName)) ?? {}; 433 434 if (forCurrentStore) { 435 return persistedStates?.[this.currentStoreId] ?? {}; 436 } 437 438 return persistedStates; 439 }, 440 getPersistedConsentTypeStateForUETtag: function () { 441 let consentTypeState = {}; 442 let persistedState = this.getPersistedConsentTypeState(); 443 444 for (const [type, data] of Object.entries(persistedState)) { 445 consentTypeState[type] = data.status; 446 } 447 448 return consentTypeState; 449 }, 450 shouldResetConsentState: function (persistedConsentTypes) { 451 if (Object.keys(persistedConsentTypes).length != Object.keys(this.defaultConsentTypesData).length 452 || !document.cookie.includes(this.gdprCookie.cookieGroupName) 453 ) { 454 return true; 455 } 456 457 for (const [type, data] of Object.entries(persistedConsentTypes)) { 458 if (data.group !== this.defaultConsentTypesData[type].group) { 459 return true; 460 } 461 } 462 463 return false;
464 }, 465 resetAllowedCookiesGroups: function () { 466 document.cookie = this.gdprCookie.cookieGroupName + '=0;max-age=-1;domain=' + location.hostname; 467 } 468 }; 469 470 window.addEventListener('am-pixel-bing-init', () => { 471 window.amMicrosoftConsentManager?.init(); 472 });</script>
472<script> 473 (function(w,d,s,i,dl){w._ceneo = w._ceneo || function () { 474 w._ceneo.e = w._ceneo.e || []; w._ceneo.e.push(arguments); }; 475 w._ceneo.e = w._ceneo.e || [];dl=dl===undefined?"dataLayer":dl; 476 const f = d.getElementsByTagName(s)[0], j = d.createElement(s); j.defer = true; 477 j.src = "https://ssl.ceneo.pl/ct/v5/script.js?accountGuid=" + i + "&t=" + Date.now() + (dl ? "&dl=" + dl : ''); 478 f.parentNode.insertBefore(j, f); 479 })(window, document, "script", "efb91ff1-0cf9-4616-af52-3bfcbd45f3d7"); 480</script>
480 481
481<script>(function () { 482 'use strict'; 483 484 const consentConfig = {"cookieRestrictionEnabled":"0","cookieRestrictionName":"user_allowed_save_cookie"}; 485 const trackerConfig = {"beaconUrl":"https:\/\/fera.pl\/elasticsuite\/tracker\/hit\/image\/h.png","telemetryUrl":"https:\/\/t.elasticsuite.io\/track","telemetryEnabled":false,"sessionConfig":{"visit_cookie_name":"STUID","visit_cookie_lifetime":"3600","visitor_cookie_lifetime":"365","visitor_cookie_name":"STVID","domain":"fera.pl","path":"\/"},"endpointUrl":"https:\/\/fera.pl\/rest\/V1\/elasticsuite-tracker\/hit"}; 486 const storeId = '1'; 487 // amasty-cookie-group-updated: Amasty fetches the cookie groups asynchronously, so on every 488 // page after the one where consent was given the first check sees no group data and fails 489 // closed. Without re-checking when the groups arrive the tracker only ever sent hits on the 490 // page the visitor clicked "accept" on (FERA-2778). Same event list as the Synerise gate. 491 const consentEvents = [ 492 'user-allowed-save-cookie', 493 'cookiebar-action-accept-finish', 494 'cookiebar-action-allow-finish', 495 'amasty-cookie-group-updated' 496 ]; 497 498 const state = (function initState() { 499 if (!window.__tooksEsTrackerState || typeof window.__tooksEsTrackerState !== 'object') { 500 window.__tooksEsTrackerState = { 501 initialized: false, 502 listenersBound: false, 503 consentHandler: null, 504 bindingAttempts: 0 505 }; 506 } 507 return window.__tooksEsTrackerState; 508 }()); 509 510 function hasTrackerApi(candidate) { 511 try { 512 return !!candidate 513 && typeof candidate.setConfig === 'function' 514 && typeof candidate.addPageVar === 'function' 515 && typeof candidate.addCustomerVar === 'function' 516 && typeof candidate.addSessionVar === 'function' 517 && typeof candidate.sendTag === 'function'; 518 } catch (error) { 519 return false; 520 } 521 } 522 523 function createQueueingTrackerStub() { 524 return { 525 __queue: [], 526 addPageVar: function (name, value) { 527 this.__queue.push({ method: 'addPageVar', args: [name, value] }); 528 return this; 529 }, 530 addCustomerVar: function (name, value) { 531 this.__queue.push({ method: 'addCustomerVar', args: [name, value] }); 532 return this; 533 }, 534 addSessionVar: function (name, value) { 535 this.__queue.push({ method: 'addSessionVar', args: [name, value] }); 536 return this; 537 }, 538 setConfig: function (config) { 539 this.__queue.push({ method: 'setConfig', args: [config] }); 540 return this; 541 }, 542 sendTag: function (forceCollect) { 543 const args = typeof forceCollect === 'undefined' ? [] : [forceCollect]; 544 this.__queue.push({ method: 'sendTag', args: args }); 545 return this; 546 } 547 }; 548 } 549 550 // Defensive JSON-based deep clone for queued command structures with strict manual sanitization fallback and DoS limits 551 function deepCloneQueue(queue) { 552 if (!Array.isArray(queue)) { 553 return []; 554 } 555 556 const allowedMethods = ['addPageVar', 'addCustomerVar', 'addSessionVar', 'setConfig', 'sendTag']; 557 const maxDepth = 5; 558 const maxQueueLength = 500; 559 560 function sanitizeValue(val, depth) { 561 const currentDepth = depth || 0; 562 if (currentDepth > maxDepth) { 563 return undefined; 564 } 565 566 try { 567 if (val === null) { 568 return null; 569 } 570 571 const type = typeof val; 572 if (type !== 'object') { 573 if (type === 'string' || type === 'boolean') { 574 return val; 575 } 576 if (type === 'number') { 577 return Number.isFinite(val) ? val : undefined; 578 } 579 return undefined; 580 } 581 582 if (Array.isArray(val)) { 583 const out = []; 584 for (let i = 0; i < val.length; i += 1) {
585 const sanitized = sanitizeValue(val[i], currentDepth + 1); 586 if (typeof sanitized !== 'undefined') { 587 out.push(sanitized); 588 } 589 } 590 return out; 591 } 592 593 let proto; 594 try { 595 proto = Object.getPrototypeOf(val); 596 } catch (protoError) { 597 return undefined; 598 } 599 600 if (proto !== Object.prototype && proto !== null) { 601 return undefined; 602 } 603 604 const cleanObj = {}; 605 let keys; 606 try { 607 keys = Object.keys(val); 608 } catch (keysError) { 609 return undefined; 610 } 611 612 keys.forEach(function (key) { 613 let sanitizedProp; 614 try { 615 sanitizedProp = sanitizeValue(val[key], currentDepth + 1); 616 } catch (propError) { 617 sanitizedProp = undefined; 618 } 619 if (typeof sanitizedProp !== 'undefined') { 620 cleanObj[key] = sanitizedProp; 621 } 622 }); 623 return cleanObj; 624 } catch (error) { 625 return undefined; 626 } 627 } 628 629 let rawClone = []; 630 const input = queue.slice(0, maxQueueLength); 631 try { 632 rawClone = JSON.parse(JSON.stringify(input)); 633 } catch (e) { 634 rawClone = input; 635 } 636 637 const sanitized = []; 638 try { 639 rawClone.forEach(function (cmd) { 640 try { 641 if (!cmd || typeof cmd !== 'object' || typeof cmd.method !== 'string') { 642 return; 643 } 644 if (allowedMethods.indexOf(cmd.method) === -1) { 645 return; 646 } 647 648 const safeArgs = Array.isArray(cmd.args) 649 ? cmd.args.map(function (arg) { return sanitizeValue(arg, 0); }) 650 : []; 651 652 if (cmd.method === 'addPageVar' || cmd.method === 'addCustomerVar' || cmd.method === 'addSessionVar') { 653 if (typeof safeArgs[0] !== 'string' || safeArgs[0].length === 0) { 654 return; 655 } 656 } 657 658 if (cmd.method === 'setConfig' && (safeArgs.length === 0 || typeof safeArgs[0] !== 'object' || safeArgs[0] === null || Array.isArray(safeArgs[0]))) { 659 return; 660 } 661 662 if (cmd.method === 'sendTag' && safeArgs.length > 0 && typeof safeArgs[0] !== 'boolean' && safeArgs[0] !== null) { 663 return; 664 } 665 666 sanitized.push({ 667 method: cmd.method, 668 args: safeArgs 669 }); 670 } catch (cmdError) { 671 console.warn('Skipping toxic command in queue:', cmdError); 672 } 673 }); 674 } catch (queueError) { 675 console.warn('Failed to sanitize queue, falling back to empty queue:', queueError); 676 } 677 678 return sanitized; 679 } 680 681 // In-place upgrade of any existing tracker stub to preserve original object reference and other custom properties 682 function ensureTrackerAvailable() { 683 const existingTracker = window.smileTracker; 684 685 if (hasTrackerApi(existingTracker)) { 686 return existingTracker; 687 } 688 689 if (existingTracker && typeof existingTracker === 'object') { 690 try { 691 if (Object.isExtensible(existingTracker)) { 692 const cleanStub = createQueueingTrackerStub(); 693 694 // Sanitize and deep clone the existing queue in-place to prevent toxic property propagation 695 existingTracker.__queue = deepCloneQueue(existingTracker.__queue); 696 697 existingTracker.addPageVar = cleanStub.addPageVar; 698 existingTracker.addCustomerVar = cleanStub.addCustomerVar; 699 existingTracker.addSessionVar = cleanStub.addSessionVar; 700 existingTracker.setConfig = cleanStub.setConfig; 701 existingTracker.sendTag = cleanStub.sendTag; 702 703 return existingTracker; 704 } 705 } catch (e) { 706 console.warn('ElasticSuite in-place stub upgrade failed, executing fallback:', e); 707 } 708 709 // Fallback replacement when the object is non-extensible (frozen/sealed) or upgrade fails. 710 // Wrap queue copy in nested try-catch to protect against "toxic" getters throwing on access. 711 const replacement = createQueueingTrackerStub(); 712 try { 713 if (Array.isArray(existingTracker.__queue)) { 714 replacement.__queue = deepCloneQueue(existingTracker.__queue); 715 } 716 } catch (fallbackError) { 717 console.warn('Failed to extract and clone queue from existing tracker during fallback:', fallbackError); 718 } 719 window.smileTracker = replacement; 720 return replacement; 721 } 722 723 window.smileTracker = createQueueingTrackerStub(); 724 return window.smileTracker; 725 } 726 727 function removeConsentListeners() { 728 if (!state.consentHandler) { 729 state.listenersBound = false;
730 return; 731 } 732 733 consentEvents.forEach(function (eventName) { 734 window.removeEventListener(eventName, state.consentHandler); 735 }); 736 737 state.consentHandler = null; 738 state.listenersBound = false; 739 } 740 741 // A cookie decision on record: amcookie_allowed is written only by Amasty's 742 // accept/allow controllers, unlike amcookie_policy_restriction, which the cookiebar 743 // writes during its own initialisation. 744 function hasAmastyConsentDecision() { 745 try { 746 return typeof window.hyva !== 'undefined' 747 && window.hyva 748 && typeof window.hyva.getCookie === 'function' 749 && !!window.hyva.getCookie('amcookie_allowed'); 750 } catch (error) { 751 return false; 752 } 753 } 754 755 // Whether the cookie is declared in a NON-essential group of the admin cookie-group grid. 756 // 757 // `isCookieAllowed()` waves through any cookie the grid does not declare, so asking it 758 // alone is fail-open: STUID/STVID are undeclared, so it answers true even after the 759 // visitor refused everything. Essential groups are skipped because a cookie declared 760 // there is allowed unconditionally, which would reopen the same hole. 761 // 762 // Mirrors `isSyneriseCookieDeclared()` in 763 // Tooks\Synerise\Plugin\Synerise\Integration\Block\Tracking\CodePlugin. Kept as a local 764 // copy rather than a shared asset: the two are emitted by different mechanisms (PHP 765 // heredoc vs theme template) and neither is guaranteed to load before the other. 766 function isEsTrackerCookieDeclared(cookieGroups, cookieName) { 767 return (cookieGroups.groupData || []).some(function (group) { 768 if (group.isEssential) { 769 return false; 770 } 771 772 return (group.cookies || []).some(function (cookie) { 773 const wildcard = String(cookie.name).match(/^\{(.*)\}$/); 774 775 return wildcard 776 ? new RegExp(cookieGroups.getCookiePattern(wildcard[1])).test(cookieName) 777 : cookie.name === cookieName; 778 }); 779 }); 780 } 781 782 // Checking of GDPR cookies supporting standard Magento notice + Amasty GDPR module 783 function userConsentEsTracking() { 784 if (!hasAmastyConsentDecision()) { 785 return false; 786 } 787 788 try { 789 if ( 790 typeof window.amastyCookieManager !== 'undefined' 791 && window.amastyCookieManager 792 && typeof window.amastyCookieManager.isCookieAllowed === 'function' 793 ) { 794 const sessionConf = (trackerConfig && trackerConfig.sessionConfig) || {}; 795 const visitCookie = sessionConf.visit_cookie_name || 'STUID'; 796 const visitorCookie = sessionConf.visitor_cookie_name || 'STVID'; 797 798 const cookieGroups = typeof window.amastyCookieManager.getAmastyCookieGroupStorage === 'function' 799 ? window.amastyCookieManager.getAmastyCookieGroupStorage() 800 : null; 801 802 // No grid to check against means no way to tell consent from silence, so stay closed. 803 if (!cookieGroups 804 || typeof cookieGroups.hasGroupData !== 'function' 805 || !cookieGroups.hasGroupData() 806 ) { 807 return false; 808 } 809 810 return isEsTrackerCookieDeclared(cookieGroups, visitCookie) 811 && window.amastyCookieManager.isCookieAllowed(visitCookie) === true 812 && isEsTrackerCookieDeclared(cookieGroups, visitorCookie) 813 && window.amastyCookieManager.isCookieAllowed(visitorCookie) === true; 814 } 815 } catch (error) { 816 console.warn('Amasty GDPR check failed, falling back to cookie checks.', error); 817 } 818 819 const hasHyvaCookieGetter = typeof window.hyva !== 'undefined' 820 && window.hyva 821 && typeof window.hyva.getCookie === 'function'; 822 823 const safeConsentConfig = (consentConfig && typeof consentConfig === 'object') ? consentConfig : {}; 824 825 if (safeConsentConfig.cookieRestrictionEnabled === false) { 826 return true; 827 } 828 829 if (!hasHyvaCookieGetter) { 830 return false;
831 } 832 833 if ( 834 typeof safeConsentConfig.cookieRestrictionName !== 'string' 835 || safeConsentConfig.cookieRestrictionName.length === 0 836 ) { 837 return false; 838 } 839 840 return window.hyva.getCookie(safeConsentConfig.cookieRestrictionName) !== null; 841 } 842 843 function bindConsentListeners() { 844 if (state.listenersBound || state.initialized) { 845 return; 846 } 847 848 if (!state.consentHandler) { 849 state.consentHandler = function () { 850 initEsTracker(); 851 }; 852 } 853 854 const boundEvents = []; 855 856 try { 857 consentEvents.forEach(function (eventName) { 858 window.addEventListener(eventName, state.consentHandler, { passive: true }); 859 boundEvents.push(eventName); 860 }); 861 state.listenersBound = true; 862 state.bindingAttempts = 0; // reset attempts on success 863 } catch (error) { 864 boundEvents.forEach(function (eventName) { 865 window.removeEventListener(eventName, state.consentHandler); 866 }); 867 state.consentHandler = null; 868 state.listenersBound = false; 869 console.warn('ElasticSuite consent listener binding failed, rollback executed.', error); 870 871 // Fail-safe poll fallback up to 3 times to prevent infinite loops 872 state.bindingAttempts = (state.bindingAttempts || 0) + 1; 873 if (state.bindingAttempts <= 3) { 874 setTimeout(initEsTracker, 1000); 875 } else { 876 console.error('ElasticSuite listener binding failed persistently. Tracking disabled.'); 877 } 878 } 879 } 880 881 // Initialize the tracker or bind listeners to wait for dynamic consent 882 function initEsTracker() { 883 if (state.initialized) { 884 removeConsentListeners(); 885 return; 886 } 887 888 const tracker = ensureTrackerAvailable(); 889 890 if (!userConsentEsTracking()) { 891 bindConsentListeners(); 892 return; 893 } 894 895 if (!hasTrackerApi(tracker)) { 896 console.error('ElasticSuite tracker API is not available.'); 897 return; 898 } 899 900 try { 901 tracker.setConfig(trackerConfig); 902 tracker.addPageVar('store_id', storeId); 903 tracker.sendTag(); 904 905 state.initialized = true; 906 removeConsentListeners(); 907 } catch (error) { 908 console.error('ElasticSuite tracker initialization failed.', error); 909 } 910 } 911 912 ensureTrackerAvailable(); 913 914 if (document.readyState !== 'loading') { 915 initEsTracker(); 916 } else { 917 document.addEventListener('DOMContentLoaded', initEsTracker, { once: true }); 918 } 919}());</script>
919<script> 920 var BASE_URL = 'https://fera.pl/'; 921 var THEME_PATH = 'https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL'; 922 var COOKIE_CONFIG = { 923 "expires": null, 924 "path": "\u002F", 925 "domain": ".fera.pl", 926 "secure": true, 927 "lifetime": "3600", 928 "cookie_restriction_enabled": false }; 929 var CURRENT_STORE_CODE = 'PL_pl'; 930 var CURRENT_WEBSITE_ID = '1'; 931 932 window.hyva = window.hyva || {} 933 934 window.cookie_consent_groups = window.cookie_consent_groups || {} 935 window.cookie_consent_groups['necessary'] = true; 936 937 window.cookie_consent_config = window.cookie_consent_config || {}; 938 window.cookie_consent_config['necessary'] = [].concat( 939 window.cookie_consent_config['necessary'] || [], 940 [ 941 'user_allowed_save_cookie', 942 'form_key', 943 'mage-messages', 944 'private_content_version', 945 'mage-cache-sessid', 946 'last_visited_store', 947 'section_data_ids' 948 ] 949 ); 950</script>
vendor: 1 bytes, line 950
950
951<script> 952 'use strict'; 953 (function( hyva, undefined ) { 954 955 function lifetimeToExpires(options, defaults) { 956 957 const lifetime = options.lifetime || defaults.lifetime; 958 959 if (lifetime) { 960 const date = new Date; 961 date.setTime(date.getTime() + lifetime * 1000); 962 return date; 963 } 964 965 return null; 966 } 967 968 function generateRandomString() { 969 970 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 971 length = 16; 972 973 let formKey = '', 974 charactersLength = allowedCharacters.length; 975 976 for (let i = 0; i < length; i++) { 977 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 978 } 979 980 return formKey; 981 } 982 983 const sessionCookieMarker = {noLifetime: true} 984 985 const cookieTempStorage = {}; 986 987 const internalCookie = { 988 get(name) { 989 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 990 return v ? v[2] : null; 991 }, 992 set(name, value, days, skipSetDomain) { 993 let expires, 994 path, 995 domain, 996 secure, 997 samesite; 998 999 const defaultCookieConfig = { 1000 expires: null, 1001 path: '/', 1002 domain: null, 1003 secure: false, 1004 lifetime: null, 1005 samesite: 'lax' 1006 }; 1007 1008 const cookieConfig = window.COOKIE_CONFIG || {}; 1009 1010 expires = days && days !== sessionCookieMarker 1011 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 1012 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 1013 1014 path = cookieConfig.path || defaultCookieConfig.path; 1015 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 1016 secure = cookieConfig.secure || defaultCookieConfig.secure; 1017 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 1018 1019 document.cookie = name + "=" + encodeURIComponent(value) + 1020 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 1021 (path ? '; path=' + path : '') + 1022 (domain ? '; domain=' + domain : '') + 1023 (secure ? '; secure' : '') + 1024 (samesite ? '; samesite=' + samesite : 'lax'); 1025 }, 1026 isWebsiteAllowedToSaveCookie() { 1027 const allowedCookies = this.get('user_allowed_save_cookie'); 1028 if (allowedCookies) { 1029 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 1030 1031 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 1032 } 1033 return false; 1034 }, 1035 getGroupByCookieName(name) { 1036 const cookieConsentConfig = window.cookie_consent_config || {}; 1037 let group = null; 1038 for (let prop in cookieConsentConfig) { 1039 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 1040 if (cookieConsentConfig[prop].includes(name)) { 1041 group = prop; 1042 break; 1043 } 1044 } 1045 return group; 1046 }, 1047 isCookieAllowed(name) { 1048 const cookieGroup = this.getGroupByCookieName(name); 1049 return cookieGroup 1050 ? window.cookie_consent_groups[cookieGroup] 1051 : this.isWebsiteAllowedToSaveCookie(); 1052 }, 1053 saveTempStorageCookies() { 1054 for (const [name, data] of Object.entries(cookieTempStorage)) { 1055 if (this.isCookieAllowed(name)) { 1056 this.set(name, data['value'], data['days'], data['skipSetDomain']); 1057 delete cookieTempStorage[name]; 1058 } 1059 } 1060 } 1061 }; 1062 1063 hyva.getCookie = (name) => { 1064 const cookieConfig = window.COOKIE_CONFIG || {}; 1065 1066 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 1067 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 1068 } 1069 1070 return internalCookie.get(name); 1071 } 1072 1073 hyva.setCookie = (name, value, days, skipSetDomain) => { 1074 const cookieConfig = window.COOKIE_CONFIG || {}; 1075 1076 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 1077 cookieTempStorage[name] = {value, days, skipSetDomain}; 1078 return; 1079 } 1080 return internalCookie.set(name, value, days, skipSetDomain); 1081 } 1082 1083 1084 hyva.setSessionCookie = (name, value, skipSetDomain) => { 1085 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 1086 } 1087 1088 hyva.getBrowserStorage = () => { 1089 const browserStorage = window.localStorage || window.sessionStorage; 1090 if (!browserStorage) { 1091 console.warn('Browser Storage is unavailable'); 1092 return false;
1093 } 1094 try { 1095 browserStorage.setItem('storage_test', '1'); 1096 browserStorage.removeItem('storage_test'); 1097 } catch (error) { 1098 console.warn('Browser Storage is not accessible', error); 1099 return false; 1100 } 1101 return browserStorage; 1102 } 1103 1104 hyva.postForm = (postParams) => { 1105 const form = document.createElement("form"); 1106 1107 let data = postParams.data; 1108 1109 if (! postParams.skipUenc && ! data.uenc) { 1110 data.uenc = btoa(window.location.href); 1111 } 1112 form.method = "POST"; 1113 form.action = postParams.action; 1114 1115 Object.keys(postParams.data).map(key => { 1116 const field = document.createElement("input"); 1117 field.type = 'hidden' 1118 field.value = postParams.data[key]; 1119 field.name = key; 1120 form.appendChild(field); 1121 }); 1122 1123 const form_key = document.createElement("input"); 1124 form_key.type = 'hidden'; 1125 form_key.value = hyva.getFormKey(); 1126 form_key.name="form_key"; 1127 form.appendChild(form_key); 1128 1129 document.body.appendChild(form); 1130 1131 form.submit(); 1132 } 1133 1134 hyva.getFormKey = function () { 1135 let formKey = hyva.getCookie('form_key'); 1136 1137 if (!formKey) { 1138 formKey = generateRandomString(); 1139 hyva.setCookie('form_key', formKey); 1140 } 1141 1142 return formKey; 1143 } 1144 1145 hyva.formatPrice = (value, showSign, options = {}) => { 1146 const groupSeparator = options.groupSeparator; 1147 const decimalSeparator = options.decimalSeparator 1148 delete options.groupSeparator; 1149 delete options.decimalSeparator; 1150 const formatter = new Intl.NumberFormat( 1151 'pl\u002DPL', 1152 Object.assign({ 1153 style: 'currency', 1154 currency: 'PLN', 1155 signDisplay: showSign ? 'always' : 'auto' 1156 }, options) 1157 ); 1158 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 1159 formatter.formatToParts(value).map(({type, value}) => { 1160 switch (type) { 1161 case 'currency': 1162 return 'z\u0142' || value; 1163 case 'minusSign': 1164 return '- '; 1165 case 'plusSign': 1166 return '+ '; 1167 case 'group': 1168 return groupSeparator !== undefined ? groupSeparator : value; 1169 case 'decimal': 1170 return decimalSeparator !== undefined ? decimalSeparator : value; 1171 default : 1172 return value; 1173 } 1174 }).reduce((string, part) => string + part) : 1175 formatter.format(value); 1176 } 1177 1178 const formatStr = function (str, nStart) { 1179 const args = Array.from(arguments).slice(2); 1180 1181 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 1182 const idx = parseInt(n) - nStart; 1183 1184 if (args[idx] === null || args[idx] === void 0) { 1185 return m; 1186 } 1187 return p.length % 2 1188 ? p.slice(0, -1).replace('%%', '%') + args[idx] 1189 : p.replace('%%', '%') + n; 1190 }) 1191 } 1192 1193 hyva.str = function (string) { 1194 const args = Array.from(arguments); 1195 args.splice(1, 0, 1); 1196 1197 return formatStr.apply(undefined, args); 1198 } 1199 1200 hyva.strf = function () { 1201 const args = Array.from(arguments); 1202 args.splice(1, 0, 0); 1203 1204 return formatStr.apply(undefined, args); 1205 } 1206 1207 /** 1208 * Take a html string as `content` parameter and 1209 * extract an element from the DOM to replace in 1210 * the current page under the same selector, 1211 * defined by `targetSelector` 1212 */ 1213 hyva.replaceDomElement = (targetSelector, content) => { 1214 // Parse the content and extract the DOM node using the `targetSelector` 1215 const parser = new DOMParser(); 1216 const doc = parser.parseFromString(content, 'text/html');
1217 const contentNode = doc.querySelector(targetSelector); 1218 1219 // Bail if content or target can't be found 1220 if (!contentNode || !document.querySelector(targetSelector)) { 1221 return; 1222 } 1223 1224 hyva.activateScripts(contentNode); 1225 1226 // Replace the old DOM node with the new content 1227 document.querySelector(targetSelector).replaceWith(contentNode); 1228 1229 // Reload customerSectionData and display cookie-messages if present 1230 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 1231 hyva.initMessages(); 1232 } 1233 1234 hyva.removeScripts = (contentNode) => { 1235 const scripts = contentNode.getElementsByTagName('script'); 1236 for (let i = 0; i < scripts.length; i++) { 1237 scripts[i].parentNode.removeChild(scripts[i]); 1238 } 1239 const templates = contentNode.getElementsByTagName('template'); 1240 for (let i = 0; i < templates.length; i++) { 1241 const container = document.createElement('div'); 1242 container.innerHTML = templates[i].innerHTML; 1243 hyva.removeScripts(container); 1244 templates[i].innerHTML = container.innerHTML; 1245 } 1246 } 1247 1248 hyva.activateScripts = (contentNode) => { 1249 // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM. 1250 const scripts = Array.from(contentNode.getElementsByTagName('script')); 1251 1252 // Iterate over all script tags to duplicate+inject each into the head 1253 for (const original of scripts) { 1254 const script = document.createElement('script'); 1255 original.type && (script.type = original.type); 1256 script.innerHTML = original.innerHTML; 1257 1258 // Remove the original (non-executing) script from the contentNode 1259 original.parentNode.removeChild(original) 1260 1261 // Add script to head 1262 document.head.appendChild(script); 1263 } 1264 1265 return contentNode; 1266 } 1267 1268 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 1269 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 1270 1271 let currentTrap; 1272 1273 const focusableElements = (rootElement) => { 1274 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 1275 return Array.from(rootElement.querySelectorAll(selector)) 1276 .filter(el => { 1277 return el.style.display !== 'none' 1278 && !el.disabled 1279 && el.tabIndex !== -1 1280 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 1281 }) 1282 } 1283 1284 const focusTrap = (e) => { 1285 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 1286 if (!isTabPressed) return; 1287 1288 const focusable = focusableElements(currentTrap) 1289 const firstFocusableElement = focusable[0] 1290 const lastFocusableElement = focusable[focusable.length - 1] 1291 1292 e.shiftKey 1293 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 1294 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 1295 }; 1296 1297 hyva.releaseFocus = (rootElement) => { 1298 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 1299 currentTrap.removeEventListener('keydown', focusTrap) 1300 currentTrap = null 1301 } 1302 } 1303 hyva.trapFocus = (rootElement) => { 1304 if (!rootElement) return; 1305 hyva.releaseFocus() 1306 currentTrap = rootElement 1307 rootElement.addEventListener('keydown', focusTrap) 1308 const firstElement = focusableElements(rootElement)[0] 1309 firstElement && firstElement.focus() 1310 } 1311 1312 hyva.safeParseNumber = (rawValue) => { 1313 const number = rawValue ? parseFloat(rawValue) : null; 1314 1315 return Array.isArray(number) || isNaN(number) ? rawValue : number; 1316 } 1317 1318 const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(''); 1319 hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => { 1320 1321 const camelCase = toCamelCase(name);
1322 const key = '__hyva_bool_' + name 1323 1324 return new Proxy(Object.assign( 1325 additionalMethods, 1326 { 1327 [key]: !!value, 1328 [name]() {return !!this[key]}, 1329 ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine 1330 ['not' + camelCase]() {return !this[key]}, 1331 ['toggle' + camelCase]() {this[key] = !this[key]}, 1332 [`set${camelCase}True`]() {this[key] = true}, 1333 [`set${camelCase}False`]() {this[key] = false}, 1334 } 1335 ), { 1336 set(target, prop, value) { 1337 return prop === name 1338 ? (target[key] = !!value) 1339 : Reflect.set(...arguments); 1340 } 1341 }) 1342 } 1343 1344 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 1345 window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true}); 1346 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 1347 1348 }( window.hyva = window.hyva || {} )); 1349</script>
vendor: 1 bytes, line 1349
1349
1350<script> 1351 if (!window.IntersectionObserver) { 1352 window.IntersectionObserver = function (callback) { 1353 this.observe = el => el && callback(this.takeRecords()); 1354 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 1355 this.disconnect = () => {}; 1356 this.unobserve = () => {}; 1357 } 1358 } 1359</script>
1359 1360</head> 1361<body id="html-body" class="blog-page blog-page-list page-layout-1column blog-index-index page-layout-cms-full-width"> 1362<div class="flex md:hidden items-center gap-2 px-4 py-2 bg-primary text-brandSecondary-900"> 1363 <svg xmlns="http://www.w3.org/2000/svg" width="37" height="37" viewBox="0 0 38 38" fill="none" class="shrink-0" aria-hidden="true"> 1364 <rect width="37.79" height="37.79" rx="7.63847" fill="white"/> 1365 <path fill-rule="evenodd" clip-rule="evenodd" d="M20.3313 5.52805C20.6709 5.53924 21.1412 5.56907 21.3764 5.59889C21.6115 5.62872 21.9736 5.6921 22.1789 5.73312C22.3841 5.77786 22.7686 5.88971 23.0373 5.98665C23.3061 6.08358 23.6644 6.23645 23.8398 6.3222C24.0153 6.41168 24.2989 6.57946 24.4706 6.69504C24.646 6.81062 24.9334 7.03805 25.1163 7.2021C25.2992 7.36615 25.5568 7.6346 25.6874 7.79865C25.8218 7.9627 26.0121 8.24606 26.1167 8.43248C26.2174 8.61517 26.3443 8.8948 26.3966 9.04766C26.4489 9.20053 26.531 9.46151 26.5758 9.62556C26.6429 9.87909 26.6541 10.017 26.6541 10.5204C26.6504 11.1169 26.6504 11.1169 26.4974 11.583C26.4115 11.8402 26.2809 12.1571 26.2025 12.2876C26.1241 12.4181 25.9599 12.6344 25.8367 12.7686C25.7135 12.9028 25.5195 13.0818 25.4075 13.1675C25.2955 13.2533 25.1275 13.3614 25.0342 13.4099C24.9409 13.4546 24.7394 13.5441 24.5863 13.6038C24.4333 13.6597 24.1646 13.7343 23.9891 13.7641C23.8137 13.7976 23.5039 13.82 23.2986 13.82C23.0933 13.82 22.7686 13.7939 22.5782 13.7641C22.3543 13.7268 22.0855 13.6448 21.8019 13.5292C21.4771 13.3987 21.2942 13.2943 21.0815 13.1303C20.9247 13.0072 20.7082 12.7947 20.6 12.6642C20.4918 12.53 20.3462 12.3137 20.279 12.1795C20.2081 12.0453 20.111 11.8029 20.0625 11.6389C19.9916 11.3854 19.9767 11.2549 19.9767 10.7814C19.9767 10.3079 19.9879 10.1811 20.0588 9.96112C20.1036 9.81571 20.2043 9.59574 20.2827 9.46524C20.3611 9.33475 20.6075 9.02529 20.8277 8.77549C21.0927 8.47349 21.2756 8.23114 21.3614 8.05964C21.4771 7.82475 21.4883 7.76882 21.4883 7.50038C21.4883 7.29904 21.4659 7.15364 21.4211 7.05297C21.3838 6.97094 21.2868 6.85163 21.2084 6.79198C21.0852 6.69504 21.0255 6.68013 20.8015 6.66894C20.656 6.66149 20.4656 6.67267 20.3798 6.69504C20.2902 6.71741 20.0924 6.80689 19.9356 6.89265C19.7788 6.98213 19.5437 7.14618 19.4131 7.25803C19.2824 7.36988 19.0958 7.56376 19.0025 7.6868C18.9054 7.80983 18.7225 8.13048 18.5919 8.39519C18.4538 8.68601 18.3269 9.00665 18.2821 9.1968C18.241 9.37203 18.1888 9.66285 18.1627 9.84927C18.1291 10.1028 18.1291 10.3041 18.1627 10.6882C18.1888 10.9641 18.241 11.3593 18.2821 11.5643C18.3306 11.8104 18.4202 12.0751 18.5434 12.3473C18.6442 12.571 18.827 12.8879 18.9428 13.052C19.0585 13.2123 19.2488 13.4323 19.3608 13.5367C19.4765 13.641 19.6781 13.8051 19.8087 13.8983C19.9431 13.9915 20.2193 14.1556 20.7978 14.4538H21.3129C21.716 14.4538 21.8355 14.465 21.8802 14.5098C21.9288 14.5582 21.9362 14.9497 21.9362 17.5857C21.9362 20.2813 21.9288 20.6132 21.8765 20.6616C21.828 20.7064 21.6824 20.7175 20.2566 20.7175V26.422C20.2566 29.5576 20.2491 32.1525 20.2379 32.1824C20.223 32.2308 19.8012 32.2383 16.748 32.2383C14.0046 32.2383 13.2731 32.2271 13.2619 32.1898C13.2507 32.1675 13.3402 31.9363 13.4597 31.679C13.5754 31.4218 13.7583 31.0639 13.8628 30.8774C13.9673 30.691 14.1203 30.4673 14.1987 30.3741C14.2771 30.2809 14.404 30.1206 14.4749 30.0199C14.5458 29.9155 14.7175 29.6247 14.8519 29.3674C14.9863 29.1102 15.1878 28.659 15.3035 28.3608C15.4155 28.0625 15.5312 27.712 15.5574 27.5778C15.5835 27.4361 15.5947 27.2124 15.5798 27.0372C15.5686 26.8731 15.5275 26.6382 15.4864 26.5152C15.4454 26.3922 15.3409 26.0902 15.255 25.8441C15.0983 25.4041 15.0983 25.3855 15.0945 24.8934C15.0945 24.4683 15.1057 24.3565 15.1766 24.1738C15.2252 24.0433 15.2924 23.9352 15.3595 23.8904C15.4155 23.8531 15.6693 23.7562 15.9269 23.6816C16.1844 23.6071 16.4644 23.5213 16.5539 23.4915C16.6398 23.4617 16.7443 23.3945 16.7854 23.3349C16.8301 23.279 16.8787 23.1783 16.8973 23.1112C16.9197 23.0478 16.9944 22.9359 17.0653 22.8688C17.1549 22.7868 17.1922 22.716 17.1959 22.6377C17.1959 22.578 17.237 22.4587 17.2892 22.3767C17.3415 22.2909 17.3826 22.1679 17.3826 22.0859C17.3826 22.0113 17.3564 21.892 17.3228 21.8249C17.2855 21.7615 17.1698 21.6049 17.0578 21.4819C16.8861 21.288 16.8413 21.206 16.7256 20.848C16.651 20.6243 16.5502 20.3522 16.498 20.2515C16.4457 20.1471 16.3263 19.9756 16.2292 19.8637C16.1359 19.7519 15.9493 19.5692 15.8149 19.4574C15.6805 19.3492 15.5051 19.2187 15.423 19.1665C15.3409 19.1181 15.1393 19.0398 14.9751 18.9913C14.7474 18.9279 14.6653
136518.8832 14.6242 18.8161C14.5794 18.7303 14.5869 18.6707 14.7287 18.2083C14.8109 17.9287 14.8818 17.664 14.8818 17.623C14.8818 17.5782 14.8556 17.5484 14.8183 17.5484C14.781 17.5484 14.6541 17.6304 14.5384 17.7348C14.4189 17.8355 14.2995 17.9213 14.2771 17.9213C14.251 17.9213 14.2062 17.8802 14.1838 17.828C14.1577 17.7758 14.1129 17.7348 14.0905 17.7348C14.0644 17.7348 13.8927 17.8318 13.706 17.9548C13.5194 18.0778 13.1424 18.3575 12.8662 18.5812C12.5863 18.8012 12.228 19.0845 12.0637 19.2075C11.8995 19.3306 11.6867 19.5021 11.5897 19.5878C11.4926 19.6773 11.3993 19.7482 11.3844 19.7482C11.3657 19.7482 11.3321 19.7295 11.306 19.7034C11.2687 19.6661 11.2612 19.1143 11.2612 17.1085C11.2612 14.8453 11.2687 14.5582 11.3209 14.5098C11.3695 14.465 11.5113 14.4538 12.8289 14.4538V13.958C12.8289 13.6895 12.8476 13.2235 12.8662 12.9252C12.8886 12.6269 12.9185 12.2914 12.9409 12.1795C12.9595 12.0677 13.0118 11.7321 13.0528 11.4338C13.0902 11.1356 13.1685 10.7329 13.2171 10.539C13.2693 10.3451 13.3776 9.9984 13.4634 9.7747C13.5493 9.54727 13.6874 9.23035 13.7695 9.0663C13.8516 8.90225 14.0196 8.61517 14.1427 8.43248C14.2696 8.24606 14.4451 8.00371 14.5384 7.89186C14.6354 7.78001 14.8295 7.57122 14.9751 7.42954C15.1169 7.28786 15.3446 7.08652 15.479 6.9784C15.6133 6.87028 15.841 6.70996 15.9829 6.61675C16.1247 6.52354 16.386 6.3744 16.5614 6.28865C16.7368 6.19917 17.0541 6.06494 17.2706 5.98292C17.4871 5.90089 17.8305 5.7965 18.0358 5.74803C18.241 5.69583 18.618 5.62872 18.8756 5.59889C19.1331 5.56907 19.428 5.53551 19.5288 5.52805C19.6333 5.5206 19.9916 5.5206 20.3313 5.52805Z" fill="#FF7D23"/> 1366</svg> 1367 <span class="font-medium text-sm">Pobierz aplikacjÄ i skorzystaj ze zniżek</span> 1368 <a 1369 href="https://fera.pl/install-fera-app/" 1370 target="_blank" 1371 class="btn btn-app ml-auto" 1372 > 1373 Pobierz </a> 1374</div> 1375 1376<!-- Google Tag Manager (noscript) -->
vendor: 73 bytes, lines 1376-1378
1376 1377<noscript> 1378 <iframe src="https://www.googletagmanager.com/ns.html?id=
1378GTM-WVCP8K59
vendor: 96 bytes, lines 1378-1380
1378" 1379 height="0" width="0" style="display:none;visibility:hidden"></iframe> 1380</noscript>
1381<!-- End Google Tag Manager (noscript) --> 1382 1383<input name="form_key" type="hidden" value="6aqf5MmWWJaNsQwZ" /> 1384 <noscript> 1385 <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> 1386 <div class="container text-center"> 1387 <p> 1388 <strong>WyglÄ da na to, że JavaScript jest wyÅÄ czony w twojej przeglÄ darce.</strong> 1389 <span> 1390 By w peÅni cieszyÄ siÄ naszÄ stronÄ , upewnij siÄ, że wÅÄ czyÅeÅ JavaScript w swojej przeglÄ darce. </span> 1391 </p> 1392 </div> 1393 </section> 1394 </noscript> 1395 1396
1397<script> 1398 document.body.addEventListener('touchstart', () => {}, {passive: true}) 1399</script>
1399 1400<div class="widget block block-static-block"> 1401 </div> 1402
1403<script data-cfasync="false"> 1404 window.amastyCookieManager = window.amastyCookieManager || {}; 1405</script>
vendor: 1 bytes, line 1405
1405
1406<script> 1407 'use strict'; 1408 1409 (() => { 1410 window.addEventListener( 1411 'ga-initialized', 1412 () => { 1413 window.addEventListener('cart-item-added', (event) => { 1414 let products = []; 1415 1416 event.detail.forEach((item) => { 1417 products.push({ 1418 id: item['product_sku'], 1419 name: item['product_name'], 1420 price: item['product_price_value'], 1421 quantity: item['qty'], 1422 }); 1423 }); 1424 1425 dataLayer.push({ 1426 event: 'addToCart', 1427 ecommerce: { 1428 currencyCode: 'PLN', 1429 add: { 1430 products: products, 1431 }, 1432 }, 1433 }); 1434 }); 1435 }, 1436 { once: true } 1437 ); 1438 })(); 1439</script>
vendor: 1 bytes, line 1439
1439
1440<script> 1441 'use strict'; 1442 1443 (() => { 1444 window.addEventListener( 1445 'ga-initialized', 1446 () => { 1447 window.addEventListener('cart-item-removed', (event) => { 1448 let products = []; 1449 1450 event.detail.forEach((item) => { 1451 products.push({ 1452 id: item['product_sku'], 1453 name: item['product_name'], 1454 price: item['product_price_value'], 1455 quantity: item['qty'], 1456 }); 1457 }); 1458 1459 dataLayer.push({ 1460 event: 'removeFromCart', 1461 ecommerce: { 1462 currencyCode: 'PLN', 1463 remove: { 1464 products: products, 1465 }, 1466 }, 1467 }); 1468 }); 1469 }, 1470 { once: true } 1471 ); 1472 })(); 1473</script>
vendor: 1 bytes, line 1473
1473
1474<script> 1475 'use strict'; 1476 1477 (() => { 1478 window.addEventListener( 1479 'ga-initialized', 1480 () => { 1481 const banners = document.querySelectorAll('\u005Bdata\u002Dbanner\u002Did\u005D'); 1482 let promotions = []; 1483 1484 banners.forEach((banner) => { 1485 banner.addEventListener('click', () => { 1486 window.dataLayer.push({ 1487 event: 'promotionClick', 1488 ecommerce: { 1489 promoClick: { 1490 promotions: [{ 1491 id: banner.dataset.bannerId, 1492 name: banner.dataset.bannerName, 1493 creative: '', 1494 position: 'blog_index_index', 1495 }], 1496 }, 1497 }, 1498 }); 1499 }); 1500 1501 promotions.push({ 1502 id: banner.dataset.bannerId, 1503 name: banner.dataset.bannerName, 1504 creative: '', 1505 position: 'blog_index_index', 1506 }); 1507 }); 1508 1509 if (promotions.length) { 1510 window.dataLayer.push({ 1511 event: 'promotionView', 1512 ecommerce: { 1513 promoView: { 1514 promotions: promotions, 1515 }, 1516 }, 1517 }); 1518 } 1519 }, 1520 { once: true } 1521 ); 1522 })(); 1523</script>
1523 1524
1525<script> 1526 'use strict'; 1527 (function(hyva) { 1528 const formValidationRules = { 1529 required(value, options, field, context) { 1530 const el = field.element.type === 'hidden' ? createTextInputFrom(field.element) : field.element, 1531 msg = 'To\u0020jest\u0020wymagane\u0020pole.'; 1532 1533 if (el.type === 'radio' || el.type === 'checkbox') { 1534 return (value === undefined || value.length === 0) ? msg : true; 1535 } 1536 1537 el.setAttribute('required', ''); 1538 el.checkValidity(); 1539 1540 return el.validity.valueMissing ? msg : true; 1541 }, 1542 maxlength(value, options, field, context) { 1543 const n = Number(options) 1544 if (value.length > n) { 1545 return n === 1 1546 ? hyva.strf('Wprowad\u017A\u0020nie\u0020wi\u0119cej\u0020ni\u017C\u00201\u0020znak.') 1547 : hyva.strf('Wprowad\u017A\u0020nie\u0020wi\u0119cej\u0020ni\u017C\u0020\u00250\u0020znak\u00F3w.', options) 1548 } 1549 return true; 1550 }, 1551 minlength(value, options, field, context) { 1552 const n = Number(options) 1553 if (value.length > 0 && value.length < n) { 1554 return n === 1 1555 ? hyva.strf('Wprowad\u017A\u0020co\u0020najmniej\u00201\u0020znak.') 1556 : hyva.strf('Wprowad\u017A\u0020co\u0020najmniej\u0020\u00250\u0020znak\u00F3w.', options) 1557 } 1558 return true; 1559 }, 1560 max(value, options, field, context) { 1561 field.element.setAttribute('max', options); 1562 field.element.checkValidity(); 1563 if (field.element.validity.rangeOverflow) { 1564 return hyva.strf('Wprowad\u017A\u0020warto\u015B\u0107\u0020mniejsz\u0105\u0020lub\u0020r\u00F3wn\u0105\u0020\u0022\u00250\u0022.', options); 1565 } 1566 return true; 1567 }, 1568 min(value, options, field, context) { 1569 field.element.setAttribute('min', options); 1570 field.element.checkValidity(); 1571 if (field.element.validity.rangeUnderflow) { 1572 return hyva.strf('Wprowad\u017A\u0020warto\u015B\u0107\u0020wi\u0119ksz\u0105\u0020lub\u0020r\u00F3wn\u0105\u0020\u0022\u00250\u0022.', options); 1573 } 1574 return true; 1575 }, 1576 step(value, options, field, context) { 1577 field.element.setAttribute('step', options); 1578 field.element.checkValidity(); 1579 if (field.element.validity.stepMismatch) { 1580 const val = Number(value); 1581 const step = Number(options); 1582 const msg = 'Wprowad\u017A\u0020prawid\u0142ow\u0105\u0020warto\u015B\u0107.\u0020Dwie\u0020najbli\u017Csze\u0020prawid\u0142owe\u0020warto\u015Bci\u0020to\u0020\u0022\u00250\u0022\u0020i\u0020\u0022\u00251\u0022.'; 1583 return hyva.strf(msg, Math.floor(val / step) * step, Math.ceil(val / step) * step); 1584 } 1585 return true; 1586 }, 1587 pattern(value, options, field, context) { 1588 field.element.setAttribute('pattern', options); 1589 field.element.checkValidity(); 1590 if (field.element.validity.patternMismatch) { 1591 return field.element.title 1592 ? hyva.strf('Nale\u017Cy\u0020dopasowa\u0107\u0020\u017C\u0105dany\u0020format\u003A\u0020\u00250.', field.element.title) 1593 : 'Prosimy\u0020o\u0020zgodno\u015B\u0107\u0020z\u0020wymaganym\u0020formatem.' 1594 } 1595 return true; 1596 }, 1597 email(value, options, field, context) { 1598 const rule = /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i; 1599 if (value.length > 0 && !rule.test(value)) { 1600 return 'Prosimy\u0020wpisa\u0107\u0020poprawny\u0020adres\u0020e\u002Dmail'; 1601 } 1602 return true; 1603 }, 1604 password(value, options, field, context) { 1605 const rule = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; 1606 if (value.length > 0 && !rule.test(value)) { 1607 return 'Podaj\u0020co\u0020najmniej\u0020jedn\u0105\u0020wielk\u0105\u0020liter\u0119,\u0020jedn\u0105\u0020ma\u0142\u0105\u0020liter\u0119,\u0020jedn\u0105\u0020cyfr\u0119\u0020i\u0020jeden\u0020znak\u0020specjalny\u0020\u0028\u0023\u003F\u0021\u0040\u0024\u0025\u005E\u0026amp\u003B\u002A\u002D\u0029.'; 1608 } 1609 return true; 1610 }, 1611 equalTo(value, options, field, context) { 1612 const dependencyField = context.fields[options].element; 1613 if (value !== dependencyField.value) { 1614 const dependencyFieldName = 1615 dependencyField.label || 1616 dependencyField.title || 1617 (dependencyField.labels && dependencyField.labels[0] && dependencyField.labels[0].innerText) || 1618 dependencyField.name; 1619 return hyva.strf('Warto\u015B\u0107\u0020tego\u0020pola\u0020musi\u0020by\u0107\u0020taka\u0020sama\u0020jak\u0020\u0022\u00250\u0022.', dependencyFieldName); 1620 } 1621 return true; 1622 } 1623 }; 1624 1625 function raceSome(promises, pred) { 1626 return new Promise((resolve, reject) => { 1627 1628 if (promises.length === 0) { 1629 return resolve(); 1630 } 1631 1632 let settled = false, nDone = 0; 1633 1634 const resolveIf = v => { 1635 if (!settled && (pred(v) || ++nDone === promises.length)) { 1636 settled = true; 1637 resolve(v); 1638 } 1639 return v; 1640 } 1641 1642 promises.map(promise => {
1643 promise.then(resolveIf).catch(reason => { 1644 settled = true; 1645 reject(reason) 1646 }); 1647 return promise; 1648 }); 1649 }); 1650 } 1651 1652 const INPUT_ATTRIBUTE_RULES = {min: 'min', max: 'max', required: 'required', minlength: 'minlength', maxlength: 'maxlength', step: 'step', pattern: 'pattern'} 1653 const INPUT_TYPE_RULES = {email: 'email'} 1654 1655 function getRules(element) { 1656 let rules = {}; 1657 Object.keys(INPUT_ATTRIBUTE_RULES).forEach(attrName => { 1658 if (element.hasAttribute(attrName)) { 1659 rules[INPUT_ATTRIBUTE_RULES[attrName]] = element.getAttribute(attrName); 1660 } 1661 }) 1662 if (INPUT_TYPE_RULES[element.type]) { 1663 rules[INPUT_TYPE_RULES[element.type]] = true; 1664 } 1665 1666 if (element.dataset.validate) { 1667 try { 1668 Object.assign(rules, JSON.parse(element.dataset.validate)); 1669 } catch (error) { 1670 console.error('Validator error. Cannot parse data-validate attribute of element:\n', element); 1671 } 1672 } 1673 1674 return rules; 1675 } 1676 1677 function isInvalidRuleResult(ruleState) { 1678 return typeof ruleState === 'string' || !ruleState || (ruleState.type && ruleState.content); 1679 } 1680 1681 async function runValidateFn(rule, options, value, field) { 1682 return formValidationRules[rule](value, options, field, this); 1683 } 1684 1685 function generateId() { 1686 let id; 1687 do { 1688 id = `${this.idPrefix}-${++this.idSeq}`; 1689 } while (document.getElementById(id)); 1690 return id; 1691 } 1692 1693 function isVisible(element) { 1694 const el = element.type !== 'hidden' ? element : (element.parentElement || {}); 1695 return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length) 1696 } 1697 1698 function elementWillValidate(element) { 1699 return (element.willValidate || element.type === 'hidden') 1700 && element.tagName !== 'BUTTON' 1701 && element.disabled === false 1702 && !(element.tagName === 'INPUT' && element.type === 'submit') 1703 && (element.hasAttribute('data-validate-hidden') || isVisible(element)) 1704 } 1705 1706 function createMessageContainer(el, fieldWrapperClassName) { 1707 if (! el.parentElement) { 1708 return; 1709 } 1710 const refocus = document.activeElement === el; 1711 const wrapper = document.createElement('div'); 1712 wrapper.classList.add.apply(wrapper.classList, fieldWrapperClassName.split(' ')); 1713 el.parentElement.insertBefore(wrapper, el); 1714 wrapper.appendChild(el); 1715 refocus && document.activeElement !== el && el.focus(); 1716 return wrapper; 1717 } 1718 1719 function containerNotFound(selector, el) { 1720 const msg = `Cannot find message container element ${selector} of ${el.name}`; 1721 console.error(msg, el); 1722 throw msg; 1723 } 1724 1725 function createTextInputFrom(el) { 1726 const text = document.createElement('INPUT'); 1727 text.type = 'text'; 1728 text.value = el.value; 1729 return text; 1730 } 1731 1732 function classNamesToSelector(classNames) { 1733 return classNames.split(' ') 1734 .filter(className => className.length > 0) 1735 .map(className => `.${className}`) 1736 .join('') 1737 } 1738 1739 function hasMessagesWrapper(field, messagesWrapperClassName) { 1740 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1741 } 1742 1743 function getMessagesWrapper(field, messagesWrapperClassName) { 1744 if (hasMessagesWrapper.call(this, field, messagesWrapperClassName)) { 1745 return this.getMessageContainer(field).querySelector(classNamesToSelector(messagesWrapperClassName)); 1746 } 1747 1748 const msgWrapper = document.createElement('ul'); 1749 const msgId = generateId.call(this); 1750 msgWrapper.id = msgId; 1751 field.element.setAttribute('aria-errormessage', msgId); 1752 field.element.setAttribute('aria-describedby', msgId); 1753 msgWrapper.classList.add.apply(msgWrapper.classList, messagesWrapperClassName.split(' ')); 1754 if (field.validateOnChange) { 1755 msgWrapper.setAttribute('aria-live', 'polite'); 1756 } 1757 this.getMessageContainer(field).appendChild(msgWrapper); 1758 1759 return msgWrapper; 1760 } 1761 1762 function getCheckedValues(field) { 1763 const name = field.element.name.replace(/([\\"])/g, '\\$1'); 1764 const elements = field.element.form.querySelectorAll('input[name="' + name + '"]:checked'); 1765 return Array.from(elements).map(el => el.value); 1766 } 1767 1768 function escapeHtml(s) { 1769 const div = document.createElement('div') 1770 div.innerText = s; 1771 return div.innerHTML; 1772 } 1773 1774 1775 function formValidation(form, options = {}) { 1776 const formElement = form || this.$el; 1777 1778 if (formElement.dataset && formElement.dataset.options) { 1779 try { 1780 options = Object.assign(options, JSON.parse(formElement.dataset.options || '{}')); 1781 } catch (e) { 1782 throw new Error('Cannot read the form options from the data-options attribute: not val
1782id JSON'); 1783 } 1784 } 1785 1786 // Disable browser default validation 1787 if (formElement.tagName === 'FORM') { 1788 formElement.setAttribute('novalidate', ''); 1789 } else { 1790 console.error('formValidation can be initialized only on FORM element', formElement); 1791 return; 1792 } 1793 1794 options = Object.assign({ 1795 fieldWrapperClassName: 'field field-reserved', 1796 messagesWrapperClassName: 'messages', 1797 validClassName: 'field-success', 1798 invalidClassName: 'field-error', 1799 pageMessagesWrapperSelector: null, 1800 scrollToFirstError: true, 1801 }, options || {}); 1802 1803 return { 1804 state: { 1805 valid: false, 1806 }, 1807 fields: {}, 1808 idSeq: 0, 1809 idPrefix: formElement.id || 'vld-msg', 1810 setupFields(elements) { 1811 this.fields = {}; 1812 Array.from(elements).forEach(element => { 1813 if (elementWillValidate(element)) { 1814 this.setupField(element); 1815 } 1816 }); 1817 }, 1818 setupField(element) { 1819 if (! element) return; 1820 const onChange = !!element.dataset.onChange; 1821 if (elementWillValidate(element)) { 1822 const rules = getRules(element); 1823 if (Object.keys(rules).length > 0) { 1824 if (this.fields[element.name]) { 1825 Object.assign(this.fields[element.name].rules, rules); 1826 } else { 1827 this.fields[element.name] = { 1828 element, 1829 rules: rules, 1830 validateOnChange: onChange, 1831 state: { 1832 valid: null, 1833 rules: {} 1834 } 1835 } 1836 } 1837 } 1838 } else { 1839 console.error('Element will not validate', element); 1840 } 1841 }, 1842 onSubmit(event) { 1843 if (event.target.tagName === 'FORM') { 1844 event.preventDefault(); 1845 1846 this.validate() 1847 .then(() => event.target.submit()) 1848 .catch(invalidElements => {}); 1849 } 1850 }, 1851 onChange(event) { 1852 event.target.dataset.onChange = 'true'; 1853 if (!Object.keys(this.fields).length) { 1854 this.setupFields(formElement.elements); 1855 } 1856 if (!Object.keys(this.fields).includes(event.target.name)) { 1857 this.setupField(event.target); 1858 } 1859 const field = this.fields[event.target.name]; 1860 1861 this.validateField(field); 1862 field && field.element.removeAttribute('data-on-change') 1863 }, 1864 validateSafe() { 1865 return new Promise(resolve => this.validate().then(() => resolve(true)).catch(() => {})) 1866 }, 1867 validate() { 1868 if (!Object.keys(this.fields).length || !Object.keys(this.fields).length !== formElement.elements.length) { 1869 this.setupFields(formElement.elements); 1870 } 1871 return new Promise(async (resolve, reject) => { 1872 if (formElement.elements) { 1873 await raceSome(this.validateFields(), result => result !== true) 1874 const invalidFields = Object.values(this.fields).filter(field => !field.state.valid); 1875 this.state.valid = invalidFields.length === 0; 1876 if (this.state.valid) { 1877 resolve(); 1878 } else { 1879 if (options.scrollToFirstError && invalidFields.length > 0) { 1880 invalidFields[0].element.focus() 1881 invalidFields[0].element.select && invalidFields[0].element.select(); 1882 } 1883 reject(invalidFields.map(field => field.element)); 1884 } 1885 } 1886 }); 1887 }, 1888 validateFields() { 1889 const fields = Object.values(this.fields); 1890 1891 fields.forEach(field => { 1892 this.getMessageContainer(field).classList.remove(options.validClassName, options.invalidClassName) 1893 }); 1894 return fields.map(field => this.validateField(field)) 1895 }, 1896 validateField(field) { 1897 if (! field || ! elementWillValidate(field.element)) { 1898 return new Promise(resolve => resolve(true)) 1899 } 1900 1901 let value; 1902 if (field.element.type === 'checkbox') { 1903 value = getCheckedValues(field); 1904 } else if (field.element.type === 'radio') { 1905 value = getCheckedValues(field)[0] || undefined; 1906 } else if (field.element.tagName === 'SELECT' && field.element.multiple) { 1907 value = Array.from(field.element.selectedOptions).map(opt => opt.value); 1908 } else { 1909 value = field.element.value; 1910 } 1911 1912 const rules = field.rules || {}; 1913 1914 field.state.valid = true;
1915 this.showFieldState(field); 1916 1917 1918 const fieldValidations = Object.keys(rules).filter(rule => formValidationRules[rule]).map(async rule => { 1919 return runValidateFn.call(this, rule, rules[rule], value, field).then(result => { 1920 field.state.rules[rule] = result; 1921 return result; 1922 }) 1923 }); 1924 1925 return new Promise(resolve => { 1926 Promise.all(fieldValidations).then(results => { 1927 field.state.valid = !elementWillValidate(field.element) || rules.length === 0 || !results.some(isInvalidRuleResult) 1928 this.showFieldState(field); 1929 resolve(field.state.valid); 1930 }) 1931 }); 1932 }, 1933 getMessagesByField(field) { 1934 const messages = []; 1935 const invalidRules = Object.keys(field.state.rules).filter(rule => isInvalidRuleResult(field.state.rules[rule])); 1936 1937 field.rules && Object.keys(field.rules).forEach((rule) => { 1938 if (invalidRules.includes(rule)) { 1939 const customMessage = field.element.getAttribute('data-msg-' + rule); 1940 const message = customMessage ? customMessage : field.state.rules[rule]; 1941 const ruleOptions = JSON.parse(JSON.stringify(field.rules[rule])); 1942 1943 if (typeof message === 'undefined' || message === null || (typeof message !== 'string' && ! message.type)) { 1944 messages.push(hyva.strf('Validation rule "%0" failed.', rule)); 1945 } else if (Array.isArray(ruleOptions)) { 1946 ruleOptions.unshift(message.type ? message.content : message); 1947 const content = hyva.strf.apply(null, ruleOptions); 1948 messages.push(message.type ? {type: message.type, content} : content); 1949 } else { 1950 const content = hyva.strf(message.type ? message.content : message, ruleOptions) 1951 messages.push(message.type ? {type: message.type, content} : content); 1952 } 1953 } 1954 }); 1955 return messages; 1956 }, 1957 /** @deprecated */ 1958 getFieldWrapper(field) { 1959 return this.getMessageContainer(field) 1960 }, 1961 getMessageContainer(field) { 1962 let container; 1963 const pageSelector = field.element.getAttribute('data-validation-container') || options.pageMessagesContainerSelector; 1964 if (pageSelector) { 1965 container = document.querySelector(pageSelector) 1966 || containerNotFound(pageSelector, field.element) 1967 } else { 1968 const containerSelector = classNamesToSelector(options.fieldWrapperClassName); 1969 container = field.element.closest(containerSelector) 1970 || createMessageContainer(field.element, options.fieldWrapperClassName) 1971 || containerNotFound(containerSelector, field.element); 1972 } 1973 1974 return container; 1975 }, 1976 showFieldState(field) { 1977 const container = this.getMessageContainer(field), 1978 hasErrorMessages = hasMessagesWrapper.call(this, field, options.messagesWrapperClassName), 1979 messages = this.getMessagesByField(field).map(m => { 1980 return m.type !== 'html' ? escapeHtml(m.type ? m.content : m) : m.content; 1981 }); 1982 container.classList.toggle(options.validClassName, field.state.valid && ! hasErrorMessages); 1983 container.classList.toggle(options.invalidClassName, !field.state.valid || hasErrorMessages); 1984 this.createHtmlErrorMessage(field, messages); 1985 1986 if (field.state.valid) { 1987 field.element.removeAttribute('aria-invalid'); 1988 } else { 1989 field.element.setAttribute('aria-invalid', 'true'); 1990 if (! document.activeElement) { 1991 field.element.focus(); 1992 } 1993 } 1994 }, 1995 removeMessages(field, messagesClass) { 1996 if (! hasMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName)) { 1997 return; 1998 } 1999 2000 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass || options.messagesWrapperClassName); 2001 const messages = msgWrapper.querySelectorAll(`[data-msg-field='${field.element.name}']`);
2002 Array.from(messages).forEach(msg => msg.remove()); 2003 if (msgWrapper && msgWrapper.childElementCount === 0) { 2004 field.element.removeAttribute('aria-errormessage'); 2005 field.element.removeAttribute('aria-describedby'); 2006 msgWrapper.remove(); 2007 } 2008 }, 2009 createErrorMessage(field, messages) { 2010 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 2011 this.createHtmlErrorMessage(field, htmlMessages); 2012 }, 2013 createHtmlErrorMessage(field, messages) { 2014 this.removeMessages(field, options.messagesWrapperClassName); 2015 field.element.removeAttribute('aria-errormessage'); 2016 field.element.removeAttribute('aria-describedby'); 2017 2018 if (!field.state.valid) { 2019 const msgWrapper = this.addHtmlMessages(field, options.messagesWrapperClassName, messages); 2020 field.element.setAttribute('aria-errormessage', msgWrapper.id); 2021 field.element.setAttribute('aria-describedby', msgWrapper.id); 2022 } 2023 }, 2024 /** @deprecated */ 2025 createMessage(field, message) { 2026 return this.addMessages(field, options.messagesWrapperClassName, message); 2027 }, 2028 addMessages(field, messagesClass, messages) { 2029 const htmlMessages = (Array.isArray(messages) ? messages : [messages]).map(escapeHtml) 2030 return this.addHtmlMessages(field, messagesClass, htmlMessages); 2031 }, 2032 addHtmlMessages(field, messagesClass, htmlMessages) { 2033 const msgWrapper = getMessagesWrapper.call(this, field, messagesClass); 2034 2035 (Array.isArray(htmlMessages) ? htmlMessages : [htmlMessages]).forEach((htmlMessage) => { 2036 const li = document.createElement('li'); 2037 li.innerHTML = htmlMessage; 2038 li.setAttribute('data-msg-field', field.element.name); 2039 msgWrapper.appendChild(li); 2040 }); 2041 2042 return msgWrapper; 2043 }, 2044 setField(name, value) { 2045 this.fields[name].element.value = value; 2046 this.fields[name].element.dispatchEvent((new Event('input'))); 2047 this.validateField(this.fields[name]); 2048 } 2049 } 2050 } 2051 2052 hyva.formValidation = formValidation; 2053 hyva.formValidation.rules = formValidationRules; 2054 hyva.formValidation.setInputAttributeRuleName = (attrName, ruleName) => INPUT_ATTRIBUTE_RULES[attrName] = ruleName || attrName; 2055 hyva.formValidation.setInputTypeRuleName = (typeName, ruleName) => INPUT_TYPE_RULES[typeName] = ruleName || typeName; 2056 hyva.formValidation.addRule = (name, validator) => formValidationRules[name] = validator; 2057 }(window.hyva = window.hyva || {})); 2058 2059 window.addEventListener('alpine:init', () => { 2060 Alpine.data('hyva.formValidation', hyva.formValidation); 2061 Alpine.data('hyva.formValidation($el)', hyva.formValidation); 2062 }, {once: true}); 2063</script>
vendor: 1 bytes, line 2063
2063
2064<script> 2065 { 2066 // libphonenumber, the same library the server validates with, and the same country list â 2067 // rendered from customer/address/allowed_phone_countries. Hand-written approximations were 2068 // tried first (a shape check, then per-country lengths) and each passed numbers the server 2069 // then rejected. See web/js/README.md for the version and the parity check. 2070 const phoneCountries = {"accepted":["PL"],"candidates":["PL"]}; 2071 const invalidPhoneNumber = 'Nieprawid\u0142owy\u0020numer\u0020telefonu.'; 2072 2073 // Regions to read a number typed without a "+" against, most likely first: the country 2074 // picked on this form when it has such a field, then the rest. Deliberately not the 2075 // "accepted" list â that one may be empty, meaning no restriction, while a bare number 2076 // still needs some country to be interpreted as. 2077 const candidateRegions = (context) => { 2078 const selected = context && context.fields && context.fields['country_id'] 2079 && context.fields['country_id'].element.value; 2080 2081 return selected && phoneCountries.candidates.includes(selected) 2082 ? [selected].concat(phoneCountries.candidates.filter((country) => country !== selected)) 2083 : phoneCountries.candidates; 2084 }; 2085 2086 const accepted = (parsed) => Boolean(parsed) && parsed.isValid() 2087 && (phoneCountries.accepted.length === 0 || phoneCountries.accepted.includes(parsed.country)); 2088 2089 const validatePhoneNumber = (value, options, field, context) => { 2090 const phone = value.trim().replace(/[\s\-()]/g, ''); 2091 2092 // An empty value belongs to the 'required' rule, which the field already carries. 2093 if (!phone) { 2094 return true; 2095 } 2096 2097 // The bundle may not have parsed yet; treating that as valid leaves the decision to the 2098 // server rather than blocking a real number. 2099 if (typeof libphonenumber === 'undefined') { 2100 return true; 2101 } 2102 2103 // Same character set the server accepts. libphonenumber reads letters as the digits 2104 // they sit on, so '123abc456' would otherwise be judged a real number. 2105 if (!/^\+?\d+$/.test(phone)) { 2106 return invalidPhoneNumber; 2107 } 2108 2109 const parse = (region) => { 2110 try { 2111 return libphonenumber.parsePhoneNumberFromString(phone, region); 2112 } catch (error) { 2113 return undefined; 2114 } 2115 }; 2116 2117 if (phone[0] === '+') { 2118 const parsed = parse(undefined); 2119 2120 // No verdict means the country is not in this bundle â the server has the full 2121 // metadata and decides, rather than the browser refusing a number it cannot judge. 2122 return !parsed || accepted(parsed) || invalidPhoneNumber; 2123 } 2124 2125 const regions = candidateRegions(context); 2126 const known = libphonenumber.knownCountries(); 2127 2128 // A country configured in the admin but missing from the bundle: same deferral, so a 2129 // configuration change never turns into a wrongly refused number. 2130 if (regions.some((region) => !known.includes(region))) { 2131 return true; 2132 } 2133 2134 return regions.some((region) => accepted(parse(region))) || invalidPhoneNumber; 2135 }; 2136 2137 hyva.formValidation.addRule('telephone', validatePhoneNumber); 2138 hyva.formValidation.addRule('international-telephone', validatePhoneNumber); 2139 } 2140</script>
2140 2141 2142<div x-data="initAmastyCookieBar" 2143 x-bind="eventListeners" 2144 x-cloak 2145 id="am-cookie-bar" 2146 > 2147 <div x-cloak data-dialog-ref-name="am-cookie-bar" 2148 x-bind="overlay" 2149 class=""> 2150 <div class="fixed flex justify-center items-center text-left z-60 inset-0 bg-black/25 backdrop-blur-sm inset-0"> 2151 <div x-ref="am-cookie-bar" role="dialog" aria-modal="true" 2152 x-no-overlay aria-label="Cookie Bar" 2153 class="fixed card max-w-3xl max-md:rounded-none md:right-5 bottom-0 md:bottom-5"> 2154 <span tabindex="0"></span> 2155<div class="grid gap-4"> 2156 <div> 2157 <p class="mb-2 text-lg font-bold"> 2158 Używamy plików cookie </p> 2159 <p id="amcookie-bar-content" class="font-medium [&_a]:text-brandPrimary-800 [&_a]:font-bold [&_a]:underline"> 2160 Wykorzystujemy pliki cookie do spersonalizowania treÅci i reklam, aby oferowaÄ funkcje spoÅecznoÅciowe i analizowaÄ ruch w naszej witrynie. Informacje o tym, jak korzystasz z naszej witryny, udostÄpniamy partnerom spoÅecznoÅciowym, reklamowym i analitycznym. Partnerzy mogÄ poÅÄ czyÄ te informacje z innymi danymi otrzymanymi od Ciebie lub uzyskanymi podczas korzystania z ich usÅug. Przeczytaj <a href="https://fera.pl/polityka-prywatnosci-i-cookies" title="Polityka prywatnoÅci" target="_blank">politykÄ prywatnoÅci</a>. </p> 2161 </div> 2162 2163 <div> 2164 <div x-data="initAmCookieGroups" class="flex flex-wrap gap-y-4 gap-x-6"> 2165 <template x-for="group in $store.AmastyCookieGroups.groupData" :key="group.groupId"> 2166 <div class="flex gap-4"> 2167 <label class="toggles" 2168 data-group-prefix="classic-" 2169 :for="getInputGroupId" 2170 > 2171 <input type="checkbox" 2172 :name="getInputGroupId" 2173 data-group-prefix="classic-" 2174 @change="toggleGroup" 2175 :checked="group.checked" 2176 :aria-checked="group.checked" 2177 :id="getInputGroupId" 2178 :disabled="group.isEssential" 2179 :value="group.groupId" 2180 class="amsettings-bar-input-toggle" 2181 :class="getInputStyles" 2182 > 2183 <span></span> 2184 <span class="label" x-text="group.name"></span> 2185 </label> 2186 <button class="btn btn-link underline" 2187 type="button" 2188 data-dispatch-action="classic-open-am-cookie-group-info" 2189 @click="moreInfoClickHandler"> 2190 <span>wiÄcej</span> 2191 <span class="sr-only" x-text="moreInformationAboutCookieGroup"></span> 2192 </button> 2193 </div> 2194 </template> 2195 </div> 2196 2197<div x-data="initCookieGroupInfo_6ab4f785a6c5c" x-bind="eventListeners"> 2198 <div x-cloak 2199 x-bind="overlay" 2200 class="fixed inset-0 flex items-center justify-center text-left bg-gray-500/50 z-50" 2201 > 2202 <div x-ref="classic-am-cookie-group-info" 2203 role="dialog" 2204 aria-labelledby="amcookie-group-info" 2205 class="inline-block max-h-[92vh] max-w-[90vw] overflow-auto 2206 bg-ambar-info-bar-background shadow-xl rounded-lg p-8 text-gray-700 relative" 2207 > 2208 <template x-if="group"> 2209 <div id="amcookie-group-info"> 2210 <div class="flex gap-2 justify-between items-center"> 2211 <p class="text-lg font-semibold text-black"> 2212 <strong x-text="group.name"></strong> 2213 </p> 2214 <button 2215 type="button" 2216 class="btn btn-icon-size-s" 2217 @click="closeHandler" 2218 aria-label="Zamknij" 2219 > 2220 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 2221 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 2222</svg> 2223 </button> 2224 </div> 2225 2226 <template x-if="group.description"> 2227 <p class="mb-4 text-ambar-info-bar-description" x-html="group.description"></p> 2228 </template> 2229 <div class="overflow-x-scroll md:overflow-x-auto"> 2230 <table class="table-auto w-full mb-4 text-left"> 2231 <thead class="text-ambar-info-bar-table-header"> 2232 <tr> 2233 <th class="pr-4">Nazwa pliku cookie</th> 2234 <th class="pr-4">Dostawca pliku cookie</th> 2235 <th class="min-w-[30%] pr-4">Opis pliku cookie</th> 2236 <th class="pr-4">Czas życia pliku cookie</th> 2237 <th class="pr-4">Typ pliku cookie</th> 2238 </tr> 2239 </thead> 2240 <tbody class="text-ambar-info-bar-table-content"> 2241 <template x-for="(item, index) in group.cookies" :key="index"> 2242 <tr> 2243 <td x-text="item.name" class="font-semibold pr-4"></td> 2244 <td x-text="item.provider" class="pr-4"></td> 2245 <td x-html="item.description" class="min-w-[30%] pr-4"></td> 2246 <td x-text="item.lifetime" class="pr-4"></td> 2247 <td x-text="item.type" class="pr-4"></td> 2248 </tr> 2249 </template> 2250 </tbody> 2251 </table> 2252 </div> 2253 </div> 2254 </template> 2255 <button 2256 @click="closeHandler" 2257 aria-label="Gotowe" 2258 class="btn btn-primary ml-auto" 2259 > 2260 Gotowe </button> 2261 </div> 2262 </div> 2263 2264</div>
2265<script data-cfasync="false"> 2266 'use strict'; 2267 2268 function initCookieGroupInfo_6ab4f785a6c5c() { 2269 return { 2270 ...hyva.modal({ 2271 dialog: 'classic-am-cookie-group-info' 2272 }), 2273 group: null, 2274 eventListeners: { 2275 ['@classic-close-am-cookie-group-info.window']() { 2276 this.closeHandler(); 2277 }, 2278 ['@classic-open-am-cookie-group-info.window'](event) { 2279 this.group = event.detail; 2280 2281 if (!!this.group) { 2282 /* 2283 If modal have big cookies list this can lead to 2284 trigger hide event in hyva.modal.eventListeners.click, 2285 so we should wait till this.group is reassigned 2286 */ 2287 this.$nextTick(() => this.show('classic-am-cookie-group-info')); 2288 } 2289 } 2290 }, 2291 closeHandler: function () { 2292 this.hide('classic-am-cookie-group-info'); 2293 } 2294 } 2295 } 2296 2297 window.addEventListener( 2298 'alpine:init', 2299 () => Alpine.data( 2300 'initCookieGroupInfo_6ab4f785a6c5c', 2301 initCookieGroupInfo_6ab4f785a6c5c ), 2302 {once: true} 2303 ); 2304</script>
2304 2305</div> 2306 2307 2308 <div class="flex flex-wrap items-center justify-end gap-4"> 2309 2310 2311<button 2312 type="button" 2313 x-data="initAmCookieActionDispatcherBtn" 2314 data-dispatch-action="cookiebar-action-accept" 2315 data-dispatch-payload='{"include_checked_groups":true}' 2316 @click.prevent="actiondispatchHandler" 2317 class="btn btn-size-s" 2318> 2319 Zaakceptuj wybrane </button> 2320 2321<button 2322 type="button" 2323 x-data="initAmCookieActionDispatcherBtn" 2324 data-dispatch-action="cookiebar-action-allow" 2325 @click.prevent="actiondispatchHandler" 2326 class="btn btn-primary btn-size-s" 2327> 2328 Zaakceptuj wszystkie <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 2329 <path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/> 2330</svg> 2331 </button> 2332 </div> 2333</div> 2334 2335 </div> 2336 </div> 2337 </div> 2338</div> 2339
2340<script data-cfasync="false"> 2341 'use strict'; 2342 2343 function initAmastyCookieBar() { 2344 return { 2345 ...hyva.modal({ 2346 duration: 150, 2347 transitionEnter: 'transform duration-150', 2348 transitionLeave: 'transform duration-150' 2349 }), 2350 eventListeners: { 2351 ['@close-cookie-bar']() { 2352 this.hide('am-cookie-bar'); 2353 }, 2354 ['@open-cookie-bar']() { 2355 this.show('am-cookie-bar'); 2356 this.$nextTick(() => hyva.trapFocus(this.modalElement)); 2357 }, 2358 ['@amasty-cookie-group-updated.window']() { 2359 const lastUpdate = Alpine.store('AmastyCookieGroups').lastUpdate; 2360 if (this.isShowNotificationBar(this.firstShowProcess, lastUpdate)) { 2361 !this.opened['am-cookie-bar'] && 2362 this.show('am-cookie-bar'); 2363 this.$nextTick(() => hyva.trapFocus(this.modalElement)); 2364 } else { 2365 !!this.opened['am-cookie-bar'] && 2366 this.hide('am-cookie-bar'); 2367 } 2368 } 2369 }, 2370 2371 firstShowProcess: '0', 2372 2373 /** 2374 * @returns {void} 2375 */ 2376 init: function () { 2377 window.isGdprCookieEnabled = true; 2378 Alpine.store('AmastyCookieGroups').updateGroupData(); 2379 this.modalElement = this.$refs['am-cookie-bar']; 2380 this.modalElement.setAttribute('aria-describedby', 'amcookie-bar-content'); 2381 }, 2382 2383 /** 2384 * @param {string|number} firstShowProcess 2385 * @param {number} lastUpdate 2386 * @returns {boolean} 2387 */ 2388 isShowNotificationBar: function (firstShowProcess, lastUpdate) { 2389 return (this.isNeedFirstShow(firstShowProcess, lastUpdate) && !hyva.getCookie('amcookie_allowed') 2390 || this.isNeedShowOnUpdate(lastUpdate)); 2391 }, 2392 2393 /** 2394 * @param {string|number} firstShowProcess 2395 * @param {number} lastUpdate 2396 * @returns {boolean} 2397 */ 2398 isNeedFirstShow: function (firstShowProcess, lastUpdate) { 2399 hyva.getBrowserStorage().setItem('amCookieBarFirstShowTime', lastUpdate); 2400 2401 if (firstShowProcess === '0') { 2402 return true; 2403 } 2404 2405 if (hyva.getBrowserStorage().getItem('amCookieBarFirstShow') !== '1') { 2406 hyva.getBrowserStorage().setItem('amCookieBarFirstShow', '1'); 2407 2408 return true; 2409 } 2410 2411 return false; 2412 }, 2413 2414 /** 2415 * @param {number} lastUpdate 2416 * @returns {boolean} 2417 */ 2418 isNeedShowOnUpdate: function (lastUpdate) { 2419 if (!lastUpdate) { 2420 return false; 2421 } 2422 2423 return this.isNeedShowAfterLastVisit(lastUpdate) || this.isNeedShowAfterLastAccept(lastUpdate); 2424 }, 2425 2426 /** 2427 * @param {number} lastUpdate 2428 * @returns {boolean} 2429 */ 2430 isNeedShowAfterLastVisit: function (lastUpdate) { 2431 let needToShowAfterLastVisit = 2432 lastUpdate > hyva.getBrowserStorage().getItem('amCookieBarFirstShowTime'); 2433 2434 if (needToShowAfterLastVisit) { 2435 hyva.getBrowserStorage().setItem('amCookieBarFirstShow', null); 2436 hyva.setCookie('amcookie_allowed', '', -1, true); 2437 } 2438 2439 return needToShowAfterLastVisit; 2440 }, 2441 2442 /** 2443 * @param {number} lastUpdate 2444 * @returns {boolean} 2445 */ 2446 isNeedShowAfterLastAccept: function (lastUpdate) { 2447 let needToShowAfterLastAccept = false; 2448 2449 if (hyva.getBrowserStorage().getItem('am-last-cookie-acceptance')) { 2450 needToShowAfterLastAccept = 2451 lastUpdate > hyva.getBrowserStorage().getItem('am-last-cookie-acceptance'); 2452 } 2453 2454 return needToShowAfterLastAccept; 2455 }, 2456 2457 /** 2458 * @returns {void} 2459 */ 2460 closeCookieBarHandler: function () { 2461 this.$dispatch('close-cookie-bar'); 2462 } 2463 }; 2464 } 2465 2466 window.addEventListener('alpine:init', () => Alpine.data('initAmastyCookieBar', initAmastyCookieBar), {once: true}); 2467</script>
2467 2468<div class="before-page-wrapper hidden bg-tertiary text-white text-sm font-medium xl:block"><div class="container flex flex-wrap item-center justify-between gap-4 py-2.5"> 2469<section aria-label="Nasze korzyści"> 2470 <ul class="flex flex-wrap gap-x-12 items-center text-xs"> 2471 <li> 2472 2473 <span class="flex gap-x-1 items-center"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 2474 <path d="M9 17a2 2 0 11-4 0 2 2 0 014 0zM19 17a2 2 0 11-4 0 2 2 0 014 0z"/> 2475 <path stroke-linecap="round" stroke-linejoin="round" d="M13 16V6a1 1 0 00-1-1H4a1 1 0 00-1 1v10a1 1 0 001 1h1m8-1a1 1 0 01-1 1H9m4-1V8a1 1 0 011-1h2.586a1 1 0 01.707.293l3.414 3.414a1 1 0 01.293.707V16a1 1 0 01-1 1h-1m-6-1a1 1 0 001 1h1M5 17a2 2 0 104 0m-4 0a2 2 0 114 0m6 0a2 2 0 104 0m-4 0a2 2 0 114 0"/> 2476</svg> 2477 Darmowa dostawa od 99 zÅ </span> </li> 2478 <li> 2479 2480 <span class="flex gap-x-1 items-center"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 2481 <path stroke-linecap="round" stroke-linejoin="round" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/> 2482</svg> 2483 40 dni na zwrot </span> </li> 2484 <li> 2485 2486<div class="inline-flex items-center gap-1 leading-5" 2487 x-data="{ 2488 isLoggedIn: false, 2489 targetUrl: 'https://fera.pl/poznaj-korzysci-family/', 2490 accountUrl: 'https://fera.pl/reward/customer/', 2491 promoUrl: 'https://fera.pl/poznaj-korzysci-family/', 2492 init() { 2493 /* Metoda bezpieczna: nasÅuchuj zmian w mage-cache-storage */ 2494 this.checkLoginStatus(); 2495 2496 window.addEventListener('private-content-loaded', () => { 2497 this.checkLoginStatus(); 2498 }); 2499 2500 /* Fallback dla zdarzeÅ Magento */ 2501 window.addEventListener('customer-data-reload', () => { 2502 this.checkLoginStatus(); 2503 }); 2504 }, 2505 checkLoginStatus() { 2506 const storage = hyva.getBrowserStorage(); 2507 if (!storage) return; 2508 2509 const customerData = storage.getItem('mage-cache-storage'); 2510 if (customerData) { 2511 try { 2512 const data = JSON.parse(customerData); 2513 if (data.customer && data.customer.firstname) { 2514 this.isLoggedIn = true; 2515 this.targetUrl = this.accountUrl; 2516 return; 2517 } 2518 } catch (e) { 2519 console.warn('Error parsing customer data', e); 2520 } 2521 } 2522 2523 this.isLoggedIn = false; 2524 this.targetUrl = this.promoUrl; 2525 } 2526 }"> 2527 2528 <span class="text-white text-xs font-medium font-sans"> 2529 DoÅÄ cz do Fera </span> 2530 2531 <a :href="targetUrl" 2532 href="https://fera.pl/poznaj-korzysci-family/" 2533 class="px-1.5 py-0.5 bg-brandPrimary-700 italic rounded-sm flex justify-center items-center text-white text-sm font-bold font-heading leading-5 hover:opacity-90 transition-opacity"> 2534 family 2535 </a> 2536 2537 <span class="text-white text-xs font-medium font-sans"> 2538 i pozwól nam daÄ Ci jeszcze wiÄcej korzyÅci </span> 2539 2540 <a :href="targetUrl" 2541 href="https://fera.pl/poznaj-korzysci-family/" 2542 class="text-white text-xs font-medium font-sans underline hover:no-underline transition-all"> 2543 Zobacz wiÄcej </a> 2544 2545</div> </li> 2546 </ul> 2547</section> 2548<ul><li><a href="https://fera.pl/centrum-pomocy/" id="idY4T6EZgV" class="font-bold" >Pomoc i kontakt</a></li></ul></div></div><div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focu
2548s:bg-white 2549 contentarea" 2550 href="#contentarea"> 2551 <span> 2552 Przejdź do treÅci </span> 2553</a>
2554<script> 2555 function initHeader () { 2556 return { 2557 observer: null, 2558 sticky: false, 2559 searchOpen: false, 2560 scrollRafPending: false, 2561 pageHeader: document.querySelector('.page-header'), 2562 init() { 2563 this.checkHeaderSize(); 2564 this.initStickyObserver(); 2565 this.initScrollFallback(); 2566 this.initVisibilityHandler(); 2567 }, 2568 checkHeaderSize() { 2569 if (!this.pageHeader) return; 2570 document.documentElement.style.setProperty("--page-header-height", `${this.pageHeader.offsetHeight}px`); 2571 }, 2572 initStickyObserver() { 2573 if (!this.pageHeader) return; 2574 2575 this.observer = new IntersectionObserver(([e]) => { 2576 this.sticky = e.intersectionRatio < 1; 2577 e.target.dataset.sticky = this.sticky; 2578 }, { threshold: 1 }); 2579 2580 this.observer.observe(this.pageHeader); 2581 }, 2582 recalculateSticky() { 2583 if (!this.pageHeader) return; 2584 const rect = this.pageHeader.getBoundingClientRect(); 2585 this.sticky = rect.top < 0;
2586 this.pageHeader.dataset.sticky = this.sticky; 2587 }, 2588 resetStickyObserver() { 2589 this.recalculateSticky(); 2590 if (this.observer) { 2591 this.observer.disconnect(); 2592 this.observer = null; 2593 } 2594 this.initStickyObserver(); 2595 }, 2596 initScrollFallback() { 2597 if (!this.pageHeader) return; 2598 2599 window.addEventListener('scroll', () => { 2600 if (this.scrollRafPending) return; 2601 this.scrollRafPending = true; 2602 requestAnimationFrame(() => { 2603 this.scrollRafPending = false; 2604 const isSticky = this.pageHeader.getBoundingClientRect().top < 0; 2605 if (isSticky !== this.sticky) { 2606 this.sticky = isSticky; 2607 this.pageHeader.dataset.sticky = isSticky; 2608 } 2609 }); 2610 }, { passive: true }); 2611 }, 2612 resetMenuVisibility() { 2613 const desktopNav = this.$refs.desktopNavigation; 2614 if (desktopNav) { 2615 desktopNav.style.display = ''; 2616 } 2617 }, 2618 initVisibilityHandler() { 2619 document.addEventListener('visibilitychange', () => { 2620 if (document.visibilityState === 'visible') { 2621 this.resetStickyObserver(); 2622 this.resetMenuVisibility(); 2623 } 2624 }); 2625 window.addEventListener('pageshow', (event) => { 2626 if (event.persisted) { 2627 this.resetStickyObserver(); 2628 this.resetMenuVisibility(); 2629 // A page restored from the back/forward cache still shows the customer and 2630 // cart it was left with - after logout or a placed order that is stale data. 2631 // Storefront documents are no longer sent with no-store, so bfcache applies. 2632 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 2633 } 2634 }); 2635 window.addEventListener('focus', () => { 2636 this.recalculateSticky(); 2637 }); 2638 }, 2639 searchClosed() { 2640 return !this.searchOpen; 2641 }, 2642 toggleSearchForm() { 2643 this.searchOpen = !this.searchOpen; 2644 this.$dispatch('search-open'); 2645 }, 2646 searchClose() { 2647 this.searchOpen = false; 2648 }, 2649 searchEscape() { 2650 this.searchOpen = false; 2651 this.$refs.searchButton.focus(); 2652 } 2653 } 2654 } 2655 2656 function initCompareHeader() { 2657 return { 2658 compareProducts: null, 2659 itemCount: 0, 2660 hiddenIfEmpty() { 2661 return { 2662 'hidden': this.itemCount < 1 2663 } 2664 }, 2665 linkAriaLabel() { 2666 const countLabel = this.itemCount > 1 2667 ? hyva.str('Produkty\u0020\u00251', this.itemCount) 2668 : hyva.str('\u00251\u0020element', this.itemCount); 2669 return `Por\u00F3wnaj\u0020produkty (${countLabel})`; 2670 }, 2671 receiveCompareData() { 2672 const data = this.$event.detail.data; 2673 if (data['compare-products'] && data['compare-products'].count) { 2674 this.compareProducts = data['compare-products']; 2675 this.itemCount = this.compareProducts.count; 2676 } 2677 }, 2678 itemCountLabel() { 2679 return `(${this.itemCount})`; 2680 } 2681 } 2682 } 2683 2684 window.addEventListener('alpine:init', () => { 2685 Alpine.data('initHeader', initHeader); 2686 Alpine.data('initCompareHeader', initCompareHeader); 2687 }, { once: true }) 2688</script>
2688 2689<div 2690 id="header" 2691 class="z-30 relative bg-tertiary-lighter shadow-lg" 2692 x-data="initHeader" 2693 @resize.window.debounce="checkHeaderSize" 2694> 2695 <div class="header-main container py-4 flex flex-wrap gap-y-3.5 gap-x-4 items-center relative bg-tertiary-lighter z-10 xl:gap-y-0"> 2696 2697<button 2698 type="button" 2699 class="menu-button btn btn-primary btn-icon-size-l hidden xl:block xl:absolute" 2700 aria-label="Otwórz menu" 2701 aria-haspopup="dialog" 2702 x-data="initMenuButton" 2703 x-ref="menuButton" 2704 @click.prevent="openMenu" 2705 @toggle-menu.window="toggleMenu" 2706 :aria-expanded="isMenuOpen" 2707> 2708 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="24" height="24" aria-hidden="true"> 2709 <path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/> 2710</svg> 2711 </button> 2712
2713<script> 2714 function initMenuButton() { 2715 return { 2716 isMenuOpen: false, 2717 openMenu() { 2718 this.$dispatch('toggle-menu', { 2719 isOpen: true 2720 }) 2721 }, 2722 toggleMenu() { 2723 const event = this.$event; 2724 if (event.detail && event.detail.isOpen !== undefined) { 2725 this.isMenuOpen = event.detail.isOpen 2726 if (!this.isMenuOpen && this.$refs && this.$refs.menuButton) { 2727 this.$refs.menuButton.focus() 2728 } 2729 } else { 2730 this.isMenuOpen = true 2731 } 2732 }, 2733 hasActiveSubMenu() { 2734 this.isSubMenuOpen = !!this.$root.querySelector('[data-open]'); 2735 }, 2736 } 2737 } 2738 2739 document.addEventListener('alpine:init', () => { 2740 Alpine.data('initMenuButton', initMenuButton); 2741 }); 2742</script>
2742 2743 2744<a 2745 class="logo align-middle justify-self-center flex-shrink-0" 2746 href="https://fera.pl/" 2747 title="Przejdź do strony głównej" 2748> 2749 <img 2750 src="https://fera.pl/media/logo/default/Path_0.png" 2751 srcset="https://fera.pl/media/logo/default/Path_0.png 95w" 2752 sizes="95px" 2753 alt="Fera.pl - sklep zoologiczny" 2754 width="95" 2755 height="44" 2756 loading="eager" 2757 fetchpriority="high" 2758 > 2759 </a> 2760 2761 <div class="grow"> 2762
2763<script> 2764 function getCachedSectionData() { 2765 try { 2766 return JSON.parse(window.localStorage.getItem('mage-cache-storage') || '{}'); 2767 } catch (error) { 2768 return {}; 2769 } 2770 } 2771 2772 /* 2773 * Suggestions are deliberately not gated behind cookie consent (decision of 23.09.2026, FERA-2778). 2774 * /search/ajax/suggest/ is a first-party, functional endpoint that sets no tracking cookie, so 2775 * waiting for a click on the cookie bar only broke search for visitors who never saw the bar 2776 * (a country outside its list, an empty GeoIP answer). The ElasticSuite tracker and Synerise keep 2777 * their own consent gates. 2778 */ 2779 function initMiniSearchComponent() { 2780 return { 2781 show:false, 2782 formSelector: "#search_mini_form", 2783 url: "https://fera.pl/search/ajax/suggest/", 2784 destinationSelector: "#search_autocomplete", 2785 templates: {"term":{"sectionClasses":"term px-4 py-3 border-b border-secondary-lighter","contentClasses":"flex flex-wrap gap-x-6 gap-y-2","template":"Hyva_SmileElasticsuite::core\/autocomplete\/term.phtml"},"product":{"titleSize":"text-sm","sectionClasses":"product px-4 pt-3 pb-4","contentClasses":"grid grid-cols-1 gap-2 md:grid-cols-2","title":"Polecane produkty","template":"Hyva_SmileElasticsuite::catalog\/autocomplete\/product.phtml"},"category":{"titleSize":"text-xs","sectionClasses":"category px-4 py-3 border-b border-secondary-lighter bg-container","contentClasses":"flex flex-wrap gap-x-6 gap-y-1.5","title":"Polecane kategorie","template":"Hyva_SmileElasticsuite::catalog\/autocomplete\/category.phtml"},"product_attribute":{"titleSize":"text-xs","sectionClasses":"product-attribute px-4 py-3 border-t border-secondary-lighter bg-container","contentClasses":"flex flex-wrap gap-x-6 gap-y-2","title":"Cechy","template":"Hyva_SmileElasticsuite::catalog\/autocomplete\/product_attribute.phtml","titleRenderer":"renderEsAutocompleteTitleAttribute"},"cms_page":{"title":"Cms page","template":"Hyva_SmileElasticsuite::cms-search\/autocomplete\/cms.phtml"}}, 2786 priceFormat: {"pattern":"%s\u00a0z\u0142","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":"\u00a0","groupLength":3,"integerRequired":false}, 2787 minSearchLength: 2, 2788 searchResultsByType: {}, 2789 currentRequest: null, 2790 2791 /** 2792 * Get search results. 2793 */ 2794 getSearchResults: function () { 2795 let value = document.querySelector('#search').value.trim(); 2796 2797 if (value.length < parseInt(this.minSearchLength, 10)) { 2798 this.searchResultsByType = []; 2799 2800 return false; 2801 } 2802 2803 let url = this.url + '?' + new URLSearchParams({ 2804 q: document.querySelector('#search').value 2805 }).toString(); 2806 2807 if (this.currentRequest !== null) { 2808 this.currentRequest.abort(); 2809 } 2810 this.currentRequest = new AbortController(); 2811 2812 fetch(url, { 2813 method: 'GET', 2814 signal: this.currentRequest.signal, 2815 }).then((response) => { 2816 if (response.ok) { 2817 return response.json(); 2818 } 2819 }).then((data) => { 2820 this.show = data.length > 0; 2821 2822 this.searchResultsByType = data.reduce((acc, result) => { 2823 if (! acc[result.type]) acc[result.type] = []; 2824 acc[result.type].push(result); 2825 return acc; 2826 }, {}); 2827 }).catch((error) => { 2828 ; 2829 }); 2830 }, 2831 } 2832 } 2833</script>
2833 2834<search 2835 id="elasticsuite-search-container" 2836 class="px-0 xl:max-w-2xl xl:mx-auto 2xl:max-w-3xl" 2837 x-data="initMiniSearchComponent()" 2838 @click.away="show = false" 2839> 2840 <form class="form minisearch container px-0" id="search_mini_form" action="https://fera.pl/catalogsearch/result/" method="get"> 2841 <div class="flex"> 2842 <label class="sr-only" for="search" data-role="minisearch-label"> 2843 <span>Szukaj</span> 2844 </label> 2845 <input 2846 id="search" 2847 x-ref="searchInput" 2848 type="search" 2849 autocapitalize="off" 2850 autocomplete="off" 2851 autocorrect="off" 2852 name="q" 2853 value="" 2854 placeholder="Czego szukasz?" 2855 maxlength="128" 2856 class="w-full form-input !rounded-l-2xl !rounded-r-none" 2857 @input.debounce.300="getSearchResults()" 2858 @search-open.window.debounce.10="$el.focus(); $el.select()" 2859 > 2860 <button 2861 type="submit" 2862 title="Szukaj" 2863 class="action search btn btn-primary justify-center rounded-2xl text-base hover:shadow-lg active:shadow disabled:shadow-none transition rounded-l-none rounded-r-2xl shadow-none px-3" 2864 aria-label="Szukaj" 2865 > 2866 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 2867 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 2868</svg> 2869 </button> 2870 </div> 2871 </form> 2872 <div id="search_autocomplete" class="search-autocomplete w-full" x-show="show" x-cloak> 2873 <div class="card absolute inset-x-0 w-full max-w-7xl mt-4 mx-auto p-0 overflow-y-auto overscroll-contain max-h-[calc(100vh_-_10rem)] z-10 max-xs:rounded-none xs:mt-2.5"> 2874 <template x-for="searchResultByType in Object.values(searchResultsByType)"> 2875 <div :class="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].sectionClasses"> 2876 <template x-if="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].title && templates[searchResultByType[0].type].titleRenderer === undefined"> 2877 <div class="mb-1.5 text-brandSecondary-900 font-semibold" 2878 :class="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].titleSize" 2879 x-text="templates[searchResultByType[0].type].title"></div> 2880 </template> 2881 <template x-if="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].titleRenderer !== undefined"> 2882 <div class="mb-1.5 text-brandSecondary-900 font-semibold" 2883 :class="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].titleSize" 2884 x-text="window[templates[searchResultByType[0].type].titleRenderer](searchResultByType)"></div> 2885 </template> 2886 2887 <div :class="searchResultByType.hasOwnProperty(0) && templates[searchResultByType[0].type].contentClasses"> 2888 <template x-for="(searchResult, index) in searchResultByType" 2889 :key="searchResult.type + ':' + (searchResult.id || searchResult.url || index)"> 2890 <div> 2891 2892<template x-if="searchResult.type == 'term'"> 2893 <a class="block text-sm text-brandSecondary-700 hover:text-brandSecondary-900" 2894 x-bind:href="'https://fera.pl/catalogsearch/result/?q=' + encodeURIComponent(searchResult.title)" 2895 :title="searchResult.title"> 2896 <template x-if="searchResult.highlighted_title"> 2897 <span x-html="searchResult.highlighted_title"></span> 2898 </template> 2899 <template x-if="!searchResult.highlighted_title">
2900 <span x-text="searchResult.title"></span> 2901 </template> 2902 </a> 2903</template> 2904 2905<template x-if="searchResult.type == 'product'"> 2906 <div class="product-item flex gap-3 p-2 rounded-lg border border-transparent transition-colors hover:bg-brandPrimary-50 hover:border-brandPrimary-400"> 2907 <a class="shrink-0" :href="searchResult.url" :title="searchResult.title" tabindex="-1"> 2908 <img class="w-[68px] h-[60px] object-contain bg-white rounded" 2909 :src="searchResult.image" 2910 :alt="searchResult.title" 2911 width="68" 2912 height="60" 2913 loading="lazy" /> 2914 </a> 2915 <div class="flex flex-col flex-1 gap-1 min-w-0"> 2916 <div class="flex flex-wrap items-center gap-x-4 gap-y-2"> 2917 <div class="flex flex-col flex-1 basis-full lg:basis-0 gap-0.5 min-w-0"> 2918 <template x-if="searchResult.badges"> 2919 <div x-html="searchResult.badges"></div> 2920 </template> 2921 <a class="font-bold text-base leading-6 text-secondary line-clamp-2" 2922 :href="searchResult.url" 2923 :title="searchResult.title" 2924 x-text="searchResult.title"></a> 2925 </div> 2926 <div class="flex flex-col shrink-0 items-center justify-center gap-1.5 text-center"> 2927 <div x-html="searchResult.price"></div> 2928 <template x-if="searchResult.capacity_per_price"> 2929 <span class="text-xs font-medium text-brandSecondary-600" 2930 x-text="searchResult.capacity_per_price"></span> 2931 </template> 2932 </div> 2933 <template x-if="searchResult.add_to_cart_url"> 2934 <form method="post" 2935 class="product_addtocart_form shrink-0" 2936 :action="searchResult.add_to_cart_url"> 2937 <input type="hidden" name="form_key" :value="hyva.getFormKey()"> 2938 <input type="hidden" name="product" :value="searchResult.id"> 2939 <div x-data="initAddToCart(searchResult.qty_config || {})" 2940 x-effect="productId = Number(searchResult.id); onGetCartData(getCachedSectionData())" 2941 @private-content-loaded.window="onGetCartData($event.detail.data)" 2942 > 2943 <input type="hidden" name="qty" :value="itemQty"> 2944 <button 2945 type="button" 2946 class="btn btn-primary btn-icon-size-l" 2947 @click="increment" 2948 x-ref="addToButton" 2949 > 2950 <template x-if="itemQty"> 2951 <span class="leading-none font-semibold" x-text="itemQty"></span> 2952 </template> 2953 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"> 2954 <use href="#tk-icon-plus-solid"/> 2955 </svg> 2956 <span class="sr-only">Dodaj do koszyka</span> 2957 </button> 2958 </div> 2959 </form> 2960 </template> 2961 <template x-if="!searchResult.add_to_cart_url && searchResult.is_salable !== false"> 2962 <a class="btn btn-primary btn-icon-size-l shrink-0" 2963 :href="searchResult.url" 2964 :title="searchResult.title" 2965 > 2966 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 2967 <path d="M17.414 2.586a2 2 0 00-2.828 0L7 10.172V13h2.828l7.586-7.586a2 2 0 000-2.828z"/> 2968 <path fill-rule="evenodd" d="M2 6a2 2 0 012-2h4a1 1 0 010 2H4v10h10v-4a1 1 0 112 0v4a2 2 0 01-2 2H4a2 2 0 01-2-2V6z" clip-rule="evenodd"/> 2969</svg>
2970 <span class="sr-only">Konfiguruj</span> 2971 </a> 2972 </template> 2973 </div> 2974 <template x-if="searchResult.lowest_price"> 2975 <span class="block text-xs leading-[18px] text-brandSecondary-600" 2976 x-html="searchResult.lowest_price"></span> 2977 </template> 2978 </div> 2979 </div> 2980</template> 2981 2982<template x-if="searchResult.type == 'category'"> 2983 <a class="block text-sm text-brandSecondary-700 hover:text-brandSecondary-900" 2984 :href="searchResult.url" 2985 :title="searchResult.title"> 2986 <template x-if="searchResult.highlighted_title"> 2987 <span x-html="searchResult.highlighted_title"></span> 2988 </template> 2989 <template x-if="!searchResult.highlighted_title"> 2990 <span x-text="searchResult.title"></span> 2991 </template> 2992 </a> 2993</template> 2994 2995<template x-if="searchResult.type == 'product_attribute'"> 2996 <a class="text-brandSecondary-900 text-sm" :href="searchResult.url" :title="searchResult.title"> 2997 <span x-text="searchResult.title"></span> 2998 <template x-if="searchResultByType.some(item => item.attribute_label !== searchResult.attribute_label)"> 2999 <span class="text-xs uppercase text-brandSecondary-600" x-text="searchResult.attribute_label"></span> 3000 </template> 3001 </a> 3002</template> 3003
3004<script> 3005 function renderEsAutocompleteTitleAttribute(data) 3006 { 3007 data = data.filter(function(item) { 3008 return item.type === 'product_attribute'; 3009 }).map(function(item) { 3010 return item['attribute_label'] 3011 }).reduce(function(prev, item) { 3012 if (item in prev) { 3013 prev[item]++; 3014 } else { 3015 prev[item] = 1; 3016 } 3017 return prev; 3018 }, {}); 3019 3020 data = Object.entries(data).sort(function(item1, item2) { 3021 return item2[1] - item1[1] 3022 }).map(function(item) {return item[0]}); 3023 3024 if (data.length > 2) { 3025 data = data.slice(0, 2); 3026 data.push('...'); 3027 } 3028 3029 return data.join(', '); 3030 } 3031</script>
3031 3032 3033<template x-if="searchResult.type == 'cms_page'"> 3034 <a class="w-full block p-2" :href="searchResult.url" :title="searchResult.title"> 3035 <span class="text-sm" x-text="searchResult.title"></span> 3036 </a> 3037</template> 3038 </div> 3039 </template> 3040 </div> 3041 3042 <template x-if="searchResultByType.hasOwnProperty(0) && searchResultByType[0].type === 'product'"> 3043 <div class="flex justify-center pt-4"> 3044 <button 3045 type="submit" 3046 form="search_mini_form" 3047 class="btn btn-size-s" 3048 title="Pokaż wszystkie" 3049 aria-label="Pokaż wszystkie" 3050 > 3051 Pokaż wszystkie </button> 3052 </div> 3053 </template> 3054 </div> 3055 </template> 3056 </div> 3057 </div> 3058</search> 3059 </div> 3060 3061 <div class="hidden xl:flex xl:ml-auto gap-3 items-center"> 3062 3063 3064 3065
3065<script> 3066 function initWishlistLink() { 3067 return { 3068 wishlistProducts: null, 3069 itemCount: 0, 3070 linkAriaLabel() { 3071 const countLabel = this.itemCount > 1 3072 ? hyva.str('Produkty\u0020\u00251', this.itemCount) 3073 : hyva.str('\u00251\u0020element', this.itemCount); 3074 return `Ulubione (${countLabel})`; 3075 }, 3076 receiveWishlistData() { 3077 const data = this.$event.detail.data; 3078 3079 if (data.wishlist && data.wishlist.wishlist_item_count !== undefined) { 3080 this.itemCount = data.wishlist.wishlist_item_count; 3081 } else { 3082 this.itemCount = data.wishlist && data.wishlist.items 3083 ? data.wishlist.items.length 3084 : 0; 3085 } 3086 } 3087 } 3088 } 3089 3090 window.addEventListener('alpine:init', () => { 3091 Alpine.data('initWishlistLink', initWishlistLink); 3092 }, {once: true}) 3093</script>
3093 3094<a 3095 href="https://fera.pl/wishlist/" 3096 class="relative btn btn-icon btn-icon-size-l hidden xl:inline-block" 3097 x-data="initWishlistLink" 3098 @private-content-loaded.window="receiveWishlistData" 3099 aria-label="Ulubione" 3100 :aria-label="linkAriaLabel" 3101> 3102 <span class="relative"> 3103 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="24" height="24" aria-hidden="true"> 3104 <path fill-rule="evenodd" d="M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z" clip-rule="evenodd"/> 3105</svg> 3106 <template x-if="itemCount"> 3107 <span 3108 x-text="itemCount" 3109 class="absolute -top-3.5 -right-3.5 p-0.5 min-w-4 rounded-full bg-red-600 text-white 3110 text-xs font-medium leading-none text-center uppercase tabular-nums" 3111 aria-hidden="true" 3112 ></span> 3113 </template> 3114 </span> 3115 </a> 3116 3117
3118<script> 3119 function initCart() { 3120 return { 3121 cart: {}, 3122 summaryCount() { 3123 return this.cart.summary_count || 0; 3124 }, 3125 isCartOpen: false, 3126 getData() { 3127 const data = this.$event.detail.data; 3128 if (data.cart) { 3129 this.cart = data.cart 3130 } 3131 }, 3132 ariaLabel() { 3133 return 'Poka\u017C\u002Fukryj\u0020koszyk, ' + 3134 (this.isCartEmpty() ? 'Koszyk\u0020jest\u0020pusty' : ( 3135 Math.abs(this.summaryCount()) > 1 ? 3136 hyva.str('\u00251\u0020element\u00F3w', this.summaryCount()) : 3137 hyva.str('\u00251\u0020pozycja', this.summaryCount()) 3138 )) 3139 }, 3140 isCartEmpty() { 3141 return !this.summaryCount() 3142 }, 3143 openCart() { 3144 this.$dispatch('toggle-cart', { 3145 isOpen: true 3146 }) 3147 }, 3148 toggleCart() { 3149 const event = this.$event; 3150 if (event.detail && event.detail.isOpen !== undefined) { 3151 this.isCartOpen = event.detail.isOpen 3152 if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { 3153 this.$refs.cartButton.focus() 3154 } 3155 } else { 3156 this.isCartOpen = true 3157 } 3158 }, 3159 } 3160 } 3161 3162 window.addEventListener('alpine:init', () => { 3163 Alpine.data('initCart', initCart); 3164 }, {once: true}) 3165</script>
3165 3166 3167 <button 3168 class="relative btn btn-icon btn-icon-size-l hidden xl:inline-block" 3169 x-data="initCart" 3170 x-ref="cartButton" 3171 @private-content-loaded.window="getData" 3172 :aria-disabled="isCartEmpty" 3173 :aria-label="ariaLabel" 3174 @click.prevent="openCart" 3175 @toggle-cart.window="toggleCart" 3176 :aria-expanded="isCartOpen" 3177 aria-haspopup="dialog" 3178 > 3179 <span class="relative"> 3180 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="24" height="24" aria-hidden="true"> 3181 <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/> 3182</svg> 3183 <span 3184 x-text="summaryCount" 3185 x-show="summaryCount" 3186 x-cloak 3187 class="absolute -top-3.5 -right-3.5 p-0.5 min-w-4 rounded-full bg-red-600 text-white 3188 text-xs font-medium leading-none text-center uppercase tabular-nums" 3189 aria-hidden="true" 3190 ></span> 3191 </span> 3192 </button> 3193 3194 <!-- BLOCK header.customer --> 3195 <a class="hidden xl:flex btn btn-primary" 3196 onclick="hyva.setCookie && hyva.setCookie( 3197 'login_redirect', 3198 window.location.href, 3199 1 3200 )" 3201 href="https://fera.pl/customer/account/index/" 3202 > 3203 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 3204 <path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"/> 3205</svg> 3206 Zaloguj siÄ </a> 3207<!-- /BLOCK header.customer --> </div> 3208 </div> 3209 3210 <div 3211 class="dektop-navigation bg-tertiary-lighter hidden shadow-lg xl:block xl:absolute xl:left-0 xl:right-0" 3212 x-ref="desktopNavigation" 3213 > 3214 <div class="container relative flex items-center justify-between gap-4 py-2 "> 3215 3216<nav 3217 id="desktop-menu" 3218 class="navigation grow hidden xl:block overflow-x-auto scrollbar-custom" 3219 aria-label="Menu główne" 3220 x-data="initMenuDesktop" 3221> 3222 <ul class="flex gap-x-1"> 3223 <li 3224 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap" 3225 data-id="category-5" 3226 @click.outside="close(false)" 3227 @keydown.escape="close" 3228 @mouseenter="canHoverOpen" 3229 @mouseleave="canHoverClose" 3230 > 3231 <a 3232 href="https://fera.pl/pies.html" 3233 class="btn btn-nav" 3234 > 3235 Pies </a> 3236 <button 3237 data-id="category-5" 3238 type="button" 3239 class="group btn btn-flat btn-icon-size-s sr-only focus:not-sr-only" 3240 @click="toggle" 3241 aria-expanded="false" 3242 :aria-expanded="openDropdownId === 'category-5'" 3243 aria-controls="desktop-menu-category-5" 3244 x-ref="btn_category-5" 3245 > 3246 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 3247 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3248</svg> 3249 </button> 3250 <template x-if="openDropdownId === 'category-5'"> 3251 <div 3252 id="desktop-menu-category-5" 3253 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 3254 :class="{ 'grid-cols-3': $store.banners.activeBanners.length }" 3255 x-ref="childmenu_category-5" 3256 x-transition 3257 > 3258 <div 3259 class="flex overflow-x-auto"
3260 :class="{ 'col-span-2': $store.banners.activeBanners.length }" 3261 > 3262 <ul class="relative flex flex-col gap-1 py-2.5 px-2 min-w-72"> 3263 3264 <li 3265 class="level-1" 3266 data-id="category-node-6" 3267 x-data="initSubMenuDesktopItem" 3268 @click.outside="close" 3269 > 3270 <button 3271 type="button" 3272 class="dropdown-list-item" 3273 x-ref="childmenuToggle" 3274 @click="toggle" 3275 aria-expanded="false" 3276 :aria-expanded="open" 3277 aria-controls="category-6-desktop-menu-panel" 3278 > 3279 Karma dla psa <svg xmlns="http://www.w3.org/2000/svg" 3280 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 3281 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 3282 </button> 3283 <template x-if="open"> 3284 <ul 3285 id="category-6-desktop-menu-panel" 3286 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 3287 x-ref="childMenuWrapper" 3288 @keydown.escape.stop="closeEscape" 3289 > 3290 <li> 3291 <a 3292 href="https://fera.pl/pies/karma-dla-psa.html" 3293 class="dropdown-list-item font-bold" 3294 >Karma dla psa - zobacz wszystko</a> 3295 </li> 3296 3297 <li class="level-2"> 3298 <a 3299 href="https://fera.pl/pies/karma-dla-psa/karma-sucha-dla-psa.html" 3300 class="dropdown-list-item" 3301 >Karma sucha dla psa</a> 3302 </li> 3303 3304 <li class="level-2"> 3305 <a 3306 href="https://fera.pl/pies/karma-dla-psa/karma-mokra-dla-psa.html" 3307 class="dropdown-list-item" 3308 >Karma mokra dla psa</a> 3309 </li> 3310 3311 <li class="level-2"> 3312 <a 3313 href="https://fera.pl/pies/karma-dla-psa/karma-liofilizowana-dla-psa.html" 3314 class="dropdown-list-item" 3315 >Karma liofilizowana dla psa</a> 3316 </li> 3317 3318 <li class="level-2"> 3319 <a 3320 href="https://fera.pl/pies/karma-dla-psa/mleko-zastepcze-dla-psa.html" 3321 class="dropdown-list-item" 3322 >Mleko zastÄpcze dla psa</a> 3323 </li> 3324 3325 <li class="level-2"> 3326 <a 3327 href="https://fera.pl/pies/karma-dla-psa/zywienie-oparte-na-nauce.html" 3328 class="dropdown-list-item" 3329 >Å»ywienie oparte na nauce </a> 3330 </li> 3331 3332 <li class="level-2"> 3333 <a 3334 href="https://fera.pl/pies/karma-dla-psa/karma-dla-szczeniaka.html" 3335 class="dropdown-list-item" 3336 >Karma dla szczeniaka</a> 3337 </li> 3338 3339 <li class="level-2"> 3340 <a 3341 href="https://fera.pl/pies/karma-dla-psa/karma-dla-doroslego-psa.html" 3342 class="dropdown-list-item" 3343 >Karma dla dorosÅego psa</a> 3344 </li> 3345 3346 <li class="level-2"> 3347 <a 3348 href="https://fera.pl/pies/karma-dla-psa/karma-dla-psa-seniora.html" 3349 class="dropdown-list-item" 3350 >Karma dla psa seniora</a> 3351 </li> 3352 3353 <li class="level-2"> 3354 <a 3355 href="https://fera.pl/pies/karma-dla-psa/karma-bezzbozowa-dla-psa.html" 3356 class="dropdown-list-item" 3357 >Karma bezzbożowa dla psa</a> 3358 </li> 3359 </ul> 3360 </template> 3361 </li> 3362 3363 <li 3364 class="level-1" 3365 data-id="category-node-9" 3366 x-data="initSubMenuDesktopItem" 3367 @click.outside="close" 3368 > 3369 <button 3370 type="button" 3371 class="dropdown-list-item" 3372 x-ref="childmenuToggle" 3373 @click="toggle" 3374 aria-expanded="false" 3375 :aria-expanded="open" 3376 aria-controls="category-9-desktop-menu-panel" 3377 > 3378 Karma weterynaryjna dla psa <svg xmlns="http://www.w3.org/2000/svg" 3379 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 3380 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 3381 </button> 3382 <template x-if="open"> 3383 <ul 3384 id="category-9-desktop-menu-panel" 3385 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 3386 x-ref="childMenuWrapper" 3387 @keydown.escape.stop="closeEscape" 3388 > 3389 <li> 3390 <a 3391 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa.html" 3392 class="dropdown-list-item font-bold" 3393 >Karma weterynaryjna dla psa - zobacz wszystko</a> 3394 </li> 3395 3396 <li class="level-2"> 3397 <a 3398 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-hipoalergiczna-dla-psa.html" 3399 class="dropdown-list-item" 3400 >Karma hipoalergiczna dla psa</a> 3401 </li> 3402 3403 <li class="level-2"> 3404 <a 3405 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-z-cukrzyca.html" 3406 class="dropdown-list-item" 3407 >
3407Karma dla psa z cukrzycÄ </a> 3408 </li> 3409 3410 <li class="level-2"> 3411 <a 3412 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dietetyczna-dla-psa.html" 3413 class="dropdown-list-item" 3414 >Karma dietetyczna dla psa</a> 3415 </li> 3416 3417 <li class="level-2"> 3418 <a 3419 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-z-problemami-skornymi.html" 3420 class="dropdown-list-item" 3421 >Karma dla psa z problemami skórnymi</a> 3422 </li> 3423 3424 <li class="level-2"> 3425 <a 3426 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-problemy-z-zebami.html" 3427 class="dropdown-list-item" 3428 >Karma dla psa na problemy z zÄbami</a> 3429 </li> 3430 3431 <li class="level-2"> 3432 <a 3433 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-rekonwalescencje.html" 3434 class="dropdown-list-item" 3435 >Karma dla psa na rekonwalescencjÄ</a> 3436 </li> 3437 3438 <li class="level-2"> 3439 <a 3440 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-urinary-dla-psa.html" 3441 class="dropdown-list-item" 3442 >Karma urinary dla psa</a> 3443 </li> 3444 3445 <li class="level-2"> 3446 <a 3447 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-renal-dla-psa.html" 3448 class="dropdown-list-item" 3449 >Karma renal dla psa</a> 3450 </li> 3451 3452 <li class="level-2"> 3453 <a 3454 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-problemy-z-sercem.html" 3455 class="dropdown-list-item" 3456 >Karma dla psa na problemy z sercem</a> 3457 </li> 3458 3459 <li class="level-2"> 3460 <a 3461 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-stawy.html" 3462 class="dropdown-list-item" 3463 >Karma dla psa na stawy</a> 3464 </li> 3465 3466 <li class="level-2"> 3467 <a 3468 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-hepatic-dla-psa.html" 3469 class="dropdown-list-item" 3470 >Karma hepatic dla psa</a> 3471 </li> 3472 3473 <li class="level-2"> 3474 <a 3475 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-gastro-dla-psa.html" 3476 class="dropdown-list-item" 3477 >Karma gastro dla psa</a> 3478 </li> 3479 3480 <li class="level-2"> 3481 <a 3482 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-z-chora-trzustka.html" 3483 class="dropdown-list-item" 3484 >Karma dla psa z chorÄ trzustkÄ </a> 3485 </li> 3486 3487 <li class="level-2"> 3488 <a 3489 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-po-kastracji.html" 3490 class="dropdown-list-item" 3491 >Karma dla psa po kastracji</a> 3492 </li> 3493 </ul> 3494 </template> 3495 </li> 3496 3497 <li 3498 class="level-1" 3499 data-id="category-node-90" 3500 x-data="initSubMenuDesktopItem" 3501 @click.outside="close" 3502 > 3503 <button 3504 type="button" 3505 class="dropdown-list-item" 3506 x-ref="childmenuToggle" 3507 @click="toggle" 3508 aria-expanded="false" 3509 :aria-expanded="open" 3510 aria-controls="category-90-desktop-menu-panel" 3511 > 3512 Karma dla psów rasowych <svg xmlns="http://www.w3.org/2000/svg" 3513 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 3514 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 3515 </button> 3516 <template x-if="open"> 3517 <ul 3518 id="category-90-desktop-menu-panel" 3519 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 3520 x-ref="childMenuWrapper" 3521 @keydown.escape.stop="closeEscape" 3522 > 3523 <li> 3524 <a 3525 href="https://fera.pl/pies/karma-dla-psow-rasowych.html" 3526 class="dropdown-list-item font-bold" 3527 >Karma dla psów rasowych - zobacz wszystko</a> 3528 </li> 3529 3530 <li class="level-2"> 3531 <a 3532 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-beagle.html" 3533 class="dropdown-list-item" 3534 >Karma dla Beagle</a> 3535 </li> 3536 3537 <li class="level-2"> 3538 <a 3539 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-buldoga-angielskiego.html" 3540 class="dropdown-list-item" 3541 >Karma dla Buldoga angielskiego</a> 3542 </li> 3543 3544 <li class="level-2"> 3545 <a 3546 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-buldoga-francuskiego.html" 3547 class="dropdown-list-item" 3548 >Karma dla Buldoga francuskiego</a> 3549 </li> 3550 3551 <li class="level-2"> 3552 <a 3553 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-cavalier-king-charles.html" 3554 class="dropdown-list-item" 3555 >Karma dla Cavalier king charles</a> 3556 </li> 3557 3558 <li class="level-2"> 3559 <a 3560 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-chihuahua.html" 3561 class="dropdown-list-item" 3562 >Karma dla Chihuahua</a> 3563 </li> 3564 3565 <li class="level-2"> 3566 <a 3567 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-jamnika.html" 3568 class="dropdown-list-item" 3569 >Karma dla Jamnika</a> 3570 </li> 3571 3572 <li class="level-2"> 3573 <a 3574 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-owczarka-niemieckiego.html" 3575 class="dropdown-list-item" 3576 >Karma dla Owczarka niemieckiego</a> 3577 </li> 3578 3579 <li class="level-2"> 3580 <a 3581 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-goldena.html" 3582 class="dropdown-list-item" 3583 >Karma dla Goldena</a> 3584 </li> 3585 3586 <li class="level-2"> 3587 <a 3588 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-doga-niemieckiego.html" 3589 class="dropdown-list-item" 3590 >Karma dla Doga niemieckiego</a> 3591 </li> 3592 3593 <li class="level-2"> 3594 <a 3595 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-jack-russell-terrier.html" 3596 class="dropdown-list-item" 3597 >Karma dla Jack russell terrier</a> 3598 </li> 3599 3600 <li class="level-2"> 3601 <a 3602 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-labrador-retriever.html" 3603 class="dropdown-list-item" 3604 >Karma dla Labrador retriever</a> 3605 </li> 3606 3607 <li class="level-2"> 3608 <a 3609 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-sznaucera.html" 3610 class="dropdown-list-item" 3611 >Karma dla Sznaucera</a> 3612 </li> 3613 3614 <li class="level-2"> 3615 <a 3616 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-pudla.html" 3617 class="dropdown-list-item" 3618 >Karma dla Pudla</a> 3619 </li> 3620 3621 <li class="level-2"> 3622 <a 3623 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-rottweiler.html" 3624 class="dropdown-list-item" 3625 >Karma dla Rottweiler</a> 3626 </li> 3627 3628 <li class="level-2"> 3629 <a 3630 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-shih-tzu.html" 3631 class="dropdown-list-item" 3632 >Karma dla Shih tzu</a> 3633 </li> 3634 3635 <li class="level-2"> 3636 <a 3637 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-west-highland-white-terrier.html" 3638 class="dropdown-list-item" 3639 >Karma dla West highland white terrier</a> 3640 </li> 3641 3642 <li class="level-2"> 3643 <a 3644 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-yorkshire-terrier.html" 3645 class="dropdown-list-item" 3646 >Karma dla Yorkshire terrier</a> 3647 </li> 3648 3649 <li class="level-2"> 3650 <a 3651 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-szpica-miniaturowego-pomeranian.html" 3652 class="dropdown-list-item" 3653 >Karma dla Szpica miniaturowego pomeranian</a> 3654 </li> 3655 </ul> 3656 </template> 3657 </li> 3658 3659 <li 3660 class="level-1" 3661 data-id="category-node-27" 3662 x-data="initSubMenuDesktopItem" 3663 @click.outside="close" 3664 > 3665 <button 3666 type="button" 3667 class="dropdown-list-item" 3668 x-ref="childmenuToggle" 3669 @click="toggle" 3670 aria-expanded="false" 3671 :aria-expanded="open" 3672 aria-controls="category-27-desktop-menu-panel" 3673 > 3674 Karma dla psa: PodziaÅ wg firm <svg xmlns="http://www.w3.org/2000/svg" 3675 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 3676 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 3677 </button> 3678 <template x-if="open"> 3679 <ul 3680 id="category-27-desktop-menu-panel" 3681 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 3682 x-ref="childMenuWrapper" 3683 @keydown.escape.stop="closeEscape" 3684 > 3685 <li> 3686 <a 3687 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm.html" 3688 class="dropdown-list-item font-bold" 3689 >Karma dla psa: PodziaÅ wg firm - zobacz wszystko</a> 3690 </li> 3691 3692 <li class="level-2"> 3693 <a 3694 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-royal-canin.html" 3695 class="dropdown-list-item" 3696 >Karma dla psa Royal Canin</a> 3697 </li> 3698 3699 <li class="level-2"> 3700 <a 3701 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-simply-from-nature.html" 3702 class="dropdown-list-item" 3703 >Karma dla psa Simply From Nature</a> 3704 </li> 3705 3706 <li class="level-2"> 3707 <a 3708 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-pedigree.html" 3709 class="dropdown-list-item" 3710 >Karma dla psa Pedigree</a> 3711 </li> 3712 3713 <li class="level-2"> 3714 <a 3715 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-josera.html" 3716 class="dropdown-list-item" 3717 >Karma dla psa Josera</a> 3718 </li> 3719 3720 <li class="level-2"> 3721 <a 3722 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-brit.html" 3723 class="dropdown-list-item" 3724 >Karma dla psa Brit</a> 3725 </li> 3726 3727 <li class="level-2"> 3728 <a 3729 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-chappi.html" 3730 class="dropdown-list-item" 3731 >Karma dla psa Chappi</a> 3732 </li> 3733 3734 <li class="level-2"> 3735 <a 3736 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-eukanuba.html" 3737 class="dropdown-list-item" 3738 >Karma dla psa Eukanuba</a> 3739 </li> 3740 3741 <li class="level-2"> 3742 <a 3743 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-fitmin.html" 3744 class="dropdown-list-item" 3745 >Karma dla psa Fitmin</a> 3746 </li> 3747 3748 <li class="level-2"> 3749 <a 3750 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-bosch.html" 3751 class="dropdown-list-item" 3752 >Karma dla psa Bosch</a> 3753 </li> 3754 3755 <li class="level-2"> 3756 <a 3757 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-acana.html" 3758 class="dropdown-list-item" 3759 >Karma dla psa Acana</a> 3760 </li> 3761 3762 <li class="level-2"> 3763 <a 3764 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-iams.html" 3765 class="dropdown-list-item" 3766 >Karma dla psa Iams</a> 3767 </li> 3768 3769 <li class="level-2"> 3770 <a 3771 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-perfect-fit.html" 3772 class="dropdown-list-item" 3773 >Karma dla psa Perfect Fit</a> 3774 </li> 3775 3776 <li class="level-2"> 3777 <a 3778 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-purina.html" 3779 class="dropdown-list-item" 3780 >Karma dla psa Purina</a> 3781 </li> 3782 3783 <li class="level-2"> 3784 <a 3785 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-alpha-spirit.html" 3786 class="dropdown-list-item" 3787 >Karma dla psa Alpha Spirit</a> 3788 </li> 3789 3790 <li class="level-2"> 3791 <a 3792 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-arion.html" 3793 class="dropdown-list-item" 3794 >Karma dla psa Arion</a> 3795 </li> 3796 3797 <li class="level-2"> 3798 <a 3799 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-butcher-s.html" 3800 class="dropdown-list-item" 3801 >Karma dla psa Butcher's</a> 3802 </li> 3803 3804 <li class="level-2"> 3805 <a 3806 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-carnilove.html" 3807 class="dropdown-list-item" 3808 >Karma dla psa Carnilove</a> 3809 </li> 3810 3811 <li class="level-2"> 3812 <a 3813 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-farmina.html" 3814 class="dropdown-list-item" 3815 >Karma dla psa Farmina</a> 3816 </li> 3817 3818 <li class="level-2"> 3819 <a 3820 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-frolic.html" 3821 class="dropdown-list-item" 3822 >Karma dla psa Frolic</a> 3823 </li> 3824 3825 <li class="level-2"> 3826 <a 3827 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-hill-s.html" 3828 class="dropdown-list-item" 3829 >Karma dla psa Hill's</a> 3830 </li> 3831 3832 <li class="level-2"> 3833 <a 3834 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-taste-of-the-wild.html" 3835 class="dropdown-list-item" 3836 >Karma dla psa Taste Of The Wild</a> 3837 </li> 3838 3839 <li class="level-2"> 3840 <a 3841 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/k
3841arma-dla-psa-nero-gold.html" 3842 class="dropdown-list-item" 3843 >Karma dla psa Nero Gold</a> 3844 </li> 3845 3846 <li class="level-2"> 3847 <a 3848 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-cesar.html" 3849 class="dropdown-list-item" 3850 >Karma dla psa Cesar</a> 3851 </li> 3852 3853 <li class="level-2"> 3854 <a 3855 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-stuzzy.html" 3856 class="dropdown-list-item" 3857 >Karma dla psa Stuzzy</a> 3858 </li> 3859 3860 <li class="level-2"> 3861 <a 3862 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-schesir.html" 3863 class="dropdown-list-item" 3864 >Karma dla psa Schesir</a> 3865 </li> 3866 3867 <li class="level-2"> 3868 <a 3869 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-applaws.html" 3870 class="dropdown-list-item" 3871 >Karma dla psa Applaws</a> 3872 </li> 3873 3874 <li class="level-2"> 3875 <a 3876 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-dolina-noteci.html" 3877 class="dropdown-list-item" 3878 >Karma dla psa Dolina Noteci</a> 3879 </li> 3880 3881 <li class="level-2"> 3882 <a 3883 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-forza10.html" 3884 class="dropdown-list-item" 3885 >Karma dla psa Forza10</a> 3886 </li> 3887 3888 <li class="level-2"> 3889 <a 3890 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-country-nature.html" 3891 class="dropdown-list-item" 3892 >Karma dla psa Country&Nature</a> 3893 </li> 3894 3895 <li class="level-2"> 3896 <a 3897 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-monge.html" 3898 class="dropdown-list-item" 3899 >Karma dla psa Monge</a> 3900 </li> 3901 3902 <li class="level-2"> 3903 <a 3904 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-belcando.html" 3905 class="dropdown-list-item" 3906 >Karma dla psa Belcando</a> 3907 </li> 3908 3909 <li class="level-2"> 3910 <a 3911 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-crave.html" 3912 class="dropdown-list-item" 3913 >Karma dla psa Crave</a> 3914 </li> 3915 3916 <li class="level-2"> 3917 <a 3918 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-orijen.html" 3919 class="dropdown-list-item" 3920 >Karma dla psa Orijen</a> 3921 </li> 3922 3923 <li class="level-2"> 3924 <a 3925 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-paka-zwierzaka.html" 3926 class="dropdown-list-item" 3927 >Karma dla psa Paka Zwierzaka</a> 3928 </li> 3929 3930 <li class="level-2"> 3931 <a 3932 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-cibau.html" 3933 class="dropdown-list-item" 3934 >Karma dla psa Cibau</a> 3935 </li> 3936 3937 <li class="level-2"> 3938 <a 3939 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-rafi.html" 3940 class="dropdown-list-item" 3941 >Karma dla psa Rafi</a> 3942 </li> 3943 3944 <li class="level-2"> 3945 <a 3946 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-piper.html" 3947 class="dropdown-list-item" 3948 >Karma dla psa Piper</a> 3949 </li> 3950 3951 <li class="level-2"> 3952 <a 3953 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-primal-spirit.html" 3954 class="dropdown-list-item" 3955 >Karma dla psa Primal Spirit</a> 3956 </li> 3957 3958 <li class="level-2"> 3959 <a 3960 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-calibra.html" 3961 class="dropdown-list-item" 3962 >Karma dla psa Calibra</a> 3963 </li> 3964 3965 <li class="level-2"> 3966 <a 3967 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-ziwipeak.html" 3968 class="dropdown-list-item" 3969 >Karma dla psa ZiwiPeak</a> 3970 </li> 3971 3972 <li class="level-2"> 3973 <a 3974 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-rinti.html" 3975 class="dropdown-list-item" 3976 >Karma dla psa Rinti</a> 3977 </li> 3978 3979 <li class="level-2"> 3980 <a 3981 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-marp.html" 3982 class="dropdown-list-item" 3983 >Karma dla psa MARP</a> 3984 </li> 3985 3986 <li class="level-2"> 3987 <a 3988 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-pan-miesko.html" 3989 class="dropdown-list-item" 3990 >Karma dla psa Pan MiÄsko</a> 3991 </li> 3992 3993 <li class="level-2"> 3994 <a 3995 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-canun.html" 3996 class="dropdown-list-item" 3997 >Karma dla psa Canun</a> 3998 </li> 3999 4000 <li class="level-2"> 4001 <a 4002 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-nugape.html" 4003 class="dropdown-list-item" 4004 >Karma dla psa Nugape</a> 4005 </li> 4006 4007 <li class="level-2"> 4008 <a 4009 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-green-petfood.html" 4010 class="dropdown-list-item" 4011 >Karma dla psa Green Petfood</a> 4012 </li> 4013 4014 <li class="level-2"> 4015 <a 4016 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-trovet.html" 4017 class="dropdown-list-item" 4018 >Karma dla psa Trovet</a> 4019 </li> 4020 4021 <li class="level-2"> 4022 <a 4023 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-vet-expert.html" 4024 class="dropdown-list-item" 4025 >Karma dla psa Vet Expert</a> 4026 </li> 4027 4028 <li class="level-2"> 4029 <a 4030 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-divinus.html" 4031 class="dropdown-list-item" 4032 >Karma dla psa Divinus</a> 4033 </li> 4034 4035 <li class="level-2"> 4036 <a 4037 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-addvena.html" 4038 class="dropdown-list-item" 4039 >Karma dla psa Addvena</a> 4040 </li> 4041 4042 <li class="level-2"> 4043 <a 4044 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-arquivet.html" 4045 class="dropdown-list-item" 4046 >Karma dla psa Arquivet</a> 4047 </li> 4048 4049 <li class="level-2"> 4050 <a 4051 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-snut.html" 4052 class="dropdown-list-item" 4053 >Karma dla psa Snut</a> 4054 </li> 4055 4056 <li class="level-2"> 4057 <a 4058 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-migos.html" 4059 class="dropdown-list-item" 4060 >Karma dla psa Migos</a> 4061 </li> 4062 4063 <li class="level-2"> 4064 <a 4065 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-bewi-dog.html" 4066 class="dropdown-list-item" 4067 >Karma dla psa Bewi Dog</a> 4068 </li> 4069 4070 <li class="level-2"> 4071 <a 4072 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-inaba.html" 4073 class="dropdown-list-item" 4074 >Karma dla psa Inaba</a> 4075 </li> 4076 4077 <li class="level-2"> 4078 <a 4079 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-biofeed.html" 4080 class="dropdown-list-item" 4081 >Karma dla psa BioFeed</a> 4082 </li> 4083 4084 <li class="level-2"> 4085 <a 4086 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-comfy-appetit.html" 4087 class="dropdown-list-item" 4088 >
4088Karma dla psa Comfy Appetit</a> 4089 </li> 4090 4091 <li class="level-2"> 4092 <a 4093 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-james-wellbeloved.html" 4094 class="dropdown-list-item" 4095 >Karma dla psa James Wellbeloved</a> 4096 </li> 4097 </ul> 4098 </template> 4099 </li> 4100 4101 <li 4102 class="level-1" 4103 data-id="category-node-110" 4104 x-data="initSubMenuDesktopItem" 4105 @click.outside="close" 4106 > 4107 <button 4108 type="button" 4109 class="dropdown-list-item" 4110 x-ref="childmenuToggle" 4111 @click="toggle" 4112 aria-expanded="false" 4113 :aria-expanded="open" 4114 aria-controls="category-110-desktop-menu-panel" 4115 > 4116 Przysmaki dla psa <svg xmlns="http://www.w3.org/2000/svg" 4117 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4118 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4119 </button> 4120 <template x-if="open"> 4121 <ul 4122 id="category-110-desktop-menu-panel" 4123 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4124 x-ref="childMenuWrapper" 4125 @keydown.escape.stop="closeEscape" 4126 > 4127 <li> 4128 <a 4129 href="https://fera.pl/pies/przysmaki-dla-psa.html" 4130 class="dropdown-list-item font-bold" 4131 >Przysmaki dla psa - zobacz wszystko</a> 4132 </li> 4133 4134 <li class="level-2"> 4135 <a 4136 href="https://fera.pl/pies/przysmaki-dla-psa/gryzaki-dentystyczne-dla-psa.html" 4137 class="dropdown-list-item" 4138 >Gryzaki dentystyczne dla psa</a> 4139 </li> 4140 4141 <li class="level-2"> 4142 <a 4143 href="https://fera.pl/pies/przysmaki-dla-psa/kosci-dla-psa.html" 4144 class="dropdown-list-item" 4145 >KoÅci dla psa</a> 4146 </li> 4147 4148 <li class="level-2"> 4149 <a 4150 href="https://fera.pl/pies/przysmaki-dla-psa/ciasteczka-dla-psa.html" 4151 class="dropdown-list-item" 4152 >Ciasteczka dla psa</a> 4153 </li> 4154 4155 <li class="level-2"> 4156 <a 4157 href="https://fera.pl/pies/przysmaki-dla-psa/treserki-dla-psa.html" 4158 class="dropdown-list-item" 4159 >Treserki dla psa</a> 4160 </li> 4161 4162 <li class="level-2"> 4163 <a 4164 href="https://fera.pl/pies/przysmaki-dla-psa/naturalne-przysmaki-dla-psa.html" 4165 class="dropdown-list-item" 4166 >Naturalne przysmaki dla psa</a> 4167 </li> 4168 4169 <li class="level-2"> 4170 <a 4171 href="https://fera.pl/pies/przysmaki-dla-psa/kabanosy-dla-psa.html" 4172 class="dropdown-list-item" 4173 >Kabanosy dla psa</a> 4174 </li> 4175 4176 <li class="level-2"> 4177 <a 4178 href="https://fera.pl/pies/przysmaki-dla-psa/przysmaki-liofilizowane-dla-psa.html" 4179 class="dropdown-list-item" 4180 >Przysmaki liofilizowane dla psa</a> 4181 </li> 4182 4183 <li class="level-2"> 4184 <a 4185 href="https://fera.pl/pies/przysmaki-dla-psa/przysmaki-funkcjonalne-dla-psa.html" 4186 class="dropdown-list-item" 4187 >Przysmaki funkcjonalne dla psa</a> 4188 </li> 4189 </ul> 4190 </template> 4191 </li> 4192 4193 <li 4194 class="level-1" 4195 data-id="category-node-123" 4196 x-data="initSubMenuDesktopItem" 4197 @click.outside="close" 4198 > 4199 <button 4200 type="button" 4201 class="dropdown-list-item" 4202 x-ref="childmenuToggle" 4203 @click="toggle" 4204 aria-expanded="false" 4205 :aria-expanded="open" 4206 aria-controls="category-123-desktop-menu-panel" 4207 > 4208 Zdrowie psa <svg xmlns="http://www.w3.org/2000/svg" 4209 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4210 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4211 </button> 4212 <template x-if="open"> 4213 <ul 4214 id="category-123-desktop-menu-panel" 4215 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4216 x-ref="childMenuWrapper" 4217 @keydown.escape.stop="closeEscape" 4218 > 4219 <li> 4220 <a 4221 href="https://fera.pl/pies/zdrowie-psa.html" 4222 class="dropdown-list-item font-bold" 4223 >Zdrowie psa - zobacz wszystko</a> 4224 </li> 4225 4226 <li class="level-2"> 4227 <a 4228 href="https://fera.pl/pies/zdrowie-psa/czyszczenie-zebow-psa.html" 4229 class="dropdown-list-item" 4230 >Czyszczenie zÄbów psa</a> 4231 </li> 4232 4233 <li class="level-2"> 4234 <a 4235 href="https://fera.pl/pies/zdrowie-psa/probiotyki-dla-psa.html" 4236 class="dropdown-list-item" 4237 >Probiotyki dla psa</a> 4238 </li> 4239 4240 <li class="level-2"> 4241 <a 4242 href="https://fera.pl/pies/zdrowie-psa/czyszczenie-uszu-i-oczu-psa.html" 4243 class="dropdown-list-item" 4244 >Czyszczenie uszu i oczu psa</a> 4245 </li> 4246 4247 <li class="level-2"> 4248 <a 4249 href="https://fera.pl/pies/zdrowie-psa/preparaty-na-stawy-i-kosci-dla-psa.html" 4250 class="dropdown-list-item" 4251 >Preparaty na stawy i koÅci dla psa</a> 4252 </li> 4253 4254 <li class="level-2"> 4255 <a 4256 href="https://fera.pl/pies/zdrowie-psa/preparaty-na-siersc-i-skore-psa.html" 4257 class="dropdown-list-item" 4258 >Preparaty na sierÅÄ i skórÄ psa</a> 4259 </li> 4260 4261 <li class="level-2"> 4262 <a 4263 href="https://fera.pl/pies/zdrowie-psa/tabletki-na-odrobaczenie-psa.html" 4264 class="dropdown-list-item" 4265 >Tabletki na odrobaczenie psa</a> 4266 </li> 4267 4268 <li class="level-2"> 4269 <a 4270 href="https://fera.pl/pies/zdrowie-psa/witaminy-i-suplementy-dla-psa.html" 4271 class="dropdown-list-item" 4272 >Witaminy i suplementy dla psa</a> 4273 </li> 4274 4275 <li class="level-2"> 4276 <a 4277 href="https://fera.pl/pies/zdrowie-psa/akcesoria-weterynaryjne-i-diagnostyka-psa.html" 4278 class="dropdown-list-item" 4279 >Akcesoria weterynaryjne i diagnostyka psa</a> 4280 </li> 4281 4282 <li class="level-2"> 4283 <a 4284 href="https://fera.pl/pies/zdrowie-psa/preparaty-na-uspokojenie-psa.html" 4285 class="dropdown-list-item" 4286 >Preparaty na uspokojenie psa</a> 4287 </li> 4288 </ul> 4289 </template> 4290 </li> 4291 4292 <li 4293 class="level-1" 4294 data-id="category-node-131" 4295 x-data="initSubMenuDesktopItem" 4296 @click.outside="close" 4297 > 4298 <button 4299 type="button" 4300 class="dropdown-list-item" 4301 x-ref="childmenuToggle" 4302 @click="toggle" 4303 aria-expanded="false" 4304 :aria-expanded="open" 4305 aria-controls="category-131-desktop-menu-panel" 4306 > 4307 PchÅy, kleszcze i pasożyty <svg xmlns="http://www.w3.org/2000/svg" 4308 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4309 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4310 </button> 4311 <template x-if="open"> 4312 <ul 4313 id="category-131-desktop-menu-panel" 4314 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4315 x-ref="childMenuWrapper" 4316 @keydown.escape.stop="closeEscape" 4317 > 4318 <li> 4319 <a
4320 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty.html" 4321 class="dropdown-list-item font-bold" 4322 >PchÅy, kleszcze i pasożyty - zobacz wszystko</a> 4323 </li> 4324 4325 <li class="level-2"> 4326 <a 4327 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/preparaty-na-pchly-i-kleszcze-dla-psa.html" 4328 class="dropdown-list-item" 4329 >Preparaty na pchÅy i kleszcze dla psa</a> 4330 </li> 4331 4332 <li class="level-2"> 4333 <a 4334 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/obroze-na-kleszcze-i-pchly-dla-psa.html" 4335 class="dropdown-list-item" 4336 >Obroże na kleszcze i pchÅy dla psa</a> 4337 </li> 4338 4339 <li class="level-2"> 4340 <a 4341 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/pesety-na-kleszcze-dla-psa.html" 4342 class="dropdown-list-item" 4343 >PÄsety na kleszcze dla psa</a> 4344 </li> 4345 4346 <li class="level-2"> 4347 <a 4348 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/szampony-na-pchly-i-kleszcze-dla-psa.html" 4349 class="dropdown-list-item" 4350 >Szampony na pchÅy i kleszcze dla psa</a> 4351 </li> 4352 4353 <li class="level-2"> 4354 <a 4355 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/grzebien-na-pchly-dla-psa.html" 4356 class="dropdown-list-item" 4357 >GrzebieÅ na pchÅy dla psa</a> 4358 </li> 4359 </ul> 4360 </template> 4361 </li> 4362 4363 <li 4364 class="level-1" 4365 data-id="category-node-117" 4366 x-data="initSubMenuDesktopItem" 4367 @click.outside="close" 4368 > 4369 <button 4370 type="button" 4371 class="dropdown-list-item" 4372 x-ref="childmenuToggle" 4373 @click="toggle" 4374 aria-expanded="false" 4375 :aria-expanded="open" 4376 aria-controls="category-117-desktop-menu-panel" 4377 > 4378 Akcesoria do karmienia dla psa <svg xmlns="http://www.w3.org/2000/svg" 4379 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4380 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4381 </button> 4382 <template x-if="open"> 4383 <ul 4384 id="category-117-desktop-menu-panel" 4385 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4386 x-ref="childMenuWrapper" 4387 @keydown.escape.stop="closeEscape" 4388 > 4389 <li> 4390 <a 4391 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa.html" 4392 class="dropdown-list-item font-bold" 4393 >Akcesoria do karmienia dla psa - zobacz wszystko</a> 4394 </li> 4395 4396 <li class="level-2"> 4397 <a 4398 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/automaty-na-karme-i-wode-dla-psa.html" 4399 class="dropdown-list-item" 4400 >Automaty na karmÄ i wodÄ dla psa</a> 4401 </li> 4402 4403 <li class="level-2"> 4404 <a 4405 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/miski-dla-psa.html" 4406 class="dropdown-list-item" 4407 >Miski dla psa</a> 4408 </li> 4409 4410 <li class="level-2"> 4411 <a 4412 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/pojemniki-na-karme-dla-psa.html" 4413 class="dropdown-list-item" 4414 >Pojemniki na karmÄ dla psa</a> 4415 </li> 4416 4417 <li class="level-2"> 4418 <a 4419 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/butelki-dla-psa.html" 4420 class="dropdown-list-item" 4421 >Butelki dla psa</a> 4422 </li> 4423 </ul> 4424 </template> 4425 </li> 4426 4427 <li 4428 class="level-1" 4429 data-id="category-node-143" 4430 x-data="initSubMenuDesktopItem" 4431 @click.outside="close" 4432 > 4433 <button 4434 type="button" 4435 class="dropdown-list-item" 4436 x-ref="childmenuToggle" 4437 @click="toggle" 4438 aria-expanded="false" 4439 :aria-expanded="open" 4440 aria-controls="category-143-desktop-menu-panel" 4441 > 4442 Grooming i pielÄgnacja psa <svg xmlns="http://www.w3.org/2000/svg" 4443 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4444 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4445 </button> 4446 <template x-if="open"> 4447 <ul 4448 id="category-143-desktop-menu-panel" 4449 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4450 x-ref="childMenuWrapper" 4451 @keydown.escape.stop="closeEscape" 4452 > 4453 <li> 4454 <a 4455 href="https://fera.pl/pies/grooming-i-pielegnacja-psa.html" 4456 class="dropdown-list-item font-bold" 4457 >Grooming i pielÄgnacja psa - zobacz wszystko</a> 4458 </li> 4459 4460 <li class="level-2"> 4461 <a 4462 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/szczotki-do-usuw
4462ania-siersci-psa.html" 4463 class="dropdown-list-item" 4464 >Szczotki do usuwania sierÅci psa</a> 4465 </li> 4466 4467 <li class="level-2"> 4468 <a 4469 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/woreczki-na-psie-odchody.html" 4470 class="dropdown-list-item" 4471 >Woreczki na psie odchody</a> 4472 </li> 4473 4474 <li class="level-2"> 4475 <a 4476 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/podklady-i-pieluchy-dla-psow.html" 4477 class="dropdown-list-item" 4478 >PodkÅady i pieluchy dla psów</a> 4479 </li> 4480 4481 <li class="level-2"> 4482 <a 4483 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/preparaty-odstraszajace-psy.html" 4484 class="dropdown-list-item" 4485 >Preparaty odstraszajÄ ce psy</a> 4486 </li> 4487 4488 <li class="level-2"> 4489 <a 4490 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/preparaty-na-usuwanie-plam-i-zapachow-po-psach.html" 4491 class="dropdown-list-item" 4492 >Preparaty na usuwanie plam i zapachów po psach</a> 4493 </li> 4494 4495 <li class="level-2"> 4496 <a 4497 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/szczotki-i-grzebienie-dla-psa.html" 4498 class="dropdown-list-item" 4499 >Szczotki i grzebienie dla psa</a> 4500 </li> 4501 4502 <li class="level-2"> 4503 <a 4504 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/szampony-i-akcesoria-do-kapania-psa.html" 4505 class="dropdown-list-item" 4506 >Szampony i akcesoria do kÄ pania psa</a> 4507 </li> 4508 4509 <li class="level-2"> 4510 <a 4511 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/nozyczki-do-strzyzenia-psa.html" 4512 class="dropdown-list-item" 4513 >Nożyczki do strzyżenia psa</a> 4514 </li> 4515 4516 <li class="level-2"> 4517 <a 4518 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/obcinaczki-i-gilotyny-dla-psa-do-pazurow.html" 4519 class="dropdown-list-item" 4520 >Obcinaczki i gilotyny dla psa do pazurów</a> 4521 </li> 4522 </ul> 4523 </template> 4524 </li> 4525 4526 <li 4527 class="level-1" 4528 data-id="category-node-151" 4529 x-data="initSubMenuDesktopItem" 4530 @click.outside="close" 4531 > 4532 <button 4533 type="button" 4534 class="dropdown-list-item" 4535 x-ref="childmenuToggle" 4536 @click="toggle" 4537 aria-expanded="false" 4538 :aria-expanded="open" 4539 aria-controls="category-151-desktop-menu-panel" 4540 > 4541 Legowiska, transportery i klatki dla psa <svg xmlns="http://www.w3.org/2000/svg" 4542 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4543 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4544 </button> 4545 <template x-if="open"> 4546 <ul 4547 id="category-151-desktop-menu-panel" 4548 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4549 x-ref="childMenuWrapper" 4550 @keydown.escape.stop="closeEscape" 4551 > 4552 <li> 4553 <a 4554 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa.html" 4555 class="dropdown-list-item font-bold" 4556 >Legowiska, transportery i klatki dla psa - zobacz wszystko</a> 4557 </li> 4558 4559 <li class="level-2"> 4560 <a 4561 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/legowisko-dla-psa.html" 4562 class="dropdown-list-item" 4563 >Legowisko dla psa</a> 4564 </li> 4565 4566 <li class="level-2"> 4567 <a 4568 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/torby-dla-psa.html" 4569 class="dropdown-list-item" 4570 >Torby dla psa</a> 4571 </li> 4572 4573 <li class="level-2"> 4574 <a 4575 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/transportery-dla-psa.html" 4576 class="dropdown-list-item" 4577 >Transportery dla psa</a> 4578 </li> 4579 4580 <li class="level-2"> 4581 <a 4582 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/bramki-i-drzwiczki-dla-psa.html" 4583 class="dropdown-list-item" 4584 >Bramki i drzwiczki dla psa</a> 4585 </li> 4586 4587 <li class="level-2"> 4588 <a 4589 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/koce-dla-psa.html" 4590 class="dropdown-list-item" 4591 >Koce dla psa</a> 4592 </li> 4593 4594 <li class="level-2"> 4595 <a 4596 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/sprzet-podrozny-dla-psa.html" 4597 class="dropdown-list-item" 4598 >SprzÄt podróżny dla psa</a> 4599 </li> 4600 </ul> 4601 </template> 4602 </li> 4603 4604 <li 4605 class="level-1" 4606 data-id="category-node-165" 4607 x-data="initSubMenuDesktopItem" 4608 @click.outside="close" 4609 > 4610 <button 4611 type="button" 4612 class="dropdown-list-item" 4613 x-ref="childmenuToggle" 4614 @click="toggle" 4615 aria-expanded="false" 4616 :aria-expanded="open" 4617 aria-controls="category-165-desktop-menu-panel" 4618 > 4619 Zabawki dla psa <svg xmlns="http://www.w3.org/2000/svg" 4620 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4621 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4622 </button> 4623 <template x-if="open"> 4624 <ul 4625 id="category-165-desktop-menu-panel" 4626 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4627 x-ref="childMenuWrapper" 4628 @keydown.escape.stop="closeEscape" 4629 > 4630 <li> 4631 <a 4632 href="https://fera.pl/pies/zabawki-dla-psa.html" 4633 class="dropdown-list-item font-bold" 4634 >Zabawki dla psa - zobacz wszystko</a> 4635 </li> 4636 4637 <li class="level-2"> 4638 <a 4639 href="https://fera.pl/pies/zabawki-dla-psa/gry-dla-psa.html" 4640 class="dropdown-list-item" 4641 >Gry dla psa</a> 4642 </li> 4643 4644 <li class="level-2"> 4645 <a 4646 href="https://fera.pl/pies/zabawki-dla-psa/gryzaki-dla-psa.html" 4647 class="dropdown-list-item" 4648 >Gryzaki dla psa</a> 4649 </li> 4650 4651 <li class="level-2"> 4652 <a 4653 href="https://fera.pl/pies/zabawki-dla-psa/pilki-dla-psa.html" 4654 class="dropdown-list-item" 4655 >PiÅki dla psa</a> 4656 </li> 4657 4658 <li class="level-2"> 4659 <a 4660 href="https://fera.pl/pies/zabawki-dla-psa/zabawki-sznurkowe-dla-psa.html" 4661 class="dropdown-list-item" 4662 >Zabawki sznurkowe dla psa</a> 4663 </li> 4664 4665 <li class="level-2"> 4666 <a 4667 href="https://fera.pl/pies/zabawki-dla-psa/zabawki-dla-psa-do-rzucania.html" 4668 class="dropdown-list-item" 4669 >Zabawki dla psa do rzucania</a> 4670 </li> 4671 4672 <li class="level-2"> 4673 <a 4674 href="https://fera.pl/pies/zabawki-dla-psa/pluszaki-dla-psa.html" 4675 class="dropdown-list-item" 4676 >Pluszaki dla psa</a> 4677 </li> 4678 </ul> 4679 </template> 4680 </li> 4681 4682 <li 4683 class="level-1" 4684 data-id="category-node-173" 4685 x-data="initSubMenuDesktopItem" 4686 @click.outside="close" 4687 > 4688 <button 4689 type="button" 4690 class="dropdown-list-item" 4691 x-ref="childmenuToggle" 4692 @click="toggle" 4693 aria-expanded="false" 4694 :aria-expanded="open" 4695 aria-controls="category-173-desktop-menu-panel" 4696 > 4697 Obroże i smycze <svg xmlns="http://www.w3.org/2000/svg" 4698 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4699 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4700 </button> 4701 <template x-if="open"> 4702 <ul 4703 id="category-173-desktop-menu-panel" 4704 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4705 x-ref="childMenuWrapper" 4706 @keydown.escape.stop="closeEscape" 4707 > 4708 <li> 4709 <a 4710 href="https://fera.pl/pies/obroze-i-smycze.html" 4711 class="dropdown-list-item font-bold" 4712 >Obroże i smycze - zobacz wszystko</a> 4713 </li> 4714 4715 <li class="level-2"> 4716 <a 4717 href="https://fera.pl/pies/obroze-i-smycze/obroze-dla-psa.html" 4718 class="dropdown-list-item" 4719 >Obroże dla psa</a> 4720 </li> 4721 4722 <li class="level-2"> 4723 <a 4724 href="https://fera.pl/pies/obroze-i-smycze/smycze-dla-psa.html" 4725 class="dropdown-list-item" 4726 >Smycze dla psa</a> 4727 </li> 4728 4729 <li class="level-2"> 4730 <a 4731 href="https://fera.pl/pies/obroze-i-smycze/szelki-dla-psa.html" 4732 class="dropdown-list-item" 4733 >Szelki dla psa</a> 4734 </li> 4735 4736 <li class="level-2"> 4737 <a 4738 href="https://fera.pl/pies/obroze-i-smycze/adresowka-dla-psa.html" 4739 class="dropdown-list-item" 4740 >Adresówka dla psa</a> 4741 </li> 4742 4743 <li class="level-2"> 4744 <a 4745 href="https://fera.pl/pies/obroze-i-smycze/szelki-dla-psa-do-samochodu.html" 4746 class="dropdown-list-item" 4747 >Szelki dla psa do samochodu</a> 4748 </li> 4749 4750 <li class="level-2"> 4751 <a 4752 href="https://fera.pl/pies/obroze-i-smycze/kaganiec-dla-psa.html" 4753 class="dropdown-list-item" 4754 >Kaganiec dla psa</a> 4755 </li> 4756 4757 <li class="level-2"> 4758 <a 4759 href="https://fera.pl/pies/obroze-i-smycze/tresura-psa.html" 4760 class="dropdown-list-item" 4761 >Tresura psa</a> 4762 </li> 4763 </ul> 4764 </template> 4765 </li> 4766 4767 <li 4768 class="level-1" 4769 data-id="category-node-183" 4770 x-data="initSubMenuDesktopItem" 4771 @click.outside="close" 4772 > 4773 <button 4774 type="button" 4775 class="dropdown-list-item" 4776 x-ref="childmenuToggle" 4777 @click="toggle" 4778 aria-expanded="false" 4779 :aria-expanded="open" 4780 aria-controls="category-183-desktop-menu-panel" 4781 > 4782 Stroje i akcesoria dla psa <svg xmlns="http://www.w3.org/2000/svg" 4783 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4784 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4785 </button> 4786 <template x-if="open"> 4787 <ul 4788 id="category-183-desktop-menu-panel" 4789 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4790 x-ref="childMenuWrapper" 4791 @keydown.escape.stop="closeEscape" 4792 > 4793 <li> 4794 <a 4795 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa.html" 4796 class="dropdown-list-item font-bold" 4797 >Stroje i akcesoria dla psa - zobacz wszystko</a> 4798 </li> 4799 4800 <li class="level-2"> 4801 <a 4802 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa/majtki-dla-psa.html" 4803 class="dropdown-list-item" 4804 >Majtki dla psa</a> 4805 </li> 4806 4807 <li class="level-2"> 4808 <a 4809 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa/ubranka-dla-psa.html" 4810 class="dropdown-list-item" 4811 >Ubranka dla psa</a> 4812 </li> 4813 4814 <li class="level-2"> 4815 <a 4816 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa/skarpetki-i-buty-dla-psa.html" 4817 class="dropdown-list-item" 4818 >Skarpetki i buty dla psa</a> 4819 </li> 4820 </ul> 4821 </template> 4822 </li> 4823 </ul> 4824 </div> 4825 <template x-if="$store.banners.activeBanners.length"> 4826 <div class="flex flex-col gap-2 p-4 border-l border-slate-100 overflow-auto"> 4827 <template x-for="(banner, index) in $store.banners.activeBanners" :key="index"> 4828 <a class="block border border-slate-100 rounded-2xl overflow-hidden" :href="banner.url"> 4829 <img :src="banner.image" :alt="banner.title ?? ''" loading="lazy" class="w-full h-auto" /> 4830 </a> 4831 </template> 4832 </div> 4833 </template> 4834 </div> 4835 </template> 4836 </li> 4837 <li 4838 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap" 4839 data-id="category-187" 4840 @click.outside="close(false)" 4841 @keydown.escape="close" 4842 @mouseenter="canHoverOpen" 4843 @mouseleave="canHoverClose" 4844 > 4845 <a 4846 href="https://fera.pl/kot.html" 4847 class="btn btn-nav" 4848 > 4849 Kot </a> 4850 <button 4851 data-id="category-187" 4852 type="button" 4853 class="group btn btn-flat btn-icon-size-s sr-only focu
4853s:not-sr-only" 4854 @click="toggle" 4855 aria-expanded="false" 4856 :aria-expanded="openDropdownId === 'category-187'" 4857 aria-controls="desktop-menu-category-187" 4858 x-ref="btn_category-187" 4859 > 4860 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 4861 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 4862</svg> 4863 </button> 4864 <template x-if="openDropdownId === 'category-187'"> 4865 <div 4866 id="desktop-menu-category-187" 4867 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 4868 :class="{ 'grid-cols-3': $store.banners.activeBanners.length }" 4869 x-ref="childmenu_category-187" 4870 x-transition 4871 > 4872 <div 4873 class="flex overflow-x-auto" 4874 :class="{ 'col-span-2': $store.banners.activeBanners.length }" 4875 > 4876 <ul class="relative flex flex-col gap-1 py-2.5 px-2 min-w-72"> 4877 4878 <li 4879 class="level-1" 4880 data-id="category-node-188" 4881 x-data="initSubMenuDesktopItem" 4882 @click.outside="close" 4883 > 4884 <button 4885 type="button" 4886 class="dropdown-list-item" 4887 x-ref="childmenuToggle" 4888 @click="toggle" 4889 aria-expanded="false" 4890 :aria-expanded="open" 4891 aria-controls="category-188-desktop-menu-panel" 4892 > 4893 Karma dla kota <svg xmlns="http://www.w3.org/2000/svg" 4894 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4895 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4896 </button> 4897 <template x-if="open"> 4898 <ul 4899 id="category-188-desktop-menu-panel" 4900 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 4901 x-ref="childMenuWrapper" 4902 @keydown.escape.stop="closeEscape" 4903 > 4904 <li> 4905 <a 4906 href="https://fera.pl/kot/karma-dla-kota.html" 4907 class="dropdown-list-item font-bold" 4908 >Karma dla kota - zobacz wszystko</a> 4909 </li> 4910 4911 <li class="level-2"> 4912 <a 4913 href="https://fera.pl/kot/karma-dla-kota/karma-sucha-dla-kota.html" 4914 class="dropdown-list-item" 4915 >Karma sucha dla kota</a> 4916 </li> 4917 4918 <li class="level-2"> 4919 <a 4920 href="https://fera.pl/kot/karma-dla-kota/karma-mokra-dla-kota.html" 4921 class="dropdown-list-item" 4922 >Karma mokra dla kota</a> 4923 </li> 4924 4925 <li class="level-2"> 4926 <a 4927 href="https://fera.pl/kot/karma-dla-kota/karma-liofilizowana-dla-kota.html" 4928 class="dropdown-list-item" 4929 >Karma liofilizowana dla kota</a> 4930 </li> 4931 4932 <li class="level-2"> 4933 <a 4934 href="https://fera.pl/kot/karma-dla-kota/mleko-zastepcze-dla-kota.html" 4935 class="dropdown-list-item" 4936 >Mleko zastÄpcze dla kota</a> 4937 </li> 4938 4939 <li class="level-2"> 4940 <a 4941 href="https://fera.pl/kot/karma-dla-kota/zywienie-oparte-na-nauce.html" 4942 class="dropdown-list-item" 4943 >Å»ywienie oparte na nauce </a> 4944 </li> 4945 4946 <li class="level-2"> 4947 <a 4948 href="https://fera.pl/kot/karma-dla-kota/karma-dla-kociat.html" 4949 class="dropdown-list-item" 4950 >Karma dla kociÄ t</a> 4951 </li> 4952 4953 <li class="level-2"> 4954 <a 4955 href="https://fera.pl/kot/karma-dla-kota/karma-dla-kota-doroslego.html" 4956 class="dropdown-list-item" 4957 >Karma dla kota dorosÅego</a> 4958 </li> 4959 4960 <li class="level-2"> 4961 <a 4962 href="https://fera.pl/kot/karma-dla-kota/karma-dla-kota-seniora.html" 4963 class="dropdown-list-item" 4964 >Karma dla kota seniora</a> 4965 </li> 4966 4967 <li class="level-2"> 4968 <a 4969 href="https://fera.pl/kot/karma-dla-kota/karma-bezzbozowa-dla-kota.html" 4970 class="dropdown-list-item" 4971 >Karma bezzbożowa dla kota</a> 4972 </li> 4973 </ul> 4974 </template> 4975 </li> 4976 4977 <li 4978 class="level-1" 4979 data-id="category-node-207" 4980 x-data="initSubMenuDesktopItem" 4981 @click.outside="close" 4982 > 4983 <button 4984 type="button" 4985 class="dropdown-list-item" 4986 x-ref="childmenuToggle" 4987 @click="toggle" 4988 aria-expanded="false" 4989 :aria-expanded="open" 4990 aria-controls="category-207-desktop-menu-panel" 4991 > 4992 Karma dla kotów rasowych <svg xmlns="http://www.w3.org/2000/svg" 4993 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 4994 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 4995 </button> 4996 <template x-if="open"> 4997 <ul 4998 id="category-207-desktop-menu-panel" 4999 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5000 x-ref="childMenuWrapper" 5001 @keydown.escape.stop="closeEscape" 5002 > 5003 <li> 5004 <a 5005 href="https://fera.pl/kot/karma-dla-kotow-rasowych.html" 5006 class="dropdown-list-item font-bold" 5007 >Karma dla kotów rasowych - zobacz wszystko</a> 5008 </li> 5009 5010 <li class="level-2"> 5011 <a 5012 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-bengalskiego.html" 5013 class="dropdown-list-item" 5014 >Karma dla kota bengalskiego</a> 5015 </li> 5016 5017 <li class="level-2"> 5018 <a 5019 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-brytyjskiego-krotkowlosego.html" 5020 class="dropdown-list-item" 5021 >Karma dla kota brytyjskiego krótkowÅosego</a> 5022 </li> 5023 5024 <li class="level-2"> 5025 <a 5026 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-maine-coon.html" 5027 class="dropdown-list-item" 5028 >Karma dla kota maine coon</a> 5029 </li> 5030 5031 <li class="level-2"> 5032 <a 5033 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-norweskiego-lesnego.html" 5034 class="dropdown-list-item" 5035 >Karma dla kota norweskiego leÅnego</a> 5036 </li> 5037 5038 <li class="level-2"> 5039 <a 5040 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-perskiego.html" 5041 class="dropdown-list-item" 5042 >Karma dla kota perskiego</a> 5043 </li> 5044 5045 <li class="level-2"> 5046 <a 5047 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-sfinksa.html" 5048 class="dropdown-list-item" 5049 >Karma dla Sfinksa</a> 5050 </li> 5051 </ul> 5052 </template> 5053 </li> 5054 5055 <li 5056 class="level-1" 5057 data-id="category-node-191" 5058 x-data="initSubMenuDesktopItem" 5059 @click.outside="close" 5060 > 5061 <button 5062 type="button" 5063 class="dropdown-list-item" 5064 x-ref="childmenuToggle" 5065 @click="toggle" 5066 aria-expanded="false" 5067 :aria-expanded="open" 5068 aria-controls="category-191-desktop-menu-panel" 5069 > 5070 Karma weterynaryjna dla kota <svg xmlns="http://www.w3.org/2000/svg" 5071 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5072 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5073 </button> 5074 <template x-if="open"> 5075 <ul 5076 id="category-191-desktop-menu-panel" 5077 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5078 x-ref="childMenuWrapper" 5079 @keydown.escape.stop="closeEscape" 5080 > 5081 <li> 5082 <a 5083 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota.html" 5084 class="dropdown-list-item font-bold" 5085 >Karma weterynaryjna dla kota - zobacz wszystko</a> 5086 </li> 5087 5088 <li class="level-2"> 5089 <a 5090 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-hipoalergiczna-dla-kota.html" 5091 class="dropdown-list-item" 5092 >Karma hipoalergiczna dla kota</a> 5093 </li> 5094 5095 <li class="level-2"> 5096 <a 5097 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-z-cukrzyca.html" 5098 class="dropdown-list-item" 5099 >
5099Karma dla kota z cukrzycÄ </a> 5100 </li> 5101 5102 <li class="level-2"> 5103 <a 5104 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-odchudzajaca-dla-kota.html" 5105 class="dropdown-list-item" 5106 >Karma odchudzajÄ ca dla kota</a> 5107 </li> 5108 5109 <li class="level-2"> 5110 <a 5111 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-problemy-ze-skora.html" 5112 class="dropdown-list-item" 5113 >Karma dla kota na problemy ze skórÄ </a> 5114 </li> 5115 5116 <li class="level-2"> 5117 <a 5118 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-problemy-z-zebami.html" 5119 class="dropdown-list-item" 5120 >Karma dla kota na problemy z zÄbami</a> 5121 </li> 5122 5123 <li class="level-2"> 5124 <a 5125 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-rekonwalescencje.html" 5126 class="dropdown-list-item" 5127 >Karma dla kota na rekonwalescencjÄ</a> 5128 </li> 5129 5130 <li class="level-2"> 5131 <a 5132 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-urinary-dla-kota.html" 5133 class="dropdown-list-item" 5134 >Karma urinary dla kota</a> 5135 </li> 5136 5137 <li class="level-2"> 5138 <a 5139 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-renal-dla-kota.html" 5140 class="dropdown-list-item" 5141 >Karma renal dla kota</a> 5142 </li> 5143 5144 <li class="level-2"> 5145 <a 5146 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-stawy.html" 5147 class="dropdown-list-item" 5148 >Karma dla kota na stawy</a> 5149 </li> 5150 5151 <li class="level-2"> 5152 <a 5153 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-hepatic-dla-kota.html" 5154 class="dropdown-list-item" 5155 >Karma hepatic dla kota</a> 5156 </li> 5157 5158 <li class="level-2"> 5159 <a 5160 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kotow-po-sterylizacji.html" 5161 class="dropdown-list-item" 5162 >Karma dla kotów po sterylizacji</a> 5163 </li> 5164 5165 <li class="level-2"> 5166 <a 5167 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-stres.html" 5168 class="dropdown-list-item" 5169 >Karma dla kota na stres</a> 5170 </li> 5171 5172 <li class="level-2"> 5173 <a 5174 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-gastro-dla-kota.html" 5175 class="dropdown-list-item" 5176 >Karma gastro dla kota</a> 5177 </li> 5178 </ul> 5179 </template> 5180 </li> 5181 5182 <li 5183 class="level-1" 5184 data-id="category-node-225" 5185 x-data="initSubMenuDesktopItem" 5186 @click.outside="close" 5187 > 5188 <button 5189 type="button" 5190 class="dropdown-list-item" 5191 x-ref="childmenuToggle" 5192 @click="toggle" 5193 aria-expanded="false" 5194 :aria-expanded="open" 5195 aria-controls="category-225-desktop-menu-panel" 5196 > 5197 Karma dla kota: PodziaÅ wedÅug firm <svg xmlns="http://www.w3.org/2000/svg" 5198 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5199 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5200 </button> 5201 <template x-if="open"> 5202 <ul 5203 id="category-225-desktop-menu-panel" 5204 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5205 x-ref="childMenuWrapper" 5206 @keydown.escape.stop="closeEscape" 5207 > 5208 <li> 5209 <a 5210 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm.html" 5211 class="dropdown-list-item font-bold" 5212 >Karma dla kota: PodziaÅ wedÅug firm - zobacz wszystko</a> 5213 </li> 5214 5215 <li class="level-2"> 5216 <a 5217 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-royal-canin.html" 5218 class="dropdown-list-item" 5219 >Karma dla kota Royal Canin</a> 5220 </li> 5221 5222 <li class="level-2"> 5223 <a 5224 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-versele-laga.html" 5225 class="dropdown-list-item" 5226 >Karma dla kota Versele-Laga</a> 5227 </li> 5228 5229 <li class="level-2"> 5230 <a 5231 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-whiskas.html" 5232 class="dropdown-list-item" 5233 >Karma dla kota Whiskas</a> 5234 </li> 5235 5236 <li class="level-2"> 5237 <a 5238 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-josera.html" 5239 class="dropdown-list-item" 5240 >Karma dla kota Josera</a> 5241 </li> 5242 5243 <li class="level-2"> 5244 <a 5245 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-brit.html" 5246 class="dropdown-list-item" 5247 >Karma dla kota Brit</a> 5248 </li> 5249 5250 <li class="level-2"> 5251 <a 5252 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-eukanuba.html" 5253 class="dropdown-list-item" 5254 >Karma dla kota Eukanuba</a> 5255 </li> 5256 5257 <li class="level-2"> 5258 <a 5259 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-fitmin.html" 5260 class="dropdown-list-item" 5261 >Karma dla kota Fitmin</a> 5262 </li> 5263 5264 <li class="level-2"> 5265 <a 5266 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-sanabelle.html" 5267 class="dropdown-list-item" 5268 >Karma dla kota Sanabelle</a> 5269 </li> 5270 5271 <li class="level-2"> 5272 <a 5273 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-iams.html" 5274 class="dropdown-list-item" 5275 >Karma dla kota Iams</a> 5276 </li> 5277 5278 <li class="level-2"> 5279 <a 5280 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-perfect-fit.html" 5281 class="dropdown-list-item" 5282 >Karma dla kota Perfect Fit</a> 5283 </li> 5284 5285 <li class="level-2"> 5286 <a 5287 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-carnilove.html" 5288 class="dropdown-list-item" 5289 >Karma dla kota Carnilove</a> 5290 </li> 5291 5292 <li class="level-2"> 5293 <a 5294 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-farmina.html" 5295 class="dropdown-list-item" 5296 >Karma dla kota Farmina</a> 5297 </li> 5298 5299 <li class="level-2"> 5300 <a 5301 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-hill-s.html" 5302 class="dropdown-list-item" 5303 >Karma dla kota Hill's</a> 5304 </li> 5305 5306 <li class="level-2"> 5307 <a 5308 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-kitekat.html" 5309 class="dropdown-list-item" 5310 >Karma dla kota Kitekat</a> 5311 </li> 5312 5313 <li class="level-2"> 5314 <a 5315 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-o-canis.html" 5316 class="dropdown-list-item" 5317 >Karma dla kota O'Canis</a> 5318 </li> 5319 5320 <li class="level-2"> 5321 <a 5322 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-taste-of-the-wild.html" 5323 class="dropdown-list-item" 5324 >Karma dla kota Taste Of The Wild</a> 5325 </li> 5326 5327 <li class="level-2"> 5328 <a 5329 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-nero-gold.html" 5330 class="dropdown-list-item" 5331 >Karma dla kota Nero Gold</a> 5332 </li> 5333 5334 <li class="level-2"> 5335 <a 5336 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-sheba.html" 5337 class="dropdown-list-item" 5338 >Karma dla kota Sheba</a> 5339 </li> 5340 5341 <li class="level-2"> 5342 <a 5343 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-dolina-noteci.html" 5344 class="dropdown-list-item" 5345 >Karma dla kota Dolina Noteci</a> 5346 </li> 5347 5348 <li class="level-2"> 5349 <a 5350 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-schesir.html" 5351 class="dropdown-list-item" 5352 >Karma dla kota Schesir</a> 5353 </li> 5354 5355 <li class="level-2"> 5356 <a 5357 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-applaws.html" 5358 class="dropdown-list-item" 5359 >Karma dla kota Applaws</a> 5360 </li> 5361 5362 <li class="level-2"> 5363 <a 5364 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-animonda.html" 5365 class="dropdown-list-item" 5366 >Karma dla kota Animonda</a> 5367 </li> 5368 5369 <li class="level-2"> 5370 <a 5371 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-butcher-s.html" 5372 class="dropdown-list-item" 5373 >Karma dla kota Butcher's</a> 5374 </li> 5375 5376 <li class="level-2"> 5377 <a 5378 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-acana.html" 5379 class="dropdown-list-item" 5380 >Karma dla kota Acana</a> 5381 </li> 5382 5383 <li class="level-2"> 5384 <a 5385 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-monge.html" 5386 class="dropdown-list-item" 5387 >Karma dla kota Monge</a> 5388 </li> 5389 5390 <li class="level-2"> 5391 <a 5392 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-orijen.html" 5393 class="dropdown-list-item" 5394 >Karma dla kota Orijen</a> 5395 </li> 5396 5397 <li class="level-2"> 5398 <a 5399 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-leonardo.html" 5400 class="dropdown-list-item" 5401 >Karma dla kota Leonardo</a> 5402 </li> 5403 5404 <li class="level-2"> 5405 <a 5406 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-gussto.html" 5407 class="dropdown-list-item" 5408 >Karma dla kota Gussto</a> 5409 </li> 5410 5411 <li class="level-2"> 5412 <a 5413 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-super-benek.html" 5414 class="dropdown-list-item" 5415 >Karma dla kota Super Benek</a> 5416 </li> 5417 5418 <li class="level-2"> 5419 <a 5420 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-piper.html" 5421 class="dropdown-list-item" 5422 >Karma dla kota Piper</a> 5423 </li> 5424 5425 <li class="level-2"> 5426 <a 5427 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-rafi.html" 5428 class="dropdown-list-item" 5429 >Karma dla kota Rafi</a> 5430 </li> 5431 5432 <li class="level-2"> 5433 <a 5434 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-vet-expert.html" 5435 class="dropdown-list-item" 5436 >Karma dla kota Vet Expert</a> 5437 </li> 5438 5439 <li class="level-2"> 5440 <a 5441 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-ziwipeak.html" 5442 class="dropdown-list-item" 5443 >Karma dla kota ZiwiPeak</a> 5444 </li> 5445 5446 <li class="level-2"> 5447 <a 5448 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-kattovit.html" 5449 class="dropdown-list-item" 5450 >Karma dla kota Kattovit</a> 5451 </li> 5452 5453 <li class="level-2"> 5454 <a 5455 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-trovet.html" 5456 class="dropdown-list-item" 5457 >Karma dla kota Trovet</a> 5458 </li> 5459 5460 <li class="level-2"> 5461 <a 5462 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-miamor.html" 5463 class="dropdown-list-item" 5464 >Karma dla kota MIAMOR</a> 5465 </li> 5466 5467 <li class="level-2"> 5468 <a 5469 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-paka-zwierzaka.html" 5470 class="dropdown-list-item" 5471 >Karma dla kota Paka Zwierzaka</a> 5472 </li> 5473 5474 <li class="level-2"> 5475 <a 5476 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-arion.html" 5477 class="dropdown-list-item" 5478 >Karma dla kota Arion</a> 5479 </li> 5480 5481 <li class="level-2"> 5482 <a 5483 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-inaba.html" 5484 class="dropdown-list-item" 5485 >Karma dla kota Inaba</a> 5486 </li> 5487 5488 <li class="level-2"> 5489 <a 5490 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-comfy-appetit.html" 5491 class="dropdown-list-item" 5492 >
5492Karma dla kota Comfy Appetit</a> 5493 </li> 5494 5495 <li class="level-2"> 5496 <a 5497 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-james-wellbeloved.html" 5498 class="dropdown-list-item" 5499 >Karma dla kota James Wellbeloved</a> 5500 </li> 5501 </ul> 5502 </template> 5503 </li> 5504 5505 <li 5506 class="level-1" 5507 data-id="category-node-268" 5508 x-data="initSubMenuDesktopItem" 5509 @click.outside="close" 5510 > 5511 <button 5512 type="button" 5513 class="dropdown-list-item" 5514 x-ref="childmenuToggle" 5515 @click="toggle" 5516 aria-expanded="false" 5517 :aria-expanded="open" 5518 aria-controls="category-268-desktop-menu-panel" 5519 > 5520 Przysmaki dla kota <svg xmlns="http://www.w3.org/2000/svg" 5521 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5522 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5523 </button> 5524 <template x-if="open"> 5525 <ul 5526 id="category-268-desktop-menu-panel" 5527 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5528 x-ref="childMenuWrapper" 5529 @keydown.escape.stop="closeEscape" 5530 > 5531 <li> 5532 <a 5533 href="https://fera.pl/kot/przysmaki-dla-kota.html" 5534 class="dropdown-list-item font-bold" 5535 >Przysmaki dla kota - zobacz wszystko</a> 5536 </li> 5537 5538 <li class="level-2"> 5539 <a 5540 href="https://fera.pl/kot/przysmaki-dla-kota/kremy-zupy-i-pasty-dla-kota.html" 5541 class="dropdown-list-item" 5542 >Kremy, zupy i pasty dla kota</a> 5543 </li> 5544 5545 <li class="level-2"> 5546 <a 5547 href="https://fera.pl/kot/przysmaki-dla-kota/ciasteczka-dla-kota.html" 5548 class="dropdown-list-item" 5549 >Ciasteczka dla kota</a> 5550 </li> 5551 5552 <li class="level-2"> 5553 <a 5554 href="https://fera.pl/kot/przysmaki-dla-kota/naturalne-przysmaki-dla-kota.html" 5555 class="dropdown-list-item" 5556 >Naturalne przysmaki dla kota</a> 5557 </li> 5558 5559 <li class="level-2"> 5560 <a 5561 href="https://fera.pl/kot/przysmaki-dla-kota/przysmaki-liofilizowane-dla-kota.html" 5562 class="dropdown-list-item" 5563 >Przysmaki liofilizowane dla kota</a> 5564 </li> 5565 5566 <li class="level-2"> 5567 <a 5568 href="https://fera.pl/kot/przysmaki-dla-kota/funkcjonalne-przysmaki-dla-kota.html" 5569 class="dropdown-list-item" 5570 >Funkcjonalne przysmaki dla kota</a> 5571 </li> 5572 </ul> 5573 </template> 5574 </li> 5575 5576 <li 5577 class="level-1" 5578 data-id="category-node-278" 5579 x-data="initSubMenuDesktopItem" 5580 @click.outside="close" 5581 > 5582 <button 5583 type="button" 5584 class="dropdown-list-item" 5585 x-ref="childmenuToggle" 5586 @click="toggle" 5587 aria-expanded="false" 5588 :aria-expanded="open" 5589 aria-controls="category-278-desktop-menu-panel" 5590 > 5591 Zdrowie kota <svg xmlns="http://www.w3.org/2000/svg" 5592 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5593 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5594 </button> 5595 <template x-if="open"> 5596 <ul 5597 id="category-278-desktop-menu-panel" 5598 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5599 x-ref="childMenuWrapper" 5600 @keydown.escape.stop="closeEscape" 5601 > 5602 <li> 5603 <a 5604 href="https://fera.pl/kot/zdrowie-kota.html" 5605 class="dropdown-list-item font-bold" 5606 >Zdrowie kota - zobacz wszystko</a> 5607 </li> 5608 5609 <li class="level-2"> 5610 <a 5611 href="https://fera.pl/kot/zdrowie-kota/czyszczenie-zebow-kota.html" 5612 class="dropdown-list-item" 5613 >Czyszczenie zÄbów kota</a> 5614 </li> 5615 5616 <li class="level-2"> 5617 <a 5618 href="https://fera.pl/kot/zdrowie-kota/probiotyki-dla-kota.html" 5619 class="dropdown-list-item" 5620 >Probiotyki dla kota</a> 5621 </li> 5622 5623 <li class="level-2"> 5624 <a 5625 href="https://fera.pl/kot/zdrowie-kota/preparaty-do-czyszczenia-uszu-i-oczu-kota.html" 5626 class="dropdown-list-item" 5627 >Preparaty do czyszczenia uszu i oczu kota</a> 5628 </li> 5629 5630 <li class="level-2"> 5631 <a 5632 href="https://fera.pl/kot/zdrowie-kota/preparaty-na-stawy-i-kosci-kota.html" 5633 class="dropdown-list-item" 5634 >Preparaty na stawy i koÅci kota</a> 5635 </li> 5636 5637 <li class="level-2"> 5638 <a 5639 href="https://fera.pl/kot/zdrowie-kota/preparaty-na-siersc-i-skore-kota.html" 5640 class="dropdown-list-item" 5641 >Preparaty na sierÅÄ i skórÄ kota</a> 5642 </li> 5643 5644 <li class="level-2"> 5645 <a 5646 href="https://fera.pl/kot/zdrowie-kota/witaminy-i-suplementy-dla-kota.html" 5647 class="dropdown-list-item" 5648 >Witaminy i suplementy dla kota</a> 5649 </li> 5650 5651 <li class="level-2"> 5652 <a 5653 href="https://fera.pl/kot/zdrowie-kota/srodki-uspokajajace-dla-kota.html" 5654 class="dropdown-list-item" 5655 >Årodki uspokajajÄ ce dla kota</a> 5656 </li> 5657 5658 <li class="level-2"> 5659 <a 5660 href="https://fera.pl/kot/zdrowie-kota/pasta-odklaczajaca-dla-kota.html" 5661 class="dropdown-list-item" 5662 >Pasta odkÅaczajÄ ca dla kota</a> 5663 </li> 5664 5665 <li class="level-2"> 5666 <a 5667 href="https://fera.pl/kot/zdrowie-kota/odrobaczanie-kota.html" 5668 class="dropdown-list-item" 5669 >Odrobaczanie kota</a> 5670 </li> 5671 5672 <li class="level-2"> 5673 <a 5674 href="https://fera.pl/kot/zdrowie-kota/akcesoria-weterynaryjne-i-diagnostyka-kota.html" 5675 class="dropdown-list-item" 5676 >Akcesoria weterynaryjne i diagnostyka kota</a> 5677 </li> 5678 </ul> 5679 </template> 5680 </li> 5681 5682 <li 5683 class="level-1" 5684 data-id="category-node-299" 5685 x-data="initSubMenuDesktopItem" 5686 @click.outside="close" 5687 > 5688 <button 5689 type="button" 5690 class="dropdown-list-item" 5691 x-ref="childmenuToggle" 5692 @click="toggle" 5693 aria-expanded="false" 5694 :aria-expanded="open" 5695 aria-controls="category-299-desktop-menu-panel" 5696 > 5697 Å»wirki i kuwety <svg xmlns="http://www.w3.org/2000/svg" 5698 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5699 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5700 </button> 5701 <template x-if="open"> 5702 <ul 5703 id="category-299-desktop-menu-panel" 5704 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5705 x-ref="childMenuWrapper" 5706 @keydown.escape.stop="closeEscape" 5707 > 5708 <li> 5709 <a 5710 href="https://fera.pl/kot/zwirki-i-kuwety.html" 5711 class="dropdown-list-item font-bold" 5712 >Å»wirki i kuwety - zobacz wszystko</a> 5713 </li> 5714 5715 <li class="level-2"> 5716 <a 5717 href="https://fera.pl/kot/zwirki-i-kuwety/zwirek-dla-kota.html" 5718 class="dropdown-list-item" 5719 >Å»wirek dla kota</a> 5720 </li> 5721 5722 <li class="level-2"> 5723 <a 5724 href="https://fera.pl/kot/zwirki-i-kuwety/kuwety-dla-kota.html" 5725 class="dropdown-list-item" 5726 >Kuwety dla kota</a> 5727 </li> 5728 5729 <li class="level-2"> 5730 <a 5731 href="https://fera.pl/kot/zwirki-i-kuwety/lopatki-i-akcesoria-do-kuwety.html" 5732 class="dropdown-list-item" 5733 >Åopatki i akcesoria do kuwety</a> 5734 </li> 5735 5736 <li class="level-2"> 5737 <a 5738 href="https://fera.pl/kot/zwirki-i-kuwety/usuwanie-odchodow-kota.html" 5739 class="dropdown-list-item" 5740 >Usuwanie odchodów kota</a> 5741 </li> 5742 </ul> 5743 </template> 5744 </li> 5745 5746 <li 5747 class="level-1" 5748 data-id="category-node-288" 5749 x-data="initSubMenuDesktopItem" 5750 @click.outside="close" 5751 > 5752 <button 5753 type="button" 5754 class="dropdown-list-item" 5755 x-ref="childmenuToggle" 5756 @click="toggle" 5757 aria-expanded="false" 5758 :aria-expanded="open" 5759 aria-controls="category-288-desktop-menu-panel" 5760 > 5761 PchÅy i kleszcze <svg xmlns="http://www.w3.org/2000/svg" 5762 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5763 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5764 </button> 5765 <template x-if="open"> 5766 <ul 5767 id="category-288-desktop-menu-panel" 5768 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5769 x-ref="childMenuWrapper" 5770 @keydown.escape.stop="closeEscape" 5771 > 5772 <li> 5773 <a 5774 href="https://fera.pl/kot/pchly-i-kleszcze.html" 5775 class="dropdown-list-item font-bold" 5776 >PchÅy i kleszcze - zobacz wszystko</a> 5777 </li> 5778 5779 <li class="level-2"> 5780 <a 5781 href="https://fera.pl/kot/pchly-i-kleszcze/preparaty-na-pchly-i-kleszcze-u-kota.html" 5782 class="dropdown-list-item" 5783 >Preparaty na pchÅy i kleszcze u kota</a> 5784 </li> 5785 5786 <li class="level-2"> 5787 <a 5788 href="https://fera.pl/kot/pchly-i-kleszcze/obroze-przeciw-kleszczom-dla-kota.html" 5789 class="dropdown-list-item" 5790 >Obroże przeciw kleszczom dla kota</a> 5791 </li> 5792 5793 <li class="level-2"> 5794 <a 5795 href="https://fera.pl/kot/pchly-i-kleszcze/pesety-na-kleszcze-dla-kota.html" 5796 class="dropdown-list-item" 5797 >PÄsety na kleszcze dla kota</a> 5798 </li> 5799 5800 <li class="level-2"> 5801 <a 5802 href="https://fera.pl/kot/pchly-i-kleszcze/grzebienie-na-pchly-dla-kota.html" 5803 class="dropdown-list-item" 5804 >Grzebienie na pchÅy dla kota</a> 5805 </li> 5806 </ul> 5807 </template> 5808 </li> 5809 5810 <li 5811 class="level-1" 5812 data-id="category-node-272" 5813 x-data="initSubMenuDesktopItem" 5814 @click.outside="close" 5815 > 5816 <button 5817 type="button" 5818 class="dropdown-list-item" 5819 x-ref="childmenuToggle" 5820 @click="toggle" 5821 aria-expanded="false" 5822 :aria-expanded="open" 5823 aria-controls="category-272-desktop-menu-panel" 5824 > 5825 Akcesoria do karmienia dla kota <svg xmlns="http://www.w3.org/2000/svg" 5826 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5827 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5828 </button> 5829 <template x-if="open"> 5830 <ul 5831 id="category-272-desktop-menu-panel" 5832 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5833 x-ref="childMenuWrapper" 5834 @keydown.escape.stop="closeEscape" 5835 > 5836 <li> 5837 <a 5838 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota.html" 5839 class="dropdown-list-item font-bold" 5840 >Akcesoria do karmienia dla kota - zobacz wszystko</a> 5841 </li> 5842 5843 <li class="level-2"> 5844 <a 5845 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/podajniki-karmy-dla-kota.html" 5846 class="dropdown-list-item" 5847 >Podajniki karmy dla kota</a> 5848 </li> 5849 5850 <li class="level-2"> 5851 <a 5852 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/miski-dla-kota.html" 5853 class="dropdown-list-item" 5854 >Miski dla kota</a> 5855 </li> 5856 5857 <li class="level-2"> 5858 <a 5859 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/pojemniki-na-karme-kota.html" 5860 class="dropdown-list-item" 5861 >Pojemniki na karmÄ kota</a> 5862 </li> 5863 5864 <li class="level-2"> 5865 <a 5866 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/butelki-dla-kota.html" 5867 class="dropdown-list-item" 5868 >Butelki dla kota</a> 5869 </li> 5870 5871 <li class="level-2"> 5872 <a 5873 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/podkladki-pod-miske-dla-kota.html" 5874 class="dropdown-list-item" 5875 >PodkÅadki pod miskÄ dla kota</a> 5876 </li> 5877 </ul> 5878 </template> 5879 </li> 5880 5881 <li 5882 class="level-1" 5883 data-id="category-node-304" 5884 x-data="initSubMenuDesktopItem" 5885 @click.outside="close" 5886 > 5887 <button 5888 type="button" 5889 class="dropdown-list-item" 5890 x-ref="childmenuToggle" 5891 @click="toggle" 5892 aria-expanded="false" 5893 :aria-expanded="open" 5894 aria-controls="category-304-desktop-menu-panel" 5895 > 5896 Grooming i pielÄgnacja kota <svg xmlns="http://www.w3.org/2000/svg" 5897 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5898 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5899 </button> 5900 <template x-if="open"> 5901 <ul 5902 id="category-304-desktop-menu-panel" 5903 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5904 x-ref="childMenuWrapper" 5905 @keydown.escape.stop="closeEscape" 5906 > 5907 <li> 5908 <a 5909 href="https://fera.pl/kot/grooming-i-pielegnacja-kota.html" 5910 class="dropdown-list-item font-bold" 5911 >Grooming i pielÄgnacja kota - zobacz wszystko</a> 5912
5912 </li> 5913 5914 <li class="level-2"> 5915 <a 5916 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/rolki-i-szczotki-na-siersc-kota.html" 5917 class="dropdown-list-item" 5918 >Rolki i szczotki na sierÅÄ kota</a> 5919 </li> 5920 5921 <li class="level-2"> 5922 <a 5923 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/preparaty-odstraszajace-koty.html" 5924 class="dropdown-list-item" 5925 >Preparaty odstraszajÄ ce koty</a> 5926 </li> 5927 5928 <li class="level-2"> 5929 <a 5930 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/usuwanie-zapachu-moczu-kota.html" 5931 class="dropdown-list-item" 5932 >Usuwanie zapachu moczu kota</a> 5933 </li> 5934 5935 <li class="level-2"> 5936 <a 5937 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/szczotki-grzebienie-i-nozyczki-dla-kota.html" 5938 class="dropdown-list-item" 5939 >Szczotki, grzebienie i nożyczki dla kota</a> 5940 </li> 5941 5942 <li class="level-2"> 5943 <a 5944 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/kosmetyki-i-szampony-dla-kota.html" 5945 class="dropdown-list-item" 5946 >Kosmetyki i szampony dla kota</a> 5947 </li> 5948 5949 <li class="level-2"> 5950 <a 5951 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/obcinaczki-do-pazurow-dla-kota.html" 5952 class="dropdown-list-item" 5953 >Obcinaczki do pazurów dla kota</a> 5954 </li> 5955 5956 <li class="level-2"> 5957 <a 5958 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/akcesoria-do-kapieli-kota.html" 5959 class="dropdown-list-item" 5960 >Akcesoria do kÄ pieli kota</a> 5961 </li> 5962 </ul> 5963 </template> 5964 </li> 5965 5966 <li 5967 class="level-1" 5968 data-id="category-node-318" 5969 x-data="initSubMenuDesktopItem" 5970 @click.outside="close" 5971 > 5972 <button 5973 type="button" 5974 class="dropdown-list-item" 5975 x-ref="childmenuToggle" 5976 @click="toggle" 5977 aria-expanded="false" 5978 :aria-expanded="open" 5979 aria-controls="category-318-desktop-menu-panel" 5980 > 5981 Zabawki, drapaki i legowiska <svg xmlns="http://www.w3.org/2000/svg" 5982 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 5983 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 5984 </button> 5985 <template x-if="open"> 5986 <ul 5987 id="category-318-desktop-menu-panel" 5988 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 5989 x-ref="childMenuWrapper" 5990 @keydown.escape.stop="closeEscape" 5991 > 5992 <li> 5993 <a 5994 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska.html" 5995 class="dropdown-list-item font-bold" 5996 >Zabawki, drapaki i legowiska - zobacz wszystko</a> 5997 </li> 5998 5999 <li class="level-2"> 6000 <a 6001 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/koc-dla-kota.html" 6002 class="dropdown-list-item" 6003 >Koc dla kota</a> 6004 </li> 6005 6006 <li class="level-2"> 6007 <a 6008 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/legowisko-dla-kota.html" 6009 class="dropdown-list-item" 6010 >Legowisko dla kota</a> 6011 </li> 6012 6013 <li class="level-2"> 6014 <a 6015 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/pluszaki-maskotki-dla-kota.html" 6016 class="dropdown-list-item" 6017 >Pluszaki, maskotki dla kota</a> 6018 </li> 6019 6020 <li class="level-2"> 6021 <a 6022 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/pilki-dla-kota.html" 6023 class="dropdown-list-item" 6024 >PiÅki dla kota</a> 6025 </li> 6026 6027 <li class="level-2"> 6028 <a 6029 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/zabawki-interaktywne-dla-kota.html" 6030 class="dropdown-list-item" 6031 >Zabawki interaktywne dla kota</a> 6032 </li> 6033 6034 <li class="level-2"> 6035 <a 6036 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/wedki-dla-kota.html" 6037 class="dropdown-list-item" 6038 >WÄdki dla kota</a> 6039 </li> 6040 6041 <li class="level-2"> 6042 <a 6043 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/drapaki-dla-kota.html" 6044 class="dropdown-list-item" 6045 >Drapaki dla kota</a> 6046 </li> 6047 6048 <li class="level-2"> 6049 <a 6050 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/tunele-dla-kota.html" 6051 class="dropdown-list-item" 6052 >Tunele dla kota</a> 6053 </li> 6054 </ul> 6055 </template> 6056 </li> 6057 6058 <li 6059 class="level-1" 6060 data-id="category-node-325" 6061 x-data="initSubMenuDesktopItem" 6062 @click.outside="close" 6063 > 6064 <button 6065 type="button" 6066 class="dropdown-list-item" 6067 x-ref="childmenuToggle" 6068 @click="toggle" 6069 aria-expanded="false" 6070 :aria-expanded="open" 6071 aria-controls="category-325-desktop-menu-panel" 6072 > 6073 Spacer i podróż <svg xmlns="http://www.w3.org/2000/svg" 6074 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6075 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6076 </button> 6077 <template x-if="open"> 6078 <ul 6079 id="category-325-desktop-menu-panel" 6080 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6081 x-ref="childMenuWrapper" 6082 @keydown.escape.stop="closeEscape" 6083 > 6084 <li> 6085 <a 6086 href="https://fera.pl/kot/spacer-i-podroz.html" 6087 class="dropdown-list-item font-bold" 6088 >Spacer i podróż - zobacz wszystko</a> 6089 </li> 6090 6091 <li class="level-2"> 6092 <a
6093 href="https://fera.pl/kot/spacer-i-podroz/transporter-dla-kota.html" 6094 class="dropdown-list-item" 6095 >Transporter dla kota</a> 6096 </li> 6097 6098 <li class="level-2"> 6099 <a 6100 href="https://fera.pl/kot/spacer-i-podroz/obroze-dla-kota.html" 6101 class="dropdown-list-item" 6102 >Obroże dla kota</a> 6103 </li> 6104 6105 <li class="level-2"> 6106 <a 6107 href="https://fera.pl/kot/spacer-i-podroz/szelki-dla-kota.html" 6108 class="dropdown-list-item" 6109 >Szelki dla kota</a> 6110 </li> 6111 6112 <li class="level-2"> 6113 <a 6114 href="https://fera.pl/kot/spacer-i-podroz/smycze-dla-kota.html" 6115 class="dropdown-list-item" 6116 >Smycze dla kota</a> 6117 </li> 6118 6119 <li class="level-2"> 6120 <a 6121 href="https://fera.pl/kot/spacer-i-podroz/siatki-na-balkon-i-drzwiczki-dla-kota.html" 6122 class="dropdown-list-item" 6123 >Siatki na balkon i drzwiczki dla kota</a> 6124 </li> 6125 </ul> 6126 </template> 6127 </li> 6128 </ul> 6129 </div> 6130 <template x-if="$store.banners.activeBanners.length"> 6131 <div class="flex flex-col gap-2 p-4 border-l border-slate-100 overflow-auto"> 6132 <template x-for="(banner, index) in $store.banners.activeBanners" :key="index"> 6133 <a class="block border border-slate-100 rounded-2xl overflow-hidden" :href="banner.url"> 6134 <img :src="banner.image" :alt="banner.title ?? ''" loading="lazy" class="w-full h-auto" /> 6135 </a> 6136 </template> 6137 </div> 6138 </template> 6139 </div> 6140 </template> 6141 </li> 6142 <li 6143 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap" 6144 data-id="category-331" 6145 @click.outside="close(false)" 6146 @keydown.escape="close" 6147 @mouseenter="canHoverOpen" 6148 @mouseleave="canHoverClose" 6149 > 6150 <a 6151 href="https://fera.pl/ptaki.html" 6152 class="btn btn-nav" 6153 > 6154 Ptaki </a> 6155 <button 6156 data-id="category-331" 6157 type="button" 6158 class="group btn btn-flat btn-icon-size-s sr-only focus:not-sr-only" 6159 @click="toggle" 6160 aria-expanded="false" 6161 :aria-expanded="openDropdownId === 'category-331'" 6162 aria-controls="desktop-menu-category-331" 6163 x-ref="btn_category-331" 6164 > 6165 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 6166 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 6167</svg> 6168 </button> 6169 <template x-if="openDropdownId === 'category-331'"> 6170 <div 6171 id="desktop-menu-category-331" 6172 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 6173 :class="{ 'grid-cols-3': $store.banners.activeBanners.length }" 6174 x-ref="childmenu_category-331" 6175 x-transition 6176 > 6177 <div 6178 class="flex overflow-x-auto"
6179 :class="{ 'col-span-2': $store.banners.activeBanners.length }" 6180 > 6181 <ul class="relative flex flex-col gap-1 py-2.5 px-2 min-w-72"> 6182 6183 <li 6184 class="level-1" 6185 data-id="category-node-332" 6186 x-data="initSubMenuDesktopItem" 6187 @click.outside="close" 6188 > 6189 <button 6190 type="button" 6191 class="dropdown-list-item" 6192 x-ref="childmenuToggle" 6193 @click="toggle" 6194 aria-expanded="false" 6195 :aria-expanded="open" 6196 aria-controls="category-332-desktop-menu-panel" 6197 > 6198 Karma i przysmaki dla ptaków <svg xmlns="http://www.w3.org/2000/svg" 6199 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6200 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6201 </button> 6202 <template x-if="open"> 6203 <ul 6204 id="category-332-desktop-menu-panel" 6205 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6206 x-ref="childMenuWrapper" 6207 @keydown.escape.stop="closeEscape" 6208 > 6209 <li> 6210 <a 6211 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow.html" 6212 class="dropdown-list-item font-bold" 6213 >Karma i przysmaki dla ptaków - zobacz wszystko</a> 6214 </li> 6215 6216 <li class="level-2"> 6217 <a 6218 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-malych-ptakow.html" 6219 class="dropdown-list-item" 6220 >Karma dla maÅych ptaków</a> 6221 </li> 6222 6223 <li class="level-2"> 6224 <a 6225 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-srednich-duzych-ptakow.html" 6226 class="dropdown-list-item" 6227 >Karma dla Årednich, dużych ptaków</a> 6228 </li> 6229 6230 <li class="level-2"> 6231 <a 6232 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-kanarkow.html" 6233 class="dropdown-list-item" 6234 >Karma dla kanarków</a> 6235 </li> 6236 6237 <li class="level-2"> 6238 <a 6239 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-ptakow-egzotycznych.html" 6240 class="dropdown-list-item" 6241 >Karma dla ptaków egzotycznych</a> 6242 </li> 6243 </ul> 6244 </template> 6245 </li> 6246 6247 <li 6248 class="level-1" 6249 data-id="category-node-337" 6250 x-data="initSubMenuDesktopItem" 6251 @click.outside="close" 6252 > 6253 <button 6254 type="button" 6255 class="dropdown-list-item" 6256 x-ref="childmenuToggle" 6257 @click="toggle" 6258 aria-expanded="false" 6259 :aria-expanded="open" 6260 aria-controls="category-337-desktop-menu-panel" 6261 > 6262 Akcesoria do karmienia ptaków <svg xmlns="http://www.w3.org/2000/svg" 6263 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6264 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6265 </button> 6266 <template x-if="open"> 6267 <ul 6268 id="category-337-desktop-menu-panel" 6269 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6270 x-ref="childMenuWrapper" 6271 @keydown.escape.stop="closeEscape" 6272 > 6273 <li> 6274 <a 6275 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow.html" 6276 class="dropdown-list-item font-bold" 6277 >Akcesoria do karmienia ptaków - zobacz wszystko</a> 6278 </li> 6279 6280 <li class="level-2"> 6281 <a 6282 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow/wodopoje-dla-ptakow.html" 6283 class="dropdown-list-item" 6284 >Wodopoje dla ptaków</a> 6285 </li> 6286 6287 <li class="level-2"> 6288 <a 6289 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow/karmidla-dla-ptakow.html" 6290 class="dropdown-list-item" 6291 >KarmidÅa dla ptaków</a> 6292 </li> 6293 6294 <li class="level-2"> 6295 <a 6296 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow/miski-dla-ptakow.html" 6297 class="dropdown-list-item" 6298 >Miski dla ptaków</a> 6299 </li> 6300 </ul> 6301 </template> 6302 </li> 6303 6304 <li 6305 class="level-1" 6306 data-id="category-node-341" 6307 x-data="initSubMenuDesktopItem" 6308 @click.outside="close" 6309 > 6310 <button 6311 type="button" 6312 class="dropdown-list-item" 6313 x-ref="childmenuToggle" 6314 @click="toggle" 6315 aria-expanded="false" 6316 :aria-expanded="open" 6317 aria-controls="category-341-desktop-menu-panel" 6318 > 6319 Zdrowie i uroda ptaków <svg xmlns="http://www.w3.org/2000/svg" 6320 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6321 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6322 </button> 6323 <template x-if="open"> 6324 <ul 6325 id="category-341-desktop-menu-panel" 6326 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6327 x-ref="childMenuWrapper" 6328 @keydown.escape.stop="closeEscape" 6329 > 6330 <li> 6331 <a 6332 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow.html" 6333 class="dropdown-list-item font-bold" 6334 >Zdrowie i uroda ptaków - zobacz wszystko</a> 6335 </li> 6336 6337 <li class="level-2"> 6338 <a 6339 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/witaminy-dla-ptakow.html" 6340 class="dropdown-list-item" 6341 >Witaminy dla ptaków</a> 6342 </li> 6343 6344 <li class="level-2"> 6345 <a 6346 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/ochrona-przed-pasozytami-u-ptakow.html" 6347 class="dropdown-list-item" 6348 >Ochrona przed pasożytami u ptaków</a> 6349 </li> 6350 6351 <li class="level-2"> 6352 <a 6353 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/pielegnacja-skory-i-pior.html" 6354 class="dropdown-list-item" 6355 >PielÄgnacja skóry i piór</a> 6356 </li> 6357 6358 <li class="level-2"> 6359 <a 6360 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/pielegnacja-dzioba-i-pazurow-u-ptakow.html" 6361 class="dropdown-list-item" 6362 >PielÄgnacja dzioba i pazurów u ptaków</a> 6363 </li> 6364 </ul> 6365 </template> 6366 </li> 6367 6368 <li 6369 class="level-1" 6370 data-id="category-node-346" 6371 x-data="initSubMenuDesktopItem" 6372 @click.outside="close" 6373 > 6374 <button 6375 type="button" 6376 class="dropdown-list-item" 6377 x-ref="childmenuToggle" 6378 @click="toggle" 6379 aria-expanded="false" 6380 :aria-expanded="open" 6381 aria-controls="category-346-desktop-menu-panel" 6382 > 6383 Piaski i podÅoża <svg xmlns="http://www.w3.org/2000/svg" 6384 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6385 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6386 </button> 6387 <template x-if="open"> 6388 <ul 6389 id="category-346-desktop-menu-panel" 6390 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6391 x-ref="childMenuWrapper" 6392 @keydown.escape.stop="closeEscape" 6393 > 6394 <li> 6395 <a 6396 href="https://fera.pl/ptaki/piaski-i-podloza.html" 6397 class="dropdown-list-item font-bold" 6398 >Piaski i podÅoża - zobacz wszystko</a> 6399 </li> 6400 6401 <li class="level-2"> 6402 <a 6403 href="https://fera.pl/ptaki/piaski-i-podloza/podloza-i-piaski-dla-ptakow.html" 6404 class="dropdown-list-item" 6405 >PodÅoża i piaski dla ptaków</a> 6406 </li> 6407 6408 <li class="level-2"> 6409 <a 6410 href="https://fera.pl/ptaki/piaski-i-podloza/piaski-dla-ptakow.html" 6411 class="dropdown-list-item" 6412 >Piaski dla ptaków</a> 6413 </li> 6414 </ul> 6415 </template> 6416 </li> 6417 6418 <li 6419 class="level-1" 6420 data-id="category-node-349" 6421 x-data="initSubMenuDesktopItem" 6422 @click.outside="close" 6423 > 6424 <button 6425 type="button" 6426 class="dropdown-list-item" 6427 x-ref="childmenuToggle" 6428 @click="toggle" 6429 aria-expanded="false" 6430 :aria-expanded="open" 6431 aria-controls="category-349-desktop-menu-panel" 6432 > 6433 Klatki i akcesoria dla ptaków <svg xmlns="http://www.w3.org/2000/svg" 6434 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6435 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6436 </button> 6437 <template x-if="open"> 6438 <ul 6439 id="category-349-desktop-menu-panel" 6440 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6441 x-ref="childMenuWrapper" 6442 @keydown.escape.stop="closeEscape" 6443 > 6444 <li> 6445 <a 6446 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow.html" 6447 class="dropdown-list-item font-bold" 6448 >Klatki i akcesoria dla ptaków - zobacz wszystko</a> 6449 </li> 6450 6451 <li class="level-2"> 6452 <a 6453 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/klatki-dla-ptakow.html" 6454 class="dropdown-list-item" 6455 >Klatki dla ptaków</a> 6456 </li> 6457 6458 <li class="level-2"> 6459 <a 6460 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/materialy-na-gniazdo.html" 6461 class="dropdown-list-item" 6462 >MateriaÅy na gniazdo</a> 6463 </li> 6464 6465 <li class="level-2"> 6466 <a 6467 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/domki-i-gniazda-dla-ptakow.html" 6468 class="dropdown-list-item" 6469 >
6469Domki i gniazda dla ptaków</a> 6470 </li> 6471 6472 <li class="level-2"> 6473 <a 6474 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/hustawki-dla-ptakow.html" 6475 class="dropdown-list-item" 6476 >HuÅtawki dla ptaków</a> 6477 </li> 6478 6479 <li class="level-2"> 6480 <a 6481 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/lusterka-dla-ptakow.html" 6482 class="dropdown-list-item" 6483 >Lusterka dla ptaków</a> 6484 </li> 6485 6486 <li class="level-2"> 6487 <a 6488 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/drabinki-i-drazki-dla-ptakow.html" 6489 class="dropdown-list-item" 6490 >Drabinki i drÄ Å¼ki dla ptaków</a> 6491 </li> 6492 6493 <li class="level-2"> 6494 <a 6495 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/akcesoria-dla-ptakow.html" 6496 class="dropdown-list-item" 6497 >Akcesoria dla ptaków</a> 6498 </li> 6499 </ul> 6500 </template> 6501 </li> 6502 6503 <li 6504 class="level-1" 6505 data-id="category-node-357" 6506 x-data="initSubMenuDesktopItem" 6507 @click.outside="close" 6508 > 6509 <button 6510 type="button" 6511 class="dropdown-list-item" 6512 x-ref="childmenuToggle" 6513 @click="toggle" 6514 aria-expanded="false" 6515 :aria-expanded="open" 6516 aria-controls="category-357-desktop-menu-panel" 6517 > 6518 Zabawki dla ptaków <svg xmlns="http://www.w3.org/2000/svg" 6519 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6520 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6521 </button> 6522 <template x-if="open"> 6523 <ul 6524 id="category-357-desktop-menu-panel" 6525 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6526 x-ref="childMenuWrapper" 6527 @keydown.escape.stop="closeEscape" 6528 > 6529 <li> 6530 <a 6531 href="https://fera.pl/ptaki/zabawki-dla-ptakow.html" 6532 class="dropdown-list-item font-bold" 6533 >Zabawki dla ptaków - zobacz wszystko</a> 6534 </li> 6535 6536 <li class="level-2"> 6537 <a 6538 href="https://fera.pl/ptaki/zabawki-dla-ptakow/zabawki-dla-ptakow.html" 6539 class="dropdown-list-item" 6540 >Zabawki dla ptaków</a> 6541 </li> 6542 6543 <li class="level-2"> 6544 <a 6545 href="https://fera.pl/ptaki/zabawki-dla-ptakow/place-zabaw-dla-ptakow.html" 6546 class="dropdown-list-item" 6547 >Place zabaw dla ptaków</a> 6548 </li> 6549 </ul> 6550 </template> 6551 </li> 6552 6553 <li 6554 class="level-1" 6555 data-id="category-node-360" 6556 x-data="initSubMenuDesktopItem" 6557 @click.outside="close" 6558 > 6559 <button 6560 type="button" 6561 class="dropdown-list-item" 6562 x-ref="childmenuToggle" 6563 @click="toggle" 6564 aria-expanded="false" 6565 :aria-expanded="open" 6566 aria-controls="category-360-desktop-menu-panel" 6567 > 6568 Dzikie ptaki <svg xmlns="http://www.w3.org/2000/svg" 6569 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6570 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6571 </button> 6572 <template x-if="open"> 6573 <ul 6574 id="category-360-desktop-menu-panel" 6575 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6576 x-ref="childMenuWrapper" 6577 @keydown.escape.stop="closeEscape" 6578 > 6579 <li> 6580 <a 6581 href="https://fera.pl/ptaki/dzikie-ptaki.html" 6582 class="dropdown-list-item font-bold" 6583 >Dzikie ptaki - zobacz wszystko</a> 6584 </li> 6585 6586 <li class="level-2"> 6587 <a 6588 href="https://fera.pl/ptaki/dzikie-ptaki/karma-dla-dzikich-ptakow.html" 6589 class="dropdown-list-item" 6590 >Karma dla dzikich ptaków</a> 6591 </li> 6592 6593 <li class="level-2"> 6594 <a 6595 href="https://fera.pl/ptaki/dzikie-ptaki/karmniki-i-domki-dla-ptakow.html" 6596 class="dropdown-list-item" 6597 >Karmniki i domki dla ptaków</a> 6598 </li> 6599 </ul> 6600 </template> 6601 </li> 6602 </ul> 6603 </div> 6604 <template x-if="$store.banners.activeBanners.length"> 6605 <div class="flex flex-col gap-2 p-4 border-l border-slate-100 overflow-auto"> 6606 <template x-for="(banner, index) in $store.banners.activeBanners" :key="index"> 6607 <a class="block border border-slate-100 rounded-2xl overflow-hidden" :href="banner.url"> 6608 <img :src="banner.image" :alt="banner.title ?? ''" loading="lazy" class="w-full h-auto" /> 6609 </a> 6610 </template> 6611 </div> 6612 </template> 6613 </div> 6614 </template> 6615 </li> 6616 <li 6617 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap" 6618 data-id="category-363" 6619 @click.outside="close(false)" 6620 @keydown.escape="close" 6621 @mouseenter="canHoverOpen" 6622 @mouseleave="canHoverClose" 6623 > 6624 <a 6625 href="https://fera.pl/ryby.html" 6626 class="btn btn-nav" 6627 > 6628 Ryby </a> 6629 <button 6630 data-id="category-363" 6631 type="button" 6632 class="group btn btn-flat btn-icon-size-s sr-only focu
6632s:not-sr-only" 6633 @click="toggle" 6634 aria-expanded="false" 6635 :aria-expanded="openDropdownId === 'category-363'" 6636 aria-controls="desktop-menu-category-363" 6637 x-ref="btn_category-363" 6638 > 6639 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 6640 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 6641</svg> 6642 </button> 6643 <template x-if="openDropdownId === 'category-363'"> 6644 <div 6645 id="desktop-menu-category-363" 6646 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 6647 :class="{ 'grid-cols-3': $store.banners.activeBanners.length }" 6648 x-ref="childmenu_category-363" 6649 x-transition 6650 > 6651 <div 6652 class="flex overflow-x-auto" 6653 :class="{ 'col-span-2': $store.banners.activeBanners.length }" 6654 > 6655 <ul class="relative flex flex-col gap-1 py-2.5 px-2 min-w-72"> 6656 6657 <li 6658 class="level-1" 6659 data-id="category-node-364" 6660 x-data="initSubMenuDesktopItem" 6661 @click.outside="close" 6662 > 6663 <button 6664 type="button" 6665 class="dropdown-list-item" 6666 x-ref="childmenuToggle" 6667 @click="toggle" 6668 aria-expanded="false" 6669 :aria-expanded="open" 6670 aria-controls="category-364-desktop-menu-panel" 6671 > 6672 Akwaria i akcesoria <svg xmlns="http://www.w3.org/2000/svg" 6673 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6674 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6675 </button> 6676 <template x-if="open"> 6677 <ul 6678 id="category-364-desktop-menu-panel" 6679 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6680 x-ref="childMenuWrapper" 6681 @keydown.escape.stop="closeEscape" 6682 > 6683 <li> 6684 <a 6685 href="https://fera.pl/ryby/akwaria-i-akcesoria.html" 6686 class="dropdown-list-item font-bold" 6687 >Akwaria i akcesoria - zobacz wszystko</a> 6688 </li> 6689 6690 <li class="level-2"> 6691 <a 6692 href="https://fera.pl/ryby/akwaria-i-akcesoria/akwaria.html" 6693 class="dropdown-list-item" 6694 >Akwaria</a> 6695 </li> 6696 6697 <li class="level-2"> 6698 <a 6699 href="https://fera.pl/ryby/akwaria-i-akcesoria/akcesoria-do-akwarium.html" 6700 class="dropdown-list-item" 6701 >Akcesoria do akwarium</a> 6702 </li> 6703 6704 <li class="level-2"> 6705 <a 6706 href="https://fera.pl/ryby/akwaria-i-akcesoria/szafki-pod-akwarium.html" 6707 class="dropdown-list-item" 6708 >Szafki pod akwarium</a> 6709 </li> 6710 6711 <li class="level-2"> 6712 <a 6713 href="https://fera.pl/ryby/akwaria-i-akcesoria/kotniki.html" 6714 class="dropdown-list-item" 6715 >Kotniki</a> 6716 </li> 6717 6718 <li class="level-2"> 6719 <a 6720 href="https://fera.pl/ryby/akwaria-i-akcesoria/automaty-do-karmienia-ryb.html" 6721 class="dropdown-list-item" 6722 >Automaty do karmienia ryb</a> 6723 </li> 6724 6725 <li class="level-2"> 6726 <a 6727 href="https://fera.pl/ryby/akwaria-i-akcesoria/siatki-na-ryby.html" 6728 class="dropdown-list-item" 6729 >
6729Siatki na ryby</a> 6730 </li> 6731 </ul> 6732 </template> 6733 </li> 6734 6735 <li 6736 class="level-1" 6737 data-id="category-node-372" 6738 x-data="initSubMenuDesktopItem" 6739 @click.outside="close" 6740 > 6741 <button 6742 type="button" 6743 class="dropdown-list-item" 6744 x-ref="childmenuToggle" 6745 @click="toggle" 6746 aria-expanded="false" 6747 :aria-expanded="open" 6748 aria-controls="category-372-desktop-menu-panel" 6749 > 6750 Pokarm dla ryb <svg xmlns="http://www.w3.org/2000/svg" 6751 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6752 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6753 </button> 6754 <template x-if="open"> 6755 <ul 6756 id="category-372-desktop-menu-panel" 6757 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6758 x-ref="childMenuWrapper" 6759 @keydown.escape.stop="closeEscape" 6760 > 6761 <li> 6762 <a 6763 href="https://fera.pl/ryby/pokarm-dla-ryb.html" 6764 class="dropdown-list-item font-bold" 6765 >Pokarm dla ryb - zobacz wszystko</a> 6766 </li> 6767 6768 <li class="level-2"> 6769 <a 6770 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-bojownikow.html" 6771 class="dropdown-list-item" 6772 >Pokarm dla bojowników</a> 6773 </li> 6774 6775 <li class="level-2"> 6776 <a 6777 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-pielegnic.html" 6778 class="dropdown-list-item" 6779 >Pokarm dla pielÄgnic</a> 6780 </li> 6781 6782 <li class="level-2"> 6783 <a 6784 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-gupikow.html" 6785 class="dropdown-list-item" 6786 >Pokarm dla gupików</a> 6787 </li> 6788 6789 <li class="level-2"> 6790 <a 6791 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-paletek.html" 6792 class="dropdown-list-item" 6793 >Pokarm dla paletek</a> 6794 </li> 6795 6796 <li class="level-2"> 6797 <a 6798 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-glonojadow.html" 6799 class="dropdown-list-item" 6800 >Pokarm dla glonojadów</a> 6801 </li> 6802 6803 <li class="level-2"> 6804 <a 6805 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-ryb-dennych.html" 6806 class="dropdown-list-item" 6807 >Pokarm dla ryb dennych</a> 6808 </li> 6809 6810 <li class="level-2"> 6811 <a 6812 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-karpi-koi.html" 6813 class="dropdown-list-item" 6814 >Pokarm dla karpi koi</a> 6815 </li> 6816 6817 <li class="level-2"> 6818 <a 6819 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-ryb-ozdobnych.html" 6820 class="dropdown-list-item" 6821 >Pokarm dla ryb ozdobnych</a> 6822 </li> 6823 </ul> 6824 </template> 6825 </li> 6826 6827 <li 6828 class="level-1" 6829 data-id="category-node-371" 6830 x-data="initSubMenuDesktopItem" 6831 @click.outside="close" 6832 > 6833 <button 6834 type="button" 6835 class="dropdown-list-item" 6836 x-ref="childmenuToggle" 6837 @click="toggle" 6838 aria-expanded="false" 6839 :aria-expanded="open" 6840 aria-controls="category-371-desktop-menu-panel" 6841 > 6842 Pokarm i utrzymanie <svg xmlns="http://www.w3.org/2000/svg" 6843 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6844 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6845 </button> 6846 <template x-if="open"> 6847 <ul 6848 id="category-371-desktop-menu-panel" 6849 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6850 x-ref="childMenuWrapper" 6851 @keydown.escape.stop="closeEscape" 6852 > 6853 <li> 6854 <a 6855 href="https://fera.pl/ryby/pokarm-i-utrzymanie.html" 6856 class="dropdown-list-item font-bold" 6857 >Pokarm i utrzymanie - zobacz wszystko</a> 6858 </li> 6859 6860 <li class="level-2"> 6861 <a 6862 href="https://fera.pl/ryby/pokarm-i-utrzymanie/uzdatniacze-do-wody.html" 6863 class="dropdown-list-item" 6864 >Uzdatniacze do wody</a> 6865 </li> 6866 6867 <li class="level-2"> 6868 <a 6869 href="https://fera.pl/ryby/pokarm-i-utrzymanie/testery-do-wody-w-akwarium.html" 6870 class="dropdown-list-item" 6871 >Testery do wody w akwarium</a> 6872 </li> 6873 6874 <li class="level-2"> 6875 <a 6876 href="https://fera.pl/ryby/pokarm-i-utrzymanie/ochrona-roslin-w-akwarium.html" 6877 class="dropdown-list-item" 6878 >Ochrona roÅlin w akwarium</a> 6879 </li> 6880 6881 <li class="level-2"> 6882 <a 6883 href="https://fera.pl/ryby/pokarm-i-utrzymanie/czyszczenie-akwarium.html" 6884 class="dropdown-list-item" 6885 >Czyszczenie akwarium</a> 6886 </li> 6887 6888 <li class="level-2"> 6889 <a 6890 href="https://fera.pl/ryby/pokarm-i-utrzymanie/akwaria-morskie.html" 6891 class="dropdown-list-item" 6892 >Akwaria morskie</a> 6893 </li> 6894 6895 <li class="level-2"> 6896 <a 6897 href="https://fera.pl/ryby/pokarm-i-utrzymanie/srodki-lecznicze-do-akwarium.html" 6898 class="dropdown-list-item" 6899 >Årodki lecznicze do akwarium</a> 6900 </li> 6901 6902 <li class="level-2"> 6903 <a 6904 href="https://fera.pl/ryby/pokarm-i-utrzymanie/preparaty-antyglonowe-do-akwarium.html" 6905 class="dropdown-list-item" 6906 >Preparaty antyglonowe do akwarium</a> 6907 </li> 6908 6909 <li class="level-2"> 6910 <a 6911 href="https://fera.pl/ryby/pokarm-i-utrzymanie/technika-co2.html" 6912 class="dropdown-list-item" 6913 >Technika Co2</a> 6914 </li> 6915 </ul> 6916 </template> 6917 </li> 6918 6919 <li 6920 class="level-1" 6921 data-id="category-node-389" 6922 x-data="initSubMenuDesktopItem" 6923 @click.outside="close" 6924 > 6925 <button 6926 type="button" 6927 class="dropdown-list-item" 6928 x-ref="childmenuToggle" 6929 @click="toggle" 6930 aria-expanded="false" 6931 :aria-expanded="open" 6932 aria-controls="category-389-desktop-menu-panel" 6933 > 6934 Filtry i napowietrzacze <svg xmlns="http://www.w3.org/2000/svg" 6935 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 6936 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 6937 </button> 6938 <template x-if="open"> 6939 <ul 6940 id="category-389-desktop-menu-panel" 6941 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 6942 x-ref="childMenuWrapper" 6943 @keydown.escape.stop="closeEscape" 6944 > 6945 <li> 6946 <a 6947 href="https://fera.pl/ryby/filtry-i-napowietrzacze.html" 6948 class="dropdown-list-item font-bold" 6949 >Filtry i napowietrzacze - zobacz wszystko</a> 6950 </li> 6951 6952 <li class="level-2"> 6953 <a 6954 href="https://fera.pl/ryby/filtry-i-napowietrzacze/filtry-do-akwarium.html" 6955 class="dropdown-list-item" 6956 >Filtry do akwarium</a> 6957 </li> 6958 6959 <li class="level-2"> 6960 <a 6961 href="https://fera.pl/ryby/filtry-i-napowietrzacze/wklady-do-filtrow.html" 6962 class="dropdown-list-item" 6963 >WkÅady do filtrów</a> 6964 </li> 6965 6966 <li class="level-2"> 6967 <a 6968 href="https://fera.pl/ryby/filtry-i-napowietrzacze/p
6968ompki-do-akwarium.html" 6969 class="dropdown-list-item" 6970 >Pompki do akwarium</a> 6971 </li> 6972 6973 <li class="level-2"> 6974 <a 6975 href="https://fera.pl/ryby/filtry-i-napowietrzacze/czesci-i-akcesoria-do-filtrow.html" 6976 class="dropdown-list-item" 6977 >CzÄÅci i akcesoria do filtrów</a> 6978 </li> 6979 </ul> 6980 </template> 6981 </li> 6982 6983 <li 6984 class="level-1" 6985 data-id="category-node-394" 6986 x-data="initSubMenuDesktopItem" 6987 @click.outside="close" 6988 > 6989 <button 6990 type="button" 6991 class="dropdown-list-item" 6992 x-ref="childmenuToggle" 6993 @click="toggle" 6994 aria-expanded="false" 6995 :aria-expanded="open" 6996 aria-controls="category-394-desktop-menu-panel" 6997 > 6998 OÅwietlenie i ogrzewanie <svg xmlns="http://www.w3.org/2000/svg" 6999 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7000 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7001 </button> 7002 <template x-if="open"> 7003 <ul 7004 id="category-394-desktop-menu-panel" 7005 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7006 x-ref="childMenuWrapper" 7007 @keydown.escape.stop="closeEscape" 7008 > 7009 <li> 7010 <a 7011 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie.html" 7012 class="dropdown-list-item font-bold" 7013 >OÅwietlenie i ogrzewanie - zobacz wszystko</a> 7014 </li> 7015 7016 <li class="level-2"> 7017 <a 7018 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/termometry-do-akwarium.html" 7019 class="dropdown-list-item" 7020 >Termometry do akwarium</a> 7021 </li> 7022 7023 <li class="level-2"> 7024 <a 7025 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/oswietlenie-akwarium.html" 7026 class="dropdown-list-item" 7027 >OÅwietlenie akwarium</a> 7028 </li> 7029 7030 <li class="level-2"> 7031 <a 7032 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/grzalki-do-akwarium.html" 7033 class="dropdown-list-item" 7034 >GrzaÅki do akwarium</a> 7035 </li> 7036 7037 <li class="level-2"> 7038 <a 7039 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/sterylizatory-uv-do-akwarium.html" 7040 class="dropdown-list-item" 7041 >Sterylizatory UV do akwarium</a> 7042 </li> 7043 </ul> 7044 </template> 7045 </li> 7046 7047 <li 7048 class="level-1" 7049 data-id="category-node-399" 7050 x-data="initSubMenuDesktopItem" 7051 @click.outside="close" 7052 > 7053 <button 7054 type="button" 7055 class="dropdown-list-item" 7056 x-ref="childmenuToggle" 7057 @click="toggle" 7058 aria-expanded="false" 7059 :aria-expanded="open" 7060 aria-controls="category-399-desktop-menu-panel" 7061 > 7062 Dekoracje do akwarium <svg xmlns="http://www.w3.org/2000/svg" 7063 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7064 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7065 </button> 7066 <template x-if="open"> 7067 <ul 7068 id="category-399-desktop-menu-panel" 7069 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7070 x-ref="childMenuWrapper" 7071 @keydown.escape.stop="closeEscape" 7072 > 7073 <li> 7074 <a 7075 href="https://fera.pl/ryby/dekoracje-do-akwarium.html" 7076 class="dropdown-list-item font-bold" 7077 >Dekoracje do akwarium - zobacz wszystko</a> 7078 </li> 7079 7080 <li class="level-2"> 7081 <a 7082 href="https://fera.pl/ryby/dekoracje-do-akwarium/rosliny-do-akwarium.html" 7083 class="dropdown-list-item" 7084 >RoÅliny do akwarium</a> 7085 </li> 7086 7087 <li class="level-2"> 7088 <a 7089 href="https://fera.pl/ryby/dekoracje-do-akwarium/podloza-dla-ryb.html" 7090 class="dropdown-list-item" 7091 >PodÅoża dla ryb</a> 7092 </li> 7093 7094 <li class="level-2"> 7095 <a 7096 href="https://fera.pl/ryby/dekoracje-do-akwarium/ozdoby-do-akwarium.html" 7097 class="dropdown-list-item" 7098 >Ozdoby do akwarium</a> 7099 </li> 7100 7101 <li class="level-2"> 7102 <a 7103 href="https://fera.pl/ryby/dekoracje-do-akwarium/korzenie-do-akwarium.html" 7104 class="dropdown-list-item" 7105 >Korzenie do akwarium</a> 7106 </li> 7107 7108 <li class="level-2"> 7109 <a 7110 href="https://fera.pl/ryby/dekoracje-do-akwarium/tlo-do-akwarium.html" 7111 class="dropdown-list-item" 7112 >TÅo do akwarium</a> 7113 </li> 7114 7115 <li class="level-2"> 7116 <a 7117 href="https://fera.pl/ryby/dekoracje-do-akwarium/kamienie-ozdobne-do-akwarium.html" 7118 class="dropdown-list-item" 7119 >Kamienie ozdobne do akwarium</a> 7120 </li> 7121 </ul> 7122 </template> 7123 </li> 7124 7125 <li 7126 class="level-1" 7127 data-id="category-node-406" 7128 x-data="initSubMenuDesktopItem" 7129 @click.outside="close" 7130 > 7131 <button 7132 type="button" 7133 class="dropdown-list-item" 7134 x-ref="childmenuToggle" 7135 @click="toggle" 7136 aria-expanded="false" 7137 :aria-expanded="open" 7138 aria-controls="category-406-desktop-menu-panel" 7139 > 7140 Oczko wodne <svg xmlns="http://www.w3.org/2000/svg" 7141 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7142 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7143 </button> 7144 <template x-if="open"> 7145 <ul 7146 id="category-406-desktop-menu-panel" 7147 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7148 x-ref="childMenuWrapper" 7149 @keydown.escape.stop="closeEscape" 7150 > 7151 <li> 7152 <a 7153 href="https://fera.pl/ryby/oczko-wodne.html" 7154 class="dropdown-list-item font-bold" 7155 >Oczko wodne - zobacz wszystko</a> 7156 </li> 7157 7158 <li class="level-2"> 7159 <a 7160 href="https://fera.pl/ryby/oczko-wodne/testery-do-wody-w-oczku-wodnym.html" 7161 class="dropdown-list-item" 7162 >Testery do wody w oczku wodnym</a> 7163 </li> 7164 7165 <li class="level-2"> 7166 <a 7167 href="https://fera.pl/ryby/oczko-wodne/preparaty-antyglonowe-do-oczka-wodnego.html" 7168 class="dropdown-list-item" 7169 >Preparaty antyglonowe do oczka wodnego</a> 7170 </li> 7171 7172 <li class="level-2"> 7173 <a 7174 href="https://fera.pl/ryby/oczko-wodne/czyszczenie-oczka-wodnego.html" 7175 class="dropdown-list-item" 7176 >Czyszczenie oczka wodnego</a> 7177 </li> 7178 7179 <li class="level-2"> 7180 <a 7181 href="https://fera.pl/ryby/oczko-wodne/pokarm-dla-ryb-w-oczku-wodnym.html" 7182 class="dropdown-list-item" 7183 >Pokarm dla ryb w oczku wodnym</a> 7184 </li> 7185 7186 <li class="level-2"> 7187 <a 7188 href="https://fera.pl/ryby/oczko-wodne/akcesoria-do-oczka-wodnego.html" 7189 class="dropdown-list-item" 7190 >Akcesoria do oczka wodnego</a> 7191 </li> 7192 7193 <li class="level-2"> 7194 <a 7195 href="https://fera.pl/ryby/oczko-wodne/filtry-i-fontanny-do-ocz
7195ka-wodnego.html" 7196 class="dropdown-list-item" 7197 >Filtry i fontanny do oczka wodnego</a> 7198 </li> 7199 7200 <li class="level-2"> 7201 <a 7202 href="https://fera.pl/ryby/oczko-wodne/fontanny.html" 7203 class="dropdown-list-item" 7204 >Fontanny</a> 7205 </li> 7206 7207 <li class="level-2"> 7208 <a 7209 href="https://fera.pl/ryby/oczko-wodne/oswietlenie-oczka-wodnego.html" 7210 class="dropdown-list-item" 7211 >OÅwietlenie oczka wodnego</a> 7212 </li> 7213 </ul> 7214 </template> 7215 </li> 7216 </ul> 7217 </div> 7218 <template x-if="$store.banners.activeBanners.length"> 7219 <div class="flex flex-col gap-2 p-4 border-l border-slate-100 overflow-auto"> 7220 <template x-for="(banner, index) in $store.banners.activeBanners" :key="index"> 7221 <a class="block border border-slate-100 rounded-2xl overflow-hidden" :href="banner.url"> 7222 <img :src="banner.image" :alt="banner.title ?? ''" loading="lazy" class="w-full h-auto" /> 7223 </a> 7224 </template> 7225 </div> 7226 </template> 7227 </div> 7228 </template> 7229 </li> 7230 <li 7231 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap" 7232 data-id="category-415" 7233 @click.outside="close(false)" 7234 @keydown.escape="close" 7235 @mouseenter="canHoverOpen" 7236 @mouseleave="canHoverClose" 7237 > 7238 <a 7239 href="https://fera.pl/male-ssaki.html" 7240 class="btn btn-nav" 7241 > 7242 MaÅe ssaki </a> 7243 <button 7244 data-id="category-415" 7245 type="button" 7246 class="group btn btn-flat btn-icon-size-s sr-only focus:not-sr-only" 7247 @click="toggle" 7248 aria-expanded="false" 7249 :aria-expanded="openDropdownId === 'category-415'" 7250 aria-controls="desktop-menu-category-415" 7251 x-ref="btn_category-415" 7252 > 7253 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 7254 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 7255</svg> 7256 </button> 7257 <template x-if="openDropdownId === 'category-415'"> 7258 <div 7259 id="desktop-menu-category-415" 7260 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 7261 :class="{ 'grid-cols-3': $store.banners.activeBanners.length }" 7262 x-ref="childmenu_category-415" 7263 x-transition 7264 > 7265 <div 7266 class="flex overflow-x-auto" 7267 :class="{ 'col-span-2': $store.banners.activeBanners.length }" 7268 > 7269 <ul class="relative flex flex-col gap-1 py-2.5 px-2 min-w-72"> 7270 7271 <li 7272 class="level-1" 7273 data-id="category-node-416" 7274 x-data="initSubMenuDesktopItem" 7275 @click.outside="close" 7276 > 7277 <button 7278 type="button" 7279 class="dropdown-list-item" 7280 x-ref="childmenuToggle" 7281 @click="toggle" 7282 aria-expanded="false" 7283 :aria-expanded="open" 7284 aria-controls="category-416-desktop-menu-panel" 7285 > 7286 Karma i przysmaki <svg xmlns="http://www.w3.org/2000/svg" 7287 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7288 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7289 </button> 7290 <template x-if="open"> 7291 <ul 7292 id="category-416-desktop-menu-panel" 7293 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7294 x-ref="childMenuWrapper" 7295 @keydown.escape.stop="closeEscape" 7296 > 7297 <li> 7298 <a 7299 href="https://fera.pl/male-ssaki/karma-i-przysmaki.html" 7300 class="dropdown-list-item font-bold" 7301 >Karma i przysmaki - zobacz wszystko</a> 7302 </li> 7303 7304 <li class="level-2"> 7305 <a 7306 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-chomika.html" 7307 class="dropdown-list-item" 7308 >Karma dla chomika</a> 7309 </li> 7310 7311 <li class="level-2"> 7312 <a 7313 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-fretki.html" 7314 class="dropdown-list-item" 7315 >Karma dla fretki</a> 7316 </li> 7317 7318 <li class="level-2"> 7319 <a 7320 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-koszatniczki.html" 7321 class="dropdown-list-item" 7322 >Karma dla koszatniczki</a> 7323 </li> 7324 7325 <li class="level-2"> 7326 <a 7327 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-krolika.html" 7328 class="dropdown-list-item" 7329 >Karma dla królika</a> 7330 </li> 7331 7332 <li class="level-2"> 7333 <a 7334 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-myszy-i-myszoskoczka.html" 7335 class="dropdown-list-item" 7336 >Karma dla myszy i myszoskoczka</a> 7337 </li> 7338 7339 <li class="level-2"> 7340 <a 7341 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-szczura.html" 7342 class="dropdown-list-item" 7343 >Karma dla szczura</a> 7344 </li> 7345 7346 <li class="level-2"> 7347 <a 7348 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-szynszyli.html" 7349 class="dropdown-list-item" 7350 >Karma dla szynszyli</a> 7351 </li> 7352 7353 <li class="level-2"> 7354 <a 7355 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-swinki-morskiej.html" 7356 class="dropdown-list-item" 7357 >Karma dla Åwinki morskiej</a> 7358 </li> 7359 7360 <li class="level-2"> 7361 <a 7362 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-jeza-i-wiewiorki.html" 7363 class="dropdown-list-item" 7364 >Karma dla jeża i wiewiórki</a> 7365 </li> 7366 </ul> 7367 </template> 7368 </li> 7369 7370 <li 7371 class="level-1" 7372 data-id="category-node-426" 7373 x-data="initSubMenuDesktopItem" 7374 @click.outside="close" 7375 > 7376 <button 7377 type="button" 7378 class="dropdown-list-item" 7379 x-ref="childmenuToggle" 7380 @click="toggle" 7381 aria-expanded="false" 7382 :aria-expanded="open" 7383 aria-controls="category-426-desktop-menu-panel" 7384 > 7385 Akcesoria do karmienia maÅych ssaków <svg xmlns="http://www.w3.org/2000/svg" 7386 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7387 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7388 </button> 7389 <template x-if="open"> 7390 <ul 7391 id="category-426-desktop-menu-panel" 7392 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7393 x-ref="childMenuWrapper" 7394 @keydown.escape.stop="closeEscape" 7395 > 7396 <li> 7397 <a 7398 href="https://fera.pl/male-ssaki/akcesoria-do-karmienia-malych-ssakow.html" 7399 class="dropdown-list-item font-bold" 7400 >Akcesoria do karmienia maÅych ssaków - zobacz wszystko</a> 7401 </li> 7402 7403 <li class="level-2"> 7404 <a 7405 href="https://fera.pl/male-ssaki/akcesoria-do-karmienia-malych-ssakow/miski.html" 7406 class="dropdown-list-item" 7407 >Miski</a> 7408 </li> 7409 7410 <li class="level-2"> 7411 <a 7412 href="https://fera.pl/male-ssaki/akcesoria-do-karmienia-malych-ssakow/poidelka.html" 7413 class="dropdown-list-item" 7414 >PoideÅka</a> 7415 </li> 7416 </ul> 7417 </template> 7418 </li> 7419 7420 <li 7421 class="level-1" 7422 data-id="category-node-430" 7423 x-data="initSubMenuDesktopItem" 7424 @click.outside="close" 7425 > 7426 <button 7427 type="button" 7428 class="dropdown-list-item" 7429 x-ref="childmenuToggle" 7430 @click="toggle" 7431 aria-expanded="false" 7432 :aria-expanded="open" 7433 aria-controls="category-430-desktop-menu-panel" 7434 > 7435 Klatki <svg xmlns="http://www.w3.org/2000/svg" 7436 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7437 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7438 </button> 7439 <template x-if="open"> 7440 <ul 7441 id="category-430-desktop-menu-panel" 7442 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7443 x-ref="childMenuWrapper" 7444 @keydown.escape.stop="closeEscape" 7445 > 7446 <li> 7447 <a 7448 href="https://fera.pl/male-ssaki/klatki.html" 7449 class="dropdown-list-item font-bold" 7450 >Klatki - zobacz wszystko</a> 7451 </li> 7452 7453 <li class="level-2"> 7454 <a 7455 href="https://fera.pl/male-ssaki/klatki/klatka-dla-ch
7455omika.html" 7456 class="dropdown-list-item" 7457 >Klatka dla chomika</a> 7458 </li> 7459 7460 <li class="level-2"> 7461 <a 7462 href="https://fera.pl/male-ssaki/klatki/klatka-dla-fretki.html" 7463 class="dropdown-list-item" 7464 >Klatka dla fretki</a> 7465 </li> 7466 7467 <li class="level-2"> 7468 <a 7469 href="https://fera.pl/male-ssaki/klatki/klatka-dla-krolika.html" 7470 class="dropdown-list-item" 7471 >Klatka dla królika</a> 7472 </li> 7473 7474 <li class="level-2"> 7475 <a 7476 href="https://fera.pl/male-ssaki/klatki/klatka-dla-myszoskoczka.html" 7477 class="dropdown-list-item" 7478 >Klatka dla myszoskoczka</a> 7479 </li> 7480 7481 <li class="level-2"> 7482 <a 7483 href="https://fera.pl/male-ssaki/klatki/klatka-dla-myszy.html" 7484 class="dropdown-list-item" 7485 >Klatka dla myszy</a> 7486 </li> 7487 7488 <li class="level-2"> 7489 <a 7490 href="https://fera.pl/male-ssaki/klatki/klatka-dla-szczura.html" 7491 class="dropdown-list-item" 7492 >Klatka dla szczura</a> 7493 </li> 7494 7495 <li class="level-2"> 7496 <a 7497 href="https://fera.pl/male-ssaki/klatki/klatka-dla-szynszyli.html" 7498 class="dropdown-list-item" 7499 >Klatka dla szynszyli</a> 7500 </li> 7501 7502 <li class="level-2"> 7503 <a 7504 href="https://fera.pl/male-ssaki/klatki/klatka-dla-swinki-morskiej.html" 7505 class="dropdown-list-item" 7506 >Klatka dla Åwinki morskiej</a> 7507 </li> 7508 7509 <li class="level-2"> 7510 <a 7511 href="https://fera.pl/male-ssaki/klatki/klatka-dla-wiewiorki.html" 7512 class="dropdown-list-item" 7513 >Klatka dla wiewiórki</a> 7514 </li> 7515 </ul> 7516 </template> 7517 </li> 7518 7519 <li 7520 class="level-1" 7521 data-id="category-node-429" 7522 x-data="initSubMenuDesktopItem" 7523 @click.outside="close" 7524 > 7525 <button 7526 type="button" 7527 class="dropdown-list-item" 7528 x-ref="childmenuToggle" 7529 @click="toggle" 7530 aria-expanded="false" 7531 :aria-expanded="open" 7532 aria-controls="category-429-desktop-menu-panel" 7533 > 7534 Klatki i kojce <svg xmlns="http://www.w3.org/2000/svg" 7535 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7536 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7537 </button> 7538 <template x-if="open"> 7539 <ul 7540 id="category-429-desktop-menu-panel" 7541 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7542 x-ref="childMenuWrapper" 7543 @keydown.escape.stop="closeEscape" 7544 > 7545 <li> 7546 <a 7547 href="https://fera.pl/male-ssaki/klatki-i-kojce.html" 7548 class="dropdown-list-item font-bold" 7549 >Klatki i kojce - zobacz wszystko</a> 7550 </li> 7551 7552 <li class="level-2"> 7553 <a 7554 href="https://fera.pl/male-ssaki/klatki-i-kojce/kojce-i-wybiegi-dla-krolikow.html" 7555 class="dropdown-list-item" 7556 >Kojce i wybiegi dla królików</a> 7557 </li> 7558 7559 <li class="level-2"> 7560 <a 7561 href="https://fera.pl/male-ssaki/klatki-i-kojce/akcesoria-do-rozbudowy-klatki.html" 7562 class="dropdown-list-item" 7563 >Akcesoria do rozbudowy klatki</a> 7564 </li> 7565 </ul> 7566 </template> 7567 </li> 7568 7569 <li 7570 class="level-1" 7571 data-id="category-node-442" 7572 x-data="initSubMenuDesktopItem" 7573 @click.outside="close" 7574 > 7575 <button 7576 type="button" 7577 class="dropdown-list-item" 7578 x-ref="childmenuToggle" 7579 @click="toggle" 7580 aria-expanded="false" 7581 :aria-expanded="open" 7582 aria-controls="category-442-desktop-menu-panel" 7583 > 7584 PodÅoże do klatek <svg xmlns="http://www.w3.org/2000/svg" 7585 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7586 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7587 </button> 7588 <template x-if="open"> 7589 <ul 7590 id="category-442-desktop-menu-panel" 7591 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7592 x-ref="childMenuWrapper" 7593 @keydown.escape.stop="closeEscape" 7594 > 7595 <li> 7596 <a 7597 href="https://fera.pl/male-ssaki/podloze-do-klatek.html" 7598 class="dropdown-list-item font-bold" 7599 >PodÅoże do klatek - zobacz wszystko</a> 7600 </li> 7601 7602 <li class="level-2"> 7603 <a 7604 href="https://fera.pl/male-ssaki/podloze-do-klatek/podklady-i-sciolki-do-klatki.html" 7605 class="dropdown-list-item" 7606 >PodkÅady i ÅcióÅki do klatki</a> 7607 </li> 7608 7609 <li class="level-2"> 7610 <a 7611 href="https://fera.pl/male-ssaki/podloze-do-klatek/siano.html" 7612 class="dropdown-list-item" 7613 >Siano</a> 7614 </li> 7615 </ul> 7616 </template> 7617 </li> 7618 7619 <li 7620 class="level-1" 7621 data-id="category-node-445" 7622 x-data="initSubMenuDesktopItem" 7623 @click.outside="close" 7624 > 7625 <button 7626 type="button" 7627 class="dropdown-list-item" 7628 x-ref="childmenuToggle" 7629 @click="toggle" 7630 aria-expanded="false" 7631 :aria-expanded="open" 7632 aria-controls="category-445-desktop-menu-panel" 7633 > 7634 Higiena i pielÄgnacja maÅych ssaków <svg xmlns="http://www.w3.org/2000/svg" 7635 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7636 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7637 </button> 7638 <template x-if="open"> 7639 <ul 7640 id="category-445-desktop-menu-panel" 7641 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7642 x-ref="childMenuWrapper" 7643 @keydown.escape.stop="closeEscape" 7644 > 7645 <li> 7646 <a 7647 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow.html" 7648 class="dropdown-list-item font-bold" 7649 >Higiena i pielÄgnacja maÅych ssaków - zobacz wszystko</a> 7650 </li> 7651 7652 <li class="level-2"> 7653 <a 7654 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow/witaminy-dla-malych-ssakow.html" 7655 class="dropdown-list-item" 7656 >Witaminy dla maÅych ssaków</a> 7657 </li> 7658 7659 <li class="level-2"> 7660 <a 7661 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow/usuwanie-plam-i-zapachow-malych-ssakow.html" 7662 class="dropdown-list-item" 7663 >Usuwanie plam i zapachów maÅych ssaków</a> 7664 </li> 7665 7666 <li class="level-2"> 7667 <a 7668 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow/usuwanie-siersci-malych-ssakow.html" 7669 class="dropdown-list-item" 7670 >Usuwanie sierÅci maÅych ssaków</a> 7671 </li> 7672 </ul> 7673 </template> 7674 </li> 7675 7676 <li 7677 class="level-1" 7678 data-id="category-node-449" 7679 x-data="initSubMenuDesktopItem" 7680 @click.outside="close" 7681 > 7682 <button 7683 type="button" 7684 class="dropdown-list-item" 7685 x-ref="childmenuToggle" 7686 @click="toggle" 7687 aria-expanded="false" 7688 :aria-expanded="open" 7689 aria-controls="category-449-desktop-menu-panel" 7690 > 7691 Grooming i uroda dla maÅych ssaków <svg xmlns="http://www.w3.org/2000/svg" 7692 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7693 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7694 </button> 7695 <template x-if="open"> 7696 <ul 7697 id="category-449-desktop-menu-panel" 7698 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7699 x-ref="childMenuWrapper" 7700 @keydown.escape.stop="closeEscape" 7701 > 7702 <li> 7703 <a 7704 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow.html" 7705 class="dropdown-list-item font-bold" 7706 >Grooming i uroda dla maÅych ssaków - zobacz wszystko</a> 7707 </li> 7708 7709 <li class="level-2"> 7710 <a 7711 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/piasek-dla-szynszyli.html" 7712 class="dropdown-list-item" 7713 >Piasek dla szynszyli</a> 7714 </li> 7715 7716 <li class="level-2"> 7717 <a 7718 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/szczotki-i-grzebienie-dla-malych-ssakow.html" 7719 class="dropdown-list-item" 7720 >Szczotki i grzebienie dla maÅych ssaków</a> 7721 </li> 7722 7723 <li class="level-2"> 7724 <a 7725 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/szampony-i-odzywki-dla-malych-ssakow.html" 7726 class="dropdown-list-item" 7727 >Szampony i odżywki dla maÅych ssaków</a> 7728 </li> 7729 7730 <li class="level-2"> 7731 <a 7732 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/pielegnacja-pazurow-malych-ssakow.html" 7733 class="dropdown-list-item" 7734 >PielÄgnacja pazurów maÅych ssaków</a> 7735 </li> 7736 </ul> 7737 </template> 7738 </li> 7739 7740 <li 7741 class="level-1" 7742 data-id="category-node-454" 7743 x-data="initSubMenuDesktopItem" 7744 @click.outside="close" 7745 > 7746 <button 7747 type="button" 7748 class="dropdown-list-item" 7749 x-ref="childmenuToggle" 7750 @click="toggle" 7751 aria-expanded="false" 7752 :aria-expanded="open" 7753 aria-controls="category-454-desktop-menu-panel" 7754 > 7755 Zabawki dla maÅych ssaków <svg xmlns="http://www.w3.org/2000/svg" 7756 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7757 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7758 </button> 7759 <template x-if="open"> 7760 <ul 7761 id="category-454-desktop-menu-panel" 7762 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7763 x-ref="childMenuWrapper" 7764 @keydown.escape.stop="closeEscape" 7765 > 7766 <li> 7767 <a 7768 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow.html" 7769 class="dropdown-list-item font-bold" 7770 >Zabawki dla maÅych ssaków - zobacz wszystko</a> 7771 </li> 7772 7773 <li class="level-2"> 7774 <a 7775 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/kolowrotek-dla-ch
7775omika.html" 7776 class="dropdown-list-item" 7777 >KoÅowrotek dla chomika</a> 7778 </li> 7779 7780 <li class="level-2"> 7781 <a 7782 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/kryjowki-dla-malych-ssakow.html" 7783 class="dropdown-list-item" 7784 >Kryjówki dla maÅych ssaków</a> 7785 </li> 7786 7787 <li class="level-2"> 7788 <a 7789 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/gryzaki-dla-malych-ssakow.html" 7790 class="dropdown-list-item" 7791 >Gryzaki dla maÅych ssaków</a> 7792 </li> 7793 7794 <li class="level-2"> 7795 <a 7796 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/legowiska-i-hamaki-dla-malych-ssakow.html" 7797 class="dropdown-list-item" 7798 >Legowiska i hamaki dla maÅych ssaków</a> 7799 </li> 7800 7801 <li class="level-2"> 7802 <a 7803 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/tunele-dla-malych-ssakow.html" 7804 class="dropdown-list-item" 7805 >Tunele dla maÅych ssaków</a> 7806 </li> 7807 7808 <li class="level-2"> 7809 <a 7810 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/place-zabaw-dla-chomikow.html" 7811 class="dropdown-list-item" 7812 >Place zabaw dla chomików</a> 7813 </li> 7814 </ul> 7815 </template> 7816 </li> 7817 7818 <li 7819 class="level-1" 7820 data-id="category-node-461" 7821 x-data="initSubMenuDesktopItem" 7822 @click.outside="close" 7823 > 7824 <button 7825 type="button" 7826 class="dropdown-list-item" 7827 x-ref="childmenuToggle" 7828 @click="toggle" 7829 aria-expanded="false" 7830 :aria-expanded="open" 7831 aria-controls="category-461-desktop-menu-panel" 7832 > 7833 Transportówki i akcesoria <svg xmlns="http://www.w3.org/2000/svg" 7834 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7835 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7836 </button> 7837 <template x-if="open"> 7838 <ul 7839 id="category-461-desktop-menu-panel" 7840 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7841 x-ref="childMenuWrapper" 7842 @keydown.escape.stop="closeEscape" 7843 > 7844 <li> 7845 <a 7846 href="https://fera.pl/male-ssaki/transportowki-i-akcesoria.html" 7847 class="dropdown-list-item font-bold" 7848 >Transportówki i akcesoria - zobacz wszystko</a> 7849 </li> 7850 7851 <li class="level-2"> 7852 <a 7853 href="https://fera.pl/male-ssaki/transportowki-i-akcesoria/transportowki-dla-malych-ssakow.html" 7854 class="dropdown-list-item" 7855 >Transportówki dla maÅych ssaków</a> 7856 </li> 7857 7858 <li class="level-2"> 7859 <a 7860 href="https://fera.pl/male-ssaki/transportowki-i-akcesoria/szelki-i-smycze-dla-malych-ssakow.html" 7861 class="dropdown-list-item" 7862 >Szelki i smycze dla maÅych ssaków</a> 7863 </li> 7864 </ul> 7865 </template> 7866 </li> 7867 7868 <li 7869 class="level-1" 7870 data-id="category-node-464" 7871 x-data="initSubMenuDesktopItem" 7872 @click.outside="close" 7873 > 7874 <button 7875 type="button" 7876 class="dropdown-list-item" 7877 x-ref="childmenuToggle" 7878 @click="toggle" 7879 aria-expanded="false" 7880 :aria-expanded="open" 7881 aria-controls="category-464-desktop-menu-panel" 7882 > 7883 Zdrowie maÅych ssaków <svg xmlns="http://www.w3.org/2000/svg" 7884 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7885 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7886 </button> 7887 <template x-if="open"> 7888 <ul 7889 id="category-464-desktop-menu-panel" 7890 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7891 x-ref="childMenuWrapper" 7892 @keydown.escape.stop="closeEscape" 7893 > 7894 <li> 7895 <a 7896 href="https://fera.pl/male-ssaki/zdrowie-malych-ssakow.html" 7897 class="dropdown-list-item font-bold" 7898 >Zdrowie maÅych ssaków - zobacz wszystko</a> 7899 </li> 7900 7901 <li class="level-2"> 7902 <a 7903 href="https://fera.pl/male-ssaki/zdrowie-malych-ssakow/medykamenty-dla-malych-ssakow.html" 7904 class="dropdown-list-item" 7905 >Medykamenty dla maÅych ssaków</a> 7906 </li> 7907 </ul> 7908 </template> 7909 </li> 7910 </ul> 7911 </div> 7912 <template x-if="$store.banners.activeBanners.length"> 7913 <div class="flex flex-col gap-2 p-4 border-l border-slate-100 overflow-auto"> 7914 <template x-for="(banner, index) in $store.banners.activeBanners" :key="index"> 7915 <a class="block border border-slate-100 rounded-2xl overflow-hidden" :href="banner.url"> 7916 <img :src="banner.image" :alt="banner.title ?? ''" loading="lazy" class="w-full h-auto" /> 7917 </a> 7918 </template> 7919 </div> 7920 </template> 7921 </div> 7922 </template> 7923 </li> 7924 <li 7925 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap" 7926 data-id="category-480" 7927 @click.outside="close(false)" 7928 @keydown.escape="close" 7929 @mouseenter="canHoverOpen" 7930 @mouseleave="canHoverClose" 7931 > 7932 <a 7933 href="https://fera.pl/gady-i-plazy.html" 7934 class="btn btn-nav" 7935 > 7936 Gady i pÅazy </a> 7937 <button 7938 data-id="category-480" 7939 type="button" 7940 class="group btn btn-flat btn-icon-size-s sr-only focu
7940s:not-sr-only" 7941 @click="toggle" 7942 aria-expanded="false" 7943 :aria-expanded="openDropdownId === 'category-480'" 7944 aria-controls="desktop-menu-category-480" 7945 x-ref="btn_category-480" 7946 > 7947 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 7948 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 7949</svg> 7950 </button> 7951 <template x-if="openDropdownId === 'category-480'"> 7952 <div 7953 id="desktop-menu-category-480" 7954 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 7955 :class="{ 'grid-cols-3': $store.banners.activeBanners.length }" 7956 x-ref="childmenu_category-480" 7957 x-transition 7958 > 7959 <div 7960 class="flex overflow-x-auto" 7961 :class="{ 'col-span-2': $store.banners.activeBanners.length }" 7962 > 7963 <ul class="relative flex flex-col gap-1 py-2.5 px-2 min-w-72"> 7964 7965 <li 7966 class="level-1" 7967 data-id="category-node-481" 7968 x-data="initSubMenuDesktopItem" 7969 @click.outside="close" 7970 > 7971 <button 7972 type="button" 7973 class="dropdown-list-item" 7974 x-ref="childmenuToggle" 7975 @click="toggle" 7976 aria-expanded="false" 7977 :aria-expanded="open" 7978 aria-controls="category-481-desktop-menu-panel" 7979 > 7980 Karma dla gadów i pÅazów <svg xmlns="http://www.w3.org/2000/svg" 7981 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 7982 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 7983 </button> 7984 <template x-if="open"> 7985 <ul 7986 id="category-481-desktop-menu-panel" 7987 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 7988 x-ref="childMenuWrapper" 7989 @keydown.escape.stop="closeEscape" 7990 > 7991 <li> 7992 <a 7993 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow.html" 7994 class="dropdown-list-item font-bold" 7995 >Karma dla gadów i pÅazów - zobacz wszystko</a> 7996 </li> 7997 7998 <li class="level-2"> 7999 <a 8000 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-zolwia.html" 8001 class="dropdown-list-item" 8002 >Karma dla żóÅwia</a> 8003 </li> 8004 8005 <li class="level-2"> 8006 <a 8007 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-krabow.html" 8008 class="dropdown-list-item" 8009 >Karma dla krabów</a> 8010 </li> 8011 8012 <li class="level-2"> 8013 <a 8014 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-kameleona.html" 8015 class="dropdown-list-item" 8016 >Karma dla kameleona</a> 8017 </li> 8018 8019 <li class="level-2"> 8020 <a 8021 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-iguany.html" 8022 class="dropdown-list-item" 8023 >Karma dla iguany</a> 8024 </li> 8025 8026 <li class="level-2"> 8027 <a 8028 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-jaszczurki.html" 8029 class="dropdown-list-item" 8030 >Karma dla jaszczurki</a> 8031 </li> 8032 8033 <li class="level-2"> 8034 <a 8035 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-zolwi-wodnych.html" 8036 class="dropdown-list-item" 8037 >Karma dla żóÅwi wodnych</a> 8038 </li> 8039 8040 <li class="level-2"> 8041 <a 8042 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-gekona.html" 8043 class="dropdown-list-item" 8044 >Karma dla gekona</a> 8045 </li> 8046 8047 <li class="level-2"> 8048 <a 8049 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-zab.html" 8050 class="dropdown-list-item" 8051 >Karma dla żab</a> 8052 </li> 8053 </ul> 8054 </template> 8055 </li> 8056 8057 <li 8058 class="level-1" 8059 data-id="category-node-490" 8060 x-data="initSubMenuDesktopItem" 8061 @click.outside="close" 8062 > 8063 <button 8064 type="button" 8065 class="dropdown-list-item" 8066 x-ref="childmenuToggle" 8067 @click="toggle" 8068 aria-expanded="false" 8069 :aria-expanded="open" 8070 aria-controls="category-490-desktop-menu-panel" 8071 > 8072 PodÅoże i akcesoria <svg xmlns="http://www.w3.org/2000/svg" 8073 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8074 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8075 </button> 8076 <template x-if="open"> 8077 <ul 8078 id="category-490-desktop-menu-panel" 8079 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8080 x-ref="childMenuWrapper" 8081 @keydown.escape.stop="closeEscape" 8082 > 8083 <li> 8084 <a 8085 href="https://fera.pl/gady-i-plazy/podloze-i-akcesoria.html" 8086 class="dropdown-list-item font-bold" 8087 >PodÅoże i akcesoria - zobacz wszystko</a> 8088 </li> 8089 8090 <li class="level-2"> 8091 <a 8092 href="https://fera.pl/gady-i-plazy/podloze-i-akcesoria/podloze-do-terrarium.html" 8093 class="dropdown-list-item" 8094 >PodÅoże do terrarium</a> 8095 </li> 8096 </ul> 8097 </template> 8098 </li> 8099 8100 <li 8101 class="level-1" 8102 data-id="category-node-492" 8103 x-data="initSubMenuDesktopItem" 8104 @click.outside="close" 8105 > 8106 <button 8107 type="button" 8108 class="dropdown-list-item" 8109 x-ref="childmenuToggle" 8110 @click="toggle" 8111 aria-expanded="false" 8112 :aria-expanded="open" 8113 aria-controls="category-492-desktop-menu-panel" 8114 > 8115 Dekoracje do terrariów <svg xmlns="http://www.w3.org/2000/svg" 8116 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8117 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8118 </button> 8119 <template x-if="open"> 8120 <ul 8121 id="category-492-desktop-menu-panel" 8122 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8123 x-ref="childMenuWrapper" 8124 @keydown.escape.stop="closeEscape" 8125 > 8126 <li> 8127 <a 8128 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow.html" 8129 class="dropdown-list-item font-bold" 8130 >Dekoracje do terrariów - zobacz wszystko</a> 8131 </li> 8132 8133 <li class="level-2"> 8134 <a 8135 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow/dekoracje-do-terrarium.html" 8136 class="dropdown-list-item" 8137 >Dekoracje do terrarium</a> 8138 </li> 8139 8140 <li class="level-2"> 8141 <a 8142 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow/ozdoby-do-terrarium.html" 8143 class="dropdown-list-item" 8144 >Ozdoby do terrarium</a> 8145 </li> 8146 8147 <li class="level-2"> 8148 <a 8149 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow/kryjowki-dla-gadow-i-plazow.html" 8150 class="dropdown-list-item" 8151 >Kryjówki dla gadów i pÅazów</a> 8152 </li> 8153 </ul> 8154 </template> 8155 </li> 8156 8157 <li 8158 class="level-1" 8159 data-id="category-node-496" 8160 x-data="initSubMenuDesktopItem" 8161 @click.outside="close" 8162 > 8163 <button 8164 type="button" 8165 class="dropdown-list-item" 8166 x-ref="childmenuToggle" 8167 @click="toggle" 8168 aria-expanded="false" 8169 :aria-expanded="open" 8170 aria-controls="category-496-desktop-menu-panel" 8171 > 8172 Akcesoria do karmienia gadów i pÅazów <svg xmlns="http://www.w3.org/2000/svg" 8173 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8174 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8175 </button> 8176 <template x-if="open"> 8177 <ul 8178 id="category-496-desktop-menu-panel" 8179 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8180 x-ref="childMenuWrapper" 8181 @keydown.escape.stop="closeEscape" 8182 > 8183 <li> 8184 <a 8185 href="https://fera.pl/gady-i-plazy/akcesoria-do-karmienia-gadow-i-plazow.html" 8186 class="dropdown-list-item font-bold" 8187 >Akcesoria do karmienia gadów i pÅazów - zobacz wszystko</a> 8188 </li> 8189 8190 <li class="level-2"> 8191 <a 8192 href="https://fera.pl/gady-i-plazy/akcesoria-do-karmienia-gadow-i-plazow/karmniki-i-pesety-dla-gadow-i-plazow.html" 8193 class="dropdown-list-item" 8194 >Karmniki i pÄsety dla gadów i pÅazów</a> 8195 </li> 8196 </ul> 8197 </template> 8198 </li> 8199 8200 <li 8201 class="level-1" 8202 data-id="category-node-498" 8203 x-data="initSubMenuDesktopItem" 8204 @click.outside="close" 8205 > 8206 <button 8207 type="button" 8208 class="dropdown-list-item" 8209 x-ref="childmenuToggle" 8210 @click="toggle" 8211 aria-expanded="false" 8212 :aria-expanded="open" 8213 aria-controls="category-498-desktop-menu-panel" 8214 > 8215 Zdrowie i uroda gadów i pÅazów <svg xmlns="http://www.w3.org/2000/svg" 8216 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8217 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8218 </button> 8219 <template x-if="open"> 8220 <ul 8221 id="category-498-desktop-menu-panel" 8222 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8223 x-ref="childMenuWrapper" 8224 @keydown.escape.stop="closeEscape" 8225 > 8226 <li> 8227 <a 8228 href="https://fera.pl/gady-i-plazy/zdrowie-i-uroda-gadow-i-plazow.html" 8229 class="dropdown-list-item font-bold" 8230 >Zdrowie i uroda gadów i pÅazów - zobacz wszystko</a> 8231 </li> 8232 8233 <li class="level-2"> 8234 <a 8235 href="https://fera.pl/gady-i-plazy/zdrowie-i-uroda-gadow-i-plazow/odzywki-i-witaminy-dla-gadow-i-plazow.html" 8236 class="dropdown-list-item" 8237 >Odżywki i witaminy dla gadów i pÅazów</a> 8238 </li> 8239 </ul> 8240 </template> 8241 </li> 8242 8243 <li 8244 class="level-1" 8245 data-id="category-node-500" 8246 x-data="initSubMenuDesktopItem" 8247 @click.outside="close" 8248 > 8249 <button 8250 type="button" 8251 class="dropdown-list-item" 8252 x-ref="childmenuToggle" 8253 @click="toggle" 8254 aria-expanded="false" 8255 :aria-expanded="open" 8256 aria-controls="category-500-desktop-menu-panel" 8257 > 8258 Terraria i akcesoria <svg xmlns="http://www.w3.org/2000/svg" 8259 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8260 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8261 </button> 8262 <template x-if="open"> 8263 <ul 8264 id="category-500-desktop-menu-panel" 8265 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8266 x-ref="childMenuWrapper" 8267 @keydown.escape.stop="closeEscape" 8268 > 8269 <li> 8270 <a 8271 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria.html" 8272 class="dropdown-list-item font-bold" 8273 >Terraria i akcesoria - zobacz wszystko</a> 8274 </li> 8275 8276 <li class="level-2"> 8277 <a 8278 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/terraria.html" 8279 class="dropdown-list-item" 8280 >Terraria</a> 8281 </li> 8282 8283 <li class="level-2"> 8284 <a 8285 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/klatki-plastikowe.html" 8286 class="dropdown-list-item" 8287 >Klatki plastikowe</a> 8288 </li> 8289 8290 <li class="level-2"> 8291 <a 8292 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/tlo-do-terrarium.html" 8293 class="dropdown-list-item" 8294 >TÅo do terrarium</a> 8295 </li> 8296 8297 <li class="level-2"> 8298 <a 8299 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/filtry-do-terrarium.html" 8300 class="dropdown-list-item" 8301 >Filtry do terrarium</a> 8302 </li> 8303 8304 <li class="level-2"> 8305 <a 8306 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/akcesoria-do-terrarium.html" 8307 class="dropdown-list-item" 8308 >Akcesoria do terrarium</a> 8309 </li> 8310 </ul> 8311 </template> 8312 </li> 8313 8314 <li 8315 class="level-1" 8316 data-id="category-node-506" 8317 x-data="initSubMenuDesktopItem" 8318 @click.outside="close" 8319 > 8320 <button 8321 type="button" 8322 class="dropdown-list-item" 8323 x-ref="childmenuToggle" 8324 @click="toggle" 8325 aria-expanded="false" 8326 :aria-expanded="open" 8327 aria-controls="category-506-desktop-menu-panel" 8328 > 8329 Czyszczenie i utrzymanie <svg xmlns="http://www.w3.org/2000/svg" 8330 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8331 width="24"
8331height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8332 </button> 8333 <template x-if="open"> 8334 <ul 8335 id="category-506-desktop-menu-panel" 8336 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8337 x-ref="childMenuWrapper" 8338 @keydown.escape.stop="closeEscape" 8339 > 8340 <li> 8341 <a 8342 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie.html" 8343 class="dropdown-list-item font-bold" 8344 >Czyszczenie i utrzymanie - zobacz wszystko</a> 8345 </li> 8346 8347 <li class="level-2"> 8348 <a 8349 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie/utrzymanie-czystosci-w-terrarium.html" 8350 class="dropdown-list-item" 8351 >Utrzymanie czystoÅci w terrarium</a> 8352 </li> 8353 8354 <li class="level-2"> 8355 <a 8356 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie/utrzymanie-temperatury-w-terrarium.html" 8357 class="dropdown-list-item" 8358 >Utrzymanie temperatury w terrarium</a> 8359 </li> 8360 8361 <li class="level-2"> 8362 <a 8363 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie/utrzymanie-nawilzenia-w-terrarium.html" 8364 class="dropdown-list-item" 8365 >Utrzymanie nawilżenia w terrarium</a> 8366 </li> 8367 </ul> 8368 </template> 8369 </li> 8370 8371 <li 8372 class="level-1" 8373 data-id="category-node-510" 8374 x-data="initSubMenuDesktopItem" 8375 @click.outside="close" 8376 > 8377 <button 8378 type="button" 8379 class="dropdown-list-item" 8380 x-ref="childmenuToggle" 8381 @click="toggle" 8382 aria-expanded="false" 8383 :aria-expanded="open" 8384 aria-controls="category-510-desktop-menu-panel" 8385 > 8386 Ogrzewanie i oÅwietlenie <svg xmlns="http://www.w3.org/2000/svg" 8387 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8388 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8389 </button> 8390 <template x-if="open"> 8391 <ul 8392 id="category-510-desktop-menu-panel" 8393 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8394 x-ref="childMenuWrapper" 8395 @keydown.escape.stop="closeEscape" 8396 > 8397 <li> 8398 <a 8399 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie.html" 8400 class="dropdown-list-item font-bold" 8401 >Ogrzewanie i oÅwietlenie - zobacz wszystko</a> 8402 </li> 8403 8404 <li class="level-2"> 8405 <a 8406 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie/grzalki-do-terrarium.html" 8407 class="dropdown-list-item" 8408 >GrzaÅki do terrarium</a> 8409 </li> 8410 8411 <li class="level-2"> 8412 <a 8413 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie/zarowki-do-terrarium.html" 8414 class="dropdown-list-item" 8415 >Å»arówki do terrarium</a> 8416 </li> 8417 8418 <li class="level-2"> 8419 <a 8420 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie/oswietlenie-terrarium.html" 8421 class="dropdown-list-item" 8422 >OÅwietlenie terrarium</a> 8423 </li> 8424 </ul> 8425 </template> 8426 </li> 8427 </ul> 8428 </div> 8429 <template x-if="$store.banners.activeBanners.length"> 8430 <div class="flex flex-col gap-2 p-4 border-l border-slate-100 overflow-auto"> 8431 <template x-for="(banner, index) in $store.banners.activeBanners" :key="index"> 8432 <a class="block border border-slate-100 rounded-2xl overflow-hidden" :href="banner.url"> 8433 <img :src="banner.image" :alt="banner.title ?? ''" loading="lazy" class="w-full h-auto" /> 8434 </a> 8435 </template> 8436 </div> 8437 </template> 8438 </div> 8439 </template> 8440 </li> 8441 <li 8442 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap" 8443 data-id="category-514" 8444 @click.outside="close(false)" 8445 @keydown.escape="close" 8446 @mouseenter="canHoverOpen" 8447 @mouseleave="canHoverClose" 8448 > 8449 <a 8450 href="https://fera.pl/dom.html" 8451 class="btn btn-nav" 8452 > 8453 Dom </a> 8454 <button 8455 data-id="category-514" 8456 type="button" 8457 class="group btn btn-flat btn-icon-size-s sr-only focu
8457s:not-sr-only" 8458 @click="toggle" 8459 aria-expanded="false" 8460 :aria-expanded="openDropdownId === 'category-514'" 8461 aria-controls="desktop-menu-category-514" 8462 x-ref="btn_category-514" 8463 > 8464 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 8465 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 8466</svg> 8467 </button> 8468 <template x-if="openDropdownId === 'category-514'"> 8469 <div 8470 id="desktop-menu-category-514" 8471 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 8472 :class="{ 'grid-cols-3': $store.banners.activeBanners.length }" 8473 x-ref="childmenu_category-514" 8474 x-transition 8475 > 8476 <div 8477 class="flex overflow-x-auto" 8478 :class="{ 'col-span-2': $store.banners.activeBanners.length }" 8479 > 8480 <ul class="relative flex flex-col gap-1 py-2.5 px-2 min-w-72"> 8481 8482 <li class="level-1"> 8483 <a 8484 href="https://fera.pl/dom/detergenty-i-maseczki.html" 8485 class="dropdown-list-item" 8486 >Detergenty i maseczki</a> 8487 </li> 8488 8489 <li class="level-1"> 8490 <a 8491 href="https://fera.pl/dom/kosze-i-pojemniki.html" 8492 class="dropdown-list-item" 8493 >Kosze i pojemniki</a> 8494 </li> 8495 8496 <li class="level-1"> 8497 <a 8498 href="https://fera.pl/dom/skrzynie-do-warsztatu.html" 8499 class="dropdown-list-item" 8500 >Skrzynie do warsztatu</a> 8501 </li> 8502 8503 <li class="level-1"> 8504 <a 8505 href="https://fera.pl/dom/pozostale-dla-domu.html" 8506 class="dropdown-list-item" 8507 >PozostaÅe dla domu</a> 8508 </li> 8509 8510 <li 8511 class="level-1" 8512 data-id="category-node-519" 8513 x-data="initSubMenuDesktopItem" 8514 @click.outside="close" 8515 > 8516 <button 8517 type="button" 8518 class="dropdown-list-item" 8519 x-ref="childmenuToggle" 8520 @click="toggle" 8521 aria-expanded="false" 8522 :aria-expanded="open" 8523 aria-controls="category-519-desktop-menu-panel" 8524 > 8525 Akcesoria ogrodnicze <svg xmlns="http://www.w3.org/2000/svg" 8526 class="text-slate-400 group-aria-expanded:text-inherit group-data-[has-current]:text-inherit" 8527 width="24" height="24" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 8528 </button> 8529 <template x-if="open"> 8530 <ul 8531 id="category-519-desktop-menu-panel" 8532 class="absolute top-0 left-full min-w-72 min-h-full border-l border-slate-100 bg-white flex flex-col gap-1 py-2 px-3" 8533 x-ref="childMenuWrapper" 8534 @keydown.escape.stop="closeEscape" 8535 > 8536 <li> 8537 <a 8538 href="https://fera.pl/dom/akcesoria-ogrodnicze.html" 8539 class="dropdown-list-item font-bold" 8540 >Akcesoria ogrodnicze - zobacz wszystko</a> 8541 </li> 8542 8543 <li class="level-2"> 8544 <a 8545 href="https://fera.pl/dom/akcesoria-ogrodnicze/kosiarki.html" 8546 class="dropdown-list-item" 8547 >Kosiarki</a> 8548 </li> 8549 8550 <li class="level-2"> 8551 <a 8552 href="https://fera.pl/dom/akcesoria-ogrodnicze/siewniki-do-traw.html" 8553 class="dropdown-list-item" 8554 >Siewniki do traw</a> 8555 </li> 8556 8557 <li class="level-2"> 8558 <a 8559 href="https://fera.pl/dom/akcesoria-ogrodnicze/zraszacze-ogrodowe.html" 8560 class="dropdown-list-item" 8561 >Zraszacze ogrodowe</a> 8562 </li> 8563 8564 <li class="level-2"> 8565 <a 8566 href="https://fera.pl/dom/akcesoria-ogrodnicze/weze-ogrodowe.html" 8567 class="dropdown-list-item" 8568 >WÄże ogrodowe</a> 8569 </li> 8570 8571 <li class="level-2"> 8572 <a 8573 href="https://fera.pl/dom/akcesoria-ogrodnicze/wozki-i-bebny-na-weze-ogrodowe.html" 8574 class="dropdown-list-item" 8575 >Wózki i bÄbny na wÄże ogrodowe</a> 8576 </li> 8577 8578 <li class="level-2"> 8579 <a 8580 href="https://fera.pl/dom/akcesoria-ogrodnicze/narzedzia-ogrodnicze.html" 8581 class="dropdown-list-item" 8582 >NarzÄdzia ogrodnicze</a> 8583 </li> 8584 </ul> 8585 </template> 8586 </li> 8587 8588 <li class="level-1"> 8589 <a 8590 href="https://fera.pl/dom/ochrona-przed-komarami.html" 8591 class="dropdown-list-item" 8592 >Ochrona przed komarami</a> 8593 </li> 8594 8595 <li class="level-1"> 8596 <a 8597 href="https://fera.pl/dom/ochrona-przed-szkodnikami.html" 8598 class="dropdown-list-item" 8599 >Ochrona przed szkodnikami</a> 8600 </li> 8601 </ul> 8602 </div> 8603 <template x-if="$store.banners.activeBanners.length"> 8604 <div class="flex flex-col gap-2 p-4 border-l border-slate-100 overflow-auto"> 8605 <template x-for="(banner, index) in $store.banners.activeBanners" :key="index"> 8606 <a class="block border border-slate-100 rounded-2xl overflow-hidden" :href="banner.url"> 8607 <img :src="banner.image" :alt="banner.title ?? ''" loading="lazy" class="w-full h-auto" /> 8608 </a> 8609 </template> 8610 </div> 8611 </template> 8612 </div> 8613 </template> 8614 </li> 8615 </ul> 8616</nav> 8617
8618<script> 8619 function initMenuDesktop() { 8620 return { 8621 openDropdownId: null, 8622 hoverTimeout: null, 8623 init() { 8624 this.$watch('openDropdownId', value => { 8625 document.body.toggleAttribute('data-open-menu', !!value); 8626 }); 8627 }, 8628 setOpen(id, state = true, focusRef = null) { 8629 this.openDropdownId = state ? id : null; 8630 8631 if (!state) { 8632 document.documentElement.style.setProperty("--menu-dropdown-height", 'unset'); 8633 } 8634 8635 this.$store.banners.setActiveBanners(state ? id : []); 8636 8637 this.$nextTick(() => { 8638 if (focusRef) { 8639 const el = this.$refs[focusRef]; 8640 el?.querySelector('a, button')?.focus(); 8641 } 8642 }); 8643 }, 8644 canHover() { 8645 return window.matchMedia('(hover: hover) and (pointer: fine)').matches; 8646 }, 8647 canHoverOpen() { 8648 if (!this.canHover()) return; 8649 if (this.hoverTimeout) { 8650 clearTimeout(this.hoverTimeout); 8651 this.hoverTimeout = null; 8652 } 8653 this.setOpen(this.$el.dataset.id); 8654 }, 8655 canHoverClose() { 8656 const id = this.$el.dataset.id; 8657 8658 if (!this.canHover()) return; 8659 if (this.hoverTimeout) { 8660 clearTimeout(this.hoverTimeout); 8661 } 8662 this.hoverTimeout = setTimeout(() => { 8663 this.setOpen(id, false); 8664 this.hoverTimeout = null; 8665 }, 200); 8666 }, 8667 toggle() { 8668 const id = this.$el.dataset.id; 8669 this.setOpen(id, this.openDropdownId !== id, 'childMenuDropdown'); 8670 }, 8671 close() { 8672 const id = this.$el.dataset.id; 8673 if (this.openDropdownId === id) { 8674 this.setOpen(id, false); 8675 const btnRef = this.$refs['btn_' + id]; 8676 if (btnRef) btnRef.focus(); 8677 } 8678 } 8679 } 8680 } 8681 8682 function initSubMenuDesktopItem() { 8683 return { 8684 open: false, 8685 setOpen(state) { 8686 this.open = state; 8687 8688 this.$nextTick(() => { 8689 const documentElementStyle = document.documentElement.style; 8690 8691 if (state) { 8692 const childMenuWrapper = this.$refs.childMenuWrapper, 8693 parentElement = this.$root.parentElement; 8694 8695 if (childMenuWrapper?.scrollHeight > parentElement.offsetHeight) { 8696 documentElementStyle.setProperty("--menu-dropdown-height", `${childMenuWrapper.scrollHeight}px`); 8697 } 8698 8699 childMenuWrapper?.querySelector('a, button, ul > li > button, ul > li > a')?.focus(); 8700 childMenuWrapper?.scrollIntoView({ 8701 behavior: 'smooth', 8702 block: 'nearest', 8703 inline: 'end' 8704 }); 8705 } else { 8706 documentElementStyle.setProperty("--menu-dropdown-height", 'unset'); 8707 } 8708 }); 8709 }, 8710 toggle() { 8711 const state = !this.open; 8712 const id = state ? this.$root.dataset.id : this.$refs.childmenuToggle.closest('ul').closest('li[data-id]').dataset.id; 8713 this.$store.banners.setActiveBanners(id); 8714 this.setOpen(state); 8715 }, 8716 close() { 8717 if (this.open) { 8718 this.setOpen(false); 8719 this.$refs.childmenuToggle.focus(); 8720 } 8721 }, 8722 closeEscape() { 8723 this.$store.banners.setActiveBanners(this.$refs.childmenuToggle.closest('ul').closest('li[data-id]').dataset.id); 8724 8725 this.close(); 8726 } 8727 } 8728 } 8729 8730 window.addEventListener('alpine:init', () => { 8731 Alpine.store('banners', { 8732 banners: {"category-node-6":[{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_16.png","url":"\/pies\/przysmaki-dla-psa.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_11.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Pch\u0142y i kleszcze ","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_9.png","url":"\/pies\/pchly-klesz
8732cze-i-pasozyty.html"},{"title":"Poznaj ofert\u0119 Royal Canin","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/PSR-e-com-FERA-_kampania-og_lna-472x100.jpg","url":"\/inspiracje\/royal-canin-poznaj-oferte-karm.html"},{"title":"Poznaj ofert\u0119 Simply From Nature","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/simply_472x100.png","url":"\/marki\/simply-from-nature.html"}],"category-node-9":[{"title":"Royal Canin","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/royal_canin.png","url":"\/marki\/royal-canin.html"},{"title":"Hill's","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/hills.png","url":"\/marki\/hills.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_7.png","url":"\/promocje.html"}],"category-node-90":[{"title":"Royal Canin","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/royal_canin_1.png","url":"\/marki\/royal-canin.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_17.png","url":"\/pies\/przysmaki-dla-psa.html"},{"title":"Nowo\u015bci","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/nowo_ci_7.png","url":"\/inspiracje\/nowosci.html"}],"category-node-27":[{"title":"Josera","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/7.png","url":"\/marki\/josera-pl.html"},{"title":"Royal Canin","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/royal_canin_1_1.png","url":"\/marki\/royal-canin.html"},{"title":"Hill's","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/hills_1.png","url":"\/marki\/hills.html"},{"title":"Pedigree","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pedigree.png","url":"\/marki\/pedigree.html"},{"title":"Simply From Nature","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/simply_from_nature_1.png","url":"\/marki\/simply-from-nature.html"}],"category-node-110":[{"title":"Nowo\u015bci","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/nowo_ci_6.png","url":"\/inspiracje\/nowosci.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_12.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Simply From Nature","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/simply_from_nature_2.png","url":"\/marki\/simply-from-nature.html"}],"category-node-123":[{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_10.png","url":"\/pies\/pchly-kleszcze-i-pasozyty.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_14.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Game Dog","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/Kategoria.png","url":"\/inspiracje\/game-dog-kompleks-witamin-i-mineralow-dla-psa.html"},{"title":"CESTAL PLUS oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/Cestal-Plus-472x100.png","url":"\/inspiracje\/cestal-plus-tabletki-do-odrobaczania-dla-psow.html"}],"category-node-131":[{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_11.png","url":"\/pies\/pchly-kleszcze-i-pasozyty.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_15.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_10.png","url":"\/promocje.html"},{"title":"VECTRA 3D oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/Vectra-3D-472x100.png","url":"\/inspiracje\/vectra-3d-stop-dla-ukaszen.html"}],"category-node-117":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_13.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_8.png","url":"\/promocje.html"}],"category-node-143":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_17.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_12.png","url":"\/promocje.html"},{"title":"DOUXO oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/DOUXO-Spa-OK-472x100.png","url":"\/inspiracje\/douxo-ultra-bezpieczna-linia-pielegnacyjna-dla-zwierzat.html"}],"category-node-151":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_18.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_13.png","url":"\/promocje.html"}],"category-node-165":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_20.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_15.png","url":"\/promocje.html"}],"category-node-173":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_21.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_16.png","url":"\/promocje.html"},{"title":"ADAPTIL oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/Adaptil-472x100.png","url":"\/inspiracje\/adaptil-pomaga-psom-zachowac-spokoj-i-odnalezc-sie-w-kazdej-sytuacji.html"}],"category-node-183":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_22.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_17.png","url":"\/promocje.html"}],"category-node-188":[{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze.png","url":"\/kot\/pchly-i-kleszcze.html"},{"title":"Promocja VOSKES","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/Baner_voskes_100__miesa_472x100pix_kopia.png","url":"\/promocje\/promocja-voskes-jelly-tuna-w-niskich-cenach.html"},{"title":"KATIDO oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/katido_472_x_100_px.png","url":"\/inspiracje\/katido-smak-ktory-koty-kochaja.html"},{"title":"Poznaj ofert\u0119 Royal Canin","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/PSR-e-com-FERA
8732-_kampania-og_lna-472x100_1.jpg","url":"\/inspiracje\/royal-canin-poznaj-oferte-karm.html"},{"title":"Poznaj ofert\u0119 Aristocat","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/aristo_472x100.png","url":"\/marki\/aristocat.html"}],"category-node-207":[{"title":"\u017bwirek dla kota","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/_wirek_dla_kota_2.png","url":"\/kot\/kuwety-i-zwirki\/zwirek-dla-kota.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_2.png","url":"\/kot\/przysmaki-dla-kota.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_1.png","url":"\/promocje.html"}],"category-node-191":[{"title":"\u017bwirek dla kota","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/_wirek_dla_kota_3.png","url":"\/kot\/kuwety-i-zwirki\/zwirek-dla-kota.html"},{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_1.png","url":"\/pchly-i-kleszcze.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_3.png","url":"\/kot\/przysmaki-dla-kota.html"}],"category-node-225":[{"title":"\u017bwirek dla kota","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/_wirek_dla_kota_5.png","url":"\/kot\/kuwety-i-zwirki\/zwirek-dla-kota.html"},{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_3.png","url":"\/pchly-i-kleszcze.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_5.png","url":"\/kot\/przysmaki-dla-kota.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_3.png","url":"\/promocje.html"},{"title":"Nowo\u015bci","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/nowo_ci_2.png","url":"\/inspiracje\/nowosci.html"}],"category-node-268":[{"title":"Nowo\u015bci","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/nowo_ci_3.png","url":"\/inspiracje\/nowosci.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_1.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"\u017bwirek dla kota","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/_wirek_dla_kota_6.png","url":"\/kot\/kuwety-i-zwirki\/zwirek-dla-kota.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_6.png","url":"\/kot\/przysmaki-dla-kota.html"}],"category-node-278":[{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_4.png","url":"\/pchly-i-kleszcze.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_3.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_4.png","url":"\/promocje.html"},{"title":"CESTAL CAT oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/Cestal-Cat-472x100.png","url":"\/inspiracje\/cestal-cat-tabletki-do-odrobaczania-dla-kotow.html"},{"title":"FELIWAY oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/Feliway_472x100.png","url":"\/inspiracje\/feliway-uspokajajace-rozwiazania-dla-twojego-kota.html"}],"category-node-299":[{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_10.png","url":"\/kot\/przysmaki-dla-kota.html"},{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_6.png","url":"\/pchly-i-kleszcze.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_5.png","url":"\/promocje\/promocja-megaokazje.html"}],"category-node-288":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_4.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_8.png","url":"\/kot\/przysmaki-dla-kota.html"},{"title":"\u017bwirek dla kota","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/_wirek_dla_kota_8.png","url":"\/kot\/kuwety-i-zwirki\/zwirek-dla-kota.html"}],"category-node-272":[{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_7.png","url":"\/kot\/przysmaki-dla-kota.html"},{"title":"\u017bwirek dla kota","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/_wirek_dla_kota_7.png","url":"\/kot\/kuwety-i-zwirki\/zwirek-dla-kota.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_2.png","url":"\/promocje\/promocja-megaokazje.html"}],"category-node-304":[{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_7.png","url":"\/pchly-i-kleszcze.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_11.png","url":"\/kot\/przysmaki-dla-kota.html"},{"title":"\u017bwirek dla kota","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/_wirek_dla_kota_10.png","url":"\/kot\/kuwety-i-zwirki\/zwirek-dla-kota.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_6.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"DOUXO oferta","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/DOUXO-Spa-OK-472x100_1.png","url":"\/inspiracje\/douxo-ultra-bezpieczna-linia-pielegnacyjna-dla-zwierzat.html"}],"category-node-318":[{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_9.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_14.png","url":"\/kot\/przysmaki-dla-kota.html"},{"title":"Pch\u0142y i kleszcze","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/pch_y_i_kleszcze_8.png","url":"\/pchly-i-kleszcze.html"}],"category-node-325":[{"title":"Promocje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/promocje_6.png","url":"\/promocje.html"},{"title":"Mega Okazje","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/mega_okazje_10.png","url":"\/promocje\/promocja-megaokazje.html"},{"title":"Nowo\u015bci","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/nowo_ci_5.png","url":"\/inspiracje\/nowosci.html"},{"title":"Przysmaki i smaczki","image":"https:\/\/media.fera.pl\/catalog\/menu_banner\/przysmaki_i_smaczki_15.png","url":"\/kot\/przysmaki-dla-kota.html"}]}, 8733 activeBanners: [],
8734 setActiveBanners(itemId) { 8735 this.activeBanners = this.banners[itemId] || []; 8736 } 8737 }); 8738 Alpine.data('initMenuDesktop', initMenuDesktop); 8739 Alpine.data('initSubMenuDesktopItem', initSubMenuDesktopItem); 8740 }); 8741</script>
8741 8742 8743 <div class="flex items-center gap-4"> 8744 8745 <nav 8746 class=" 8747 navigation grow hidden xl:block 8748 " 8749 aria-label="Shortcuts Menu" 8750 x-data="initMenuDesktop_6ab4f727e88f4()" 8751 > 8752 <ul class="flex gap-x-1"> 8753 <li 8754 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap 8755 " 8756 data-id="42" 8757 @click.outside="close(false)" 8758 @keydown.escape="close" 8759 @mouseenter="canHoverOpen" 8760 @mouseleave="canHoverClose" 8761 > 8762 <a href="https://fera.pl/promocje.html" 8763 class="btn btn-nav " 8764 data-menu="menu-42" 8765 > 8766 Promocje </a> 8767 8768 8769 <button 8770 data-id="42" 8771 type="button" 8772 class="group btn btn-flat btn-icon-size-s sr-only focus:not-sr-only" 8773 @click="toggle" 8774 aria-expanded="false" 8775 :aria-expanded="openSubmenuId === '42'" 8776 x-ref="btn_42" 8777 > 8778 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 8779 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 8780</svg> 8781 </button> 8782 8783 <template x-if="openSubmenuId === '42'"> 8784 <div 8785 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 p-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 8786 x-ref="submenu-42" 8787 x-transition 8788 > 8789 <ul 8790 class="grid grid-cols-10 gap-2" 8791 title="Submenu for Promocje" 8792 > 8793 <li 8794 class="w-full " 8795 > 8796 <a href="https://fera.pl/promocje/promocja-megaokazje.html" 8797 class="flex flex-col items-center rounded-xl bg-container h-full " 8798 data-menu="menu-46" 8799 > 8800 8801 <img 8802 class="block w-full rounded-xl border border-secondary-lighter" 8803 src="https://media.fera.pl/snowdog/menu/node/p/r/promo-megaokazje.png" 8804 alt="" 8805 loading="lazy" 8806 width="150" 8807 height="150" 8808 /> 8809 8810 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8811 MegaOkazje </span> 8812 </a> 8813 8814 </li> 8815 <li 8816 class="w-full " 8817 > 8818 <a href="https://fera.pl/promocje/promocja-furminator-do-zestawu-zabawka-gratis.html" 8819 class="flex flex-col items-center rounded-xl bg-container h-full " 8820 data-menu="menu-48" 8821 > 8822 8823 <img 8824 class="block w-full rounded-xl border border-secondary-lighter" 8825 src="https://media.fera.pl/snowdog/menu/node/p/r/promo-furminator-zabawka.png" 8826 alt="" 8827 loading="lazy" 8828 width="150" 8829 height="150" 8830 /> 8831 8832 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8833 Zabawka GRATIS do FURMINATORA </span> 8834 </a> 8835 8836 </li> 8837 <li 8838 class="w-full " 8839 > 8840 <a href="https://fera.pl/promocje/promocja-paka-zwierzaka-zestaw-karmy-suchej-lub-mokrej-z-zabawka-gratis.html" 8841 class="flex flex-col items-center rounded-xl bg-container h-full " 8842 data-menu="menu-49" 8843 > 8844 8845 <img 8846 class="block w-full rounded-xl border border-secondary-lighter" 8847 src="https://media.fera.pl/snowdog/menu/node/p/r/promo-paka-zabawka.png" 8848 alt="" 8849 loading="lazy" 8850 width="150" 8851 height="150" 8852 /> 8853
8854 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8855 PAKA ZWIERZAKA z zabawkÄ GRATIS </span> 8856 </a> 8857 8858 </li> 8859 <li 8860 class="w-full " 8861 > 8862 <a href="https://fera.pl/promocje/promocja-dolina-noteci-wybierz-przysmaki-w-pakietach-i-skorzystaj-z-20-rabatu.html" 8863 class="flex flex-col items-center rounded-xl bg-container h-full " 8864 data-menu="menu-50" 8865 > 8866 8867 <img 8868 class="block w-full rounded-xl border border-secondary-lighter" 8869 src="https://media.fera.pl/snowdog/menu/node/p/r/promo-dolina-przysmaki.png" 8870 alt="" 8871 loading="lazy" 8872 width="150" 8873 height="150" 8874 /> 8875 8876 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8877 Przysmaki DOLINA NOTECI -20% </span> 8878 </a> 8879 8880 </li> 8881 <li 8882 class="w-full " 8883 > 8884 <a href="https://fera.pl/promocje/promocja-acana-wielka-dosypka-kup-duzy-worek-i-odbierz-2kg-gratis.html" 8885 class="flex flex-col items-center rounded-xl bg-container h-full " 8886 data-menu="menu-102" 8887 > 8888 8889 <img 8890 class="block w-full rounded-xl border border-secondary-lighter" 8891 src="https://media.fera.pl/snowdog/menu/node/w/_/w.dosypka_logo_akcji_inspiracyjnej-promocji-170x200.jpg" 8892 alt="" 8893 loading="lazy" 8894 width="150" 8895 height="150" 8896 /> 8897 8898 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8899 ACANA wielka dosypka kup duży worek i odbierz 2kg GRATIS </span> 8900 </a> 8901 8902 </li> 8903 <li 8904 class="w-full " 8905 > 8906 <a href="https://fera.pl/promocje/promocja-butcher-s-20-na-wybrane-karmy-mokre-dla-psa.html" 8907 class="flex flex-col items-center rounded-xl bg-container h-full " 8908 data-menu="menu-103" 8909 > 8910 8911 <img 8912 class="block w-full rounded-xl border border-secondary-lighter" 8913 src="https://media.fera.pl/snowdog/menu/node/b/u/butchers_bo_170x200.jpg" 8914 alt="" 8915 loading="lazy" 8916 width="150" 8917 height="150" 8918 /> 8919 8920 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8921 Promocja BUTCHER'S -20% na wybrane karmy mokre dla psa </span> 8922 </a> 8923 8924 </li> 8925 <li 8926 class="w-full " 8927 > 8928 <a href="https://fera.pl/promocje/promocja-beaphar-10-na-wybrane-produkty.html" 8929 class="flex flex-col items-center rounded-xl bg-container h-full " 8930 data-menu="menu-105" 8931 > 8932 8933 <img 8934 class="block w-full rounded-xl border border-secondary-lighter" 8935 src="https://media.fera.pl/snowdog/menu/node/b/e/beaphar-170x200.png" 8936 alt="" 8937 loading="lazy" 8938 width="150" 8939 height="150" 8940 /> 8941 8942 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8943 BEAPHAR -10% na wybrane produkty </span> 8944 </a> 8945 8946 </li> 8947 <li 8948 class="w-full " 8949 > 8950 <a href="https://fera.pl/promocje/promocja-dolina-noteci-wydaj-200-zl-odbierz-2-przysmaki-gratis.html" 8951 class="flex flex-col items-center rounded-xl bg-container h-full " 8952 data-menu="menu-109" 8953 > 8954 8955 <img 8956 class="block w-full rounded-xl border border-secondary-lighter" 8957 src="https://media.fera.pl/snowdog/menu/node/d/o/dolina_noteci-promo_gratis-170x200.png" 8958 alt="" 8959 loading="lazy" 8960 width="150" 8961 height="150" 8962 /> 8963
8964 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8965 DOLINA NOTECI wydaj 200 zÅ, odbierz 2 przysmaki gratis </span> 8966 </a> 8967 8968 </li> 8969 <li 8970 class="w-full " 8971 > 8972 <a href="https://fera.pl/promocje/promocja-hill-s-15-na-wybrane-karmy-dla-psa-i-kota.html" 8973 class="flex flex-col items-center rounded-xl bg-container h-full " 8974 data-menu="menu-113" 8975 > 8976 8977 <img 8978 class="block w-full rounded-xl border border-secondary-lighter" 8979 src="https://media.fera.pl/snowdog/menu/node/h/i/hills-promo-15off-0926-170x200.png" 8980 alt="" 8981 loading="lazy" 8982 width="150" 8983 height="150" 8984 /> 8985 8986 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 8987 HILL'S -15% na wybrane karmy dla psa i kota </span> 8988 </a> 8989 8990 </li> 8991 <li 8992 class="w-full " 8993 > 8994 <a href="https://fera.pl/promocje/promocja-hill-s-duzy-worek-karmy-suchej-dla-kota-zwirek-gratis.html" 8995 class="flex flex-col items-center rounded-xl bg-container h-full " 8996 data-menu="menu-114" 8997 > 8998 8999 <img 9000 class="block w-full rounded-xl border border-secondary-lighter" 9001 src="https://media.fera.pl/snowdog/menu/node/h/i/hills-promo-freegift-0926-170x200.png" 9002 alt="" 9003 loading="lazy" 9004 width="150" 9005 height="150" 9006 /> 9007 9008 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9009 HILL'S duży worek karmy suchej dla kota + żwirek GRATIS </span> 9010 </a> 9011 9012 </li> 9013 <li 9014 class="w-full " 9015 > 9016 <a href="https://fera.pl/promocje/promocja-butelka-na-wode-gratis-przy-zakupie-wybranych-karm-za-min-119-zl.html" 9017 class="flex flex-col items-center rounded-xl bg-container h-full " 9018 data-menu="menu-115" 9019 > 9020 9021 <img 9022 class="block w-full rounded-xl border border-secondary-lighter" 9023 src="https://media.fera.pl/snowdog/menu/node/1/7/170x200.jpg" 9024 alt="" 9025 loading="lazy" 9026 width="150" 9027 height="150" 9028 /> 9029 9030 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9031 Butelka na wodÄ GRATIS przy zakupie wybranych karm za min. 119 zÅ </span> 9032 </a> 9033 9034 </li> 9035 <li 9036 class="w-full " 9037 > 9038 <a href="https://fera.pl/promocje/promocja-arion-nawet-do-5-workow-gratis-przy-zakupie-wybranych-karm-dla-kota.html" 9039 class="flex flex-col items-center rounded-xl bg-container h-full " 9040 data-menu="menu-118" 9041 > 9042 9043 <img 9044 class="block w-full rounded-xl border border-secondary-lighter" 9045 src="https://media.fera.pl/snowdog/menu/node/a/r/arion-promo-170x200.png" 9046 alt="" 9047 loading="lazy" 9048 width="150" 9049 height="150" 9050 /> 9051 9052 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9053 ARION nawet do 5 worków GRATIS przy zakupie wybranych karm dla kota </span> 9054 </a> 9055 9056 </li> 9057 <li 9058 class="w-full " 9059 > 9060 <a href="https://fera.pl/promocje/promocja-josera-do-wybranych-duzyc
9060h-opakowan-karm-puszka-400-g-gratis.html" 9061 class="flex flex-col items-center rounded-xl bg-container h-full " 9062 data-menu="menu-119" 9063 > 9064 9065 <img 9066 class="block w-full rounded-xl border border-secondary-lighter" 9067 src="https://media.fera.pl/snowdog/menu/node/d/t/dts-7365_meat_lovers_promo_180x200.jpg" 9068 alt="" 9069 loading="lazy" 9070 width="150" 9071 height="150" 9072 /> 9073 9074 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9075 JOSERA do wybranych dużych opakowaŠkarm puszka 400 g GRATIS </span> 9076 </a> 9077 9078 </li> 9079 <li 9080 class="w-full " 9081 > 9082 <a href="https://fera.pl/promocje/promocja-josera-wybrane-karmy-mokre-meat-lovers-5-1-gratis.html" 9083 class="flex flex-col items-center rounded-xl bg-container h-full " 9084 data-menu="menu-120" 9085 > 9086 9087 <img 9088 class="block w-full rounded-xl border border-secondary-lighter" 9089 src="https://media.fera.pl/snowdog/menu/node/d/t/dts-7379_meat_lovers_promo_5_1_new_fera_180x200.jpg" 9090 alt="" 9091 loading="lazy" 9092 width="150" 9093 height="150" 9094 /> 9095 9096 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9097 JOSERA wybrane karmy mokre Meat Lovers 5+1 GRATIS </span> 9098 </a> 9099 9100 </li> 9101 <li 9102 class="w-full " 9103 > 9104 <a href="https://fera.pl/promocje/promocja-dolina-noteci-do-wybranych-karm-suszonych-dla-psa-2-przysmaki-gratis.html" 9105 class="flex flex-col items-center rounded-xl bg-container h-full " 9106 data-menu="menu-121" 9107 > 9108 9109 <img 9110 class="block w-full rounded-xl border border-secondary-lighter" 9111 src="https://media.fera.pl/snowdog/menu/node/d/o/dolina_noteci-promo_2gratis-170x200.png" 9112 alt="" 9113 loading="lazy" 9114 width="150" 9115 height="150" 9116 /> 9117 9118 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9119 DOLINA NOTECI do wybranych karm suszonych dla psa 2 przysmaki GRATIS </span> 9120 </a> 9121 9122 </li> 9123 <li 9124 class="w-full " 9125 > 9126 <a href="https://fera.pl/promocje/promocja-carnilove-kup-wybrane-karmy-dla-psa-i-kota-za-min-100-zl-i-odbierz-przysmak-gratis.html" 9127 class="flex flex-col items-center rounded-xl bg-container h-full " 9128 data-menu="menu-222" 9129 > 9130 9131 <img 9132 class="block w-full rounded-xl border border-secondary-lighter" 9133 src="https://media.fera.pl/snowdog/menu/node/c/a/carnilove-promo_przysmak_gratis-170x200.png" 9134 alt="" 9135 loading="lazy" 9136 width="150" 9137 height="150" 9138 /> 9139 9140 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9141 CARNILOVE kup wybrane karmy dla psa i kota za min. 100 zŠi odbierz przysmak GRATIS </span> 9142 </a> 9143 9144 </li> 9145 <li 9146 class="w-full " 9147 > 9148 <a href="https://fera.pl/promocje/promocja-versele-laga-do-karmy-lara-7kg-odswiezacz-deodo-gratis.html" 9149 class="flex flex-col items-center rounded-xl bg-container h-full " 9150 data-menu="menu-225" 9151 > 9152 9153 <img 9154 class="block w-full rounded-xl border border-secondary-lighter" 9155 src="https://media.fera.pl/snowdog/menu/node/l/a/lara_deodo_170_x_200_px_1_.png" 9156 alt="" 9157 loading="lazy" 9158 width="150" 9159 height="150" 9160 /> 9161
9162 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9163 VERSELE-LAGA do karmy Lara 7kg odÅwieżacz Deodo GRATIS </span> 9164 </a> 9165 9166 </li> 9167 </ul> 9168 </div> 9169 </template> 9170 </li> 9171 <li 9172 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap 9173 " 9174 data-id="53" 9175 @click.outside="close(false)" 9176 @keydown.escape="close" 9177 @mouseenter="canHoverOpen" 9178 @mouseleave="canHoverClose" 9179 > 9180 <a href="https://fera.pl/inspiracje.html" 9181 class="btn btn-nav " 9182 data-menu="menu-53" 9183 > 9184 Inspiracje </a> 9185 9186 9187 <button 9188 data-id="53" 9189 type="button" 9190 class="group btn btn-flat btn-icon-size-s sr-only focus:not-sr-only" 9191 @click="toggle" 9192 aria-expanded="false" 9193 :aria-expanded="openSubmenuId === '53'" 9194 x-ref="btn_53" 9195 > 9196 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition group-aria-expanded:rotate-180 text-slate-400 group-aria-expanded:text-inherit" width="24" height="24" aria-hidden="true"> 9197 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 9198</svg> 9199 </button> 9200 9201 <template x-if="openSubmenuId === '53'"> 9202 <div 9203 class="menu-dropdown grid absolute top-full inset-x-0 mt-4 p-4 border-t-2 border-primary rounded-3xl bg-white shadow-xl max-h-[70vh] overflow-y-auto" 9204 x-ref="submenu-53" 9205 x-transition 9206 > 9207 <ul 9208 class="grid grid-cols-10 gap-2" 9209 title="Submenu for Inspiracje" 9210 > 9211 <li 9212 class="w-full " 9213 > 9214 <a href="https://fera.pl/inspiracje/konkurs-im-to-smakuje-dla-psow-rasowych.html" 9215 class="flex flex-col items-center rounded-xl bg-container h-full " 9216 data-menu="menu-61" 9217 > 9218 9219 <img 9220 class="block w-full rounded-xl border border-secondary-lighter" 9221 src="https://media.fera.pl/snowdog/menu/node/r/c/rc-konkurs.png" 9222 alt="" 9223 loading="lazy" 9224 width="150" 9225 height="150" 9226 /> 9227 9228 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9229 Konkurs "Im to smakuje" dla psów rasowych </span> 9230 </a> 9231 9232 </li> 9233 <li 9234 class="w-full " 9235 > 9236 <a href="https://fera.pl/inspiracje/happy-dog-do-kazdego-duzego-worka-karmy-1kg-karmy-gratis.html" 9237 class="flex flex-col items-center rounded-xl bg-container h-full " 9238 data-menu="menu-64" 9239 > 9240 9241 <img 9242 class="block w-full rounded-xl border border-secondary-lighter" 9243 src="https://media.fera.pl/snowdog/menu/node/h/a/happydog-170x200.png" 9244 alt="" 9245 loading="lazy" 9246 width="150" 9247 height="150" 9248 /> 9249 9250 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9251 HAPPY DOG do każdego dużego worka 1 kg karmy GRATIS </span> 9252 </a> 9253 9254 </li> 9255 <li 9256 class="w-full " 9257 > 9258 <a href="https://fera.pl/inspiracje/zadbaj-o-ochrone-twojego-pupila-z-fiprex.html" 9259 class="flex flex-col items-center rounded-xl bg-container h-full " 9260 data-menu="menu-83" 9261 > 9262 9263 <img 9264 class="block w-full rounded-xl border border-secondary-lighter" 9265 src="https://media.fera.pl/snowdog/menu/node/f/i/fiprex-170x200.png" 9266 alt="" 9267 loading="lazy" 9268 width="150" 9269 height="150" 9270 /> 9271
9272 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9273 Zadbaj o ochronÄ Twojego pupila z FIPREX </span> 9274 </a> 9275 9276 </li> 9277 <li 9278 class="w-full " 9279 > 9280 <a href="https://fera.pl/inspiracje/sabunol-przy-zakupie-obrozy-taste-play-roll-on-gratis.html" 9281 class="flex flex-col items-center rounded-xl bg-container h-full " 9282 data-menu="menu-85" 9283 > 9284 9285 <img 9286 class="block w-full rounded-xl border border-secondary-lighter" 9287 src="https://media.fera.pl/snowdog/menu/node/s/a/sabunol_baner_170x200px_fera_2026_06_08_jk.png" 9288 alt="" 9289 loading="lazy" 9290 width="150" 9291 height="150" 9292 /> 9293 9294 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9295 SABUNOL przy zakupie obroży Taste & Play Roll On GRATIS </span> 9296 </a> 9297 9298 </li> 9299 <li 9300 class="w-full " 9301 > 9302 <a href="https://fera.pl/inspiracje/super-oferty-w-niskich-cenach.html" 9303 class="flex flex-col items-center rounded-xl bg-container h-full " 9304 data-menu="menu-87" 9305 > 9306 9307 <img 9308 class="block w-full rounded-xl border border-secondary-lighter" 9309 src="https://media.fera.pl/snowdog/menu/node/s/u/super-oferty-170x200.png" 9310 alt="" 9311 loading="lazy" 9312 width="150" 9313 height="150" 9314 /> 9315 9316 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9317 Super oferty w niskich cenach </span> 9318 </a> 9319 9320 </li> 9321 <li 9322 class="w-full " 9323 > 9324 <a href="https://fera.pl/inspiracje/super-rafi-dla-psa-i-kota-w-niskich-cenach.html" 9325 class="flex flex-col items-center rounded-xl bg-container h-full " 9326 data-menu="menu-91" 9327 > 9328 9329 <img 9330 class="block w-full rounded-xl border border-secondary-lighter" 9331 src="https://media.fera.pl/snowdog/menu/node/s/u/super_rafi-oferta-170x200.png" 9332 alt="" 9333 loading="lazy" 9334 width="150" 9335 height="150" 9336 /> 9337 9338 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9339 SUPER RAFI dla psa i kota w niskich cenach </span> 9340 </a> 9341 9342 </li> 9343 <li 9344 class="w-full " 9345 > 9346 <a href="https://fera.pl/inspiracje/nowosc-refordog-krople-na-pchly-i-kleszcze-dla-psow.html" 9347 class="flex flex-col items-center rounded-xl bg-container h-full " 9348 data-menu="menu-94" 9349 > 9350 9351 <img 9352 class="block w-full rounded-xl border border-secondary-lighter" 9353 src="https://media.fera.pl/snowdog/menu/node/b/a/baner-refordog-na-stron_-fera-170-_-200.jpg" 9354 alt="" 9355 loading="lazy" 9356 width="150" 9357 height="150" 9358 /> 9359 9360 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9361 NowoÅÄ REFORDOG krople na pchÅy i kleszcze dla psów </span> 9362 </a> 9363 9364 </li> 9365 <li 9366 class="w-full " 9367 > 9368 <a href="https://fera.pl/inspiracje/nowosc-calibra-pasta-do-lizania-dla-psa.html" 9369 class="flex flex-col items-center rounded-xl bg-container h-full " 9370 data-menu="menu-95" 9371 > 9372 9373 <img 9374 class="block w-full rounded-xl border border-secondary-lighter" 9375 src="https://media.fera.pl/snowdog/menu/node/2/0/2026_07_08_calibra_yummy_dog_fera_banner_mobile_170_x_200.png" 9376 alt="" 9377 loading="lazy" 9378 width="150" 9379 height="150" 9380 /> 9381
9382 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9383 NowoÅÄ CALIBRA pasta do lizania dla psa </span> 9384 </a> 9385 9386 </li> 9387 <li 9388 class="w-full " 9389 > 9390 <a href="https://fera.pl/inspiracje/feliway-uspokajajace-rozwiazania-dla-twojego-kota.html" 9391 class="flex flex-col items-center rounded-xl bg-container h-full " 9392 data-menu="menu-96" 9393 > 9394 9395 <img 9396 class="block w-full rounded-xl border border-secondary-lighter" 9397 src="https://media.fera.pl/snowdog/menu/node/f/e/feliway_170x200_new.png" 9398 alt="" 9399 loading="lazy" 9400 width="150" 9401 height="150" 9402 /> 9403 9404 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9405 FELIWAY uspokajajÄ ce rozwiÄ zania dla Twojego kota </span> 9406 </a> 9407 9408 </li> 9409 <li 9410 class="w-full " 9411 > 9412 <a href="https://fera.pl/inspiracje/vectra-3d-stop-dla-ukaszen.html" 9413 class="flex flex-col items-center rounded-xl bg-container h-full " 9414 data-menu="menu-97" 9415 > 9416 9417 <img 9418 class="block w-full rounded-xl border border-secondary-lighter" 9419 src="https://media.fera.pl/snowdog/menu/node/v/e/vectra-3d-170x200.png" 9420 alt="" 9421 loading="lazy" 9422 width="150" 9423 height="150" 9424 /> 9425 9426 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9427 VECTRA 3D stop dla ukÄ szeÅ </span> 9428 </a> 9429 9430 </li> 9431 <li 9432 class="w-full " 9433 > 9434 <a href="https://fera.pl/inspiracje/katido-smak-ktory-koty-kochaja.html" 9435 class="flex flex-col items-center rounded-xl bg-container h-full " 9436 data-menu="menu-98" 9437 > 9438 9439 <img 9440 class="block w-full rounded-xl border border-secondary-lighter" 9441 src="https://media.fera.pl/snowdog/menu/node/k/a/katido_170_x_200_px.png" 9442 alt="" 9443 loading="lazy" 9444 width="150" 9445 height="150" 9446 /> 9447 9448 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9449 KATIDO smak, który koty kochajÄ </span> 9450 </a> 9451 9452 </li> 9453 <li 9454 class="w-full " 9455 > 9456 <a href="https://fera.pl/inspiracje/royal-canin-wyprobuj-przysmak-dla-psa-dopasowany-do-karm-z-linii-gastrointestinal.html" 9457 class="flex flex-col items-center rounded-xl bg-container h-full " 9458 data-menu="menu-107" 9459 > 9460 9461 <img 9462 class="block w-full rounded-xl border border-secondary-lighter" 9463 src="https://media.fera.pl/snowdog/menu/node/v/e/vet_e-com_gastro_fera_170x200.png" 9464 alt="" 9465 loading="lazy" 9466 width="150" 9467 height="150" 9468 /> 9469 9470 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9471 ROYAL CANIN wypróbuj przysmak dla psa dopasowany do karm z linii Gastrointestinal </span> 9472 </a> 9473 9474 </li> 9475 <li 9476 class="w-full " 9477 > 9478 <a href="https://fera.pl/inspiracje/royal-canin-poznaj-oferte-karm.html" 9479 class="flex flex-col items-center rounded-xl bg-container h-full " 9480 data-menu="menu-108" 9481 > 9482 9483 <img 9484 class="block w-full rounded-xl border border-secondary-lighter" 9485 src="https://media.fera.pl/snowdog/menu/node/p/s/psr-e-com-fera-_kampania-og_lna-logo-akcji-170x200-v2.jpg" 9486 alt="" 9487 loading="lazy" 9488 width="150" 9489 height="150" 9490 /> 9491
9492 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9493 ROYAL CANIN poznaj ofertÄ karm </span> 9494 </a> 9495 9496 </li> 9497 <li 9498 class="w-full " 9499 > 9500 <a href="https://fera.pl/marki/simply-from-nature.html" 9501 class="flex flex-col items-center rounded-xl bg-container h-full " 9502 data-menu="menu-110" 9503 > 9504 9505 <img 9506 class="block w-full rounded-xl border border-secondary-lighter" 9507 src="https://media.fera.pl/snowdog/menu/node/s/i/simply_170x200.png" 9508 alt="" 9509 loading="lazy" 9510 width="150" 9511 height="150" 9512 /> 9513 9514 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9515 Naturalna karma i przysmaki Simply from Nature </span> 9516 </a> 9517 9518 </li> 9519 <li 9520 class="w-full " 9521 > 9522 <a href="https://fera.pl/marki/aristocat.html" 9523 class="flex flex-col items-center rounded-xl bg-container h-full " 9524 data-menu="menu-111" 9525 > 9526 9527 <img 9528 class="block w-full rounded-xl border border-secondary-lighter" 9529 src="https://media.fera.pl/snowdog/menu/node/a/r/aristo_170x200.png" 9530 alt="" 9531 loading="lazy" 9532 width="150" 9533 height="150" 9534 /> 9535 9536 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9537 Wysokiej jakoÅci żwirek dla kotów Aristocat </span> 9538 </a> 9539 9540 </li> 9541 <li 9542 class="w-full " 9543 > 9544 9545 <a href="https://fera.pl/nie-zapomnij-o-tym-kto-czeka-w-domu" 9546 class="flex flex-col items-center rounded-xl bg-container h-full " 9547 data-menu="menu-112" 9548 > 9549 <img 9550 class="block w-full rounded-xl border border-secondary-lighter" 9551 src="https://media.fera.pl/snowdog/menu/node/f/e/fera-lp-g4_2-170x200.png" 9552 alt="" 9553 loading="lazy" 9554 width="150" 9555 height="150" 9556 /> 9557 9558 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9559 JesieÅ peÅna zwierzakowych okazji </span> 9560 </a> 9561 </li> 9562 <li 9563 class="w-full " 9564 > 9565 <a href="https://fera.pl/inspiracje/farmina-zdrowie-trawienie-prawdziwa-ulga-dla-wrazliwych-zoladkow.html" 9566 class="flex flex-col items-center rounded-xl bg-container h-full " 9567 data-menu="menu-116" 9568 > 9569 9570 <img 9571 class="block w-full rounded-xl border border-secondary-lighter" 9572 src="https://media.fera.pl/snowdog/menu/node/1/7/170_x_200.png" 9573 alt="" 9574 loading="lazy" 9575 width="150" 9576 height="150" 9577 /> 9578 9579 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9580 FARMINA zdrowie trawienie prawdziwa ulga dla wrażliwych żoÅÄ dków </span> 9581 </a> 9582 9583 </li> 9584 <li 9585 class="w-full " 9586 > 9587 <a href="https://fera.pl/inspiracje/chrup-go-smakowite-przysmaki-dla-psow.html" 9588 class="flex flex-col items-center rounded-xl bg-container h-full " 9589 data-menu="menu-117" 9590 > 9591 9592 <img 9593 class="block w-full rounded-xl border border-secondary-lighter" 9594 src="https://media.fera.pl/snowdog/menu/node/1/7/170x200_chrup_go.png" 9595 alt="" 9596 loading="lazy" 9597 width="150" 9598 height="150" 9599 /> 9600
9601 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9602 CHRUP&GO smakowite przysmaki dla psów </span> 9603 </a> 9604 9605 </li> 9606 <li 9607 class="w-full " 9608 > 9609 <a href="https://fera.pl/inspiracje/wiecej-za-mniej-jesienne-odkrycia-dla-twojego-psa-i-kota.html" 9610 class="flex flex-col items-center rounded-xl bg-container h-full " 9611 data-menu="menu-223" 9612 > 9613 9614 <img 9615 class="block w-full rounded-xl border border-secondary-lighter" 9616 src="https://media.fera.pl/snowdog/menu/node/j/e/jesienne-odkrycia-170x200.png" 9617 alt="" 9618 loading="lazy" 9619 width="150" 9620 height="150" 9621 /> 9622 9623 <span class="flex flex-wrap items-center grow px-1 min-h-14 text-sm whitespace-normal"> 9624 WiÄcej za mniej! Jesienne odkrycia dla Twojego psa i kota </span> 9625 </a> 9626 9627 </li> 9628 </ul> 9629 </div> 9630 </template> 9631 </li> 9632 <li 9633 class="level-0 flex gap-y-1 flex-shrink-0 whitespace-nowrap 9634 " 9635 data-id="45" 9636 @click.outside="close(false)" 9637 @keydown.escape="close" 9638 @mouseenter="canHoverOpen" 9639 @mouseleave="canHoverClose" 9640 > 9641 9642 <a href="https://fera.pl/blog" 9643 class="btn btn-nav " 9644 data-menu="menu-45" 9645 > 9646 Blog </a> 9647 9648 9649 </li> 9650 </ul> 9651 </nav> 9652 9653
9653<script> 9654 'use strict'; 9655 9656 const initMenuDesktop_6ab4f727e88f4 = () => ({ 9657 openSubmenuId: null, 9658 hoverTimeout: null, 9659 9660 init() { 9661 this.$watch('openSubmenuId', value => { 9662 document.body.toggleAttribute('data-open-menu', !!value); 9663 }); 9664 }, 9665 9666 setOpen(id, state = true, focusRef = null) { 9667 this.openSubmenuId = state ? id : null; 9668 9669 this.$nextTick(() => { 9670 if (focusRef) { 9671 const el = this.$refs[focusRef]; 9672 el?.querySelector('a, button')?.focus(); 9673 } 9674 }); 9675 }, 9676 9677 canHover() { 9678 return window.matchMedia('(hover: hover) and (pointer: fine)').matches; 9679 }, 9680 9681 canHoverOpen() { 9682 if (!this.canHover()) return; 9683 const id = this.$el.dataset.id; 9684 if (this.hoverTimeout) { 9685 clearTimeout(this.hoverTimeout); 9686 this.hoverTimeout = null; 9687 } 9688 this.setOpen(id); 9689 }, 9690 9691 canHoverClose() { 9692 if (!this.canHover()) return; 9693 const id = this.$el.dataset.id; 9694 if (this.hoverTimeout) clearTimeout(this.hoverTimeout); 9695 this.hoverTimeout = setTimeout(() => { 9696 if (this.openSubmenuId === id) this.setOpen(id, false); 9697 this.hoverTimeout = null; 9698 }, 200); 9699 }, 9700 9701 toggle() { 9702 const id = this.$el.dataset.id; 9703 this.setOpen(id, this.openSubmenuId !== id, 'submenu-' + id); 9704 }, 9705 9706 close() { 9707 const id = this.$el.dataset.id; 9708 if (this.openDropdownId === id) { 9709 this.setOpen(id, false); 9710 const btnRef = this.$refs['btn_' + id]; 9711 if (btnRef) btnRef.focus(); 9712 } 9713 } 9714 }); 9715 </script>
9715 9716 9717 <div class="flex items-center gap-2"> 9718 9719<div 9720 class="relative inline-block" 9721 x-data="initDropdown" 9722 @keyup.escape="setOpenFalse" 9723 @click.outside="setOpenFalse" 9724> 9725 <button 9726 type="button" 9727 id="app-download-button" 9728 class="btn btn-size-s whitespace-nowrap" 9729 @click="toggleOpen" 9730 :aria-expanded="ariaExpanded" 9731 aria-label="Pobierz aplikację" 9732 aria-haspopup="true" 9733 > 9734 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 9735 <path fill-rule="evenodd" d="M3 4a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1V4zm2 2V5h1v1H5zM3 13a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1v-3zm2 2v-1h1v1H5zM13 3a1 1 0 00-1 1v3a1 1 0 001 1h3a1 1 0 001-1V4a1 1 0 00-1-1h-3zm1 2v1h1V5h-1z" clip-rule="evenodd"/> 9736 <path d="M11 4a1 1 0 10-2 0v1a1 1 0 002 0V4zM10 7a1 1 0 011 1v1h2a1 1 0 110 2h-3a1 1 0 01-1-1V8a1 1 0 011-1zM16 9a1 1 0 100 2 1 1 0 000-2zM9 13a1 1 0 011-1h1a1 1 0 110 2v2a1 1 0 11-2 0v-3zM7 11a1 1 0 100-2H4a1 1 0 100 2h3zM17 13a1 1 0 01-1 1h-2a1 1 0 110-2h2a1 1 0 011 1zM16 17a1 1 0 100-2h-3a1 1 0 100 2h3z"/> 9737</svg> 9738 Pobierz aplikację </button> 9739 <div 9740 class="z-30 absolute flex flex-col items-center gap-4 -right-4 w-80 mt-2 py-6 px-9 overflow-auto 9741 rounded-3xl border-t-2 border-primary shadow-xl lg:mt-3 bg-container-lighter text-center" 9742 x-cloak 9743 x-show="open" 9744 x-transition 9745 aria-labelledby="app-download-button" 9746 > 9747 <div class="border border-secondary rounded-lg overflow-hidden"> 9748 <?xml version="1.0"?> 9749<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="184px" height="184px" viewBox="0 0 184 184"><title>Pobierz aplikacjÄ!</title><rect x="0" y="0" width="184" height="184" fill="#ffffff" fill-opacity="1"/><path fill="#000000" fill-opacity="1" d="M16,16L52.69,16L52.69,21.24L16,21.24ZM63.17,16L68.41,16L68.41,21.24L63.17,21.24ZM94.62,16L105.1,16L105.1,21.24L94.62,21.24ZM131.31,16L168,16L168,21.24L131.31,21.24ZM16,21.24L21.24,21.24L21.24,26.48L16,26.48ZM47.45,21.24L52.69,21.24L52.69,26.48L47.45,26.48ZM57.93,21.24L68.41,21.24L68.41,26.48L57.93,26.48ZM73.66,21.24L84.14,21.24L84.14,26.48L73.66,26.48ZM105.1,21.24L110.34,21.24L110.34,26.48L105.1,26.48ZM131.31,21.24L136.55,21.24L136.55,26.48L131.31,26.48ZM162.76,21.24L168,21.24L168,26.48L162.76,26.48ZM16,26.48L21.24,26.48L21.24,31.72L16,31.72ZM26.48,26.48L42.21,26.48L42.21,31.72L26.48,31.72ZM47.45,26.48L52.69,26.48L52.69,31.72L47.45,31.72ZM63.17,26.48L78.9,26.48L78.9,31.72L63.17,31.72ZM89.38,26.48L94.62,26.48L94.62,31.72L89.38,31.72ZM99.86,26.48L126.07,26.48L126.07,31.72L99.86,31.72ZM131.31,26.48L136.55,26.48L136.55,31.72L131.31,31.72ZM141.79,26.48L157.52,26.48L157.52,31.72L141.79,31.72ZM162.76,26.48L168,26.48L168,31.72L162.76,31.72ZM16,31.72L21.24,31.72L21.24,36.97L16,36.97ZM26.48,31.72L42.21,31.72L42.21,36.97L26.48,36.97ZM47.45,31.72L52.69,31.72L52.69,36.97L47.45,36.97ZM57.93,31.72L68.41,31.72L68.41,36.97L57.93,36.97ZM73.66,31.72L78.9,31.72L78.9,36.97L73.66,36.97ZM131.31,31.72L136.55,31.72L136.55,36.97L131.31,36.97ZM141.79,31.72L157.52,31.72L157.52,36.97L141.79,36.97ZM162.76,31.72L168,31.72L168,36.97L162.76,36.97ZM16,36.97L21.24,36.97L21.24,42.21L16,42.21ZM26.48,36.97L42.21,36.97L42.21,42.21L26.48,42.21ZM47.45,36.97L52.69,36.97L52.69,42.21L47.45,42.21ZM68.41,36.97L73.66,36.97L73.66,42.21L68.41,42.21ZM78.9,36.97L99.86,36.97L99.86,42.21L78.9,42.21ZM110.34,36.97L115.59,36.97L115.59,42.21L110.34,42.21ZM120.83,36.97L126.07,36.97L126.07,42.21L120.83,42.21ZM131.31,36.97L136.55,36.97L136.55,42.21L131.31,42.21ZM141.79,36.97L157.52,36.97L157.52,42.21L141.79,42.21ZM162.76,36.97L168,36.97L168,42.21L162.76,42.21ZM16,42.21L21.24,42.21L21.24,47.45L16,47.45ZM47.45,42.21L52.69,42.21L52.69,47.45L47.45,47.45ZM57.93,42.21L63.17,42.21L63.17,47.45L57.93,47.45ZM68.41,42.21L73.66,42.21L73.66,47.45L68.41,47.45ZM84.14,42.21L99.86,42.21L99.86,47.45L84.14,47.45ZM105.1,42.21L110.34,42.21L110.34,47.45L105.1,47.45ZM120.83,42.21L126.07,42.21L126.07,47.45L120.83,47.45ZM131.31,42.21L136.55,42.21L136.55,47.45L131.31,47.45ZM162.76,42.21L168,42.21L168,47.45L162.76,47.45ZM16,47.45L52.69,47.45L52.69,52.69L16,52.69ZM57.93,47.45L63.17,47.45L63.17,52.69L57.93,52.69ZM68.41,47.45L73.66,47.45L73.66,52.69L68.41,52.69ZM78.9,47.45L84.14,47.45L84.14,52.69L78.9,52.69ZM89.38,47.45L94.62,47.45L94.62,52.69L89.38,52.69ZM99.86,47.45L105.1,47.45L105.1,52.69L99.86,52.69ZM110.34,47.45L115.59,47.45L115.59,52.69L110.34,52.69ZM120.83,47.45L126.07,47.45L126.07,52.69L120.83,52.69ZM131.31,47.45L168,47.45L168,52.69L131.31,52.69ZM78.9,52.69L89.38,52.69L89.38,57.93L78.9,57.93ZM94.62,52.69L99.86,52.69L99.86,57.93L94.62,57.93ZM105.1,52.69L126.07,52.69L126.07,57.93L105.1,57.93ZM16,57.93L42.21,57.93L42.21,63.17L16,63.17ZM47.45,57.93L73.66,57.93L73.66,63.17L47.45,63.17ZM78.9,57.93L84.14,57.93L84.14,63.17L78.9,63.17ZM89.38,57.93L105.1,57.93L105.1,63.17L89.38,63.17ZM120.83,57.93L131.31,57.93L131.31,63.17L120.83,63.17ZM136.55,57.93L141.79,57.93L141.79,63.17L136.55,63.17ZM147.03,57.93L152.28,57.93L152.28,63.17L147.03,63.17ZM157.52,57.93L162.76,57.93L162.76,63.17L157.52,63.17ZM16,63.17L26.48,63.17L26.48,68.41L16,68.41ZM52.69,63.17L57.93,63.17L57.93,68.41L52.69,68.41ZM63.17,63.17L68.41,63.17L68.41,68.41L63.17,68.41ZM99.86,63.17L105.1,63.17L105.1,68.41L99.86,68.41ZM110.34,63.17L120.83,63.17L120.83,68.41L110.34,68.41ZM126.07,63.17L136.55,63.17L136.55,68.41L126.07,68.41ZM14
97491.79,63.17L152.28,63.17L152.28,68.41L141.79,68.41ZM157.52,63.17L162.76,63.17L162.76,68.41L157.52,68.41ZM21.24,68.41L26.48,68.41L26.48,73.66L21.24,73.66ZM31.72,68.41L42.21,68.41L42.21,73.66L31.72,73.66ZM47.45,68.41L57.93,68.41L57.93,73.66L47.45,73.66ZM63.17,68.41L68.41,68.41L68.41,73.66L63.17,73.66ZM73.66,68.41L84.14,68.41L84.14,73.66L73.66,73.66ZM105.1,68.41L115.59,68.41L115.59,73.66L105.1,73.66ZM120.83,68.41L126.07,68.41L126.07,73.66L120.83,73.66ZM136.55,68.41L141.79,68.41L141.79,73.66L136.55,73.66ZM147.03,68.41L157.52,68.41L157.52,73.66L147.03,73.66ZM21.24,73.66L26.48,73.66L26.48,78.9L21.24,78.9ZM36.97,73.66L47.45,73.66L47.45,78.9L36.97,78.9ZM52.69,73.66L78.9,73.66L78.9,78.9L52.69,78.9ZM89.38,73.66L94.62,73.66L94.62,78.9L89.38,78.9ZM105.1,73.66L152.28,73.66L152.28,78.9L105.1,78.9ZM162.76,73.66L168,73.66L168,78.9L162.76,78.9ZM21.24,78.9L26.48,78.9L26.48,84.14L21.24,84.14ZM47.45,78.9L52.69,78.9L52.69,84.14L47.45,84.14ZM63.17,78.9L68.41,78.9L68.41,84.14L63.17,84.14ZM73.66,78.9L78.9,78.9L78.9,84.14L73.66,84.14ZM94.62,78.9L99.86,78.9L99.86,84.14L94.62,84.14ZM126.07,78.9L131.31,78.9L131.31,84.14L126.07,84.14ZM136.55,78.9L147.03,78.9L147.03,84.14L136.55,84.14ZM16,84.14L21.24,84.14L21.24,89.38L16,89.38ZM31.72,84.14L42.21,84.14L42.21,89.38L31.72,89.38ZM52.69,84.14L57.93,84.14L57.93,89.38L52.69,89.38ZM68.41,84.14L73.66,84.14L73.66,89.38L68.41,89.38ZM78.9,84.14L99.86,84.14L99.86,89.38L78.9,89.38ZM115.59,84.14L126.07,84.14L126.07,89.38L115.59,89.38ZM136.55,84.14L152.28,84.14L152.28,89.38L136.55,89.38ZM157.52,84.14L162.76,84.14L162.76,89.38L157.52,89.38ZM36.97,89.38L42.21,89.38L42.21,94.62L36.97,94.62ZM47.45,89.38L52.69,89.38L52.69,94.62L47.45,94.62ZM84.14,89.38L110.34,89.38L110.34,94.62L84.14,94.62ZM115.59,89.38L120.83,89.38L120.83,94.62L115.59,94.62ZM126.07,89.38L131.31,89.38L131.31,94.62L126.07,94.62ZM147.03,89.38L168,89.38L168,94.62L147.03,94.62ZM31.72,94.62L47.45,94.62L47.45,99.86L31.72,99.86ZM52.69,94.62L57.93,94.62L57.93,99.86L52.69,99.86ZM63.17,94.62L73.66,94.62L73.66,99.86L63.17,99.86ZM78.9,94.62L89.38,94.62L89.38,99.86L78.9,99.86ZM99.86,94.62L105.1,94.62L105.1,99.86L99.86,99.86ZM110.34,94.62L147.03,94.62L147.03,99.86L110.34,99.86ZM157.52,94.62L168,94.62L168,99.86L157.52,99.86ZM47.45,99.86L52.69,99.86L52.69,105.1L47.45,105.1ZM78.9,99.86L84.14,99.86L84.14,105.1L78.9,105.1ZM89.38,99.86L99.86,99.86L99.86,105.1L89.38,105.1ZM105.1,99.86L110.34,99.86L110.34,105.1L105.1,105.1ZM120.83,99.86L126.07,99.86L126.07,105.1L120.83,105.1ZM131.31,99.86L136.55,99.86L136.55,105.1L131.31,105.1ZM16,105.1L21.24,105.1L21.24,110.34L16,110.34ZM31.72,105.1L42.21,105.1L42.21,110.34L31.72,110.34ZM94.62,105.1L99.86,105.1L99.86,110.34L94.62,110.34ZM110.34,105.1L115.59,105.1L115.59,110.34L110.34,110.34ZM126.07,105.1L152.28,105.1L152.28,110.34L126.07,110.34ZM16,110.34L21.24,110.34L21.24,115.59L16,115.59ZM26.48,110.34L31.72,110.34L31.72,115.59L26.48,115.59ZM36.97,110.34L42.21,110.34L42.21,115.59L36.97,115.59ZM47.45,110.34L63.17,110.34L63.17,115.59L47.45,115.59ZM68.41,110.34L84.14,110.34L84.14,115.59L68.41,115.59ZM94.62,110.34L110.34,110.34L110.34,115.59L94.62,115.59ZM115.59,110.34L120.83,110.34L120.83,115.59L115.59,115.59ZM147.03,110.34L162.76,110.34L162.76,115.59L147.03,115.59ZM16,115.59L21.24,115.59L21.24,120.83L16,120.83ZM31.72,115.59L42.21,115.59L42.21,120.83L31.72,120.83ZM52.69,115.59L68.41,115.59L68.41,120.83L52.69,120.83ZM73.66,115.59L78.9,115.59L78.9,120.83L73.66,120.83ZM89.38,115.59L94.62,115.59L94.62,120.83L89.38,120.83ZM99.86,115.59L105.1,115.59L105.1,120.83L99.86,120.83ZM110.34,115.59L126.07,115.59L126.07,120.83L110.34,120.83ZM131.31,115.59L147.03,115.59L147.03,120.83L131.31,120.83ZM157.52,115.59L168,115.59L168,120.83L157.52,120.83ZM16,120.83L21.24,120.83L21.24,126.07L16,126.07ZM26.48,120.83L31.72,120.83L31.72,126.07L26.48,126.07ZM36.97,120.83L52.69,120.83L52.69,126.07L36.97,126.07ZM73.66,120.83L78.9,120.83L78.9,126.07L73.66,126.07ZM94.62,120.83L105.1,120.83L105.1,126.07L94.62,126.07ZM120.83,120.83L162.76,120.83L162.76,126.07L120.83,126.07ZM57.93,126.07L68.41,126.07L68.41,131.31L57.93,131.31ZM78.9,126.07L99.86,126.07L99.86,131.31L78.9,131.31ZM115.59,126.07L126.07,126.07L126.07,131.31L115.59,131.31ZM141.79,126.07L147.03,126.07L147.03,131.31L141.79,131.31ZM157.52,126.07L162.76,126.07L162.76,131.31L157.52,131.31ZM16,131.31L52.69,131.31L52.69,136.55L16,136.55ZM57.93,131.31L73.66,131.31L73.66,136.55L57.93,136.55ZM84.14,131.31L99.86,131.31L99.86,136.55L84.14,136.55ZM105.1,131.31L110.34,131.31L110.34,136.55L105.1,136.55ZM115.59,131.31L126.07,131.31L126.07,136.55L115.59,136.55ZM131.31,131.31L136.55,131.31L136.55,136.55L131.31,136.55ZM141.79,131.31L157.52,131.31L157.52,136.55L141.79,136.55ZM16,136.55L21.24,136.55L21.24,141.79L16,141.79ZM47.45,136.55L52.69,136.55L52.69,141.79L47.45,141.79ZM63.17,136.55L68.41,136.55L68.41,141.79L63.17,141.79ZM78.9,136.55L89.38,136.55L89.38,141.79L78.9,141.79ZM99.86,136.55L105.1,136.55L105.1,141.79L99.86,141.79ZM115.59,136.55L126.07,136.55L126.07,141.79L115.59,141.79ZM141.79,136.55L147.03,136.55L147.03,141.79L141.79,141.79ZM152.28,136.55L168,136.55L168,141.79L152.28,141.79ZM16,141.79L21.24,141.79L21.24,147.03L16,147.03ZM2
97496.48,141.79L42.21,141.79L42.21,147.03L26.48,147.03ZM47.45,141.79L52.69,141.79L52.69,147.03L47.45,147.03ZM57.93,141.79L63.17,141.79L63.17,147.03L57.93,147.03ZM78.9,141.79L84.14,141.79L84.14,147.03L78.9,147.03ZM89.38,141.79L147.03,141.79L147.03,147.03L89.38,147.03ZM152.28,141.79L168,141.79L168,147.03L152.28,147.03ZM16,147.03L21.24,147.03L21.24,152.28L16,152.28ZM26.48,147.03L42.21,147.03L42.21,152.28L26.48,152.28ZM47.45,147.03L52.69,147.03L52.69,152.28L47.45,152.28ZM57.93,147.03L63.17,147.03L63.17,152.28L57.93,152.28ZM94.62,147.03L105.1,147.03L105.1,152.28L94.62,152.28ZM110.34,147.03L115.59,147.03L115.59,152.28L110.34,152.28ZM120.83,147.03L131.31,147.03L131.31,152.28L120.83,152.28ZM136.55,147.03L141.79,147.03L141.79,152.28L136.55,152.28ZM16,152.28L21.24,152.28L21.24,157.52L16,157.52ZM26.48,152.28L42.21,152.28L42.21,157.52L26.48,157.52ZM47.45,152.28L52.69,152.28L52.69,157.52L47.45,157.52ZM57.93,152.28L63.17,152.28L63.17,157.52L57.93,157.52ZM68.41,152.28L84.14,152.28L84.14,157.52L68.41,157.52ZM105.1,152.28L110.34,152.28L110.34,157.52L105.1,157.52ZM126.07,152.28L131.31,152.28L131.31,157.52L126.07,157.52ZM136.55,152.28L141.79,152.28L141.79,157.52L136.55,157.52ZM152.28,152.28L162.76,152.28L162.76,157.52L152.28,157.52ZM16,157.52L21.24,157.52L21.24,162.76L16,162.76ZM47.45,157.52L52.69,157.52L52.69,162.76L47.45,162.76ZM57.93,157.52L63.17,157.52L63.17,162.76L57.93,162.76ZM68.41,157.52L78.9,157.52L78.9,162.76L68.41,162.76ZM89.38,157.52L94.62,157.52L94.62,162.76L89.38,162.76ZM110.34,157.52L115.59,157.52L115.59,162.76L110.34,162.76ZM147.03,157.52L157.52,157.52L157.52,162.76L147.03,162.76ZM162.76,157.52L168,157.52L168,162.76L162.76,162.76ZM16,162.76L52.69,162.76L52.69,168L16,168ZM57.93,162.76L63.17,162.76L63.17,168L57.93,168ZM68.41,162.76L78.9,162.76L78.9,168L68.41,168ZM94.62,162.76L105.1,162.76L105.1,168L94.62,168ZM110.34,162.76L136.55,162.76L136.55,168L110.34,168ZM141.79,162.76L157.52,162.76L157.52,168L141.79,168Z"/></svg> 9750 </div> 9751 <span class="font-bold">Zeskanuj kod QR i pobierz naszą aplikację mobilną.</span> 9752 <span class="text-xs font-medium">Ciesz się wyjątkowymi korzyściami: specjalnymi rabatami, szybszymi zakupami i dostępem do nowości przed innymi.</span> 9753 </div> 9754</div>
9755<script> 9756 function initDropdown() { 9757 return hyva.createBooleanObject('open', false, { 9758 ariaExpanded() { 9759 return this.open() ? 'true' : 'false'; 9760 } 9761 }) 9762 } 9763 9764 window.addEventListener('alpine:init', () => Alpine.data('initDropdown', initDropdown), {once: true}) 9765</script>
9765 9766 </div> 9767 </div> 9768 </div> 9769 </div> 9770 9771
9772<script> 9773 function initCartDrawer() { 9774 return { 9775 open: false, 9776 closed() { 9777 return !this.open 9778 }, 9779 isLoading: false, 9780 cart: {}, 9781 maxItemsToDisplay: 10, 9782 itemsCount: 0, 9783 showSku: false, 9784 autocompleteNumber: 100, 9785 showDetails() { 9786 return this.item.options && this.item.options.length || this.showSku; 9787 }, 9788 cartIsEmpty() { 9789 return this.itemsCount === 0 9790 }, 9791 getData() { 9792 const data = this.$event.detail.data; 9793 9794 if (data.cart) { 9795 this.cart = data.cart; 9796 this.itemsCount = data.cart.items && data.cart.items.length || 0; 9797 this.setCartItems(); 9798 } 9799 this.isLoading = false; 9800 }, 9801 cartItems: [], 9802 getItemCountTitle() { 9803 return hyva.strf('Wy\u015Bwietlono\u0020\u00250\u0020z\u0020\u00251\u0020produkt\u00F3w\u0020w\u0020koszyku', this.maxItemsToDisplay, this.itemsCount) 9804 }, 9805 shouldShowItemCount() { 9806 return this.maxItemsToDisplay && this.maxItemsToDisplay < this.itemsCount; 9807 }, 9808 setCartItems() { 9809 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 9810 9811 if (this.maxItemsToDisplay > 0) { 9812 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 9813 } 9814 }, 9815 updateItemQty(event) { 9816 const form = event.target; 9817 this.isLoading = true; 9818 hyvaAjaxFormMinicart({ form, redirect: false }, () => { 9819 this.isLoading = false; 9820 }); 9821 }, 9822 deleteItemFromCart(itemId) { 9823 const formKey = hyva.getFormKey(); 9824 this.isLoading = true; 9825 9826 hyvaAjaxFormMinicart({ 9827 url: BASE_URL + 'checkout/sidebar/removeItem/', 9828 body: 'form_key=' + formKey + '&item_id=' + itemId, 9829 message: 'Usuni\u0119to\u0020element.' 9830 }, () => { 9831 this.isLoading = false 9832 }); 9833 }, 9834 toggleCartDrawer(event) { 9835 if (event.detail && event.detail.isOpen) { 9836 this.open = event.detail.isOpen; 9837 } else { 9838 this.open = !this.open; 9839 } 9840 }, 9841 openCartDrawer() { 9842 this.open = true; 9843 }, 9844 closeCartDrawer() { 9845 this.open = false; 9846 }, 9847 getSectionDataExtraActions() { 9848 if (!this.cart.extra_actions) { 9849 return ''; 9850 } 9851 9852 const contentNode = document.createElement('div'); 9853 contentNode.innerHTML = this.cart.extra_actions; 9854 9855 hyva.activateScripts(contentNode); 9856 9857 return contentNode.innerHTML; 9858 }, 9859 productIsVisibleInSite() { 9860 return this.item.product_has_url && this.item.is_visible_in_site_visibility 9861 }, 9862 productIsNotVisibleInSite() { 9863 return !this.productIsVisibleInSite() 9864 }, 9865 productIsNotGroupedAndVisibleInSite() { 9866 return this.item.product_type !== 'grouped' && this.item.is_visible_in_site_visibility 9867 }, 9868 productAriaLabel() { 9869 return hyva.strf(this.$el.dataset.ariaLabel, this.item.qty) 9870 }, 9871 proceedToCheckout() { 9872 this.closeCartDrawer() 9873 9874 this.$dispatch( 9875 'toggle-authentication', 9876 { 9877 url: 'https://fera.pl/checkout/' 9878 } 9879 ) 9880 }, 9881 setItemMessage(itemId, message) { 9882 const items = this.cartItems;
9883 items.forEach((item) => { 9884 if (item.item_id === itemId) { 9885 item.message = message; 9886 } 9887 }); 9888 }, 9889 cartListeners: { 9890 ['@private-content-loaded.window'](event) { 9891 this.getData(event.detail.data); 9892 }, 9893 ['@toggle-cart.window'](event) { 9894 this.toggleCartDrawer(event); 9895 }, 9896 ['@minicart-error-message.window'](event) { 9897 if (!event.detail) return; 9898 const { itemId, message } = event.detail; 9899 this.setItemMessage(itemId, message); 9900 } 9901 } 9902 } 9903 } 9904 9905 function initCartDrawerQtyBox() { 9906 return { 9907 initQty: 0, 9908 itemQty: 0, 9909 itemId: null, 9910 init() { 9911 this.setQtyDefaults(); 9912 this.$watch('item.qty', () => this.setQtyDefaults()); 9913 this.debouncedUpdateQty = Alpine.debounce((params) => { 9914 const { initQty, qty, itemId, form } = params; 9915 this.updateQty(form, itemId, initQty, qty); 9916 }, 1000); 9917 }, 9918 updateQty(form, itemId, initQty, qty) { 9919 if (qty === null || qty === '') return; 9920 9921 qty = Number(qty); 9922 9923 if (qty < 0 || qty === initQty) return; 9924 9925 qty >= 1 9926 ? form.dispatchEvent(new Event('submit', { cancelable: true })) 9927 : this.deleteItemFromCart(itemId); 9928 }, 9929 setQtyDefaults() { 9930 this.initQty = this.item.qty; 9931 this.itemQty = this.item.qty; 9932 this.itemId = this.item.item_id; 9933 }, 9934 decrement(form) { 9935 this.itemQty = Math.max(0, this.itemQty - 1); 9936 this.debouncedUpdateQty({ 9937 itemId: this.itemId, 9938 initQty: this.initQty, 9939 qty: this.itemQty, 9940 form 9941 }); 9942 }, 9943 increment(form) { 9944 this.itemQty++; 9945 this.debouncedUpdateQty({ 9946 itemId: this.itemId, 9947 initQty: this.initQty, 9948 qty: this.itemQty, 9949 form 9950 }); 9951 }, 9952 qtyHasNewValue() { 9953 return this.itemQty === this.initQty || this.itemQty === null; 9954 } 9955 } 9956 } 9957 9958 window.addEventListener('alpine:init', () => { 9959 Alpine.data('initCartDrawer', initCartDrawer); 9960 Alpine.data('initCartDrawerQtyBox', initCartDrawerQtyBox); 9961 }, { once: true }) 9962 9963 async function hyvaAjaxFormMinicart( 9964 { 9965 form = null, 9966 url = '', 9967 body = '', 9968 redirect = 'default', 9969 message = '', 9970 } = {}, 9971 callback = () => {} 9972 ) { 9973 const formData = body ? body : (form ? new FormData(form) : ''); 9974 const postUrl = url ? url : (form ? form.action : ''); 9975 if (!formData || !postUrl) { 9976 console.warn('You must provide the form or formData and postUrl!'); 9977 return; 9978 } 9979 9980 const formUenc = hyva.getUenc(); 9981 const itemId = body ? new URLSearchParams(body).get('item_id') : formData.get('item_id'); 9982 let bodyUrl = new URLSearchParams(formData); 9983 bodyUrl.append('uenc', formUenc); 9984 9985 try { 9986 const response = await fetch(postUrl, { 9987 method: 'POST', 9988 body: bodyUrl.toString(), 9989 mode: 'cors', 9990 credentials: 'include', 9991 headers: { 9992 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 9993 'X-Requested-With': 'XMLHttpRequest' 9994 } 9995 }); 9996 9997 if (!response.ok) { 9998 return form.submit(); 9999 } 10000 10001 if (redirect === 'default' && response.redirected) { 10002 return window.location.href = response.url; 10003 } else if (redirect !== 'default' && redirect !== false) { 10004 return window.location.href = redirect; 10005 } 10006 10007 const responseBody = await response.json(); 10008 10009 if (!responseBody.success) { 10010 throw responseBody.error_message; 10011 } 10012 10013 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 10014 } catch (error) { 10015 window.dispatchEvent(new CustomEvent('minicart-error-message', { detail: { itemId, message: error } })); 10016 } finally { 10017 callback(); 10018 } 10019 } 10020</script>
10020 10021 10022<dialog 10023 id="cart-drawer" 10024 aria-labelledby="cart-drawer-title" 10025 class="open:flex flex-col py-6 px-4 gap-y-4 max-h-full max-w-full h-full mr-0 w-[450px] 10026 shadow-2xl bg-container text-brandSecondary-900 backdrop:bg-black/25 backdrop:backdrop-blur-sm" 10027 x-data="initCartDrawer" 10028 x-bind="cartListeners" 10029 x-show="open" 10030 x-htmldialog.noscroll="closeCartDrawer" 10031 x-transition:enter="transition ease-in-out duration-500" 10032 x-transition:enter-start="translate-x-full" 10033 x-transition:enter-end="translate-x-0" 10034 x-transition:leave="transition ease-in-out duration-300" 10035 x-transition:leave-start="translate-x-0" 10036 x-transition:leave-end="translate-x-full" 10037> 10038 10039 <div class="flex gap-2 justify-between items-center"> 10040 <p id="cart-drawer-title" class="text-lg font-semibold text-black"> 10041 <strong>Koszyk</strong> 10042 <span 10043 class="items-total text-xs" 10044 x-show="shouldShowItemCount" 10045 x-text="getItemCountTitle" 10046 ></span> 10047 </p> 10048 <button 10049 type="button" 10050 class="btn btn-icon-size-s" 10051 @click="closeCartDrawer" 10052 aria-label="Zamknij koszyk" 10053 > 10054 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 10055 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 10056</svg> 10057 </button> 10058 </div> 10059 10060 10061 <template x-if="cartIsEmpty"> 10062 <div class="grow grid place-items-center"> 10063 <div class="text-center"> 10064 <div class="max-w-full max-h-full aspect-square w-44 h-44 inline-flex items-center justify-center rounded-full 10065 bg-brandPrimary-100 text-brandPrimary-400 outline-2 outline-dashed outline-brandPrimary-300 outline-offset-8"> 10066 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="120" height="120" aria-hidden="true"> 10067 <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/> 10068</svg> 10069 </div> 10070 <p class="mt-10 text-xl"> 10071 <strong>Twój koszyk jest pusty</strong> 10072 </p> 10073 <p class="max-w-96 text-brandSecondary-700"> 10074 UmieÅÄ produkty w koszyku, żeby przejÅÄ do zamówienia. </p> 10075 </div> 10076 </div> 10077 </template> 10078 10079 <template x-if="itemsCount"> 10080 <ul class="grow flex flex-col overflow-y-auto overscroll-y-contain mask-overflow mask-dir-y"> 10081 <template x-for="item in cartItems"> 10082 <li class="flex gap-4 items-start py-6 border-b border-secondary-lighter"> 10083 <template x-if="productIsVisibleInSite"> 10084 <a 10085 class="block shrink-0 max-w-[25%]" 10086 :href="item.product_url" 10087 data-aria-label="Produkt "%0"" 10088 :title="item.product_name" 10089 > 10090 <img 10091 :src="item.product_image.src" 10092 :width="item.product_image.width" 10093 :height="item.product_image.height" 10094 loading="lazy" 10095 :alt="item.product_name" 10096 > 10097 </a> 10098 </template> 10099 <template x-if="productIsNotVisibleInSite"> 10100 <div class="block shrink-0 max-w-[25%]"> 10101 <img 10102 :src="item.product_image.src" 10103 :width="item.product_image.width" 10104 :height="item.product_image.height" 10105 loading="lazy" 10106 :alt="item.product_name" 10107 /> 10108 </div> 10109 </template> 10110 <div class="flex flex-col grow"> 10111 <template x-if="item.badges"> 10112 <div x-html="item.badges"></div> 10113 </template> 10114 <div class="flex gap-2 justify-between items-center mb-4"> 10115 <p class="text-xl font-bold"> 10116 <sp
10116an x-html="item.product_name"></span> 10117 </p> 10118 </div> 10119 <template x-if="item.reward_badge"> 10120 <div class="mb-4" x-html="item.reward_badge"></div> 10121 </template> 10122 <template x-if="showDetails"> 10123 <div class="flex flex-col gap-1 text-sm mb-4"> 10124 <template x-if="showSku"> 10125 <div class="flex gap-2"> 10126 <span class="text-brandSecondary-600"> 10127 SKU </span> 10128 <span class="font-bold" x-html="item.product_sku"></span> 10129 </div> 10130 </template> 10131 <template x-for="option in item.options"> 10132 <div class="flex gap-2"> 10133 <span x-text="option.label"></span> 10134 <span class="font-bold" x-html="option.value"></span> 10135 </div> 10136 </template> 10137 </div> 10138 </template> 10139 <div class="flex gap-2 flex-wrap items-end justify-between"> 10140 10141 <form 10142 action="https://fera.pl/checkout/sidebar/updateItemQty/" 10143 x-data="initCartDrawerQtyBox" 10144 @private-content-loaded.window="setQtyDefaults" 10145 @submit.prevent="updateItemQty" 10146 method="post" 10147 class="form form-cart flex gap-2 max-w-44" 10148 > 10149 <input name="form_key" type="hidden" value="6aqf5MmWWJaNsQwZ" /> <input type="hidden" name="item_id" :value="item.item_id"> 10150 10151 <button 10152 type="button" 10153 class="btn btn-secondary btn-icon-size-l" 10154 @click="decrement($el.form)" 10155 data-aria-label="%0 szt. w koszyku" 10156 :aria-label="productAriaLabel" 10157 > 10158 <template x-if="itemQty > 1"> 10159 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 10160 <path stroke-linecap="round" stroke-linejoin="round" d="M20 12H4"/> 10161</svg> 10162 </template> 10163 <template x-if="itemQty <= 1"> 10164 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 10165 <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/> 10166</svg> 10167 </template> 10168 </button> 10169 10170 <label class="sr-only" :for="item.item_id"> 10171 IloÅÄ </label> 10172 <div class="control"> 10173 <input 10174 :id="item.item_id" 10175 type="number" 10176 class="qty invalid:ring-error-lighter invalid:border-error-darker 10177 form-input w-full py-2 min-h-10 text-center" 10178 required 10179 min="1" 10180 step="any" 10181 :value="itemQty" 10182 name="item_qty" 10183 @input.debounce.1000="updateQty($event.target.form, item.item_id, itemQty, $event.target.value)" 10184 > 10185 </div> 10186 <button 10187 type="button" 10188 class="btn btn-secondary btn-icon-size-l" 10189 @click="increment($el.form)" 10190 data-aria-label="%0 szt. w koszyku" 10191 :aria-label="productAriaLabel()" 10192 > 10193 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 10194 <path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/> 10195</svg> 10196 </button> 10197 10198 </form> 10199 <div x-html="item.product_price"></div> 10200 <template x-if="item.message"> 10201 <div class="message error" x-text="item.message"></div> 10202 </template> 10203 </div> 10204 </div> 10205 </li> 10206 </template> 10207 </ul> 10208 </template> 10209 10210 10211<div id="snr-magento-minicart-1"></div> 10212 10213 <template x-if="itemsCount"> 10214 <div> 10215 10216 <dl class="flex gap-2 justify-between items-center"> 10217 <dt class="text-lg text-secondary font-bold">Suma</dt> 10218 <dd class="text-xl text-brandSecondary-900 font-semibold" x-html="cart.subtotal"></dd> 10219 </dl> 10220 10221 <div class="flex flex-col gap-y-4 mt-4"> 10222 <a 10223 href="https://fera.pl/checkout/cart/" 10224 class="btn" 10225 > 10226 Idź do koszyka </a> 10227 <a 10228 @click.prevent.stop="proceedToCheckout" 10229 href="https://fera.pl/checkout/" 10230 class="btn btn-primary" 10231 > 10232 Zamów </a> 10233 <template x-if="!getSectionDataExtraActions">
10234 <div x-html="getSectionDataExtraActions"></div> 10235 </template> 10236 </div> 10237 </div> 10238 </template> 10239 10240 <template x-if="cartIsEmpty"> 10241 <div class="flex flex-col"> 10242 <button 10243 type="button" 10244 @click="closeCartDrawer" 10245 class="btn btn-primary" 10246 >Kontynuuj</button> 10247 </div> 10248 </template> 10249 10250 10251 <div 10252 class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-slate-800" 10253 x-cloak 10254 x-show="isLoading" 10255 x-transition.opacity.duration.200ms 10256> 10257 <div class="flex gap-10 items-center p-4"> 10258 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 10259 <style> 10260 @keyframes spinner-ball-triangle1 { 10261 0% { transform: translate(0%, 0%); } 10262 33% { transform: translate(38%, -79%); } 10263 66% { transform: translate(77%, 0%); } 10264 100% { transform: translate(0%, 0%); } 10265 } 10266 10267 @keyframes spinner-ball-triangle2 { 10268 0% { transform: translate(0%, 0%); } 10269 33% { transform: translate(38%, 79%); } 10270 66% { transform: translate(-38%, 79%); } 10271 100% { transform: translate(0%, 0%); } 10272 } 10273 10274 @keyframes spinner-ball-triangle3 { 10275 0% { transform: translate(0%, 0%); } 10276 33% { transform: translate(-77%, 0%); } 10277 66% { transform: translate(-38%, -79%); } 10278 100% { transform: translate(0%, 0%); } 10279 } 10280 </style> 10281 <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/> 10282 <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/> 10283 <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/> 10284</svg> 10285 <span class="text-xl select-none"> 10286 ÅadujÄ... </span> 10287 </div> 10288</div> 10289</dialog> 10290
10291<script> 10292 function initMenuDrawer() { 10293 return { 10294 open: false, 10295 isSubMenuOpen: false, 10296 init() { 10297 Array.from(this.$root.querySelectorAll('a')).forEach(link => { 10298 if (link.href === `${window.location.origin}${window.location.pathname}`) { 10299 link.setAttribute('aria-current', 'page'); 10300 } 10301 }); 10302 }, 10303 toggleMenuDrawer(event) { 10304 if (event.detail && event.detail.isOpen) { 10305 this.open = event.detail.isOpen; 10306 } else { 10307 this.open = !this.open; 10308 } 10309 }, 10310 openMenuDrawer() { 10311 this.open = true; 10312 }, 10313 closeMenuDrawer() { 10314 this.open = false; 10315 }, 10316 lockWrapperScroll() { 10317 return this.isSubMenuOpen ? {overflow: 'hidden'} : {} 10318 }, 10319 hasActiveSubMenu() { 10320 this.isSubMenuOpen = !!this.$root.querySelector('[data-open]'); 10321 }, 10322 10323 menuListeners: { 10324 ['@toggle-menu.window'](event) { 10325 this.toggleMenuDrawer(event); 10326 }, 10327 } 10328 } 10329 } 10330 10331 function initMobileMenu() { 10332 return { 10333 isOpen: false, 10334 open() { 10335 this.isOpen = true; 10336 this.$root.setAttribute('data-open', ''); 10337 this.$nextTick(() => { 10338 this.$dispatch('sub-menu-state-change'); 10339 this.$refs.closeSubMenuBtn.focus(); 10340 this.toggleInert(); 10341 }) 10342 }, 10343 close() { 10344 this.isOpen = false; 10345 this.$root.removeAttribute('data-open'); 10346 this.toggleInert(); 10347 this.$nextTick(() => { 10348 this.$dispatch('sub-menu-state-change') 10349 this.$refs.openSubMenuBtn.focus(); 10350 }) 10351 }, 10352 toggleInert() { 10353 const items = this.$root.parentElement.children; 10354 10355 for (item of items) { 10356 if (item.hasAttribute('data-open')) continue; 10357 item.toggleAttribute('inert', this.isOpen); 10358 } 10359 } 10360 } 10361 } 10362 10363 function initMobileSubMenu() { 10364 return { 10365 isOpen: false, 10366 open() { 10367 this.isOpen = true; 10368 this.$root.setAttribute('data-open', ''); 10369 const parentUl = this.$root.parentElement; 10370 if (parentUl) parentUl.style.overflow = 'hidden'; 10371 this.$nextTick(() => { 10372 this.$dispatch('sub-menu-state-change'); 10373 this.$refs.closeSubMenuBtn.focus(); 10374 this.toggleInert(); 10375 }) 10376 }, 10377 close() { 10378 this.isOpen = false; 10379 this.$root.removeAttribute('data-open'); 10380 const parentUl = this.$root.parentElement; 10381 if (parentUl) parentUl.style.removeProperty('overflow'); 10382 this.toggleInert(); 10383 this.$nextTick(() => { 10384 this.$dispatch('sub-menu-state-change') 10385 this.$refs.openSubMenuBtn.focus(); 10386 }) 10387 }, 10388 toggleInert() { 10389 const items = this.$root.parentElement.children; 10390 10391 for (item of items) { 10392 if (item.hasAttribute('data-open')) continue; 10393 item.toggleAttribute('inert', this.isOpen); 10394 } 10395 } 10396 } 10397 } 10398 10399 window.addEventListener('alpine:init', () => { 10400 Alpine.data('initMenuDrawer', initMenuDrawer); 10401 Alpine.data('initMobileMenu', initMobileMenu); 10402 Alpine.data('initMobileSubMenu', initMobileSubMenu); 10403 }, { once: true }) 10404</script>
10404 10405 10406<dialog 10407 id="menu-drawer" 10408 aria-labelledby="menu-drawer-title" 10409 class="open:flex flex-col py-6 px-4 gap-y-4 max-h-full max-w-full h-full ml-0 w-[450px] 10410 shadow-2xl text-brandSecondary-900 backdrop:bg-black/25 backdrop:backdrop-blur-sm" 10411 x-data="initMenuDrawer" 10412 x-bind="menuListeners" 10413 x-show="open" 10414 @sub-menu-state-change.window="hasActiveSubMenu" 10415 x-htmldialog.noscroll="closeMenuDrawer" 10416 x-transition:enter="transition ease-in-out duration-500" 10417 x-transition:enter-start="-translate-x-full" 10418 x-transition:enter-end="translate-x-0" 10419 x-transition:leave="transition ease-in-out duration-300" 10420 x-transition:leave-start="translate-x-0" 10421 x-transition:leave-end="-translate-x-full" 10422> 10423 <div class="flex gap-2 justify-between items-center pb-4 border-b border-secondary"> 10424 <p id="menu-drawer-title" class="text-lg font-semibold text-black"> 10425 <strong>Menu</strong> 10426 </p> 10427 <button 10428 type="button" 10429 class="btn btn-icon-size-s" 10430 @click="closeMenuDrawer" 10431 aria-label="Zamknij menu" 10432 > 10433 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 10434 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 10435</svg> 10436 </button> 10437 </div> 10438 <div class="grow relative -mx-4 px-4 overflow-y-auto overflow-x-hidden" :style="lockWrapperScroll"> 10439 <nav class="flex flex-col justify-between h-full" aria-label="Mobile Main Menu"> 10440 <ul class="flex flex-col gap-1.5"> 10441 10442 <li data-level="0" x-data="initMobileSubMenu"> 10443 <button 10444 type="button" 10445 class="dropdown-list-item" 10446 aria-controls="category-node-5-mobile-menu-panel" 10447 aria-expanded="false" 10448 x-ref="openSubMenuBtn" 10449 :aria-expanded="isOpen" 10450 :disabled="isOpen" 10451 @click="open" 10452 > 10453 <span>Pies</span> 10454 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 10455 </button> 10456 <ul 10457 id="category-node-5-mobile-menu-panel" 10458 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 10459 x-show="isOpen" 10460 x-transition:enter-start="opacity-0 translate-x-8" 10461 x-transition:enter-end="opacity-100 translate-x-0" 10462 x-transition:leave-start="opacity-100 translate-x-0" 10463 x-transition:leave-end="opacity-0 translate-x-8" 10464 @keydown.escape.stop.prevent="close" 10465 > 10466 <li data-level="1"> 10467 <button 10468 type="button" 10469 class="dropdown-list-item font-bold justify-normal" 10470 @click="close" 10471 x-ref="closeSubMenuBtn" 10472 > 10473 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 10474 Pies </button> 10475 </li> 10476 <li> 10477 <a 10478 href="https://fera.pl/pies.html" 10479 class="dropdown-list-item font-bold" 10480 > 10481 <span> 10482 Pies - zobacz wszystko </span> 10483 </a> 10484 </li> 10485 10486 <li data-level="1" x-data="initMobileSubMenu"> 10487 <button 10488 type="button" 10489 class="dropdown-list-item" 10490 aria-controls="category-node-6-mobile-menu-panel" 10491 aria-expanded="false" 10492 x-ref="openSubMenuBtn" 10493 :aria-expanded="isOpen" 10494 :disabled="isOpen" 10495 @click="open" 10496 >
10497 <span>Karma dla psa</span> 10498 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 10499 </button> 10500 <ul 10501 id="category-node-6-mobile-menu-panel" 10502 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 10503 x-show="isOpen" 10504 x-transition:enter-start="opacity-0 translate-x-8" 10505 x-transition:enter-end="opacity-100 translate-x-0" 10506 x-transition:leave-start="opacity-100 translate-x-0" 10507 x-transition:leave-end="opacity-0 translate-x-8" 10508 @keydown.escape.stop.prevent="close" 10509 > 10510 <li data-level="2"> 10511 <button 10512 type="button" 10513 class="dropdown-list-item font-bold justify-normal" 10514 @click="close" 10515 x-ref="closeSubMenuBtn" 10516 > 10517 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 10518 Karma dla psa </button> 10519 </li> 10520 <li> 10521 <a 10522 href="https://fera.pl/pies/karma-dla-psa.html" 10523 class="dropdown-list-item font-bold" 10524 > 10525 <span> 10526 Karma dla psa - zobacz wszystko </span> 10527 </a> 10528 </li> 10529 10530 <li data-level="2"> 10531 <a 10532 href="https://fera.pl/pies/karma-dla-psa/karma-sucha-dla-psa.html" 10533 class="dropdown-list-item" 10534 > 10535 <span>Karma sucha dla psa</span> 10536 </a> 10537 </li> 10538 10539 <li data-level="2"> 10540 <a 10541 href="https://fera.pl/pies/karma-dla-psa/karma-mokra-dla-psa.html" 10542 class="dropdown-list-item" 10543 > 10544 <span>Karma mokra dla psa</span> 10545 </a> 10546 </li> 10547 10548 <li data-level="2"> 10549 <a 10550 href="https://fera.pl/pies/karma-dla-psa/karma-liofilizowana-dla-psa.html" 10551 class="dropdown-list-item" 10552 > 10553 <span>Karma liofilizowana dla psa</span> 10554 </a> 10555 </li> 10556 10557 <li data-level="2"> 10558 <a 10559 href="https://fera.pl/pies/karma-dla-psa/mleko-zastepcze-dla-psa.html" 10560 class="dropdown-list-item" 10561 > 10562 <span>Mleko zastÄpcze dla psa</span> 10563 </a> 10564 </li> 10565 10566 <li data-level="2"> 10567 <a 10568 href="https://fera.pl/pies/karma-dla-psa/zywienie-oparte-na-nauce.html" 10569 class="dropdown-list-item" 10570 > 10571 <span>Å»ywienie oparte na nauce </span> 10572 </a> 10573 </li> 10574 10575 <li data-level="2"> 10576 <a 10577 href="https://fera.pl/pies/karma-dla-psa/karma-dla-szczeniaka.html" 10578 class="dropdown-list-item" 10579 > 10580 <span>Karma dla szczeniaka</span> 10581 </a> 10582 </li> 10583 10584 <li data-level="2"> 10585 <a 10586 href="https://fera.pl/pies/karma-dla-psa/karma-dla-doroslego-psa.html" 10587 class="dropdown-list-item" 10588 > 10589 <span>Karma dla dorosÅego psa</span> 10590 </a> 10591 </li> 10592 10593 <li data-level="2"> 10594 <a 10595 href="https://fera.pl/pies/karma-dla-psa/karma-dla-psa-seniora.html" 10596 class="dropdown-list-item" 10597 > 10598 <span>Karma dla psa seniora</span> 10599 </a> 10600 </li> 10601 10602 <li data-level="2"> 10603 <a 10604 href="https://fera.pl/pies/karma-dla-psa/karma-bezzbozowa-dla-psa.html" 10605 class="dropdown-list-item" 10606 > 10607 <span>Karma bezzbożowa dla psa</span> 10608 </a> 10609 </li> 10610 </ul> 10611 </li> 10612 10613 <li data-level="1" x-data="initMobileSubMenu"> 10614 <button 10615 type="button" 10616 class="dropdown-list-item" 10617 aria-controls="category-node-9-mobile-menu-panel" 10618 aria-expanded="false" 10619 x-ref="openSubMenuBtn" 10620 :aria-expanded="isOpen" 10621 :disabled="isOpen" 10622 @click="open" 10623 >
10624 <span>Karma weterynaryjna dla psa</span> 10625 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 10626 </button> 10627 <ul 10628 id="category-node-9-mobile-menu-panel" 10629 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 10630 x-show="isOpen" 10631 x-transition:enter-start="opacity-0 translate-x-8" 10632 x-transition:enter-end="opacity-100 translate-x-0" 10633 x-transition:leave-start="opacity-100 translate-x-0" 10634 x-transition:leave-end="opacity-0 translate-x-8" 10635 @keydown.escape.stop.prevent="close" 10636 > 10637 <li data-level="2"> 10638 <button 10639 type="button" 10640 class="dropdown-list-item font-bold justify-normal" 10641 @click="close" 10642 x-ref="closeSubMenuBtn" 10643 > 10644 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 10645 Karma weterynaryjna dla psa </button> 10646 </li> 10647 <li> 10648 <a 10649 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa.html" 10650 class="dropdown-list-item font-bold" 10651 > 10652 <span> 10653 Karma weterynaryjna dla psa - zobacz wszystko </span> 10654 </a> 10655 </li> 10656 10657 <li data-level="2"> 10658 <a 10659 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-hipoalergiczna-dla-psa.html" 10660 class="dropdown-list-item" 10661 > 10662 <span>Karma hipoalergiczna dla psa</span> 10663 </a> 10664 </li> 10665 10666 <li data-level="2"> 10667 <a 10668 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-z-cukrzyca.html" 10669 class="dropdown-list-item" 10670 > 10671 <span>Karma dla psa z cukrzycÄ </span> 10672 </a> 10673 </li> 10674 10675 <li data-level="2"> 10676 <a 10677 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dietetyczna-dla-psa.html" 10678 class="dropdown-list-item" 10679 > 10680 <span>Karma dietetyczna dla psa</span> 10681 </a> 10682 </li> 10683 10684 <li data-level="2"> 10685 <a 10686 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-z-problemami-skornymi.html" 10687 class="dropdown-list-item" 10688 > 10689 <span>Karma dla psa z problemami skórnymi</span> 10690 </a> 10691 </li> 10692 10693 <li data-level="2"> 10694 <a 10695 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-problemy-z-zebami.html" 10696 class="dropdown-list-item" 10697 > 10698 <span>Karma dla psa na problemy z zÄbami</span> 10699 </a> 10700 </li> 10701 10702 <li data-level="2"> 10703 <a 10704 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-rekonwalescencje.html" 10705 class="dropdown-list-item" 10706 > 10707 <span>Karma dla psa na rekonwalescencjÄ</span> 10708 </a> 10709 </li> 10710 10711 <li data-level="2"> 10712 <a 10713 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-urinary-dla-psa.html" 10714 class="dropdown-list-item" 10715 > 10716 <span>Karma urinary dla psa</span> 10717 </a> 10718 </li> 10719 10720 <li data-level="2"> 10721 <a 10722 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-renal-dla-psa.html" 10723 class="dropdown-list-item" 10724 > 10725 <span>Karma renal dla psa</span> 10726 </a> 10727 </li> 10728 10729 <li data-level="2"> 10730 <a 10731 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-problemy-z-sercem.html" 10732 class="dropdown-list-item" 10733 >
10734 <span>Karma dla psa na problemy z sercem</span> 10735 </a> 10736 </li> 10737 10738 <li data-level="2"> 10739 <a 10740 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-na-stawy.html" 10741 class="dropdown-list-item" 10742 > 10743 <span>Karma dla psa na stawy</span> 10744 </a> 10745 </li> 10746 10747 <li data-level="2"> 10748 <a 10749 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-hepatic-dla-psa.html" 10750 class="dropdown-list-item" 10751 > 10752 <span>Karma hepatic dla psa</span> 10753 </a> 10754 </li> 10755 10756 <li data-level="2"> 10757 <a 10758 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-gastro-dla-psa.html" 10759 class="dropdown-list-item" 10760 > 10761 <span>Karma gastro dla psa</span> 10762 </a> 10763 </li> 10764 10765 <li data-level="2"> 10766 <a 10767 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-z-chora-trzustka.html" 10768 class="dropdown-list-item" 10769 > 10770 <span>Karma dla psa z chorÄ trzustkÄ </span> 10771 </a> 10772 </li> 10773 10774 <li data-level="2"> 10775 <a 10776 href="https://fera.pl/pies/karma-weterynaryjna-dla-psa/karma-dla-psa-po-kastracji.html" 10777 class="dropdown-list-item" 10778 > 10779 <span>Karma dla psa po kastracji</span> 10780 </a> 10781 </li> 10782 </ul> 10783 </li> 10784 10785 <li data-level="1" x-data="initMobileSubMenu"> 10786 <button 10787 type="button" 10788 class="dropdown-list-item" 10789 aria-controls="category-node-90-mobile-menu-panel" 10790 aria-expanded="false" 10791 x-ref="openSubMenuBtn" 10792 :aria-expanded="isOpen" 10793 :disabled="isOpen" 10794 @click="open" 10795 > 10796 <span>Karma dla psów rasowych</span> 10797 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 10798 </button> 10799 <ul 10800 id="category-node-90-mobile-menu-panel" 10801 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 10802 x-show="isOpen" 10803 x-transition:enter-start="opacity-0 translate-x-8" 10804 x-transition:enter-end="opacity-100 translate-x-0" 10805 x-transition:leave-start="opacity-100 translate-x-0" 10806 x-transition:leave-end="opacity-0 translate-x-8" 10807 @keydown.escape.stop.prevent="close" 10808 > 10809 <li data-level="2"> 10810 <button 10811 type="button" 10812 class="dropdown-list-item font-bold justify-normal" 10813 @click="close" 10814 x-ref="closeSubMenuBtn" 10815 > 10816 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 10817 Karma dla psów rasowych </button> 10818 </li> 10819 <li> 10820 <a 10821 href="https://fera.pl/pies/karma-dla-psow-rasowych.html" 10822 class="dropdown-list-item font-bold" 10823 > 10824 <span> 10825 Karma dla psów rasowych - zobacz wszystko </span> 10826 </a> 10827 </li> 10828 10829 <li data-level="2"> 10830 <a 10831 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-beagle.html" 10832 class="dropdown-list-item" 10833 > 10834 <span>Karma dla Beagle</span> 10835 </a> 10836 </li> 10837 10838 <li data-level="2"> 10839 <a 10840 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-buldoga-angielskiego.html" 10841 class="dropdown-list-item" 10842 > 10843 <span>Karma dla Buldoga angielskiego</span> 10844 </a> 10845 </li> 10846 10847 <li data-level="2"> 10848 <a 10849 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-buldoga-francuskiego.html" 10850 class="dropdown-list-item" 10851 >
10852 <span>Karma dla Buldoga francuskiego</span> 10853 </a> 10854 </li> 10855 10856 <li data-level="2"> 10857 <a 10858 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-cavalier-king-charles.html" 10859 class="dropdown-list-item" 10860 > 10861 <span>Karma dla Cavalier king charles</span> 10862 </a> 10863 </li> 10864 10865 <li data-level="2"> 10866 <a 10867 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-chihuahua.html" 10868 class="dropdown-list-item" 10869 > 10870 <span>Karma dla Chihuahua</span> 10871 </a> 10872 </li> 10873 10874 <li data-level="2"> 10875 <a 10876 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-jamnika.html" 10877 class="dropdown-list-item" 10878 > 10879 <span>Karma dla Jamnika</span> 10880 </a> 10881 </li> 10882 10883 <li data-level="2"> 10884 <a 10885 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-owczarka-niemieckiego.html" 10886 class="dropdown-list-item" 10887 > 10888 <span>Karma dla Owczarka niemieckiego</span> 10889 </a> 10890 </li> 10891 10892 <li data-level="2"> 10893 <a 10894 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-goldena.html" 10895 class="dropdown-list-item" 10896 > 10897 <span>Karma dla Goldena</span> 10898 </a> 10899 </li> 10900 10901 <li data-level="2"> 10902 <a 10903 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-doga-niemieckiego.html" 10904 class="dropdown-list-item" 10905 > 10906 <span>Karma dla Doga niemieckiego</span> 10907 </a> 10908 </li> 10909 10910 <li data-level="2"> 10911 <a 10912 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-jack-russell-terrier.html" 10913 class="dropdown-list-item" 10914 > 10915 <span>Karma dla Jack russell terrier</span> 10916 </a> 10917 </li> 10918 10919 <li data-level="2"> 10920 <a 10921 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-labrador-retriever.html" 10922 class="dropdown-list-item" 10923 > 10924 <span>Karma dla Labrador retriever</span> 10925 </a> 10926 </li> 10927 10928 <li data-level="2"> 10929 <a 10930 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-sznaucera.html" 10931 class="dropdown-list-item" 10932 > 10933 <span>Karma dla Sznaucera</span> 10934 </a> 10935 </li> 10936 10937 <li data-level="2"> 10938 <a 10939 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-pudla.html" 10940 class="dropdown-list-item" 10941 > 10942 <span>Karma dla Pudla</span> 10943 </a> 10944 </li> 10945 10946 <li data-level="2"> 10947 <a 10948 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-rottweiler.html" 10949 class="dropdown-list-item" 10950 > 10951 <span>Karma dla Rottweiler</span> 10952 </a> 10953 </li> 10954 10955 <li data-level="2"> 10956 <a 10957 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-shih-tzu.html" 10958 class="dropdown-list-item" 10959 > 10960 <span>Karma dla Shih tzu</span> 10961 </a> 10962 </li> 10963 10964 <li data-level="2"> 10965 <a 10966 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-west-highland-white-terrier.html" 10967 class="dropdown-list-item" 10968 > 10969 <span>Karma dla West highland white terrier</span> 10970 </a> 10971 </li> 10972 10973 <li data-level="2"> 10974 <a 10975 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-yorkshire-terrier.html" 10976 class="dropdown-list-item" 10977 > 10978 <span>Karma dla Yorkshire terrier</span> 10979 </a> 10980 </li> 10981 10982 <li data-level="2"> 10983 <a 10984 href="https://fera.pl/pies/karma-dla-psow-rasowych/karma-dla-szpica-miniaturowego-pomeranian.html" 10985 class="dropdown-list-item" 10986 >
10987 <span>Karma dla Szpica miniaturowego pomeranian</span> 10988 </a> 10989 </li> 10990 </ul> 10991 </li> 10992 10993 <li data-level="1" x-data="initMobileSubMenu"> 10994 <button 10995 type="button" 10996 class="dropdown-list-item" 10997 aria-controls="category-node-27-mobile-menu-panel" 10998 aria-expanded="false" 10999 x-ref="openSubMenuBtn" 11000 :aria-expanded="isOpen" 11001 :disabled="isOpen" 11002 @click="open" 11003 > 11004 <span>Karma dla psa: PodziaÅ wg firm</span> 11005 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 11006 </button> 11007 <ul 11008 id="category-node-27-mobile-menu-panel" 11009 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 11010 x-show="isOpen" 11011 x-transition:enter-start="opacity-0 translate-x-8" 11012 x-transition:enter-end="opacity-100 translate-x-0" 11013 x-transition:leave-start="opacity-100 translate-x-0" 11014 x-transition:leave-end="opacity-0 translate-x-8" 11015 @keydown.escape.stop.prevent="close" 11016 > 11017 <li data-level="2"> 11018 <button 11019 type="button" 11020 class="dropdown-list-item font-bold justify-normal" 11021 @click="close" 11022 x-ref="closeSubMenuBtn" 11023 > 11024 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 11025 Karma dla psa: PodziaÅ wg firm </button> 11026 </li> 11027 <li> 11028 <a 11029 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm.html" 11030 class="dropdown-list-item font-bold" 11031 > 11032 <span> 11033 Karma dla psa: PodziaÅ wg firm - zobacz wszystko </span> 11034 </a> 11035 </li> 11036 11037 <li data-level="2"> 11038 <a 11039 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-royal-canin.html" 11040 class="dropdown-list-item" 11041 > 11042 <span>Karma dla psa Royal Canin</span> 11043 </a> 11044 </li> 11045 11046 <li data-level="2"> 11047 <a 11048 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-simply-from-nature.html" 11049 class="dropdown-list-item" 11050 > 11051 <span>Karma dla psa Simply From Nature</span> 11052 </a> 11053 </li> 11054 11055 <li data-level="2"> 11056 <a 11057 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-pedigree.html" 11058 class="dropdown-list-item" 11059 > 11060 <span>Karma dla psa Pedigree</span> 11061 </a> 11062 </li> 11063 11064 <li data-level="2"> 11065 <a 11066 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-josera.html" 11067 class="dropdown-list-item" 11068 > 11069 <span>Karma dla psa Josera</span> 11070 </a> 11071 </li> 11072 11073 <li data-level="2"> 11074 <a 11075 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-brit.html" 11076 class="dropdown-list-item" 11077 > 11078 <span>Karma dla psa Brit</span> 11079 </a> 11080 </li> 11081 11082 <li data-level="2"> 11083 <a 11084 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-chappi.html" 11085 class="dropdown-list-item" 11086 > 11087 <span>Karma dla psa Chappi</span> 11088 </a> 11089 </li> 11090 11091 <li data-level="2"> 11092 <a 11093 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-eukanuba.html" 11094 class="dropdown-list-item" 11095 > 11096 <span>Karma dla psa Eukanuba</span> 11097 </a> 11098 </li> 11099 11100 <li data-level="2"> 11101 <a 11102 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-fitmin.html" 11103 class="dropdown-list-item" 11104 >
11105 <span>Karma dla psa Fitmin</span> 11106 </a> 11107 </li> 11108 11109 <li data-level="2"> 11110 <a 11111 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-bosch.html" 11112 class="dropdown-list-item" 11113 > 11114 <span>Karma dla psa Bosch</span> 11115 </a> 11116 </li> 11117 11118 <li data-level="2"> 11119 <a 11120 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-acana.html" 11121 class="dropdown-list-item" 11122 > 11123 <span>Karma dla psa Acana</span> 11124 </a> 11125 </li> 11126 11127 <li data-level="2"> 11128 <a 11129 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-iams.html" 11130 class="dropdown-list-item" 11131 > 11132 <span>Karma dla psa Iams</span> 11133 </a> 11134 </li> 11135 11136 <li data-level="2"> 11137 <a 11138 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-perfect-fit.html" 11139 class="dropdown-list-item" 11140 > 11141 <span>Karma dla psa Perfect Fit</span> 11142 </a> 11143 </li> 11144 11145 <li data-level="2"> 11146 <a 11147 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-purina.html" 11148 class="dropdown-list-item" 11149 > 11150 <span>Karma dla psa Purina</span> 11151 </a> 11152 </li> 11153 11154 <li data-level="2"> 11155 <a 11156 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-alpha-spirit.html" 11157 class="dropdown-list-item" 11158 > 11159 <span>Karma dla psa Alpha Spirit</span> 11160 </a> 11161 </li> 11162 11163 <li data-level="2"> 11164 <a 11165 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-arion.html" 11166 class="dropdown-list-item" 11167 > 11168 <span>Karma dla psa Arion</span> 11169 </a> 11170 </li> 11171 11172 <li data-level="2"> 11173 <a 11174 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-butcher-s.html" 11175 class="dropdown-list-item" 11176 > 11177 <span>Karma dla psa Butcher's</span> 11178 </a> 11179 </li> 11180 11181 <li data-level="2"> 11182 <a 11183 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-carnilove.html" 11184 class="dropdown-list-item" 11185 > 11186 <span>Karma dla psa Carnilove</span> 11187 </a> 11188 </li> 11189 11190 <li data-level="2"> 11191 <a 11192 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-farmina.html" 11193 class="dropdown-list-item" 11194 > 11195 <span>Karma dla psa Farmina</span> 11196 </a> 11197 </li> 11198 11199 <li data-level="2"> 11200 <a 11201 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-frolic.html" 11202 class="dropdown-list-item" 11203 > 11204 <span>Karma dla psa Frolic</span> 11205 </a> 11206 </li> 11207 11208 <li data-level="2"> 11209 <a 11210 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-hill-s.html" 11211 class="dropdown-list-item" 11212 > 11213 <span>Karma dla psa Hill's</span> 11214 </a> 11215 </li> 11216 11217 <li data-level="2"> 11218 <a 11219 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-taste-of-the-wild.html" 11220 class="dropdown-list-item" 11221 > 11222 <span>Karma dla psa Taste Of The Wild</span> 11223 </a> 11224 </li> 11225 11226 <li data-level="2"> 11227 <a 11228 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-nero-gold.html" 11229 class="dropdown-list-item" 11230 > 11231 <span>Karma dla psa Nero Gold</span> 11232 </a> 11233 </li> 11234 11235 <li data-level="2"> 11236 <a 11237 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-cesar.html" 11238 class="dropdown-list-item" 11239 >
11240 <span>Karma dla psa Cesar</span> 11241 </a> 11242 </li> 11243 11244 <li data-level="2"> 11245 <a 11246 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-stuzzy.html" 11247 class="dropdown-list-item" 11248 > 11249 <span>Karma dla psa Stuzzy</span> 11250 </a> 11251 </li> 11252 11253 <li data-level="2"> 11254 <a 11255 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-schesir.html" 11256 class="dropdown-list-item" 11257 > 11258 <span>Karma dla psa Schesir</span> 11259 </a> 11260 </li> 11261 11262 <li data-level="2"> 11263 <a 11264 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-applaws.html" 11265 class="dropdown-list-item" 11266 > 11267 <span>Karma dla psa Applaws</span> 11268 </a> 11269 </li> 11270 11271 <li data-level="2"> 11272 <a 11273 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-dolina-noteci.html" 11274 class="dropdown-list-item" 11275 > 11276 <span>Karma dla psa Dolina Noteci</span> 11277 </a> 11278 </li> 11279 11280 <li data-level="2"> 11281 <a 11282 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-forza10.html" 11283 class="dropdown-list-item" 11284 > 11285 <span>Karma dla psa Forza10</span> 11286 </a> 11287 </li> 11288 11289 <li data-level="2"> 11290 <a 11291 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-country-nature.html" 11292 class="dropdown-list-item" 11293 > 11294 <span>Karma dla psa Country&Nature</span> 11295 </a> 11296 </li> 11297 11298 <li data-level="2"> 11299 <a 11300 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-monge.html" 11301 class="dropdown-list-item" 11302 > 11303 <span>Karma dla psa Monge</span> 11304 </a> 11305 </li> 11306 11307 <li data-level="2"> 11308 <a 11309 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-belcando.html" 11310 class="dropdown-list-item" 11311 > 11312 <span>Karma dla psa Belcando</span> 11313 </a> 11314 </li> 11315 11316 <li data-level="2"> 11317 <a 11318 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-crave.html" 11319 class="dropdown-list-item" 11320 > 11321 <span>Karma dla psa Crave</span> 11322 </a> 11323 </li> 11324 11325 <li data-level="2"> 11326 <a 11327 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-orijen.html" 11328 class="dropdown-list-item" 11329 > 11330 <span>Karma dla psa Orijen</span> 11331 </a> 11332 </li> 11333 11334 <li data-level="2"> 11335 <a 11336 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-paka-zwierzaka.html" 11337 class="dropdown-list-item" 11338 > 11339 <span>Karma dla psa Paka Zwierzaka</span> 11340 </a> 11341 </li> 11342 11343 <li data-level="2"> 11344 <a 11345 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-cibau.html" 11346 class="dropdown-list-item" 11347 > 11348 <span>Karma dla psa Cibau</span> 11349 </a> 11350 </li> 11351 11352 <li data-level="2"> 11353 <a 11354 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-rafi.html" 11355 class="dropdown-list-item" 11356 > 11357 <span>Karma dla psa Rafi</span> 11358 </a> 11359 </li> 11360 11361 <li data-level="2"> 11362 <a 11363 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-piper.html" 11364 class="dropdown-list-item" 11365 > 11366 <span>Karma dla psa Piper</span> 11367 </a> 11368 </li> 11369 11370 <li data-level="2"> 11371 <a 11372 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-primal-spirit.html" 11373 class="dropdown-list-item" 11374 >
11375 <span>Karma dla psa Primal Spirit</span> 11376 </a> 11377 </li> 11378 11379 <li data-level="2"> 11380 <a 11381 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-calibra.html" 11382 class="dropdown-list-item" 11383 > 11384 <span>Karma dla psa Calibra</span> 11385 </a> 11386 </li> 11387 11388 <li data-level="2"> 11389 <a 11390 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-ziwipeak.html" 11391 class="dropdown-list-item" 11392 > 11393 <span>Karma dla psa ZiwiPeak</span> 11394 </a> 11395 </li> 11396 11397 <li data-level="2"> 11398 <a 11399 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-rinti.html" 11400 class="dropdown-list-item" 11401 > 11402 <span>Karma dla psa Rinti</span> 11403 </a> 11404 </li> 11405 11406 <li data-level="2"> 11407 <a 11408 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-marp.html" 11409 class="dropdown-list-item" 11410 > 11411 <span>Karma dla psa MARP</span> 11412 </a> 11413 </li> 11414 11415 <li data-level="2"> 11416 <a 11417 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-pan-miesko.html" 11418 class="dropdown-list-item" 11419 > 11420 <span>Karma dla psa Pan MiÄsko</span> 11421 </a> 11422 </li> 11423 11424 <li data-level="2"> 11425 <a 11426 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-canun.html" 11427 class="dropdown-list-item" 11428 > 11429 <span>Karma dla psa Canun</span> 11430 </a> 11431 </li> 11432 11433 <li data-level="2"> 11434 <a 11435 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-nugape.html" 11436 class="dropdown-list-item" 11437 > 11438 <span>Karma dla psa Nugape</span> 11439 </a> 11440 </li> 11441 11442 <li data-level="2"> 11443 <a 11444 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-green-petfood.html" 11445 class="dropdown-list-item" 11446 > 11447 <span>Karma dla psa Green Petfood</span> 11448 </a> 11449 </li> 11450 11451 <li data-level="2"> 11452 <a 11453 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-trovet.html" 11454 class="dropdown-list-item" 11455 > 11456 <span>Karma dla psa Trovet</span> 11457 </a> 11458 </li> 11459 11460 <li data-level="2"> 11461 <a 11462 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-vet-expert.html" 11463 class="dropdown-list-item" 11464 > 11465 <span>Karma dla psa Vet Expert</span> 11466 </a> 11467 </li> 11468 11469 <li data-level="2"> 11470 <a 11471 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-divinus.html" 11472 class="dropdown-list-item" 11473 > 11474 <span>Karma dla psa Divinus</span> 11475 </a> 11476 </li> 11477 11478 <li data-level="2"> 11479 <a 11480 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-addvena.html" 11481 class="dropdown-list-item" 11482 > 11483 <span>Karma dla psa Addvena</span> 11484 </a> 11485 </li> 11486 11487 <li data-level="2"> 11488 <a 11489 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-arquivet.html" 11490 class="dropdown-list-item" 11491 > 11492 <span>Karma dla psa Arquivet</span> 11493 </a> 11494 </li> 11495 11496 <li data-level="2"> 11497 <a 11498 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-snut.html" 11499 class="dropdown-list-item" 11500 > 11501 <span>Karma dla psa Snut</span> 11502 </a> 11503 </li> 11504 11505 <li data-level="2"> 11506 <a 11507 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-migos.html" 11508 class="dropdown-list-item" 11509 >
11510 <span>Karma dla psa Migos</span> 11511 </a> 11512 </li> 11513 11514 <li data-level="2"> 11515 <a 11516 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-bewi-dog.html" 11517 class="dropdown-list-item" 11518 > 11519 <span>Karma dla psa Bewi Dog</span> 11520 </a> 11521 </li> 11522 11523 <li data-level="2"> 11524 <a 11525 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-inaba.html" 11526 class="dropdown-list-item" 11527 > 11528 <span>Karma dla psa Inaba</span> 11529 </a> 11530 </li> 11531 11532 <li data-level="2"> 11533 <a 11534 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-biofeed.html" 11535 class="dropdown-list-item" 11536 > 11537 <span>Karma dla psa BioFeed</span> 11538 </a> 11539 </li> 11540 11541 <li data-level="2"> 11542 <a 11543 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-comfy-appetit.html" 11544 class="dropdown-list-item" 11545 > 11546 <span>Karma dla psa Comfy Appetit</span> 11547 </a> 11548 </li> 11549 11550 <li data-level="2"> 11551 <a 11552 href="https://fera.pl/pies/karma-dla-psa-podzial-wg-firm/karma-dla-psa-james-wellbeloved.html" 11553 class="dropdown-list-item" 11554 > 11555 <span>Karma dla psa James Wellbeloved</span> 11556 </a> 11557 </li> 11558 </ul> 11559 </li> 11560 11561 <li data-level="1" x-data="initMobileSubMenu"> 11562 <button 11563 type="button" 11564 class="dropdown-list-item" 11565 aria-controls="category-node-110-mobile-menu-panel" 11566 aria-expanded="false" 11567 x-ref="openSubMenuBtn" 11568 :aria-expanded="isOpen" 11569 :disabled="isOpen" 11570 @click="open" 11571 > 11572 <span>Przysmaki dla psa</span> 11573 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 11574 </button> 11575 <ul 11576 id="category-node-110-mobile-menu-panel" 11577 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 11578 x-show="isOpen" 11579 x-transition:enter-start="opacity-0 translate-x-8" 11580 x-transition:enter-end="opacity-100 translate-x-0" 11581 x-transition:leave-start="opacity-100 translate-x-0" 11582 x-transition:leave-end="opacity-0 translate-x-8" 11583 @keydown.escape.stop.prevent="close" 11584 > 11585 <li data-level="2"> 11586 <button 11587 type="button" 11588 class="dropdown-list-item font-bold justify-normal" 11589 @click="close" 11590 x-ref="closeSubMenuBtn" 11591 > 11592 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 11593 Przysmaki dla psa </button> 11594 </li> 11595 <li> 11596 <a 11597 href="https://fera.pl/pies/przysmaki-dla-psa.html" 11598 class="dropdown-list-item font-bold" 11599 > 11600 <span> 11601 Przysmaki dla psa - zobacz wszystko </span> 11602 </a> 11603 </li> 11604 11605 <li data-level="2"> 11606 <a 11607 href="https://fera.pl/pies/przysmaki-dla-psa/gryzaki-dentystyczne-dla-psa.html" 11608 class="dropdown-list-item" 11609 > 11610 <span>Gryzaki dentystyczne dla psa</span> 11611 </a> 11612 </li> 11613 11614 <li data-level="2"> 11615 <a 11616 href="https://fera.pl/pies/przysmaki-dla-psa/kosci-dla-psa.html" 11617 class="dropdown-list-item" 11618 > 11619 <span>KoÅci dla psa</span> 11620 </a> 11621 </li> 11622 11623 <li data-level="2"> 11624 <a 11625 href="https://fera.pl/pies/przysmaki-dla-psa/ciasteczka-dla-psa.html" 11626 class="dropdown-list-item" 11627 >
11628 <span>Ciasteczka dla psa</span> 11629 </a> 11630 </li> 11631 11632 <li data-level="2"> 11633 <a 11634 href="https://fera.pl/pies/przysmaki-dla-psa/treserki-dla-psa.html" 11635 class="dropdown-list-item" 11636 > 11637 <span>Treserki dla psa</span> 11638 </a> 11639 </li> 11640 11641 <li data-level="2"> 11642 <a 11643 href="https://fera.pl/pies/przysmaki-dla-psa/naturalne-przysmaki-dla-psa.html" 11644 class="dropdown-list-item" 11645 > 11646 <span>Naturalne przysmaki dla psa</span> 11647 </a> 11648 </li> 11649 11650 <li data-level="2"> 11651 <a 11652 href="https://fera.pl/pies/przysmaki-dla-psa/kabanosy-dla-psa.html" 11653 class="dropdown-list-item" 11654 > 11655 <span>Kabanosy dla psa</span> 11656 </a> 11657 </li> 11658 11659 <li data-level="2"> 11660 <a 11661 href="https://fera.pl/pies/przysmaki-dla-psa/przysmaki-liofilizowane-dla-psa.html" 11662 class="dropdown-list-item" 11663 > 11664 <span>Przysmaki liofilizowane dla psa</span> 11665 </a> 11666 </li> 11667 11668 <li data-level="2"> 11669 <a 11670 href="https://fera.pl/pies/przysmaki-dla-psa/przysmaki-funkcjonalne-dla-psa.html" 11671 class="dropdown-list-item" 11672 > 11673 <span>Przysmaki funkcjonalne dla psa</span> 11674 </a> 11675 </li> 11676 </ul> 11677 </li> 11678 11679 <li data-level="1" x-data="initMobileSubMenu"> 11680 <button 11681 type="button" 11682 class="dropdown-list-item" 11683 aria-controls="category-node-123-mobile-menu-panel" 11684 aria-expanded="false" 11685 x-ref="openSubMenuBtn" 11686 :aria-expanded="isOpen" 11687 :disabled="isOpen" 11688 @click="open" 11689 > 11690 <span>Zdrowie psa</span> 11691 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 11692 </button> 11693 <ul 11694 id="category-node-123-mobile-menu-panel" 11695 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 11696 x-show="isOpen" 11697 x-transition:enter-start="opacity-0 translate-x-8" 11698 x-transition:enter-end="opacity-100 translate-x-0" 11699 x-transition:leave-start="opacity-100 translate-x-0" 11700 x-transition:leave-end="opacity-0 translate-x-8" 11701 @keydown.escape.stop.prevent="close" 11702 > 11703 <li data-level="2"> 11704 <button 11705 type="button" 11706 class="dropdown-list-item font-bold justify-normal" 11707 @click="close" 11708 x-ref="closeSubMenuBtn" 11709 > 11710 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 11711 Zdrowie psa </button> 11712 </li> 11713 <li> 11714 <a 11715 href="https://fera.pl/pies/zdrowie-psa.html" 11716 class="dropdown-list-item font-bold" 11717 > 11718 <span> 11719 Zdrowie psa - zobacz wszystko </span> 11720 </a> 11721 </li> 11722 11723 <li data-level="2"> 11724 <a 11725 href="https://fera.pl/pies/zdrowie-psa/czyszczenie-zebow-psa.html" 11726 class="dropdown-list-item" 11727 > 11728 <span>Czyszczenie zÄbów psa</span> 11729 </a> 11730 </li> 11731 11732 <li data-level="2"> 11733 <a 11734 href="https://fera.pl/pies/zdrowie-psa/probiotyki-dla-psa.html" 11735 class="dropdown-list-item" 11736 > 11737 <span>Probiotyki dla psa</span> 11738 </a> 11739 </li> 11740 11741 <li data-level="2"> 11742 <a 11743 href="https://fera.pl/pies/zdrowie-psa/czyszczenie-uszu-i-oczu-psa.html" 11744 class="dropdown-list-item" 11745 >
11746 <span>Czyszczenie uszu i oczu psa</span> 11747 </a> 11748 </li> 11749 11750 <li data-level="2"> 11751 <a 11752 href="https://fera.pl/pies/zdrowie-psa/preparaty-na-stawy-i-kosci-dla-psa.html" 11753 class="dropdown-list-item" 11754 > 11755 <span>Preparaty na stawy i koÅci dla psa</span> 11756 </a> 11757 </li> 11758 11759 <li data-level="2"> 11760 <a 11761 href="https://fera.pl/pies/zdrowie-psa/preparaty-na-siersc-i-skore-psa.html" 11762 class="dropdown-list-item" 11763 > 11764 <span>Preparaty na sierÅÄ i skórÄ psa</span> 11765 </a> 11766 </li> 11767 11768 <li data-level="2"> 11769 <a 11770 href="https://fera.pl/pies/zdrowie-psa/tabletki-na-odrobaczenie-psa.html" 11771 class="dropdown-list-item" 11772 > 11773 <span>Tabletki na odrobaczenie psa</span> 11774 </a> 11775 </li> 11776 11777 <li data-level="2"> 11778 <a 11779 href="https://fera.pl/pies/zdrowie-psa/witaminy-i-suplementy-dla-psa.html" 11780 class="dropdown-list-item" 11781 > 11782 <span>Witaminy i suplementy dla psa</span> 11783 </a> 11784 </li> 11785 11786 <li data-level="2"> 11787 <a 11788 href="https://fera.pl/pies/zdrowie-psa/akcesoria-weterynaryjne-i-diagnostyka-psa.html" 11789 class="dropdown-list-item" 11790 > 11791 <span>Akcesoria weterynaryjne i diagnostyka psa</span> 11792 </a> 11793 </li> 11794 11795 <li data-level="2"> 11796 <a 11797 href="https://fera.pl/pies/zdrowie-psa/preparaty-na-uspokojenie-psa.html" 11798 class="dropdown-list-item" 11799 > 11800 <span>Preparaty na uspokojenie psa</span> 11801 </a> 11802 </li> 11803 </ul> 11804 </li> 11805 11806 <li data-level="1" x-data="initMobileSubMenu"> 11807 <button 11808 type="button" 11809 class="dropdown-list-item" 11810 aria-controls="category-node-131-mobile-menu-panel" 11811 aria-expanded="false" 11812 x-ref="openSubMenuBtn" 11813 :aria-expanded="isOpen" 11814 :disabled="isOpen" 11815 @click="open" 11816 > 11817 <span>
11817PchÅy, kleszcze i pasożyty</span> 11818 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 11819 </button> 11820 <ul 11821 id="category-node-131-mobile-menu-panel" 11822 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 11823 x-show="isOpen" 11824 x-transition:enter-start="opacity-0 translate-x-8" 11825 x-transition:enter-end="opacity-100 translate-x-0" 11826 x-transition:leave-start="opacity-100 translate-x-0" 11827 x-transition:leave-end="opacity-0 translate-x-8" 11828 @keydown.escape.stop.prevent="close" 11829 > 11830 <li data-level="2"> 11831 <button 11832 type="button" 11833 class="dropdown-list-item font-bold justify-normal" 11834 @click="close" 11835 x-ref="closeSubMenuBtn" 11836 > 11837 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 11838 PchÅy, kleszcze i pasożyty </button> 11839 </li> 11840 <li> 11841 <a 11842 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty.html" 11843 class="dropdown-list-item font-bold" 11844 > 11845 <span> 11846 PchÅy, kleszcze i pasożyty - zobacz wszystko </span> 11847 </a> 11848 </li> 11849 11850 <li data-level="2"> 11851 <a 11852 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/preparaty-na-pchly-i-kleszcze-dla-psa.html" 11853 class="dropdown-list-item" 11854 > 11855 <span>Preparaty na pchÅy i kleszcze dla psa</span> 11856 </a> 11857 </li> 11858 11859 <li data-level="2"> 11860 <a 11861 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/obroze-na-kleszcze-i-pchly-dla-psa.html" 11862 class="dropdown-list-item" 11863 > 11864 <span>Obroże na kleszcze i pchÅy dla psa</span> 11865 </a> 11866 </li> 11867 11868 <li data-level="2"> 11869 <a 11870 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/pesety-na-kleszcze-dla-psa.html" 11871 class="dropdown-list-item" 11872 > 11873 <span>PÄsety na kleszcze dla psa</span> 11874 </a> 11875 </li> 11876 11877 <li data-level="2"> 11878 <a 11879 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/szampony-na-pchly-i-kleszcze-dla-psa.html" 11880 class="dropdown-list-item" 11881 > 11882 <span>Szampony na pchÅy i kleszcze dla psa</span> 11883 </a> 11884 </li> 11885 11886 <li data-level="2"> 11887 <a 11888 href="https://fera.pl/pies/pchly-kleszcze-i-pasozyty/grzebien-na-pchly-dla-psa.html" 11889 class="dropdown-list-item" 11890 > 11891 <span>GrzebieÅ na pchÅy dla psa</span> 11892 </a> 11893 </li> 11894 </ul> 11895 </li> 11896 11897 <li data-level="1" x-data="initMobileSubMenu"> 11898 <button 11899 type="button" 11900 class="dropdown-list-item" 11901 aria-controls="category-node-117-mobile-menu-panel" 11902 aria-expanded="false" 11903 x-ref="openSubMenuBtn" 11904 :aria-expanded="isOpen" 11905 :disabled="isOpen" 11906 @click="open" 11907 > 11908 <span>Akcesoria do karmienia dla psa</span> 11909 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 11910 </button> 11911 <ul 11912 id="category-node-117-mobile-menu-panel" 11913 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 11914 x-show="isOpen" 11915 x-transition:enter-start="opacity-0 translate-x-8" 11916 x-transition:enter-end="opacity-100 translate-x-0" 11917 x-transition:leave-start="opacity-100 translate-x-0" 11918 x-transition:leave-end="opacity-0 translate-x-8" 11919 @keydown.escape.stop.prevent="close" 11920 > 11921 <li data-level="2"> 11922 <button 11923 type="button" 11924 class="dropdown-list-item font-bold justify-normal" 11925 @click="close" 11926 x-ref="closeSubMenuBtn" 11927 > 11928 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 11929 Akcesoria do karmienia dla psa </button> 11930 </li> 11931 <li> 11932 <a 11933 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa.html" 11934 class="dropdown-list-item font-bold" 11935 >
11936 <span> 11937 Akcesoria do karmienia dla psa - zobacz wszystko </span> 11938 </a> 11939 </li> 11940 11941 <li data-level="2"> 11942 <a 11943 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/automaty-na-karme-i-wode-dla-psa.html" 11944 class="dropdown-list-item" 11945 > 11946 <span>Automaty na karmÄ i wodÄ dla psa</span> 11947 </a> 11948 </li> 11949 11950 <li data-level="2"> 11951 <a 11952 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/miski-dla-psa.html" 11953 class="dropdown-list-item" 11954 > 11955 <span>Miski dla psa</span> 11956 </a> 11957 </li> 11958 11959 <li data-level="2"> 11960 <a 11961 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/pojemniki-na-karme-dla-psa.html" 11962 class="dropdown-list-item" 11963 > 11964 <span>Pojemniki na karmÄ dla psa</span> 11965 </a> 11966 </li> 11967 11968 <li data-level="2"> 11969 <a 11970 href="https://fera.pl/pies/akcesoria-do-karmienia-dla-psa/butelki-dla-psa.html" 11971 class="dropdown-list-item" 11972 > 11973 <span>Butelki dla psa</span> 11974 </a> 11975 </li> 11976 </ul> 11977 </li> 11978 11979 <li data-level="1" x-data="initMobileSubMenu"> 11980 <button 11981 type="button" 11982 class="dropdown-list-item" 11983 aria-controls="category-node-143-mobile-menu-panel" 11984 aria-expanded="false" 11985 x-ref="openSubMenuBtn" 11986 :aria-expanded="isOpen" 11987 :disabled="isOpen" 11988 @click="open" 11989 > 11990 <span>Grooming i pielÄgnacja psa</span> 11991 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 11992 </button> 11993 <ul 11994 id="category-node-143-mobile-menu-panel" 11995 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 11996 x-show="isOpen" 11997 x-transition:enter-start="opacity-0 translate-x-8" 11998 x-transition:enter-end="opacity-100 translate-x-0" 11999 x-transition:leave-start="opacity-100 translate-x-0" 12000 x-transition:leave-end="opacity-0 translate-x-8" 12001 @keydown.escape.stop.prevent="close" 12002 > 12003 <li data-level="2"> 12004 <button 12005 type="button" 12006 class="dropdown-list-item font-bold justify-normal" 12007 @click="close" 12008 x-ref="closeSubMenuBtn" 12009 > 12010 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12011 Grooming i pielÄgnacja psa </button> 12012 </li> 12013 <li> 12014 <a 12015 href="https://fera.pl/pies/grooming-i-pielegnacja-psa.html" 12016 class="dropdown-list-item font-bold" 12017 > 12018 <span> 12019 Grooming i pielÄgnacja psa - zobacz wszystko </span> 12020 </a> 12021 </li> 12022 12023 <li data-level="2"> 12024 <a 12025 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/szczotki-do-usuwania-siersci-psa.html" 12026 class="dropdown-list-item" 12027 > 12028 <span>Szczotki do usuwania sierÅci psa</span> 12029 </a> 12030 </li> 12031 12032 <li data-level="2"> 12033 <a 12034 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/woreczki-na-psie-odchody.html" 12035 class="dropdown-list-item" 12036 > 12037 <span>Woreczki na psie odchody</span> 12038 </a> 12039 </li> 12040 12041 <li data-level="2"> 12042 <a 12043 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/podklady-i-pieluchy-dla-psow.html" 12044 class="dropdown-list-item" 12045 >
12046 <span>PodkÅady i pieluchy dla psów</span> 12047 </a> 12048 </li> 12049 12050 <li data-level="2"> 12051 <a 12052 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/preparaty-odstraszajace-psy.html" 12053 class="dropdown-list-item" 12054 > 12055 <span>Preparaty odstraszajÄ ce psy</span> 12056 </a> 12057 </li> 12058 12059 <li data-level="2"> 12060 <a 12061 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/preparaty-na-usuwanie-plam-i-zapachow-po-psach.html" 12062 class="dropdown-list-item" 12063 > 12064 <span>Preparaty na usuwanie plam i zapachów po psach</span> 12065 </a> 12066 </li> 12067 12068 <li data-level="2"> 12069 <a 12070 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/szczotki-i-grzebienie-dla-psa.html" 12071 class="dropdown-list-item" 12072 > 12073 <span>Szczotki i grzebienie dla psa</span> 12074 </a> 12075 </li> 12076 12077 <li data-level="2"> 12078 <a 12079 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/szampony-i-akcesoria-do-kapania-psa.html" 12080 class="dropdown-list-item" 12081 > 12082 <span>Szampony i akcesoria do kÄ pania psa</span> 12083 </a> 12084 </li> 12085 12086 <li data-level="2"> 12087 <a 12088 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/nozyczki-do-strzyzenia-psa.html" 12089 class="dropdown-list-item" 12090 > 12091 <span>Nożyczki do strzyżenia psa</span> 12092 </a> 12093 </li> 12094 12095 <li data-level="2"> 12096 <a 12097 href="https://fera.pl/pies/grooming-i-pielegnacja-psa/obcinaczki-i-gilotyny-dla-psa-do-pazurow.html" 12098 class="dropdown-list-item" 12099 > 12100 <span>Obcinaczki i gilotyny dla psa do pazurów</span> 12101 </a> 12102 </li> 12103 </ul> 12104 </li> 12105 12106 <li data-level="1" x-data="initMobileSubMenu"> 12107 <button 12108 type="button" 12109 class="dropdown-list-item" 12110 aria-controls="category-node-151-mobile-menu-panel" 12111 aria-expanded="false" 12112 x-ref="openSubMenuBtn" 12113 :aria-expanded="isOpen" 12114 :disabled="isOpen" 12115 @click="open" 12116 > 12117 <span>Legowiska, transportery i klatki dla psa</span> 12118 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12119 </button> 12120 <ul 12121 id="category-node-151-mobile-menu-panel" 12122 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12123 x-show="isOpen" 12124 x-transition:enter-start="opacity-0 translate-x-8" 12125 x-transition:enter-end="opacity-100 translate-x-0" 12126 x-transition:leave-start="opacity-100 translate-x-0" 12127 x-transition:leave-end="opacity-0 translate-x-8" 12128 @keydown.escape.stop.prevent="close" 12129 > 12130 <li data-level="2"> 12131 <button 12132 type="button" 12133 class="dropdown-list-item font-bold justify-normal" 12134 @click="close" 12135 x-ref="closeSubMenuBtn" 12136 > 12137 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12138 Legowiska, transportery i klatki dla psa </button> 12139 </li> 12140 <li> 12141 <a 12142 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa.html" 12143 class="dropdown-list-item font-bold" 12144 > 12145 <span> 12146 Legowiska, transportery i klatki dla psa - zobacz wszystko </span> 12147 </a> 12148 </li> 12149 12150 <li data-level="2"> 12151 <a 12152 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/legowisko-dla-psa.html" 12153 class="dropdown-list-item" 12154 >
12155 <span>Legowisko dla psa</span> 12156 </a> 12157 </li> 12158 12159 <li data-level="2"> 12160 <a 12161 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/torby-dla-psa.html" 12162 class="dropdown-list-item" 12163 > 12164 <span>Torby dla psa</span> 12165 </a> 12166 </li> 12167 12168 <li data-level="2"> 12169 <a 12170 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/transportery-dla-psa.html" 12171 class="dropdown-list-item" 12172 > 12173 <span>Transportery dla psa</span> 12174 </a> 12175 </li> 12176 12177 <li data-level="2"> 12178 <a 12179 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/bramki-i-drzwiczki-dla-psa.html" 12180 class="dropdown-list-item" 12181 > 12182 <span>Bramki i drzwiczki dla psa</span> 12183 </a> 12184 </li> 12185 12186 <li data-level="2"> 12187 <a 12188 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/koce-dla-psa.html" 12189 class="dropdown-list-item" 12190 > 12191 <span>Koce dla psa</span> 12192 </a> 12193 </li> 12194 12195 <li data-level="2"> 12196 <a 12197 href="https://fera.pl/pies/legowiska-transportery-i-klatki-dla-psa/sprzet-podrozny-dla-psa.html" 12198 class="dropdown-list-item" 12199 > 12200 <span>SprzÄt podróżny dla psa</span> 12201 </a> 12202 </li> 12203 </ul> 12204 </li> 12205 12206 <li data-level="1" x-data="initMobileSubMenu"> 12207 <button 12208 type="button" 12209 class="dropdown-list-item" 12210 aria-controls="category-node-165-mobile-menu-panel" 12211 aria-expanded="false" 12212 x-ref="openSubMenuBtn" 12213 :aria-expanded="isOpen" 12214 :disabled="isOpen" 12215 @click="open" 12216 > 12217 <span>Zabawki dla psa</span> 12218 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12219 </button> 12220 <ul 12221 id="category-node-165-mobile-menu-panel" 12222 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12223 x-show="isOpen" 12224 x-transition:enter-start="opacity-0 translate-x-8" 12225 x-transition:enter-end="opacity-100 translate-x-0" 12226 x-transition:leave-start="opacity-100 translate-x-0" 12227 x-transition:leave-end="opacity-0 translate-x-8" 12228 @keydown.escape.stop.prevent="close" 12229 > 12230 <li data-level="2"> 12231 <button 12232 type="button" 12233 class="dropdown-list-item font-bold justify-normal" 12234 @click="close" 12235 x-ref="closeSubMenuBtn" 12236 > 12237 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12238 Zabawki dla psa </button> 12239 </li> 12240 <li> 12241 <a 12242 href="https://fera.pl/pies/zabawki-dla-psa.html" 12243 class="dropdown-list-item font-bold" 12244 > 12245 <span> 12246 Zabawki dla psa - zobacz wszystko </span> 12247 </a> 12248 </li> 12249 12250 <li data-level="2"> 12251 <a 12252 href="https://fera.pl/pies/zabawki-dla-psa/gry-dla-psa.html" 12253 class="dropdown-list-item" 12254 > 12255 <span>Gry dla psa</span> 12256 </a> 12257 </li> 12258 12259 <li data-level="2"> 12260 <a 12261 href="https://fera.pl/pies/zabawki-dla-psa/gryzaki-dla-psa.html" 12262 class="dropdown-list-item" 12263 > 12264 <span>Gryzaki dla psa</span> 12265 </a> 12266 </li> 12267 12268 <li data-level="2"> 12269 <a 12270 href="https://fera.pl/pies/zabawki-dla-psa/pilki-dla-psa.html" 12271 class="dropdown-list-item" 12272 >
12273 <span>PiÅki dla psa</span> 12274 </a> 12275 </li> 12276 12277 <li data-level="2"> 12278 <a 12279 href="https://fera.pl/pies/zabawki-dla-psa/zabawki-sznurkowe-dla-psa.html" 12280 class="dropdown-list-item" 12281 > 12282 <span>Zabawki sznurkowe dla psa</span> 12283 </a> 12284 </li> 12285 12286 <li data-level="2"> 12287 <a 12288 href="https://fera.pl/pies/zabawki-dla-psa/zabawki-dla-psa-do-rzucania.html" 12289 class="dropdown-list-item" 12290 > 12291 <span>Zabawki dla psa do rzucania</span> 12292 </a> 12293 </li> 12294 12295 <li data-level="2"> 12296 <a 12297 href="https://fera.pl/pies/zabawki-dla-psa/pluszaki-dla-psa.html" 12298 class="dropdown-list-item" 12299 > 12300 <span>Pluszaki dla psa</span> 12301 </a> 12302 </li> 12303 </ul> 12304 </li> 12305 12306 <li data-level="1" x-data="initMobileSubMenu"> 12307 <button 12308 type="button" 12309 class="dropdown-list-item" 12310 aria-controls="category-node-173-mobile-menu-panel" 12311 aria-expanded="false" 12312 x-ref="openSubMenuBtn" 12313 :aria-expanded="isOpen" 12314 :disabled="isOpen" 12315 @click="open" 12316 > 12317 <span>Obroże i smycze</span> 12318 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12319 </button> 12320 <ul 12321 id="category-node-173-mobile-menu-panel" 12322 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12323 x-show="isOpen" 12324 x-transition:enter-start="opacity-0 translate-x-8" 12325 x-transition:enter-end="opacity-100 translate-x-0" 12326 x-transition:leave-start="opacity-100 translate-x-0" 12327 x-transition:leave-end="opacity-0 translate-x-8" 12328 @keydown.escape.stop.prevent="close" 12329 > 12330 <li data-level="2"> 12331 <button 12332 type="button" 12333 class="dropdown-list-item font-bold justify-normal" 12334 @click="close" 12335 x-ref="closeSubMenuBtn" 12336 > 12337 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12338 Obroże i smycze </button> 12339 </li> 12340 <li> 12341 <a 12342 href="https://fera.pl/pies/obroze-i-smycze.html" 12343 class="dropdown-list-item font-bold" 12344 > 12345 <span> 12346 Obroże i smycze - zobacz wszystko </span> 12347 </a> 12348 </li> 12349 12350 <li data-level="2"> 12351 <a 12352 href="https://fera.pl/pies/obroze-i-smycze/obroze-dla-psa.html" 12353 class="dropdown-list-item" 12354 > 12355 <span>Obroże dla psa</span> 12356 </a> 12357 </li> 12358 12359 <li data-level="2"> 12360 <a 12361 href="https://fera.pl/pies/obroze-i-smycze/smycze-dla-psa.html" 12362 class="dropdown-list-item" 12363 > 12364 <span>Smycze dla psa</span> 12365 </a> 12366 </li> 12367 12368 <li data-level="2"> 12369 <a 12370 href="https://fera.pl/pies/obroze-i-smycze/szelki-dla-psa.html" 12371 class="dropdown-list-item" 12372 > 12373 <span>Szelki dla psa</span> 12374 </a> 12375 </li> 12376 12377 <li data-level="2"> 12378 <a 12379 href="https://fera.pl/pies/obroze-i-smycze/adresowka-dla-psa.html" 12380 class="dropdown-list-item" 12381 > 12382 <span>Adresówka dla psa</span> 12383 </a> 12384 </li> 12385 12386 <li data-level="2"> 12387 <a 12388 href="https://fera.pl/pies/obroze-i-smycze/szelki-dla-psa-do-samochodu.html" 12389 class="dropdown-list-item" 12390 >
12391 <span>Szelki dla psa do samochodu</span> 12392 </a> 12393 </li> 12394 12395 <li data-level="2"> 12396 <a 12397 href="https://fera.pl/pies/obroze-i-smycze/kaganiec-dla-psa.html" 12398 class="dropdown-list-item" 12399 > 12400 <span>Kaganiec dla psa</span> 12401 </a> 12402 </li> 12403 12404 <li data-level="2"> 12405 <a 12406 href="https://fera.pl/pies/obroze-i-smycze/tresura-psa.html" 12407 class="dropdown-list-item" 12408 > 12409 <span>Tresura psa</span> 12410 </a> 12411 </li> 12412 </ul> 12413 </li> 12414 12415 <li data-level="1" x-data="initMobileSubMenu"> 12416 <button 12417 type="button" 12418 class="dropdown-list-item" 12419 aria-controls="category-node-183-mobile-menu-panel" 12420 aria-expanded="false" 12421 x-ref="openSubMenuBtn" 12422 :aria-expanded="isOpen" 12423 :disabled="isOpen" 12424 @click="open" 12425 > 12426 <span>Stroje i akcesoria dla psa</span> 12427 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12428 </button> 12429 <ul 12430 id="category-node-183-mobile-menu-panel" 12431 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12432 x-show="isOpen" 12433 x-transition:enter-start="opacity-0 translate-x-8" 12434 x-transition:enter-end="opacity-100 translate-x-0" 12435 x-transition:leave-start="opacity-100 translate-x-0" 12436 x-transition:leave-end="opacity-0 translate-x-8" 12437 @keydown.escape.stop.prevent="close" 12438 > 12439 <li data-level="2"> 12440 <button 12441 type="button" 12442 class="dropdown-list-item font-bold justify-normal" 12443 @click="close" 12444 x-ref="closeSubMenuBtn" 12445 > 12446 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12447 Stroje i akcesoria dla psa </button> 12448 </li> 12449 <li> 12450 <a 12451 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa.html" 12452 class="dropdown-list-item font-bold" 12453 > 12454 <span> 12455 Stroje i akcesoria dla psa - zobacz wszystko </span> 12456 </a> 12457 </li> 12458 12459 <li data-level="2"> 12460 <a 12461 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa/majtki-dla-psa.html" 12462 class="dropdown-list-item" 12463 > 12464 <span>Majtki dla psa</span> 12465 </a> 12466 </li> 12467 12468 <li data-level="2"> 12469 <a 12470 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa/ubranka-dla-psa.html" 12471 class="dropdown-list-item" 12472 > 12473 <span>Ubranka dla psa</span> 12474 </a> 12475 </li> 12476 12477 <li data-level="2"> 12478 <a 12479 href="https://fera.pl/pies/stroje-i-akcesoria-dla-psa/skarpetki-i-buty-dla-psa.html" 12480 class="dropdown-list-item" 12481 > 12482 <span>Skarpetki i buty dla psa</span> 12483 </a> 12484 </li> 12485 </ul> 12486 </li> 12487 </ul> 12488 </li> 12489 12490 <li data-level="0" x-data="initMobileSubMenu"> 12491 <button 12492 type="button" 12493 class="dropdown-list-item" 12494 aria-controls="category-node-187-mobile-menu-panel" 12495 aria-expanded="false" 12496 x-ref="openSubMenuBtn" 12497 :aria-expanded="isOpen" 12498 :disabled="isOpen" 12499 @click="open" 12500 > 12501 <span>Kot</span> 12502 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12503 </button> 12504 <ul 12505 id="category-node-187-mobile-menu-panel" 12506 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12507 x-show="isOpen" 12508 x-transition:enter-start="opacity-0 translate-x-8" 12509 x-transition:enter-end="opacity-100 translate-x-0" 12510 x-transition:leave-start="opacity-100 translate-x-0" 12511 x-transition:leave-end="opacity-0 translate-x-8" 12512 @keydown.escape.stop.prevent="close" 12513 > 12514 <li data-level="1"> 12515 <button 12516 type="button" 12517 class="dropdown-list-item font-bold justify-normal" 12518 @click="close" 12519 x-ref="closeSubMenuBtn" 12520 > 12521 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12522 Kot </button> 12523 </li> 12524 <li> 12525 <a 12526 href="https://fera.pl/kot.html" 12527 class="dropdown-list-item font-bold" 12528 >
12529 <span> 12530 Kot - zobacz wszystko </span> 12531 </a> 12532 </li> 12533 12534 <li data-level="1" x-data="initMobileSubMenu"> 12535 <button 12536 type="button" 12537 class="dropdown-list-item" 12538 aria-controls="category-node-188-mobile-menu-panel" 12539 aria-expanded="false" 12540 x-ref="openSubMenuBtn" 12541 :aria-expanded="isOpen" 12542 :disabled="isOpen" 12543 @click="open" 12544 > 12545 <span>Karma dla kota</span> 12546 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12547 </button> 12548 <ul 12549 id="category-node-188-mobile-menu-panel" 12550 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12551 x-show="isOpen" 12552 x-transition:enter-start="opacity-0 translate-x-8" 12553 x-transition:enter-end="opacity-100 translate-x-0" 12554 x-transition:leave-start="opacity-100 translate-x-0" 12555 x-transition:leave-end="opacity-0 translate-x-8" 12556 @keydown.escape.stop.prevent="close" 12557 > 12558 <li data-level="2"> 12559 <button 12560 type="button" 12561 class="dropdown-list-item font-bold justify-normal" 12562 @click="close" 12563 x-ref="closeSubMenuBtn" 12564 > 12565 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12566 Karma dla kota </button> 12567 </li> 12568 <li> 12569 <a 12570 href="https://fera.pl/kot/karma-dla-kota.html" 12571 class="dropdown-list-item font-bold" 12572 > 12573 <span> 12574 Karma dla kota - zobacz wszystko </span> 12575 </a> 12576 </li> 12577 12578 <li data-level="2"> 12579 <a 12580 href="https://fera.pl/kot/karma-dla-kota/karma-sucha-dla-kota.html" 12581 class="dropdown-list-item" 12582 > 12583 <span>Karma sucha dla kota</span> 12584 </a> 12585 </li> 12586 12587 <li data-level="2"> 12588 <a 12589 href="https://fera.pl/kot/karma-dla-kota/karma-mokra-dla-kota.html" 12590 class="dropdown-list-item" 12591 > 12592 <span>Karma mokra dla kota</span> 12593 </a> 12594 </li> 12595 12596 <li data-level="2"> 12597 <a 12598 href="https://fera.pl/kot/karma-dla-kota/karma-liofilizowana-dla-kota.html" 12599 class="dropdown-list-item" 12600 > 12601 <span>Karma liofilizowana dla kota</span> 12602 </a> 12603 </li> 12604 12605 <li data-level="2"> 12606 <a 12607 href="https://fera.pl/kot/karma-dla-kota/mleko-zastepcze-dla-kota.html" 12608 class="dropdown-list-item" 12609 > 12610 <span>Mleko zastÄpcze dla kota</span> 12611 </a> 12612 </li> 12613 12614 <li data-level="2"> 12615 <a 12616 href="https://fera.pl/kot/karma-dla-kota/zywienie-oparte-na-nauce.html" 12617 class="dropdown-list-item" 12618 > 12619 <span>Å»ywienie oparte na nauce </span> 12620 </a> 12621 </li> 12622 12623 <li data-level="2"> 12624 <a 12625 href="https://fera.pl/kot/karma-dla-kota/karma-dla-kociat.html" 12626 class="dropdown-list-item" 12627 > 12628 <span>Karma dla kociÄ t</span> 12629 </a> 12630 </li> 12631 12632 <li data-level="2"> 12633 <a 12634 href="https://fera.pl/kot/karma-dla-kota/karma-dla-kota-doroslego.html" 12635 class="dropdown-list-item" 12636 > 12637 <span>Karma dla kota dorosÅego</span> 12638 </a> 12639 </li> 12640 12641 <li data-level="2"> 12642 <a 12643 href="https://fera.pl/kot/karma-dla-kota/karma-dla-kota-seniora.html" 12644 class="dropdown-list-item" 12645 >
12646 <span>Karma dla kota seniora</span> 12647 </a> 12648 </li> 12649 12650 <li data-level="2"> 12651 <a 12652 href="https://fera.pl/kot/karma-dla-kota/karma-bezzbozowa-dla-kota.html" 12653 class="dropdown-list-item" 12654 > 12655 <span>Karma bezzbożowa dla kota</span> 12656 </a> 12657 </li> 12658 </ul> 12659 </li> 12660 12661 <li data-level="1" x-data="initMobileSubMenu"> 12662 <button 12663 type="button" 12664 class="dropdown-list-item" 12665 aria-controls="category-node-207-mobile-menu-panel" 12666 aria-expanded="false" 12667 x-ref="openSubMenuBtn" 12668 :aria-expanded="isOpen" 12669 :disabled="isOpen" 12670 @click="open" 12671 > 12672 <span>Karma dla kotów rasowych</span> 12673 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12674 </button> 12675 <ul 12676 id="category-node-207-mobile-menu-panel" 12677 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12678 x-show="isOpen" 12679 x-transition:enter-start="opacity-0 translate-x-8" 12680 x-transition:enter-end="opacity-100 translate-x-0" 12681 x-transition:leave-start="opacity-100 translate-x-0" 12682 x-transition:leave-end="opacity-0 translate-x-8" 12683 @keydown.escape.stop.prevent="close" 12684 > 12685 <li data-level="2"> 12686 <button 12687 type="button" 12688 class="dropdown-list-item font-bold justify-normal" 12689 @click="close" 12690 x-ref="closeSubMenuBtn" 12691 > 12692 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12693 Karma dla kotów rasowych </button> 12694 </li> 12695 <li> 12696 <a 12697 href="https://fera.pl/kot/karma-dla-kotow-rasowych.html" 12698 class="dropdown-list-item font-bold" 12699 > 12700 <span> 12701 Karma dla kotów rasowych - zobacz wszystko </span> 12702 </a> 12703 </li> 12704 12705 <li data-level="2"> 12706 <a 12707 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-bengalskiego.html" 12708 class="dropdown-list-item" 12709 > 12710 <span>Karma dla kota bengalskiego</span> 12711 </a> 12712 </li> 12713 12714 <li data-level="2"> 12715 <a 12716 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-brytyjskiego-krotkowlosego.html" 12717 class="dropdown-list-item" 12718 > 12719 <span>Karma dla kota brytyjskiego krótkowÅosego</span> 12720 </a> 12721 </li> 12722 12723 <li data-level="2"> 12724 <a 12725 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-maine-coon.html" 12726 class="dropdown-list-item" 12727 > 12728 <span>Karma dla kota maine coon</span> 12729 </a> 12730 </li> 12731 12732 <li data-level="2"> 12733 <a 12734 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-norweskiego-lesnego.html" 12735 class="dropdown-list-item" 12736 > 12737 <span>Karma dla kota norweskiego leÅnego</span> 12738 </a> 12739 </li> 12740 12741 <li data-level="2"> 12742 <a 12743 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-kota-perskiego.html" 12744 class="dropdown-list-item" 12745 > 12746 <span>Karma dla kota perskiego</span> 12747 </a> 12748 </li> 12749 12750 <li data-level="2"> 12751 <a 12752 href="https://fera.pl/kot/karma-dla-kotow-rasowych/karma-dla-sfinksa.html" 12753 class="dropdown-list-item" 12754 > 12755 <span>Karma dla Sfinksa</span> 12756 </a> 12757 </li> 12758 </ul> 12759 </li> 12760 12761 <li data-level="1" x-data="initMobileSubMenu"> 12762 <button 12763 type="button" 12764 class="dropdown-list-item" 12765 aria-controls="category-node-191-mobile-menu-panel" 12766 aria-expanded="false" 12767 x-ref="openSubMenuBtn" 12768 :aria-expanded="isOpen" 12769 :disabled="isOpen" 12770 @click="open" 12771 >
12772 <span>Karma weterynaryjna dla kota</span> 12773 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12774 </button> 12775 <ul 12776 id="category-node-191-mobile-menu-panel" 12777 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12778 x-show="isOpen" 12779 x-transition:enter-start="opacity-0 translate-x-8" 12780 x-transition:enter-end="opacity-100 translate-x-0" 12781 x-transition:leave-start="opacity-100 translate-x-0" 12782 x-transition:leave-end="opacity-0 translate-x-8" 12783 @keydown.escape.stop.prevent="close" 12784 > 12785 <li data-level="2"> 12786 <button 12787 type="button" 12788 class="dropdown-list-item font-bold justify-normal" 12789 @click="close" 12790 x-ref="closeSubMenuBtn" 12791 > 12792 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12793 Karma weterynaryjna dla kota </button> 12794 </li> 12795 <li> 12796 <a 12797 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota.html" 12798 class="dropdown-list-item font-bold" 12799 > 12800 <span> 12801 Karma weterynaryjna dla kota - zobacz wszystko </span> 12802 </a> 12803 </li> 12804 12805 <li data-level="2"> 12806 <a 12807 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-hipoalergiczna-dla-kota.html" 12808 class="dropdown-list-item" 12809 > 12810 <span>Karma hipoalergiczna dla kota</span> 12811 </a> 12812 </li> 12813 12814 <li data-level="2"> 12815 <a 12816 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-z-cukrzyca.html" 12817 class="dropdown-list-item" 12818 > 12819 <span>Karma dla kota z cukrzycÄ </span> 12820 </a> 12821 </li> 12822 12823 <li data-level="2"> 12824 <a 12825 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-odchudzajaca-dla-kota.html" 12826 class="dropdown-list-item" 12827 > 12828 <span>Karma odchudzajÄ ca dla kota</span> 12829 </a> 12830 </li> 12831 12832 <li data-level="2"> 12833 <a 12834 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-problemy-ze-skora.html" 12835 class="dropdown-list-item" 12836 > 12837 <span>Karma dla kota na problemy ze skórÄ </span> 12838 </a> 12839 </li> 12840 12841 <li data-level="2"> 12842 <a 12843 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-problemy-z-zebami.html" 12844 class="dropdown-list-item" 12845 > 12846 <span>Karma dla kota na problemy z zÄbami</span> 12847 </a> 12848 </li> 12849 12850 <li data-level="2"> 12851 <a 12852 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-rekonwalescencje.html" 12853 class="dropdown-list-item" 12854 > 12855 <span>Karma dla kota na rekonwalescencjÄ</span> 12856 </a> 12857 </li> 12858 12859 <li data-level="2"> 12860 <a 12861 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-urinary-dla-kota.html" 12862 class="dropdown-list-item" 12863 > 12864 <span>Karma urinary dla kota</span> 12865 </a> 12866 </li> 12867 12868 <li data-level="2"> 12869 <a 12870 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-renal-dla-kota.html" 12871 class="dropdown-list-item" 12872 > 12873 <span>Karma renal dla kota</span> 12874 </a> 12875 </li> 12876 12877 <li data-level="2"> 12878 <a 12879 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-stawy.html" 12880 class="dropdown-list-item" 12881 >
12882 <span>Karma dla kota na stawy</span> 12883 </a> 12884 </li> 12885 12886 <li data-level="2"> 12887 <a 12888 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-hepatic-dla-kota.html" 12889 class="dropdown-list-item" 12890 > 12891 <span>Karma hepatic dla kota</span> 12892 </a> 12893 </li> 12894 12895 <li data-level="2"> 12896 <a 12897 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kotow-po-sterylizacji.html" 12898 class="dropdown-list-item" 12899 > 12900 <span>Karma dla kotów po sterylizacji</span> 12901 </a> 12902 </li> 12903 12904 <li data-level="2"> 12905 <a 12906 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-dla-kota-na-stres.html" 12907 class="dropdown-list-item" 12908 > 12909 <span>Karma dla kota na stres</span> 12910 </a> 12911 </li> 12912 12913 <li data-level="2"> 12914 <a 12915 href="https://fera.pl/kot/karma-weterynaryjna-dla-kota/karma-gastro-dla-kota.html" 12916 class="dropdown-list-item" 12917 > 12918 <span>Karma gastro dla kota</span> 12919 </a> 12920 </li> 12921 </ul> 12922 </li> 12923 12924 <li data-level="1" x-data="initMobileSubMenu"> 12925 <button 12926 type="button" 12927 class="dropdown-list-item" 12928 aria-controls="category-node-225-mobile-menu-panel" 12929 aria-expanded="false" 12930 x-ref="openSubMenuBtn" 12931 :aria-expanded="isOpen" 12932 :disabled="isOpen" 12933 @click="open" 12934 > 12935 <span>Karma dla kota: PodziaÅ wedÅug firm</span> 12936 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 12937 </button> 12938 <ul 12939 id="category-node-225-mobile-menu-panel" 12940 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 12941 x-show="isOpen" 12942 x-transition:enter-start="opacity-0 translate-x-8" 12943 x-transition:enter-end="opacity-100 translate-x-0" 12944 x-transition:leave-start="opacity-100 translate-x-0" 12945 x-transition:leave-end="opacity-0 translate-x-8" 12946 @keydown.escape.stop.prevent="close" 12947 > 12948 <li data-level="2"> 12949 <button 12950 type="button" 12951 class="dropdown-list-item font-bold justify-normal" 12952 @click="close" 12953 x-ref="closeSubMenuBtn" 12954 > 12955 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 12956 Karma dla kota: PodziaÅ wedÅug firm </button> 12957 </li> 12958 <li> 12959 <a 12960 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm.html" 12961 class="dropdown-list-item font-bold" 12962 > 12963 <span> 12964 Karma dla kota: PodziaÅ wedÅug firm - zobacz wszystko </span> 12965 </a> 12966 </li> 12967 12968 <li data-level="2"> 12969 <a 12970 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-royal-canin.html" 12971 class="dropdown-list-item" 12972 > 12973 <span>Karma dla kota Royal Canin</span> 12974 </a> 12975 </li> 12976 12977 <li data-level="2"> 12978 <a 12979 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-versele-laga.html" 12980 class="dropdown-list-item" 12981 > 12982 <span>Karma dla kota Versele-Laga</span> 12983 </a> 12984 </li> 12985 12986 <li data-level="2"> 12987 <a 12988 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-whiskas.html" 12989 class="dropdown-list-item" 12990 >
12991 <span>Karma dla kota Whiskas</span> 12992 </a> 12993 </li> 12994 12995 <li data-level="2"> 12996 <a 12997 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-josera.html" 12998 class="dropdown-list-item" 12999 > 13000 <span>Karma dla kota Josera</span> 13001 </a> 13002 </li> 13003 13004 <li data-level="2"> 13005 <a 13006 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-brit.html" 13007 class="dropdown-list-item" 13008 > 13009 <span>Karma dla kota Brit</span> 13010 </a> 13011 </li> 13012 13013 <li data-level="2"> 13014 <a 13015 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-eukanuba.html" 13016 class="dropdown-list-item" 13017 > 13018 <span>Karma dla kota Eukanuba</span> 13019 </a> 13020 </li> 13021 13022 <li data-level="2"> 13023 <a 13024 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-fitmin.html" 13025 class="dropdown-list-item" 13026 > 13027 <span>Karma dla kota Fitmin</span> 13028 </a> 13029 </li> 13030 13031 <li data-level="2"> 13032 <a 13033 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-sanabelle.html" 13034 class="dropdown-list-item" 13035 > 13036 <span>Karma dla kota Sanabelle</span> 13037 </a> 13038 </li> 13039 13040 <li data-level="2"> 13041 <a 13042 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-iams.html" 13043 class="dropdown-list-item" 13044 > 13045 <span>Karma dla kota Iams</span> 13046 </a> 13047 </li> 13048 13049 <li data-level="2"> 13050 <a 13051 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-perfect-fit.html" 13052 class="dropdown-list-item" 13053 > 13054 <span>Karma dla kota Perfect Fit</span> 13055 </a> 13056 </li> 13057 13058 <li data-level="2"> 13059 <a 13060 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-carnilove.html" 13061 class="dropdown-list-item" 13062 > 13063 <span>Karma dla kota Carnilove</span> 13064 </a> 13065 </li> 13066 13067 <li data-level="2"> 13068 <a 13069 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-farmina.html" 13070 class="dropdown-list-item" 13071 > 13072 <span>Karma dla kota Farmina</span> 13073 </a> 13074 </li> 13075 13076 <li data-level="2"> 13077 <a 13078 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-hill-s.html" 13079 class="dropdown-list-item" 13080 > 13081 <span>Karma dla kota Hill's</span> 13082 </a> 13083 </li> 13084 13085 <li data-level="2"> 13086 <a 13087 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-kitekat.html" 13088 class="dropdown-list-item" 13089 > 13090 <span>Karma dla kota Kitekat</span> 13091 </a> 13092 </li> 13093 13094 <li data-level="2"> 13095 <a 13096 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-o-canis.html" 13097 class="dropdown-list-item" 13098 > 13099 <span>Karma dla kota O'Canis</span> 13100 </a> 13101 </li> 13102 13103 <li data-level="2"> 13104 <a 13105 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-taste-of-the-wild.html" 13106 class="dropdown-list-item" 13107 > 13108 <span>Karma dla kota Taste Of The Wild</span> 13109 </a> 13110 </li> 13111 13112 <li data-level="2"> 13113 <a 13114 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-nero-gold.html" 13115 class="dropdown-list-item" 13116 > 13117 <span>Karma dla kota Nero Gold</span> 13118 </a> 13119 </li> 13120 13121 <li data-level="2"> 13122 <a 13123 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-sheba.html" 13124 class="dropdown-list-item" 13125 >
13126 <span>Karma dla kota Sheba</span> 13127 </a> 13128 </li> 13129 13130 <li data-level="2"> 13131 <a 13132 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-dolina-noteci.html" 13133 class="dropdown-list-item" 13134 > 13135 <span>Karma dla kota Dolina Noteci</span> 13136 </a> 13137 </li> 13138 13139 <li data-level="2"> 13140 <a 13141 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-schesir.html" 13142 class="dropdown-list-item" 13143 > 13144 <span>Karma dla kota Schesir</span> 13145 </a> 13146 </li> 13147 13148 <li data-level="2"> 13149 <a 13150 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-applaws.html" 13151 class="dropdown-list-item" 13152 > 13153 <span>Karma dla kota Applaws</span> 13154 </a> 13155 </li> 13156 13157 <li data-level="2"> 13158 <a 13159 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-animonda.html" 13160 class="dropdown-list-item" 13161 > 13162 <span>Karma dla kota Animonda</span> 13163 </a> 13164 </li> 13165 13166 <li data-level="2"> 13167 <a 13168 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-butcher-s.html" 13169 class="dropdown-list-item" 13170 > 13171 <span>Karma dla kota Butcher's</span> 13172 </a> 13173 </li> 13174 13175 <li data-level="2"> 13176 <a 13177 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-acana.html" 13178 class="dropdown-list-item" 13179 > 13180 <span>Karma dla kota Acana</span> 13181 </a> 13182 </li> 13183 13184 <li data-level="2"> 13185 <a 13186 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-monge.html" 13187 class="dropdown-list-item" 13188 > 13189 <span>Karma dla kota Monge</span> 13190 </a> 13191 </li> 13192 13193 <li data-level="2"> 13194 <a 13195 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-orijen.html" 13196 class="dropdown-list-item" 13197 > 13198 <span>Karma dla kota Orijen</span> 13199 </a> 13200 </li> 13201 13202 <li data-level="2"> 13203 <a 13204 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-leonardo.html" 13205 class="dropdown-list-item" 13206 > 13207 <span>Karma dla kota Leonardo</span> 13208 </a> 13209 </li> 13210 13211 <li data-level="2"> 13212 <a 13213 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-gussto.html" 13214 class="dropdown-list-item" 13215 > 13216 <span>Karma dla kota Gussto</span> 13217 </a> 13218 </li> 13219 13220 <li data-level="2"> 13221 <a 13222 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-super-benek.html" 13223 class="dropdown-list-item" 13224 > 13225 <span>Karma dla kota Super Benek</span> 13226 </a> 13227 </li> 13228 13229 <li data-level="2"> 13230 <a 13231 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-piper.html" 13232 class="dropdown-list-item" 13233 > 13234 <span>Karma dla kota Piper</span> 13235 </a> 13236 </li> 13237 13238 <li data-level="2"> 13239 <a 13240 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-rafi.html" 13241 class="dropdown-list-item" 13242 > 13243 <span>Karma dla kota Rafi</span> 13244 </a> 13245 </li> 13246 13247 <li data-level="2"> 13248 <a 13249 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-vet-expert.html" 13250 class="dropdown-list-item" 13251 > 13252 <span>Karma dla kota Vet Expert</span> 13253 </a> 13254 </li> 13255 13256 <li data-level="2"> 13257 <a 13258 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-ziwipeak.html" 13259 class="dropdown-list-item" 13260 >
13261 <span>Karma dla kota ZiwiPeak</span> 13262 </a> 13263 </li> 13264 13265 <li data-level="2"> 13266 <a 13267 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-kattovit.html" 13268 class="dropdown-list-item" 13269 > 13270 <span>Karma dla kota Kattovit</span> 13271 </a> 13272 </li> 13273 13274 <li data-level="2"> 13275 <a 13276 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-trovet.html" 13277 class="dropdown-list-item" 13278 > 13279 <span>Karma dla kota Trovet</span> 13280 </a> 13281 </li> 13282 13283 <li data-level="2"> 13284 <a 13285 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-miamor.html" 13286 class="dropdown-list-item" 13287 > 13288 <span>Karma dla kota MIAMOR</span> 13289 </a> 13290 </li> 13291 13292 <li data-level="2"> 13293 <a 13294 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-paka-zwierzaka.html" 13295 class="dropdown-list-item" 13296 > 13297 <span>Karma dla kota Paka Zwierzaka</span> 13298 </a> 13299 </li> 13300 13301 <li data-level="2"> 13302 <a 13303 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-arion.html" 13304 class="dropdown-list-item" 13305 > 13306 <span>Karma dla kota Arion</span> 13307 </a> 13308 </li> 13309 13310 <li data-level="2"> 13311 <a 13312 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-inaba.html" 13313 class="dropdown-list-item" 13314 > 13315 <span>Karma dla kota Inaba</span> 13316 </a> 13317 </li> 13318 13319 <li data-level="2"> 13320 <a 13321 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-comfy-appetit.html" 13322 class="dropdown-list-item" 13323 > 13324 <span>Karma dla kota Comfy Appetit</span> 13325 </a> 13326 </li> 13327 13328 <li data-level="2"> 13329 <a 13330 href="https://fera.pl/kot/karma-dla-kota-podzial-wedlug-firm/karma-dla-kota-james-wellbeloved.html" 13331 class="dropdown-list-item" 13332 > 13333 <span>Karma dla kota James Wellbeloved</span> 13334 </a> 13335 </li> 13336 </ul> 13337 </li> 13338 13339 <li data-level="1" x-data="initMobileSubMenu"> 13340 <button 13341 type="button" 13342 class="dropdown-list-item" 13343 aria-controls="category-node-268-mobile-menu-panel" 13344 aria-expanded="false" 13345 x-ref="openSubMenuBtn" 13346 :aria-expanded="isOpen" 13347 :disabled="isOpen" 13348 @click="open" 13349 > 13350 <span>Przysmaki dla kota</span> 13351 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 13352 </button> 13353 <ul 13354 id="category-node-268-mobile-menu-panel" 13355 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 13356 x-show="isOpen" 13357 x-transition:enter-start="opacity-0 translate-x-8" 13358 x-transition:enter-end="opacity-100 translate-x-0" 13359 x-transition:leave-start="opacity-100 translate-x-0" 13360 x-transition:leave-end="opacity-0 translate-x-8" 13361 @keydown.escape.stop.prevent="close" 13362 > 13363 <li data-level="2"> 13364 <button 13365 type="button" 13366 class="dropdown-list-item font-bold justify-normal" 13367 @click="close" 13368 x-ref="closeSubMenuBtn" 13369 > 13370 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 13371 Przysmaki dla kota </button> 13372 </li> 13373 <li> 13374 <a 13375 href="https://fera.pl/kot/przysmaki-dla-kota.html" 13376 class="dropdown-list-item font-bold" 13377 >
13378 <span> 13379 Przysmaki dla kota - zobacz wszystko </span> 13380 </a> 13381 </li> 13382 13383 <li data-level="2"> 13384 <a 13385 href="https://fera.pl/kot/przysmaki-dla-kota/kremy-zupy-i-pasty-dla-kota.html" 13386 class="dropdown-list-item" 13387 > 13388 <span>Kremy, zupy i pasty dla kota</span> 13389 </a> 13390 </li> 13391 13392 <li data-level="2"> 13393 <a 13394 href="https://fera.pl/kot/przysmaki-dla-kota/ciasteczka-dla-kota.html" 13395 class="dropdown-list-item" 13396 > 13397 <span>Ciasteczka dla kota</span> 13398 </a> 13399 </li> 13400 13401 <li data-level="2"> 13402 <a 13403 href="https://fera.pl/kot/przysmaki-dla-kota/naturalne-przysmaki-dla-kota.html" 13404 class="dropdown-list-item" 13405 > 13406 <span>Naturalne przysmaki dla kota</span> 13407 </a> 13408 </li> 13409 13410 <li data-level="2"> 13411 <a 13412 href="https://fera.pl/kot/przysmaki-dla-kota/przysmaki-liofilizowane-dla-kota.html" 13413 class="dropdown-list-item" 13414 > 13415 <span>Przysmaki liofilizowane dla kota</span> 13416 </a> 13417 </li> 13418 13419 <li data-level="2"> 13420 <a 13421 href="https://fera.pl/kot/przysmaki-dla-kota/funkcjonalne-przysmaki-dla-kota.html" 13422 class="dropdown-list-item" 13423 > 13424 <span>Funkcjonalne przysmaki dla kota</span> 13425 </a> 13426 </li> 13427 </ul> 13428 </li> 13429 13430 <li data-level="1" x-data="initMobileSubMenu"> 13431 <button 13432 type="button" 13433 class="dropdown-list-item" 13434 aria-controls="category-node-278-mobile-menu-panel" 13435 aria-expanded="false" 13436 x-ref="openSubMenuBtn" 13437 :aria-expanded="isOpen" 13438 :disabled="isOpen" 13439 @click="open" 13440 > 13441 <span>Zdrowie kota</span> 13442 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 13443 </button> 13444 <ul 13445 id="category-node-278-mobile-menu-panel" 13446 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 13447 x-show="isOpen" 13448 x-transition:enter-start="opacity-0 translate-x-8" 13449 x-transition:enter-end="opacity-100 translate-x-0" 13450 x-transition:leave-start="opacity-100 translate-x-0" 13451 x-transition:leave-end="opacity-0 translate-x-8" 13452 @keydown.escape.stop.prevent="close" 13453 > 13454 <li data-level="2"> 13455 <button 13456 type="button" 13457 class="dropdown-list-item font-bold justify-normal" 13458 @click="close" 13459 x-ref="closeSubMenuBtn" 13460 > 13461 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 13462 Zdrowie kota </button> 13463 </li> 13464 <li> 13465 <a 13466 href="https://fera.pl/kot/zdrowie-kota.html" 13467 class="dropdown-list-item font-bold" 13468 > 13469 <span> 13470 Zdrowie kota - zobacz wszystko </span> 13471 </a> 13472 </li> 13473 13474 <li data-level="2"> 13475 <a 13476 href="https://fera.pl/kot/zdrowie-kota/czyszczenie-zebow-kota.html" 13477 class="dropdown-list-item" 13478 > 13479 <span>Czyszczenie zÄbów kota</span> 13480 </a> 13481 </li> 13482 13483 <li data-level="2"> 13484 <a 13485 href="https://fera.pl/kot/zdrowie-kota/probiotyki-dla-kota.html" 13486 class="dropdown-list-item" 13487 > 13488 <span>Probiotyki dla kota</span> 13489 </a> 13490 </li> 13491 13492 <li data-level="2"> 13493 <a 13494 href="https://fera.pl/kot/zdrowie-kota/preparaty-do-czyszczenia-uszu-i-oczu-kota.html" 13495 class="dropdown-list-item" 13496 >
13497 <span>Preparaty do czyszczenia uszu i oczu kota</span> 13498 </a> 13499 </li> 13500 13501 <li data-level="2"> 13502 <a 13503 href="https://fera.pl/kot/zdrowie-kota/preparaty-na-stawy-i-kosci-kota.html" 13504 class="dropdown-list-item" 13505 > 13506 <span>Preparaty na stawy i koÅci kota</span> 13507 </a> 13508 </li> 13509 13510 <li data-level="2"> 13511 <a 13512 href="https://fera.pl/kot/zdrowie-kota/preparaty-na-siersc-i-skore-kota.html" 13513 class="dropdown-list-item" 13514 > 13515 <span>Preparaty na sierÅÄ i skórÄ kota</span> 13516 </a> 13517 </li> 13518 13519 <li data-level="2"> 13520 <a 13521 href="https://fera.pl/kot/zdrowie-kota/witaminy-i-suplementy-dla-kota.html" 13522 class="dropdown-list-item" 13523 > 13524 <span>Witaminy i suplementy dla kota</span> 13525 </a> 13526 </li> 13527 13528 <li data-level="2"> 13529 <a 13530 href="https://fera.pl/kot/zdrowie-kota/srodki-uspokajajace-dla-kota.html" 13531 class="dropdown-list-item" 13532 > 13533 <span>Årodki uspokajajÄ ce dla kota</span> 13534 </a> 13535 </li> 13536 13537 <li data-level="2"> 13538 <a 13539 href="https://fera.pl/kot/zdrowie-kota/pasta-odklaczajaca-dla-kota.html" 13540 class="dropdown-list-item" 13541 > 13542 <span>Pasta odkÅaczajÄ ca dla kota</span> 13543 </a> 13544 </li> 13545 13546 <li data-level="2"> 13547 <a 13548 href="https://fera.pl/kot/zdrowie-kota/odrobaczanie-kota.html" 13549 class="dropdown-list-item" 13550 > 13551 <span>Odrobaczanie kota</span> 13552 </a> 13553 </li> 13554 13555 <li data-level="2"> 13556 <a 13557 href="https://fera.pl/kot/zdrowie-kota/akcesoria-weterynaryjne-i-diagnostyka-kota.html" 13558 class="dropdown-list-item" 13559 > 13560 <span>Akcesoria weterynaryjne i diagnostyka kota</span> 13561 </a> 13562 </li> 13563 </ul> 13564 </li> 13565 13566 <li data-level="1" x-data="initMobileSubMenu"> 13567 <button 13568 type="button" 13569 class="dropdown-list-item" 13570 aria-controls="category-node-299-mobile-menu-panel" 13571 aria-expanded="false" 13572 x-ref="openSubMenuBtn" 13573 :aria-expanded="isOpen" 13574 :disabled="isOpen" 13575 @click="open" 13576 > 13577 <span>Å»wirki i kuwety</span> 13578 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 13579 </button> 13580 <ul 13581 id="category-node-299-mobile-menu-panel" 13582 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 13583 x-show="isOpen" 13584 x-transition:enter-start="opacity-0 translate-x-8" 13585 x-transition:enter-end="opacity-100 translate-x-0" 13586 x-transition:leave-start="opacity-100 translate-x-0" 13587 x-transition:leave-end="opacity-0 translate-x-8" 13588 @keydown.escape.stop.prevent="close" 13589 > 13590 <li data-level="2"> 13591 <button 13592 type="button" 13593 class="dropdown-list-item font-bold justify-normal" 13594 @click="close" 13595 x-ref="closeSubMenuBtn" 13596 > 13597 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 13598 Å»wirki i kuwety </button> 13599 </li> 13600 <li> 13601 <a 13602 href="https://fera.pl/kot/zwirki-i-kuwety.html" 13603 class="dropdown-list-item font-bold" 13604 > 13605 <span> 13606 Å»wirki i kuwety - zobacz wszystko </span> 13607 </a> 13608 </li> 13609 13610 <li data-level="2"> 13611 <a 13612 href="https://fera.pl/kot/zwirki-i-kuwety/zwirek-dla-kota.html" 13613 class="dropdown-list-item" 13614 >
13615 <span>Å»wirek dla kota</span> 13616 </a> 13617 </li> 13618 13619 <li data-level="2"> 13620 <a 13621 href="https://fera.pl/kot/zwirki-i-kuwety/kuwety-dla-kota.html" 13622 class="dropdown-list-item" 13623 > 13624 <span>Kuwety dla kota</span> 13625 </a> 13626 </li> 13627 13628 <li data-level="2"> 13629 <a 13630 href="https://fera.pl/kot/zwirki-i-kuwety/lopatki-i-akcesoria-do-kuwety.html" 13631 class="dropdown-list-item" 13632 > 13633 <span>Åopatki i akcesoria do kuwety</span> 13634 </a> 13635 </li> 13636 13637 <li data-level="2"> 13638 <a 13639 href="https://fera.pl/kot/zwirki-i-kuwety/usuwanie-odchodow-kota.html" 13640 class="dropdown-list-item" 13641 > 13642 <span>Usuwanie odchodów kota</span> 13643 </a> 13644 </li> 13645 </ul> 13646 </li> 13647 13648 <li data-level="1" x-data="initMobileSubMenu"> 13649 <button 13650 type="button" 13651 class="dropdown-list-item" 13652 aria-controls="category-node-288-mobile-menu-panel" 13653 aria-expanded="false" 13654 x-ref="openSubMenuBtn" 13655 :aria-expanded="isOpen" 13656 :disabled="isOpen" 13657 @click="open" 13658 > 13659 <span>
13659PchÅy i kleszcze</span> 13660 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 13661 </button> 13662 <ul 13663 id="category-node-288-mobile-menu-panel" 13664 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 13665 x-show="isOpen" 13666 x-transition:enter-start="opacity-0 translate-x-8" 13667 x-transition:enter-end="opacity-100 translate-x-0" 13668 x-transition:leave-start="opacity-100 translate-x-0" 13669 x-transition:leave-end="opacity-0 translate-x-8" 13670 @keydown.escape.stop.prevent="close" 13671 > 13672 <li data-level="2"> 13673 <button 13674 type="button" 13675 class="dropdown-list-item font-bold justify-normal" 13676 @click="close" 13677 x-ref="closeSubMenuBtn" 13678 > 13679 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 13680 PchÅy i kleszcze </button> 13681 </li> 13682 <li> 13683 <a 13684 href="https://fera.pl/kot/pchly-i-kleszcze.html" 13685 class="dropdown-list-item font-bold" 13686 > 13687 <span> 13688 PchÅy i kleszcze - zobacz wszystko </span> 13689 </a> 13690 </li> 13691 13692 <li data-level="2"> 13693 <a 13694 href="https://fera.pl/kot/pchly-i-kleszcze/preparaty-na-pchly-i-kleszcze-u-kota.html" 13695 class="dropdown-list-item" 13696 > 13697 <span>Preparaty na pchÅy i kleszcze u kota</span> 13698 </a> 13699 </li> 13700 13701 <li data-level="2"> 13702 <a 13703 href="https://fera.pl/kot/pchly-i-kleszcze/obroze-przeciw-kleszczom-dla-kota.html" 13704 class="dropdown-list-item" 13705 > 13706 <span>Obroże przeciw kleszczom dla kota</span> 13707 </a> 13708 </li> 13709 13710 <li data-level="2"> 13711 <a 13712 href="https://fera.pl/kot/pchly-i-kleszcze/pesety-na-kleszcze-dla-kota.html" 13713 class="dropdown-list-item" 13714 > 13715 <span>PÄsety na kleszcze dla kota</span> 13716 </a> 13717 </li> 13718 13719 <li data-level="2"> 13720 <a 13721 href="https://fera.pl/kot/pchly-i-kleszcze/grzebienie-na-pchly-dla-kota.html" 13722 class="dropdown-list-item" 13723 > 13724 <span>Grzebienie na pchÅy dla kota</span> 13725 </a> 13726 </li> 13727 </ul> 13728 </li> 13729 13730 <li data-level="1" x-data="initMobileSubMenu"> 13731 <button 13732 type="button" 13733 class="dropdown-list-item" 13734 aria-controls="category-node-272-mobile-menu-panel" 13735 aria-expanded="false" 13736 x-ref="openSubMenuBtn" 13737 :aria-expanded="isOpen" 13738 :disabled="isOpen" 13739 @click="open" 13740 > 13741 <span>Akcesoria do karmienia dla kota</span> 13742 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 13743 </button> 13744 <ul 13745 id="category-node-272-mobile-menu-panel" 13746 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 13747 x-show="isOpen" 13748 x-transition:enter-start="opacity-0 translate-x-8" 13749 x-transition:enter-end="opacity-100 translate-x-0" 13750 x-transition:leave-start="opacity-100 translate-x-0" 13751 x-transition:leave-end="opacity-0 translate-x-8" 13752 @keydown.escape.stop.prevent="close" 13753 > 13754 <li data-level="2"> 13755 <button 13756 type="button" 13757 class="dropdown-list-item font-bold justify-normal" 13758 @click="close" 13759 x-ref="closeSubMenuBtn" 13760 > 13761 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 13762 Akcesoria do karmienia dla kota </button> 13763 </li> 13764 <li> 13765 <a 13766 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota.html" 13767 class="dropdown-list-item font-bold" 13768 >
13769 <span> 13770 Akcesoria do karmienia dla kota - zobacz wszystko </span> 13771 </a> 13772 </li> 13773 13774 <li data-level="2"> 13775 <a 13776 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/podajniki-karmy-dla-kota.html" 13777 class="dropdown-list-item" 13778 > 13779 <span>Podajniki karmy dla kota</span> 13780 </a> 13781 </li> 13782 13783 <li data-level="2"> 13784 <a 13785 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/miski-dla-kota.html" 13786 class="dropdown-list-item" 13787 > 13788 <span>Miski dla kota</span> 13789 </a> 13790 </li> 13791 13792 <li data-level="2"> 13793 <a 13794 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/pojemniki-na-karme-kota.html" 13795 class="dropdown-list-item" 13796 > 13797 <span>Pojemniki na karmÄ kota</span> 13798 </a> 13799 </li> 13800 13801 <li data-level="2"> 13802 <a 13803 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/butelki-dla-kota.html" 13804 class="dropdown-list-item" 13805 > 13806 <span>Butelki dla kota</span> 13807 </a> 13808 </li> 13809 13810 <li data-level="2"> 13811 <a 13812 href="https://fera.pl/kot/akcesoria-do-karmienia-dla-kota/podkladki-pod-miske-dla-kota.html" 13813 class="dropdown-list-item" 13814 > 13815 <span>PodkÅadki pod miskÄ dla kota</span> 13816 </a> 13817 </li> 13818 </ul> 13819 </li> 13820 13821 <li data-level="1" x-data="initMobileSubMenu"> 13822 <button 13823 type="button" 13824 class="dropdown-list-item" 13825 aria-controls="category-node-304-mobile-menu-panel" 13826 aria-expanded="false" 13827 x-ref="openSubMenuBtn" 13828 :aria-expanded="isOpen" 13829 :disabled="isOpen" 13830 @click="open" 13831 > 13832 <span>Grooming i pielÄgnacja kota</span> 13833 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 13834 </button> 13835 <ul 13836 id="category-node-304-mobile-menu-panel" 13837 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 13838 x-show="isOpen" 13839 x-transition:enter-start="opacity-0 translate-x-8" 13840 x-transition:enter-end="opacity-100 translate-x-0" 13841 x-transition:leave-start="opacity-100 translate-x-0" 13842 x-transition:leave-end="opacity-0 translate-x-8" 13843 @keydown.escape.stop.prevent="close" 13844 > 13845 <li data-level="2"> 13846 <button 13847 type="button" 13848 class="dropdown-list-item font-bold justify-normal" 13849 @click="close" 13850 x-ref="closeSubMenuBtn" 13851 > 13852 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 13853 Grooming i pielÄgnacja kota </button> 13854 </li> 13855 <li> 13856 <a 13857 href="https://fera.pl/kot/grooming-i-pielegnacja-kota.html" 13858 class="dropdown-list-item font-bold" 13859 > 13860 <span> 13861 Grooming i pielÄgnacja kota - zobacz wszystko </span> 13862 </a> 13863 </li> 13864 13865 <li data-level="2"> 13866 <a 13867 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/rolki-i-szczotki-na-siersc-kota.html" 13868 class="dropdown-list-item" 13869 > 13870 <span>Rolki i szczotki na sierÅÄ kota</span> 13871 </a> 13872 </li> 13873 13874 <li data-level="2"> 13875 <a 13876 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/preparaty-odstraszajace-koty.html" 13877 class="dropdown-list-item" 13878 >
13879 <span>Preparaty odstraszajÄ ce koty</span> 13880 </a> 13881 </li> 13882 13883 <li data-level="2"> 13884 <a 13885 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/usuwanie-zapachu-moczu-kota.html" 13886 class="dropdown-list-item" 13887 > 13888 <span>Usuwanie zapachu moczu kota</span> 13889 </a> 13890 </li> 13891 13892 <li data-level="2"> 13893 <a 13894 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/szczotki-grzebienie-i-nozyczki-dla-kota.html" 13895 class="dropdown-list-item" 13896 > 13897 <span>Szczotki, grzebienie i nożyczki dla kota</span> 13898 </a> 13899 </li> 13900 13901 <li data-level="2"> 13902 <a 13903 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/kosmetyki-i-szampony-dla-kota.html" 13904 class="dropdown-list-item" 13905 > 13906 <span>Kosmetyki i szampony dla kota</span> 13907 </a> 13908 </li> 13909 13910 <li data-level="2"> 13911 <a 13912 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/obcinaczki-do-pazurow-dla-kota.html" 13913 class="dropdown-list-item" 13914 > 13915 <span>Obcinaczki do pazurów dla kota</span> 13916 </a> 13917 </li> 13918 13919 <li data-level="2"> 13920 <a 13921 href="https://fera.pl/kot/grooming-i-pielegnacja-kota/akcesoria-do-kapieli-kota.html" 13922 class="dropdown-list-item" 13923 > 13924 <span>Akcesoria do kÄ pieli kota</span> 13925 </a> 13926 </li> 13927 </ul> 13928 </li> 13929 13930 <li data-level="1" x-data="initMobileSubMenu"> 13931 <button 13932 type="button" 13933 class="dropdown-list-item" 13934 aria-controls="category-node-318-mobile-menu-panel" 13935 aria-expanded="false" 13936 x-ref="openSubMenuBtn" 13937 :aria-expanded="isOpen" 13938 :disabled="isOpen" 13939 @click="open" 13940 > 13941 <span>Zabawki, drapaki i legowiska</span> 13942 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 13943 </button> 13944 <ul 13945 id="category-node-318-mobile-menu-panel" 13946 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 13947 x-show="isOpen" 13948 x-transition:enter-start="opacity-0 translate-x-8" 13949 x-transition:enter-end="opacity-100 translate-x-0" 13950 x-transition:leave-start="opacity-100 translate-x-0" 13951 x-transition:leave-end="opacity-0 translate-x-8" 13952 @keydown.escape.stop.prevent="close" 13953 > 13954 <li data-level="2"> 13955 <button 13956 type="button" 13957 class="dropdown-list-item font-bold justify-normal" 13958 @click="close" 13959 x-ref="closeSubMenuBtn" 13960 > 13961 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 13962 Zabawki, drapaki i legowiska </button> 13963 </li> 13964 <li> 13965 <a 13966 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska.html" 13967 class="dropdown-list-item font-bold" 13968 > 13969 <span> 13970 Zabawki, drapaki i legowiska - zobacz wszystko </span> 13971 </a> 13972 </li> 13973 13974 <li data-level="2"> 13975 <a 13976 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/koc-dla-kota.html" 13977 class="dropdown-list-item" 13978 > 13979 <span>Koc dla kota</span> 13980 </a> 13981 </li> 13982 13983 <li data-level="2"> 13984 <a 13985 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/legowisko-dla-kota.html" 13986 class="dropdown-list-item" 13987 > 13988 <span>Legowisko dla kota</span> 13989 </a> 13990 </li> 13991 13992 <li data-level="2"> 13993 <a 13994 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/pluszaki-maskotki-dla-kota.html" 13995 class="dropdown-list-item" 13996 >
13997 <span>Pluszaki, maskotki dla kota</span> 13998 </a> 13999 </li> 14000 14001 <li data-level="2"> 14002 <a 14003 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/pilki-dla-kota.html" 14004 class="dropdown-list-item" 14005 > 14006 <span>PiÅki dla kota</span> 14007 </a> 14008 </li> 14009 14010 <li data-level="2"> 14011 <a 14012 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/zabawki-interaktywne-dla-kota.html" 14013 class="dropdown-list-item" 14014 > 14015 <span>Zabawki interaktywne dla kota</span> 14016 </a> 14017 </li> 14018 14019 <li data-level="2"> 14020 <a 14021 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/wedki-dla-kota.html" 14022 class="dropdown-list-item" 14023 > 14024 <span>WÄdki dla kota</span> 14025 </a> 14026 </li> 14027 14028 <li data-level="2"> 14029 <a 14030 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/drapaki-dla-kota.html" 14031 class="dropdown-list-item" 14032 > 14033 <span>Drapaki dla kota</span> 14034 </a> 14035 </li> 14036 14037 <li data-level="2"> 14038 <a 14039 href="https://fera.pl/kot/zabawki-drapaki-i-legowiska/tunele-dla-kota.html" 14040 class="dropdown-list-item" 14041 > 14042 <span>Tunele dla kota</span> 14043 </a> 14044 </li> 14045 </ul> 14046 </li> 14047 14048 <li data-level="1" x-data="initMobileSubMenu"> 14049 <button 14050 type="button" 14051 class="dropdown-list-item" 14052 aria-controls="category-node-325-mobile-menu-panel" 14053 aria-expanded="false" 14054 x-ref="openSubMenuBtn" 14055 :aria-expanded="isOpen" 14056 :disabled="isOpen" 14057 @click="open" 14058 > 14059 <span>Spacer i podróż</span> 14060 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14061 </button> 14062 <ul 14063 id="category-node-325-mobile-menu-panel" 14064 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14065 x-show="isOpen" 14066 x-transition:enter-start="opacity-0 translate-x-8" 14067 x-transition:enter-end="opacity-100 translate-x-0" 14068 x-transition:leave-start="opacity-100 translate-x-0" 14069 x-transition:leave-end="opacity-0 translate-x-8" 14070 @keydown.escape.stop.prevent="close" 14071 > 14072 <li data-level="2"> 14073 <button 14074 type="button" 14075 class="dropdown-list-item font-bold justify-normal" 14076 @click="close" 14077 x-ref="closeSubMenuBtn" 14078 > 14079 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14080 Spacer i podróż </button> 14081 </li> 14082 <li> 14083 <a 14084 href="https://fera.pl/kot/spacer-i-podroz.html" 14085 class="dropdown-list-item font-bold" 14086 > 14087 <span> 14088 Spacer i podróż - zobacz wszystko </span> 14089 </a> 14090 </li> 14091 14092 <li data-level="2"> 14093 <a 14094 href="https://fera.pl/kot/spacer-i-podroz/transporter-dla-kota.html" 14095 class="dropdown-list-item" 14096 > 14097 <span>Transporter dla kota</span> 14098 </a> 14099 </li> 14100 14101 <li data-level="2"> 14102 <a 14103 href="https://fera.pl/kot/spacer-i-podroz/obroze-dla-kota.html" 14104 class="dropdown-list-item" 14105 > 14106 <span>Obroże dla kota</span> 14107 </a> 14108 </li> 14109 14110 <li data-level="2"> 14111 <a 14112 href="https://fera.pl/kot/spacer-i-podroz/szelki-dla-kota.html" 14113 class="dropdown-list-item" 14114 >
14115 <span>Szelki dla kota</span> 14116 </a> 14117 </li> 14118 14119 <li data-level="2"> 14120 <a 14121 href="https://fera.pl/kot/spacer-i-podroz/smycze-dla-kota.html" 14122 class="dropdown-list-item" 14123 > 14124 <span>Smycze dla kota</span> 14125 </a> 14126 </li> 14127 14128 <li data-level="2"> 14129 <a 14130 href="https://fera.pl/kot/spacer-i-podroz/siatki-na-balkon-i-drzwiczki-dla-kota.html" 14131 class="dropdown-list-item" 14132 > 14133 <span>Siatki na balkon i drzwiczki dla kota</span> 14134 </a> 14135 </li> 14136 </ul> 14137 </li> 14138 </ul> 14139 </li> 14140 14141 <li data-level="0" x-data="initMobileSubMenu"> 14142 <button 14143 type="button" 14144 class="dropdown-list-item" 14145 aria-controls="category-node-331-mobile-menu-panel" 14146 aria-expanded="false" 14147 x-ref="openSubMenuBtn" 14148 :aria-expanded="isOpen" 14149 :disabled="isOpen" 14150 @click="open" 14151 > 14152 <span>Ptaki</span> 14153 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14154 </button> 14155 <ul 14156 id="category-node-331-mobile-menu-panel" 14157 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14158 x-show="isOpen" 14159 x-transition:enter-start="opacity-0 translate-x-8" 14160 x-transition:enter-end="opacity-100 translate-x-0" 14161 x-transition:leave-start="opacity-100 translate-x-0" 14162 x-transition:leave-end="opacity-0 translate-x-8" 14163 @keydown.escape.stop.prevent="close" 14164 > 14165 <li data-level="1"> 14166 <button 14167 type="button" 14168 class="dropdown-list-item font-bold justify-normal" 14169 @click="close" 14170 x-ref="closeSubMenuBtn" 14171 > 14172 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14173 Ptaki </button> 14174 </li> 14175 <li> 14176 <a 14177 href="https://fera.pl/ptaki.html" 14178 class="dropdown-list-item font-bold" 14179 > 14180 <span> 14181 Ptaki - zobacz wszystko </span> 14182 </a> 14183 </li> 14184 14185 <li data-level="1" x-data="initMobileSubMenu"> 14186 <button 14187 type="button" 14188 class="dropdown-list-item" 14189 aria-controls="category-node-332-mobile-menu-panel" 14190 aria-expanded="false" 14191 x-ref="openSubMenuBtn" 14192 :aria-expanded="isOpen" 14193 :disabled="isOpen" 14194 @click="open" 14195 > 14196 <span>Karma i przysmaki dla ptaków</span> 14197 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14198 </button> 14199 <ul 14200 id="category-node-332-mobile-menu-panel" 14201 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14202 x-show="isOpen" 14203 x-transition:enter-start="opacity-0 translate-x-8" 14204 x-transition:enter-end="opacity-100 translate-x-0" 14205 x-transition:leave-start="opacity-100 translate-x-0" 14206 x-transition:leave-end="opacity-0 translate-x-8" 14207 @keydown.escape.stop.prevent="close" 14208 > 14209 <li data-level="2"> 14210 <button 14211 type="button" 14212 class="dropdown-list-item font-bold justify-normal" 14213 @click="close" 14214 x-ref="closeSubMenuBtn" 14215 > 14216 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14217 Karma i przysmaki dla ptaków </button> 14218 </li> 14219 <li> 14220 <a 14221 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow.html" 14222 class="dropdown-list-item font-bold" 14223 >
14224 <span> 14225 Karma i przysmaki dla ptaków - zobacz wszystko </span> 14226 </a> 14227 </li> 14228 14229 <li data-level="2"> 14230 <a 14231 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-malych-ptakow.html" 14232 class="dropdown-list-item" 14233 > 14234 <span>Karma dla maÅych ptaków</span> 14235 </a> 14236 </li> 14237 14238 <li data-level="2"> 14239 <a 14240 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-srednich-duzych-ptakow.html" 14241 class="dropdown-list-item" 14242 > 14243 <span>Karma dla Årednich, dużych ptaków</span> 14244 </a> 14245 </li> 14246 14247 <li data-level="2"> 14248 <a 14249 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-kanarkow.html" 14250 class="dropdown-list-item" 14251 > 14252 <span>Karma dla kanarków</span> 14253 </a> 14254 </li> 14255 14256 <li data-level="2"> 14257 <a 14258 href="https://fera.pl/ptaki/karma-i-przysmaki-dla-ptakow/karma-dla-ptakow-egzotycznych.html" 14259 class="dropdown-list-item" 14260 > 14261 <span>Karma dla ptaków egzotycznych</span> 14262 </a> 14263 </li> 14264 </ul> 14265 </li> 14266 14267 <li data-level="1" x-data="initMobileSubMenu"> 14268 <button 14269 type="button" 14270 class="dropdown-list-item" 14271 aria-controls="category-node-337-mobile-menu-panel" 14272 aria-expanded="false" 14273 x-ref="openSubMenuBtn" 14274 :aria-expanded="isOpen" 14275 :disabled="isOpen" 14276 @click="open" 14277 > 14278 <span>Akcesoria do karmienia ptaków</span> 14279 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14280 </button> 14281 <ul 14282 id="category-node-337-mobile-menu-panel" 14283 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14284 x-show="isOpen" 14285 x-transition:enter-start="opacity-0 translate-x-8" 14286 x-transition:enter-end="opacity-100 translate-x-0" 14287 x-transition:leave-start="opacity-100 translate-x-0" 14288 x-transition:leave-end="opacity-0 translate-x-8" 14289 @keydown.escape.stop.prevent="close" 14290 > 14291 <li data-level="2"> 14292 <button 14293 type="button" 14294 class="dropdown-list-item font-bold justify-normal" 14295 @click="close" 14296 x-ref="closeSubMenuBtn" 14297 > 14298 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14299 Akcesoria do karmienia ptaków </button> 14300 </li> 14301 <li> 14302 <a 14303 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow.html" 14304 class="dropdown-list-item font-bold" 14305 > 14306 <span> 14307 Akcesoria do karmienia ptaków - zobacz wszystko </span> 14308 </a> 14309 </li> 14310 14311 <li data-level="2"> 14312 <a 14313 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow/wodopoje-dla-ptakow.html" 14314 class="dropdown-list-item" 14315 > 14316 <span>Wodopoje dla ptaków</span> 14317 </a> 14318 </li> 14319 14320 <li data-level="2"> 14321 <a 14322 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow/karmidla-dla-ptakow.html" 14323 class="dropdown-list-item" 14324 > 14325 <span>KarmidÅa dla ptaków</span> 14326 </a> 14327 </li> 14328 14329 <li data-level="2"> 14330 <a 14331 href="https://fera.pl/ptaki/akcesoria-do-karmienia-ptakow/miski-dla-ptakow.html" 14332 class="dropdown-list-item" 14333 >
14334 <span>Miski dla ptaków</span> 14335 </a> 14336 </li> 14337 </ul> 14338 </li> 14339 14340 <li data-level="1" x-data="initMobileSubMenu"> 14341 <button 14342 type="button" 14343 class="dropdown-list-item" 14344 aria-controls="category-node-341-mobile-menu-panel" 14345 aria-expanded="false" 14346 x-ref="openSubMenuBtn" 14347 :aria-expanded="isOpen" 14348 :disabled="isOpen" 14349 @click="open" 14350 > 14351 <span>Zdrowie i uroda ptaków</span> 14352 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14353 </button> 14354 <ul 14355 id="category-node-341-mobile-menu-panel" 14356 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14357 x-show="isOpen" 14358 x-transition:enter-start="opacity-0 translate-x-8" 14359 x-transition:enter-end="opacity-100 translate-x-0" 14360 x-transition:leave-start="opacity-100 translate-x-0" 14361 x-transition:leave-end="opacity-0 translate-x-8" 14362 @keydown.escape.stop.prevent="close" 14363 > 14364 <li data-level="2"> 14365 <button 14366 type="button" 14367 class="dropdown-list-item font-bold justify-normal" 14368 @click="close" 14369 x-ref="closeSubMenuBtn" 14370 > 14371 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14372 Zdrowie i uroda ptaków </button> 14373 </li> 14374 <li> 14375 <a 14376 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow.html" 14377 class="dropdown-list-item font-bold" 14378 > 14379 <span> 14380 Zdrowie i uroda ptaków - zobacz wszystko </span> 14381 </a> 14382 </li> 14383 14384 <li data-level="2"> 14385 <a 14386 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/witaminy-dla-ptakow.html" 14387 class="dropdown-list-item" 14388 > 14389 <span>Witaminy dla ptaków</span> 14390 </a> 14391 </li> 14392 14393 <li data-level="2"> 14394 <a 14395 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/ochrona-przed-pasozytami-u-ptakow.html" 14396 class="dropdown-list-item" 14397 > 14398 <span>Ochrona przed pasożytami u ptaków</span> 14399 </a> 14400 </li> 14401 14402 <li data-level="2"> 14403 <a 14404 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/pielegnacja-skory-i-pior.html" 14405 class="dropdown-list-item" 14406 > 14407 <span>PielÄgnacja skóry i piór</span> 14408 </a> 14409 </li> 14410 14411 <li data-level="2"> 14412 <a 14413 href="https://fera.pl/ptaki/zdrowie-i-uroda-ptakow/pielegnacja-dzioba-i-pazurow-u-ptakow.html" 14414 class="dropdown-list-item" 14415 > 14416 <span>PielÄgnacja dzioba i pazurów u ptaków</span> 14417 </a> 14418 </li> 14419 </ul> 14420 </li> 14421 14422 <li data-level="1" x-data="initMobileSubMenu"> 14423 <button 14424 type="button" 14425 class="dropdown-list-item" 14426 aria-controls="category-node-346-mobile-menu-panel" 14427 aria-expanded="false" 14428 x-ref="openSubMenuBtn" 14429 :aria-expanded="isOpen" 14430 :disabled="isOpen" 14431 @click="open" 14432 > 14433 <span>Piaski i podÅoża</span> 14434 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14435 </button> 14436 <ul 14437 id="category-node-346-mobile-menu-panel" 14438 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14439 x-show="isOpen" 14440 x-transition:enter-start="opacity-0 translate-x-8" 14441 x-transition:enter-end="opacity-100 translate-x-0" 14442 x-transition:leave-start="opacity-100 translate-x-0" 14443 x-transition:leave-end="opacity-0 translate-x-8" 14444 @keydown.escape.stop.prevent="close" 14445 > 14446 <li data-level="2"> 14447 <button 14448 type="button" 14449 class="dropdown-list-item font-bold justify-normal" 14450 @click="close" 14451 x-ref="closeSubMenuBtn" 14452 > 14453 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14454 Piaski i podÅoża </button> 14455 </li> 14456 <li> 14457 <a 14458 href="https://fera.pl/ptaki/piaski-i-podloza.html" 14459 class="dropdown-list-item font-bold" 14460 >
14461 <span> 14462 Piaski i podÅoża - zobacz wszystko </span> 14463 </a> 14464 </li> 14465 14466 <li data-level="2"> 14467 <a 14468 href="https://fera.pl/ptaki/piaski-i-podloza/podloza-i-piaski-dla-ptakow.html" 14469 class="dropdown-list-item" 14470 > 14471 <span>PodÅoża i piaski dla ptaków</span> 14472 </a> 14473 </li> 14474 14475 <li data-level="2"> 14476 <a 14477 href="https://fera.pl/ptaki/piaski-i-podloza/piaski-dla-ptakow.html" 14478 class="dropdown-list-item" 14479 > 14480 <span>Piaski dla ptaków</span> 14481 </a> 14482 </li> 14483 </ul> 14484 </li> 14485 14486 <li data-level="1" x-data="initMobileSubMenu"> 14487 <button 14488 type="button" 14489 class="dropdown-list-item" 14490 aria-controls="category-node-349-mobile-menu-panel" 14491 aria-expanded="false" 14492 x-ref="openSubMenuBtn" 14493 :aria-expanded="isOpen" 14494 :disabled="isOpen" 14495 @click="open" 14496 > 14497 <span>Klatki i akcesoria dla ptaków</span> 14498 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14499 </button> 14500 <ul 14501 id="category-node-349-mobile-menu-panel" 14502 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14503 x-show="isOpen" 14504 x-transition:enter-start="opacity-0 translate-x-8" 14505 x-transition:enter-end="opacity-100 translate-x-0" 14506 x-transition:leave-start="opacity-100 translate-x-0" 14507 x-transition:leave-end="opacity-0 translate-x-8" 14508 @keydown.escape.stop.prevent="close" 14509 > 14510 <li data-level="2"> 14511 <button 14512 type="button" 14513 class="dropdown-list-item font-bold justify-normal" 14514 @click="close" 14515 x-ref="closeSubMenuBtn" 14516 > 14517 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14518 Klatki i akcesoria dla ptaków </button> 14519 </li> 14520 <li> 14521 <a 14522 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow.html" 14523 class="dropdown-list-item font-bold" 14524 > 14525 <span> 14526 Klatki i akcesoria dla ptaków - zobacz wszystko </span> 14527 </a> 14528 </li> 14529 14530 <li data-level="2"> 14531 <a 14532 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/klatki-dla-ptakow.html" 14533 class="dropdown-list-item" 14534 > 14535 <span>Klatki dla ptaków</span> 14536 </a> 14537 </li> 14538 14539 <li data-level="2"> 14540 <a 14541 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/materialy-na-gniazdo.html" 14542 class="dropdown-list-item" 14543 > 14544 <span>MateriaÅy na gniazdo</span> 14545 </a> 14546 </li> 14547 14548 <li data-level="2"> 14549 <a 14550 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/domki-i-gniazda-dla-ptakow.html" 14551 class="dropdown-list-item" 14552 > 14553 <span>Domki i gniazda dla ptaków</span> 14554 </a> 14555 </li> 14556 14557 <li data-level="2"> 14558 <a 14559 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/hustawki-dla-ptakow.html" 14560 class="dropdown-list-item" 14561 > 14562 <span>HuÅtawki dla ptaków</span> 14563 </a> 14564 </li> 14565 14566 <li data-level="2"> 14567 <a 14568 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/lusterka-dla-ptakow.html" 14569 class="dropdown-list-item" 14570 >
14571 <span>Lusterka dla ptaków</span> 14572 </a> 14573 </li> 14574 14575 <li data-level="2"> 14576 <a 14577 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/drabinki-i-drazki-dla-ptakow.html" 14578 class="dropdown-list-item" 14579 > 14580 <span>Drabinki i drÄ Å¼ki dla ptaków</span> 14581 </a> 14582 </li> 14583 14584 <li data-level="2"> 14585 <a 14586 href="https://fera.pl/ptaki/klatki-i-akcesoria-dla-ptakow/akcesoria-dla-ptakow.html" 14587 class="dropdown-list-item" 14588 > 14589 <span>Akcesoria dla ptaków</span> 14590 </a> 14591 </li> 14592 </ul> 14593 </li> 14594 14595 <li data-level="1" x-data="initMobileSubMenu"> 14596 <button 14597 type="button" 14598 class="dropdown-list-item" 14599 aria-controls="category-node-357-mobile-menu-panel" 14600 aria-expanded="false" 14601 x-ref="openSubMenuBtn" 14602 :aria-expanded="isOpen" 14603 :disabled="isOpen" 14604 @click="open" 14605 > 14606 <span>Zabawki dla ptaków</span> 14607 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14608 </button> 14609 <ul 14610 id="category-node-357-mobile-menu-panel" 14611 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14612 x-show="isOpen" 14613 x-transition:enter-start="opacity-0 translate-x-8" 14614 x-transition:enter-end="opacity-100 translate-x-0" 14615 x-transition:leave-start="opacity-100 translate-x-0" 14616 x-transition:leave-end="opacity-0 translate-x-8" 14617 @keydown.escape.stop.prevent="close" 14618 > 14619 <li data-level="2"> 14620 <button 14621 type="button" 14622 class="dropdown-list-item font-bold justify-normal" 14623 @click="close" 14624 x-ref="closeSubMenuBtn" 14625 > 14626 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14627 Zabawki dla ptaków </button> 14628 </li> 14629 <li> 14630 <a 14631 href="https://fera.pl/ptaki/zabawki-dla-ptakow.html" 14632 class="dropdown-list-item font-bold" 14633 > 14634 <span> 14635 Zabawki dla ptaków - zobacz wszystko </span> 14636 </a> 14637 </li> 14638 14639 <li data-level="2"> 14640 <a 14641 href="https://fera.pl/ptaki/zabawki-dla-ptakow/zabawki-dla-ptakow.html" 14642 class="dropdown-list-item" 14643 > 14644 <span>Zabawki dla ptaków</span> 14645 </a> 14646 </li> 14647 14648 <li data-level="2"> 14649 <a 14650 href="https://fera.pl/ptaki/zabawki-dla-ptakow/place-zabaw-dla-ptakow.html" 14651 class="dropdown-list-item" 14652 > 14653 <span>Place zabaw dla ptaków</span> 14654 </a> 14655 </li> 14656 </ul> 14657 </li> 14658 14659 <li data-level="1" x-data="initMobileSubMenu"> 14660 <button 14661 type="button" 14662 class="dropdown-list-item" 14663 aria-controls="category-node-360-mobile-menu-panel" 14664 aria-expanded="false" 14665 x-ref="openSubMenuBtn" 14666 :aria-expanded="isOpen" 14667 :disabled="isOpen" 14668 @click="open" 14669 > 14670 <span>Dzikie ptaki</span> 14671 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14672 </button> 14673 <ul 14674 id="category-node-360-mobile-menu-panel" 14675 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14676 x-show="isOpen" 14677 x-transition:enter-start="opacity-0 translate-x-8" 14678 x-transition:enter-end="opacity-100 translate-x-0" 14679 x-transition:leave-start="opacity-100 translate-x-0" 14680 x-transition:leave-end="opacity-0 translate-x-8" 14681 @keydown.escape.stop.prevent="close" 14682 > 14683 <li data-level="2"> 14684 <button 14685 type="button" 14686 class="dropdown-list-item font-bold justify-normal" 14687 @click="close" 14688 x-ref="closeSubMenuBtn" 14689 > 14690 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14691 Dzikie ptaki </button> 14692 </li> 14693 <li> 14694 <a 14695 href="https://fera.pl/ptaki/dzikie-ptaki.html" 14696 class="dropdown-list-item font-bold" 14697 >
14698 <span> 14699 Dzikie ptaki - zobacz wszystko </span> 14700 </a> 14701 </li> 14702 14703 <li data-level="2"> 14704 <a 14705 href="https://fera.pl/ptaki/dzikie-ptaki/karma-dla-dzikich-ptakow.html" 14706 class="dropdown-list-item" 14707 > 14708 <span>Karma dla dzikich ptaków</span> 14709 </a> 14710 </li> 14711 14712 <li data-level="2"> 14713 <a 14714 href="https://fera.pl/ptaki/dzikie-ptaki/karmniki-i-domki-dla-ptakow.html" 14715 class="dropdown-list-item" 14716 > 14717 <span>Karmniki i domki dla ptaków</span> 14718 </a> 14719 </li> 14720 </ul> 14721 </li> 14722 </ul> 14723 </li> 14724 14725 <li data-level="0" x-data="initMobileSubMenu"> 14726 <button 14727 type="button" 14728 class="dropdown-list-item" 14729 aria-controls="category-node-363-mobile-menu-panel" 14730 aria-expanded="false" 14731 x-ref="openSubMenuBtn" 14732 :aria-expanded="isOpen" 14733 :disabled="isOpen" 14734 @click="open" 14735 > 14736 <span>Ryby</span> 14737 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14738 </button> 14739 <ul 14740 id="category-node-363-mobile-menu-panel" 14741 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14742 x-show="isOpen" 14743 x-transition:enter-start="opacity-0 translate-x-8" 14744 x-transition:enter-end="opacity-100 translate-x-0" 14745 x-transition:leave-start="opacity-100 translate-x-0" 14746 x-transition:leave-end="opacity-0 translate-x-8" 14747 @keydown.escape.stop.prevent="close" 14748 > 14749 <li data-level="1"> 14750 <button 14751 type="button" 14752 class="dropdown-list-item font-bold justify-normal" 14753 @click="close" 14754 x-ref="closeSubMenuBtn" 14755 > 14756 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14757 Ryby </button> 14758 </li> 14759 <li> 14760 <a 14761 href="https://fera.pl/ryby.html" 14762 class="dropdown-list-item font-bold" 14763 > 14764 <span> 14765 Ryby - zobacz wszystko </span> 14766 </a> 14767 </li> 14768 14769 <li data-level="1" x-data="initMobileSubMenu"> 14770 <button 14771 type="button" 14772 class="dropdown-list-item" 14773 aria-controls="category-node-364-mobile-menu-panel" 14774 aria-expanded="false" 14775 x-ref="openSubMenuBtn" 14776 :aria-expanded="isOpen" 14777 :disabled="isOpen" 14778 @click="open" 14779 > 14780 <span>Akwaria i akcesoria</span> 14781 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14782 </button> 14783 <ul 14784 id="category-node-364-mobile-menu-panel" 14785 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14786 x-show="isOpen" 14787 x-transition:enter-start="opacity-0 translate-x-8" 14788 x-transition:enter-end="opacity-100 translate-x-0" 14789 x-transition:leave-start="opacity-100 translate-x-0" 14790 x-transition:leave-end="opacity-0 translate-x-8" 14791 @keydown.escape.stop.prevent="close" 14792 > 14793 <li data-level="2"> 14794 <button 14795 type="button" 14796 class="dropdown-list-item font-bold justify-normal" 14797 @click="close" 14798 x-ref="closeSubMenuBtn" 14799 > 14800 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14801 Akwaria i akcesoria </button> 14802 </li> 14803 <li> 14804 <a 14805 href="https://fera.pl/ryby/akwaria-i-akcesoria.html" 14806 class="dropdown-list-item font-bold" 14807 >
14808 <span> 14809 Akwaria i akcesoria - zobacz wszystko </span> 14810 </a> 14811 </li> 14812 14813 <li data-level="2"> 14814 <a 14815 href="https://fera.pl/ryby/akwaria-i-akcesoria/akwaria.html" 14816 class="dropdown-list-item" 14817 > 14818 <span>Akwaria</span> 14819 </a> 14820 </li> 14821 14822 <li data-level="2"> 14823 <a 14824 href="https://fera.pl/ryby/akwaria-i-akcesoria/akcesoria-do-akwarium.html" 14825 class="dropdown-list-item" 14826 > 14827 <span>Akcesoria do akwarium</span> 14828 </a> 14829 </li> 14830 14831 <li data-level="2"> 14832 <a 14833 href="https://fera.pl/ryby/akwaria-i-akcesoria/szafki-pod-akwarium.html" 14834 class="dropdown-list-item" 14835 > 14836 <span>Szafki pod akwarium</span> 14837 </a> 14838 </li> 14839 14840 <li data-level="2"> 14841 <a 14842 href="https://fera.pl/ryby/akwaria-i-akcesoria/kotniki.html" 14843 class="dropdown-list-item" 14844 > 14845 <span>Kotniki</span> 14846 </a> 14847 </li> 14848 14849 <li data-level="2"> 14850 <a 14851 href="https://fera.pl/ryby/akwaria-i-akcesoria/automaty-do-karmienia-ryb.html" 14852 class="dropdown-list-item" 14853 > 14854 <span>Automaty do karmienia ryb</span> 14855 </a> 14856 </li> 14857 14858 <li data-level="2"> 14859 <a 14860 href="https://fera.pl/ryby/akwaria-i-akcesoria/siatki-na-ryby.html" 14861 class="dropdown-list-item" 14862 > 14863 <span>Siatki na ryby</span> 14864 </a> 14865 </li> 14866 </ul> 14867 </li> 14868 14869 <li data-level="1" x-data="initMobileSubMenu"> 14870 <button 14871 type="button" 14872 class="dropdown-list-item" 14873 aria-controls="category-node-372-mobile-menu-panel" 14874 aria-expanded="false" 14875 x-ref="openSubMenuBtn" 14876 :aria-expanded="isOpen" 14877 :disabled="isOpen" 14878 @click="open" 14879 > 14880 <span>Pokarm dla ryb</span> 14881 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 14882 </button> 14883 <ul 14884 id="category-node-372-mobile-menu-panel" 14885 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 14886 x-show="isOpen" 14887 x-transition:enter-start="opacity-0 translate-x-8" 14888 x-transition:enter-end="opacity-100 translate-x-0" 14889 x-transition:leave-start="opacity-100 translate-x-0" 14890 x-transition:leave-end="opacity-0 translate-x-8" 14891 @keydown.escape.stop.prevent="close" 14892 > 14893 <li data-level="2"> 14894 <button 14895 type="button" 14896 class="dropdown-list-item font-bold justify-normal" 14897 @click="close" 14898 x-ref="closeSubMenuBtn" 14899 > 14900 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 14901 Pokarm dla ryb </button> 14902 </li> 14903 <li> 14904 <a 14905 href="https://fera.pl/ryby/pokarm-dla-ryb.html" 14906 class="dropdown-list-item font-bold" 14907 > 14908 <span> 14909 Pokarm dla ryb - zobacz wszystko </span> 14910 </a> 14911 </li> 14912 14913 <li data-level="2"> 14914 <a 14915 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-bojownikow.html" 14916 class="dropdown-list-item" 14917 > 14918 <span>Pokarm dla bojowników</span> 14919 </a> 14920 </li> 14921 14922 <li data-level="2"> 14923 <a 14924 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-pielegnic.html" 14925 class="dropdown-list-item" 14926 >
14927 <span>Pokarm dla pielÄgnic</span> 14928 </a> 14929 </li> 14930 14931 <li data-level="2"> 14932 <a 14933 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-gupikow.html" 14934 class="dropdown-list-item" 14935 > 14936 <span>Pokarm dla gupików</span> 14937 </a> 14938 </li> 14939 14940 <li data-level="2"> 14941 <a 14942 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-paletek.html" 14943 class="dropdown-list-item" 14944 > 14945 <span>Pokarm dla paletek</span> 14946 </a> 14947 </li> 14948 14949 <li data-level="2"> 14950 <a 14951 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-glonojadow.html" 14952 class="dropdown-list-item" 14953 > 14954 <span>Pokarm dla glonojadów</span> 14955 </a> 14956 </li> 14957 14958 <li data-level="2"> 14959 <a 14960 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-ryb-dennych.html" 14961 class="dropdown-list-item" 14962 > 14963 <span>Pokarm dla ryb dennych</span> 14964 </a> 14965 </li> 14966 14967 <li data-level="2"> 14968 <a 14969 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-karpi-koi.html" 14970 class="dropdown-list-item" 14971 > 14972 <span>Pokarm dla karpi koi</span> 14973 </a> 14974 </li> 14975 14976 <li data-level="2"> 14977 <a 14978 href="https://fera.pl/ryby/pokarm-dla-ryb/pokarm-dla-ryb-ozdobnych.html" 14979 class="dropdown-list-item" 14980 > 14981 <span>Pokarm dla ryb ozdobnych</span> 14982 </a> 14983 </li> 14984 </ul> 14985 </li> 14986 14987 <li data-level="1" x-data="initMobileSubMenu"> 14988 <button 14989 type="button" 14990 class="dropdown-list-item" 14991 aria-controls="category-node-371-mobile-menu-panel" 14992 aria-expanded="false" 14993 x-ref="openSubMenuBtn" 14994 :aria-expanded="isOpen" 14995 :disabled="isOpen" 14996 @click="open" 14997 > 14998 <span>Pokarm i utrzymanie</span> 14999 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15000 </button> 15001 <ul 15002 id="category-node-371-mobile-menu-panel" 15003 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15004 x-show="isOpen" 15005 x-transition:enter-start="opacity-0 translate-x-8" 15006 x-transition:enter-end="opacity-100 translate-x-0" 15007 x-transition:leave-start="opacity-100 translate-x-0" 15008 x-transition:leave-end="opacity-0 translate-x-8" 15009 @keydown.escape.stop.prevent="close" 15010 > 15011 <li data-level="2"> 15012 <button 15013 type="button" 15014 class="dropdown-list-item font-bold justify-normal" 15015 @click="close" 15016 x-ref="closeSubMenuBtn" 15017 > 15018 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15019 Pokarm i utrzymanie </button> 15020 </li> 15021 <li> 15022 <a 15023 href="https://fera.pl/ryby/pokarm-i-utrzymanie.html" 15024 class="dropdown-list-item font-bold" 15025 > 15026 <span> 15027 Pokarm i utrzymanie - zobacz wszystko </span> 15028 </a> 15029 </li> 15030 15031 <li data-level="2"> 15032 <a 15033 href="https://fera.pl/ryby/pokarm-i-utrzymanie/uzdatniacze-do-wody.html" 15034 class="dropdown-list-item" 15035 > 15036 <span>Uzdatniacze do wody</span> 15037 </a> 15038 </li> 15039 15040 <li data-level="2"> 15041 <a 15042 href="https://fera.pl/ryby/pokarm-i-utrzymanie/testery-do-wody-w-akwarium.html" 15043 class="dropdown-list-item" 15044 >
15045 <span>Testery do wody w akwarium</span> 15046 </a> 15047 </li> 15048 15049 <li data-level="2"> 15050 <a 15051 href="https://fera.pl/ryby/pokarm-i-utrzymanie/ochrona-roslin-w-akwarium.html" 15052 class="dropdown-list-item" 15053 > 15054 <span>Ochrona roÅlin w akwarium</span> 15055 </a> 15056 </li> 15057 15058 <li data-level="2"> 15059 <a 15060 href="https://fera.pl/ryby/pokarm-i-utrzymanie/czyszczenie-akwarium.html" 15061 class="dropdown-list-item" 15062 > 15063 <span>Czyszczenie akwarium</span> 15064 </a> 15065 </li> 15066 15067 <li data-level="2"> 15068 <a 15069 href="https://fera.pl/ryby/pokarm-i-utrzymanie/akwaria-morskie.html" 15070 class="dropdown-list-item" 15071 > 15072 <span>Akwaria morskie</span> 15073 </a> 15074 </li> 15075 15076 <li data-level="2"> 15077 <a 15078 href="https://fera.pl/ryby/pokarm-i-utrzymanie/srodki-lecznicze-do-akwarium.html" 15079 class="dropdown-list-item" 15080 > 15081 <span>Årodki lecznicze do akwarium</span> 15082 </a> 15083 </li> 15084 15085 <li data-level="2"> 15086 <a 15087 href="https://fera.pl/ryby/pokarm-i-utrzymanie/preparaty-antyglonowe-do-akwarium.html" 15088 class="dropdown-list-item" 15089 > 15090 <span>Preparaty antyglonowe do akwarium</span> 15091 </a> 15092 </li> 15093 15094 <li data-level="2"> 15095 <a 15096 href="https://fera.pl/ryby/pokarm-i-utrzymanie/technika-co2.html" 15097 class="dropdown-list-item" 15098 > 15099 <span>Technika Co2</span> 15100 </a> 15101 </li> 15102 </ul> 15103 </li> 15104 15105 <li data-level="1" x-data="initMobileSubMenu"> 15106 <button 15107 type="button" 15108 class="dropdown-list-item" 15109 aria-controls="category-node-389-mobile-menu-panel" 15110 aria-expanded="false" 15111 x-ref="openSubMenuBtn" 15112 :aria-expanded="isOpen" 15113 :disabled="isOpen" 15114 @click="open" 15115 > 15116 <span>Filtry i napowietrzacze</span> 15117 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15118 </button> 15119 <ul 15120 id="category-node-389-mobile-menu-panel" 15121 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15122 x-show="isOpen" 15123 x-transition:enter-start="opacity-0 translate-x-8" 15124 x-transition:enter-end="opacity-100 translate-x-0" 15125 x-transition:leave-start="opacity-100 translate-x-0" 15126 x-transition:leave-end="opacity-0 translate-x-8" 15127 @keydown.escape.stop.prevent="close" 15128 > 15129 <li data-level="2"> 15130 <button 15131 type="button" 15132 class="dropdown-list-item font-bold justify-normal" 15133 @click="close" 15134 x-ref="closeSubMenuBtn" 15135 > 15136 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15137 Filtry i napowietrzacze </button> 15138 </li> 15139 <li> 15140 <a 15141 href="https://fera.pl/ryby/filtry-i-napowietrzacze.html" 15142 class="dropdown-list-item font-bold" 15143 > 15144 <span> 15145 Filtry i napowietrzacze - zobacz wszystko </span> 15146 </a> 15147 </li> 15148 15149 <li data-level="2"> 15150 <a 15151 href="https://fera.pl/ryby/filtry-i-napowietrzacze/filtry-do-akwarium.html" 15152 class="dropdown-list-item" 15153 > 15154 <span>Filtry do akwarium</span> 15155 </a> 15156 </li> 15157 15158 <li data-level="2"> 15159 <a 15160 href="https://fera.pl/ryby/filtry-i-napowietrzacze/wklady-do-filtrow.html" 15161 class="dropdown-list-item" 15162 >
15163 <span>WkÅady do filtrów</span> 15164 </a> 15165 </li> 15166 15167 <li data-level="2"> 15168 <a 15169 href="https://fera.pl/ryby/filtry-i-napowietrzacze/pompki-do-akwarium.html" 15170 class="dropdown-list-item" 15171 > 15172 <span>Pompki do akwarium</span> 15173 </a> 15174 </li> 15175 15176 <li data-level="2"> 15177 <a 15178 href="https://fera.pl/ryby/filtry-i-napowietrzacze/czesci-i-akcesoria-do-filtrow.html" 15179 class="dropdown-list-item" 15180 > 15181 <span>CzÄÅci i akcesoria do filtrów</span> 15182 </a> 15183 </li> 15184 </ul> 15185 </li> 15186 15187 <li data-level="1" x-data="initMobileSubMenu"> 15188 <button 15189 type="button" 15190 class="dropdown-list-item" 15191 aria-controls="category-node-394-mobile-menu-panel" 15192 aria-expanded="false" 15193 x-ref="openSubMenuBtn" 15194 :aria-expanded="isOpen" 15195 :disabled="isOpen" 15196 @click="open" 15197 > 15198 <span>OÅwietlenie i ogrzewanie</span> 15199 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15200 </button> 15201 <ul 15202 id="category-node-394-mobile-menu-panel" 15203 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15204 x-show="isOpen" 15205 x-transition:enter-start="opacity-0 translate-x-8" 15206 x-transition:enter-end="opacity-100 translate-x-0" 15207 x-transition:leave-start="opacity-100 translate-x-0" 15208 x-transition:leave-end="opacity-0 translate-x-8" 15209 @keydown.escape.stop.prevent="close" 15210 > 15211 <li data-level="2"> 15212 <button 15213 type="button" 15214 class="dropdown-list-item font-bold justify-normal" 15215 @click="close" 15216 x-ref="closeSubMenuBtn" 15217 > 15218 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15219 OÅwietlenie i ogrzewanie </button> 15220 </li> 15221 <li> 15222 <a 15223 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie.html" 15224 class="dropdown-list-item font-bold" 15225 > 15226 <span> 15227 OÅwietlenie i ogrzewanie - zobacz wszystko </span> 15228 </a> 15229 </li> 15230 15231 <li data-level="2"> 15232 <a 15233 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/termometry-do-akwarium.html" 15234 class="dropdown-list-item" 15235 > 15236 <span>Termometry do akwarium</span> 15237 </a> 15238 </li> 15239 15240 <li data-level="2"> 15241 <a 15242 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/oswietlenie-akwarium.html" 15243 class="dropdown-list-item" 15244 > 15245 <span>OÅwietlenie akwarium</span> 15246 </a> 15247 </li> 15248 15249 <li data-level="2"> 15250 <a 15251 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/grzalki-do-akwarium.html" 15252 class="dropdown-list-item" 15253 > 15254 <span>GrzaÅki do akwarium</span> 15255 </a> 15256 </li> 15257 15258 <li data-level="2"> 15259 <a 15260 href="https://fera.pl/ryby/oswietlenie-i-ogrzewanie/sterylizatory-uv-do-akwarium.html" 15261 class="dropdown-list-item" 15262 > 15263 <span>Sterylizatory UV do akwarium</span> 15264 </a> 15265 </li> 15266 </ul> 15267 </li> 15268 15269 <li data-level="1" x-data="initMobileSubMenu"> 15270 <button 15271 type="button" 15272 class="dropdown-list-item" 15273 aria-controls="category-node-399-mobile-menu-panel" 15274 aria-expanded="false" 15275 x-ref="openSubMenuBtn" 15276 :aria-expanded="isOpen" 15277 :disabled="isOpen" 15278 @click="open" 15279 >
15280 <span>Dekoracje do akwarium</span> 15281 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15282 </button> 15283 <ul 15284 id="category-node-399-mobile-menu-panel" 15285 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15286 x-show="isOpen" 15287 x-transition:enter-start="opacity-0 translate-x-8" 15288 x-transition:enter-end="opacity-100 translate-x-0" 15289 x-transition:leave-start="opacity-100 translate-x-0" 15290 x-transition:leave-end="opacity-0 translate-x-8" 15291 @keydown.escape.stop.prevent="close" 15292 > 15293 <li data-level="2"> 15294 <button 15295 type="button" 15296 class="dropdown-list-item font-bold justify-normal" 15297 @click="close" 15298 x-ref="closeSubMenuBtn" 15299 > 15300 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15301 Dekoracje do akwarium </button> 15302 </li> 15303 <li> 15304 <a 15305 href="https://fera.pl/ryby/dekoracje-do-akwarium.html" 15306 class="dropdown-list-item font-bold" 15307 > 15308 <span> 15309 Dekoracje do akwarium - zobacz wszystko </span> 15310 </a> 15311 </li> 15312 15313 <li data-level="2"> 15314 <a 15315 href="https://fera.pl/ryby/dekoracje-do-akwarium/rosliny-do-akwarium.html" 15316 class="dropdown-list-item" 15317 > 15318 <span>RoÅliny do akwarium</span> 15319 </a> 15320 </li> 15321 15322 <li data-level="2"> 15323 <a 15324 href="https://fera.pl/ryby/dekoracje-do-akwarium/podloza-dla-ryb.html" 15325 class="dropdown-list-item" 15326 > 15327 <span>PodÅoża dla ryb</span> 15328 </a> 15329 </li> 15330 15331 <li data-level="2"> 15332 <a 15333 href="https://fera.pl/ryby/dekoracje-do-akwarium/ozdoby-do-akwarium.html" 15334 class="dropdown-list-item" 15335 > 15336 <span>Ozdoby do akwarium</span> 15337 </a> 15338 </li> 15339 15340 <li data-level="2"> 15341 <a 15342 href="https://fera.pl/ryby/dekoracje-do-akwarium/korzenie-do-akwarium.html" 15343 class="dropdown-list-item" 15344 > 15345 <span>Korzenie do akwarium</span> 15346 </a> 15347 </li> 15348 15349 <li data-level="2"> 15350 <a 15351 href="https://fera.pl/ryby/dekoracje-do-akwarium/tlo-do-akwarium.html" 15352 class="dropdown-list-item" 15353 > 15354 <span>TÅo do akwarium</span> 15355 </a> 15356 </li> 15357 15358 <li data-level="2"> 15359 <a 15360 href="https://fera.pl/ryby/dekoracje-do-akwarium/kamienie-ozdobne-do-akwarium.html" 15361 class="dropdown-list-item" 15362 > 15363 <span>Kamienie ozdobne do akwarium</span> 15364 </a> 15365 </li> 15366 </ul> 15367 </li> 15368 15369 <li data-level="1" x-data="initMobileSubMenu"> 15370 <button 15371 type="button" 15372 class="dropdown-list-item" 15373 aria-controls="category-node-406-mobile-menu-panel" 15374 aria-expanded="false" 15375 x-ref="openSubMenuBtn" 15376 :aria-expanded="isOpen" 15377 :disabled="isOpen" 15378 @click="open" 15379 > 15380 <span>Oczko wodne</span> 15381 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15382 </button> 15383 <ul 15384 id="category-node-406-mobile-menu-panel" 15385 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15386 x-show="isOpen" 15387 x-transition:enter-start="opacity-0 translate-x-8" 15388 x-transition:enter-end="opacity-100 translate-x-0" 15389 x-transition:leave-start="opacity-100 translate-x-0" 15390 x-transition:leave-end="opacity-0 translate-x-8" 15391 @keydown.escape.stop.prevent="close" 15392 > 15393 <li data-level="2"> 15394 <button 15395 type="button" 15396 class="dropdown-list-item font-bold justify-normal" 15397 @click="close" 15398 x-ref="closeSubMenuBtn" 15399 > 15400 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15401 Oczko wodne </button> 15402 </li> 15403 <li> 15404 <a 15405 href="https://fera.pl/ryby/oczko-wodne.html" 15406 class="dropdown-list-item font-bold" 15407 >
15408 <span> 15409 Oczko wodne - zobacz wszystko </span> 15410 </a> 15411 </li> 15412 15413 <li data-level="2"> 15414 <a 15415 href="https://fera.pl/ryby/oczko-wodne/testery-do-wody-w-oczku-wodnym.html" 15416 class="dropdown-list-item" 15417 > 15418 <span>Testery do wody w oczku wodnym</span> 15419 </a> 15420 </li> 15421 15422 <li data-level="2"> 15423 <a 15424 href="https://fera.pl/ryby/oczko-wodne/preparaty-antyglonowe-do-oczka-wodnego.html" 15425 class="dropdown-list-item" 15426 > 15427 <span>Preparaty antyglonowe do oczka wodnego</span> 15428 </a> 15429 </li> 15430 15431 <li data-level="2"> 15432 <a 15433 href="https://fera.pl/ryby/oczko-wodne/czyszczenie-oczka-wodnego.html" 15434 class="dropdown-list-item" 15435 > 15436 <span>Czyszczenie oczka wodnego</span> 15437 </a> 15438 </li> 15439 15440 <li data-level="2"> 15441 <a 15442 href="https://fera.pl/ryby/oczko-wodne/pokarm-dla-ryb-w-oczku-wodnym.html" 15443 class="dropdown-list-item" 15444 > 15445 <span>Pokarm dla ryb w oczku wodnym</span> 15446 </a> 15447 </li> 15448 15449 <li data-level="2"> 15450 <a 15451 href="https://fera.pl/ryby/oczko-wodne/akcesoria-do-oczka-wodnego.html" 15452 class="dropdown-list-item" 15453 > 15454 <span>Akcesoria do oczka wodnego</span> 15455 </a> 15456 </li> 15457 15458 <li data-level="2"> 15459 <a 15460 href="https://fera.pl/ryby/oczko-wodne/filtry-i-fontanny-do-oczka-wodnego.html" 15461 class="dropdown-list-item" 15462 > 15463 <span>Filtry i fontanny do oczka wodnego</span> 15464 </a> 15465 </li> 15466 15467 <li data-level="2"> 15468 <a 15469 href="https://fera.pl/ryby/oczko-wodne/fontanny.html" 15470 class="dropdown-list-item" 15471 > 15472 <span>Fontanny</span> 15473 </a> 15474 </li> 15475 15476 <li data-level="2"> 15477 <a 15478 href="https://fera.pl/ryby/oczko-wodne/oswietlenie-oczka-wodnego.html" 15479 class="dropdown-list-item" 15480 > 15481 <span>OÅwietlenie oczka wodnego</span> 15482 </a> 15483 </li> 15484 </ul> 15485 </li> 15486 </ul> 15487 </li> 15488 15489 <li data-level="0" x-data="initMobileSubMenu"> 15490 <button 15491 type="button" 15492 class="dropdown-list-item" 15493 aria-controls="category-node-415-mobile-menu-panel" 15494 aria-expanded="false" 15495 x-ref="openSubMenuBtn" 15496 :aria-expanded="isOpen" 15497 :disabled="isOpen" 15498 @click="open" 15499 > 15500 <span>MaÅe ssaki</span> 15501 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15502 </button> 15503 <ul 15504 id="category-node-415-mobile-menu-panel" 15505 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15506 x-show="isOpen" 15507 x-transition:enter-start="opacity-0 translate-x-8" 15508 x-transition:enter-end="opacity-100 translate-x-0" 15509 x-transition:leave-start="opacity-100 translate-x-0" 15510 x-transition:leave-end="opacity-0 translate-x-8" 15511 @keydown.escape.stop.prevent="close" 15512 > 15513 <li data-level="1"> 15514 <button 15515 type="button" 15516 class="dropdown-list-item font-bold justify-normal" 15517 @click="close" 15518 x-ref="closeSubMenuBtn" 15519 > 15520 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15521 MaÅe ssaki </button> 15522 </li> 15523 <li> 15524 <a 15525 href="https://fera.pl/male-ssaki.html" 15526 class="dropdown-list-item font-bold" 15527 >
15528 <span> 15529 MaÅe ssaki - zobacz wszystko </span> 15530 </a> 15531 </li> 15532 15533 <li data-level="1" x-data="initMobileSubMenu"> 15534 <button 15535 type="button" 15536 class="dropdown-list-item" 15537 aria-controls="category-node-416-mobile-menu-panel" 15538 aria-expanded="false" 15539 x-ref="openSubMenuBtn" 15540 :aria-expanded="isOpen" 15541 :disabled="isOpen" 15542 @click="open" 15543 > 15544 <span>Karma i przysmaki</span> 15545 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15546 </button> 15547 <ul 15548 id="category-node-416-mobile-menu-panel" 15549 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15550 x-show="isOpen" 15551 x-transition:enter-start="opacity-0 translate-x-8" 15552 x-transition:enter-end="opacity-100 translate-x-0" 15553 x-transition:leave-start="opacity-100 translate-x-0" 15554 x-transition:leave-end="opacity-0 translate-x-8" 15555 @keydown.escape.stop.prevent="close" 15556 > 15557 <li data-level="2"> 15558 <button 15559 type="button" 15560 class="dropdown-list-item font-bold justify-normal" 15561 @click="close" 15562 x-ref="closeSubMenuBtn" 15563 > 15564 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15565 Karma i przysmaki </button> 15566 </li> 15567 <li> 15568 <a 15569 href="https://fera.pl/male-ssaki/karma-i-przysmaki.html" 15570 class="dropdown-list-item font-bold" 15571 > 15572 <span> 15573 Karma i przysmaki - zobacz wszystko </span> 15574 </a> 15575 </li> 15576 15577 <li data-level="2"> 15578 <a 15579 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-chomika.html" 15580 class="dropdown-list-item" 15581 > 15582 <span>Karma dla chomika</span> 15583 </a> 15584 </li> 15585 15586 <li data-level="2"> 15587 <a 15588 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-fretki.html" 15589 class="dropdown-list-item" 15590 > 15591 <span>Karma dla fretki</span> 15592 </a> 15593 </li> 15594 15595 <li data-level="2"> 15596 <a 15597 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-koszatniczki.html" 15598 class="dropdown-list-item" 15599 > 15600 <span>Karma dla koszatniczki</span> 15601 </a> 15602 </li> 15603 15604 <li data-level="2"> 15605 <a 15606 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-krolika.html" 15607 class="dropdown-list-item" 15608 > 15609 <span>Karma dla królika</span> 15610 </a> 15611 </li> 15612 15613 <li data-level="2"> 15614 <a 15615 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-myszy-i-myszoskoczka.html" 15616 class="dropdown-list-item" 15617 > 15618 <span>Karma dla myszy i myszoskoczka</span> 15619 </a> 15620 </li> 15621 15622 <li data-level="2"> 15623 <a 15624 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-szczura.html" 15625 class="dropdown-list-item" 15626 > 15627 <span>Karma dla szczura</span> 15628 </a> 15629 </li> 15630 15631 <li data-level="2"> 15632 <a 15633 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-szynszyli.html" 15634 class="dropdown-list-item" 15635 > 15636 <span>Karma dla szynszyli</span> 15637 </a> 15638 </li> 15639 15640 <li data-level="2"> 15641 <a 15642 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-swinki-morskiej.html" 15643 class="dropdown-list-item" 15644 >
15645 <span>Karma dla Åwinki morskiej</span> 15646 </a> 15647 </li> 15648 15649 <li data-level="2"> 15650 <a 15651 href="https://fera.pl/male-ssaki/karma-i-przysmaki/karma-dla-jeza-i-wiewiorki.html" 15652 class="dropdown-list-item" 15653 > 15654 <span>Karma dla jeża i wiewiórki</span> 15655 </a> 15656 </li> 15657 </ul> 15658 </li> 15659 15660 <li data-level="1" x-data="initMobileSubMenu"> 15661 <button 15662 type="button" 15663 class="dropdown-list-item" 15664 aria-controls="category-node-426-mobile-menu-panel" 15665 aria-expanded="false" 15666 x-ref="openSubMenuBtn" 15667 :aria-expanded="isOpen" 15668 :disabled="isOpen" 15669 @click="open" 15670 > 15671 <span>Akcesoria do karmienia maÅych ssaków</span> 15672 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15673 </button> 15674 <ul 15675 id="category-node-426-mobile-menu-panel" 15676 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15677 x-show="isOpen" 15678 x-transition:enter-start="opacity-0 translate-x-8" 15679 x-transition:enter-end="opacity-100 translate-x-0" 15680 x-transition:leave-start="opacity-100 translate-x-0" 15681 x-transition:leave-end="opacity-0 translate-x-8" 15682 @keydown.escape.stop.prevent="close" 15683 > 15684 <li data-level="2"> 15685 <button 15686 type="button" 15687 class="dropdown-list-item font-bold justify-normal" 15688 @click="close" 15689 x-ref="closeSubMenuBtn" 15690 > 15691 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15692 Akcesoria do karmienia maÅych ssaków </button> 15693 </li> 15694 <li> 15695 <a 15696 href="https://fera.pl/male-ssaki/akcesoria-do-karmienia-malych-ssakow.html" 15697 class="dropdown-list-item font-bold" 15698 > 15699 <span> 15700 Akcesoria do karmienia maÅych ssaków - zobacz wszystko </span> 15701 </a> 15702 </li> 15703 15704 <li data-level="2"> 15705 <a 15706 href="https://fera.pl/male-ssaki/akcesoria-do-karmienia-malych-ssakow/miski.html" 15707 class="dropdown-list-item" 15708 > 15709 <span>Miski</span> 15710 </a> 15711 </li> 15712 15713 <li data-level="2"> 15714 <a 15715 href="https://fera.pl/male-ssaki/akcesoria-do-karmienia-malych-ssakow/poidelka.html" 15716 class="dropdown-list-item" 15717 > 15718 <span>PoideÅka</span> 15719 </a> 15720 </li> 15721 </ul> 15722 </li> 15723 15724 <li data-level="1" x-data="initMobileSubMenu"> 15725 <button 15726 type="button" 15727 class="dropdown-list-item" 15728 aria-controls="category-node-430-mobile-menu-panel" 15729 aria-expanded="false" 15730 x-ref="openSubMenuBtn" 15731 :aria-expanded="isOpen" 15732 :disabled="isOpen" 15733 @click="open" 15734 > 15735 <span>Klatki</span> 15736 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15737 </button> 15738 <ul 15739 id="category-node-430-mobile-menu-panel" 15740 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15741 x-show="isOpen" 15742 x-transition:enter-start="opacity-0 translate-x-8" 15743 x-transition:enter-end="opacity-100 translate-x-0" 15744 x-transition:leave-start="opacity-100 translate-x-0" 15745 x-transition:leave-end="opacity-0 translate-x-8" 15746 @keydown.escape.stop.prevent="close" 15747 > 15748 <li data-level="2"> 15749 <button 15750 type="button" 15751 class="dropdown-list-item font-bold justify-normal" 15752 @click="close" 15753 x-ref="closeSubMenuBtn" 15754 > 15755 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15756 Klatki </button> 15757 </li> 15758 <li> 15759 <a 15760 href="https://fera.pl/male-ssaki/klatki.html" 15761 class="dropdown-list-item font-bold" 15762 >
15763 <span> 15764 Klatki - zobacz wszystko </span> 15765 </a> 15766 </li> 15767 15768 <li data-level="2"> 15769 <a 15770 href="https://fera.pl/male-ssaki/klatki/klatka-dla-chomika.html" 15771 class="dropdown-list-item" 15772 > 15773 <span>Klatka dla chomika</span> 15774 </a> 15775 </li> 15776 15777 <li data-level="2"> 15778 <a 15779 href="https://fera.pl/male-ssaki/klatki/klatka-dla-fretki.html" 15780 class="dropdown-list-item" 15781 > 15782 <span>Klatka dla fretki</span> 15783 </a> 15784 </li> 15785 15786 <li data-level="2"> 15787 <a 15788 href="https://fera.pl/male-ssaki/klatki/klatka-dla-krolika.html" 15789 class="dropdown-list-item" 15790 > 15791 <span>Klatka dla królika</span> 15792 </a> 15793 </li> 15794 15795 <li data-level="2"> 15796 <a 15797 href="https://fera.pl/male-ssaki/klatki/klatka-dla-myszoskoczka.html" 15798 class="dropdown-list-item" 15799 > 15800 <span>Klatka dla myszoskoczka</span> 15801 </a> 15802 </li> 15803 15804 <li data-level="2"> 15805 <a 15806 href="https://fera.pl/male-ssaki/klatki/klatka-dla-myszy.html" 15807 class="dropdown-list-item" 15808 > 15809 <span>Klatka dla myszy</span> 15810 </a> 15811 </li> 15812 15813 <li data-level="2"> 15814 <a 15815 href="https://fera.pl/male-ssaki/klatki/klatka-dla-szczura.html" 15816 class="dropdown-list-item" 15817 > 15818 <span>Klatka dla szczura</span> 15819 </a> 15820 </li> 15821 15822 <li data-level="2"> 15823 <a 15824 href="https://fera.pl/male-ssaki/klatki/klatka-dla-szynszyli.html" 15825 class="dropdown-list-item" 15826 > 15827 <span>Klatka dla szynszyli</span> 15828 </a> 15829 </li> 15830 15831 <li data-level="2"> 15832 <a 15833 href="https://fera.pl/male-ssaki/klatki/klatka-dla-swinki-morskiej.html" 15834 class="dropdown-list-item" 15835 > 15836 <span>Klatka dla Åwinki morskiej</span> 15837 </a> 15838 </li> 15839 15840 <li data-level="2"> 15841 <a 15842 href="https://fera.pl/male-ssaki/klatki/klatka-dla-wiewiorki.html" 15843 class="dropdown-list-item" 15844 > 15845 <span>Klatka dla wiewiórki</span> 15846 </a> 15847 </li> 15848 </ul> 15849 </li> 15850 15851 <li data-level="1" x-data="initMobileSubMenu"> 15852 <button 15853 type="button" 15854 class="dropdown-list-item" 15855 aria-controls="category-node-429-mobile-menu-panel" 15856 aria-expanded="false" 15857 x-ref="openSubMenuBtn" 15858 :aria-expanded="isOpen" 15859 :disabled="isOpen" 15860 @click="open" 15861 > 15862 <span>Klatki i kojce</span> 15863 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15864 </button> 15865 <ul 15866 id="category-node-429-mobile-menu-panel" 15867 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15868 x-show="isOpen" 15869 x-transition:enter-start="opacity-0 translate-x-8" 15870 x-transition:enter-end="opacity-100 translate-x-0" 15871 x-transition:leave-start="opacity-100 translate-x-0" 15872 x-transition:leave-end="opacity-0 translate-x-8" 15873 @keydown.escape.stop.prevent="close" 15874 > 15875 <li data-level="2"> 15876 <button 15877 type="button" 15878 class="dropdown-list-item font-bold justify-normal" 15879 @click="close" 15880 x-ref="closeSubMenuBtn" 15881 > 15882 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15883 Klatki i kojce </button> 15884 </li> 15885 <li> 15886 <a 15887 href="https://fera.pl/male-ssaki/klatki-i-kojce.html" 15888 class="dropdown-list-item font-bold" 15889 >
15890 <span> 15891 Klatki i kojce - zobacz wszystko </span> 15892 </a> 15893 </li> 15894 15895 <li data-level="2"> 15896 <a 15897 href="https://fera.pl/male-ssaki/klatki-i-kojce/kojce-i-wybiegi-dla-krolikow.html" 15898 class="dropdown-list-item" 15899 > 15900 <span>Kojce i wybiegi dla królików</span> 15901 </a> 15902 </li> 15903 15904 <li data-level="2"> 15905 <a 15906 href="https://fera.pl/male-ssaki/klatki-i-kojce/akcesoria-do-rozbudowy-klatki.html" 15907 class="dropdown-list-item" 15908 > 15909 <span>Akcesoria do rozbudowy klatki</span> 15910 </a> 15911 </li> 15912 </ul> 15913 </li> 15914 15915 <li data-level="1" x-data="initMobileSubMenu"> 15916 <button 15917 type="button" 15918 class="dropdown-list-item" 15919 aria-controls="category-node-442-mobile-menu-panel" 15920 aria-expanded="false" 15921 x-ref="openSubMenuBtn" 15922 :aria-expanded="isOpen" 15923 :disabled="isOpen" 15924 @click="open" 15925 > 15926 <span>PodÅoże do klatek</span> 15927 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15928 </button> 15929 <ul 15930 id="category-node-442-mobile-menu-panel" 15931 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15932 x-show="isOpen" 15933 x-transition:enter-start="opacity-0 translate-x-8" 15934 x-transition:enter-end="opacity-100 translate-x-0" 15935 x-transition:leave-start="opacity-100 translate-x-0" 15936 x-transition:leave-end="opacity-0 translate-x-8" 15937 @keydown.escape.stop.prevent="close" 15938 > 15939 <li data-level="2"> 15940 <button 15941 type="button" 15942 class="dropdown-list-item font-bold justify-normal" 15943 @click="close" 15944 x-ref="closeSubMenuBtn" 15945 > 15946 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 15947 PodÅoże do klatek </button> 15948 </li> 15949 <li> 15950 <a 15951 href="https://fera.pl/male-ssaki/podloze-do-klatek.html" 15952 class="dropdown-list-item font-bold" 15953 > 15954 <span> 15955 PodÅoże do klatek - zobacz wszystko </span> 15956 </a> 15957 </li> 15958 15959 <li data-level="2"> 15960 <a 15961 href="https://fera.pl/male-ssaki/podloze-do-klatek/podklady-i-sciolki-do-klatki.html" 15962 class="dropdown-list-item" 15963 > 15964 <span>PodkÅady i ÅcióÅki do klatki</span> 15965 </a> 15966 </li> 15967 15968 <li data-level="2"> 15969 <a 15970 href="https://fera.pl/male-ssaki/podloze-do-klatek/siano.html" 15971 class="dropdown-list-item" 15972 > 15973 <span>Siano</span> 15974 </a> 15975 </li> 15976 </ul> 15977 </li> 15978 15979 <li data-level="1" x-data="initMobileSubMenu"> 15980 <button 15981 type="button" 15982 class="dropdown-list-item" 15983 aria-controls="category-node-445-mobile-menu-panel" 15984 aria-expanded="false" 15985 x-ref="openSubMenuBtn" 15986 :aria-expanded="isOpen" 15987 :disabled="isOpen" 15988 @click="open" 15989 > 15990 <span>Higiena i pielÄgnacja maÅych ssaków</span> 15991 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 15992 </button> 15993 <ul 15994 id="category-node-445-mobile-menu-panel" 15995 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 15996 x-show="isOpen" 15997 x-transition:enter-start="opacity-0 translate-x-8" 15998 x-transition:enter-end="opacity-100 translate-x-0" 15999 x-transition:leave-start="opacity-100 translate-x-0" 16000 x-transition:leave-end="opacity-0 translate-x-8" 16001 @keydown.escape.stop.prevent="close" 16002 > 16003 <li data-level="2"> 16004 <button 16005 type="button" 16006 class="dropdown-list-item font-bold justify-normal" 16007 @click="close" 16008 x-ref="closeSubMenuBtn" 16009 > 16010 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16011 Higiena i pielÄgnacja maÅych ssaków </button> 16012 </li> 16013 <li> 16014 <a 16015 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow.html" 16016 class="dropdown-list-item font-bold" 16017 >
16018 <span> 16019 Higiena i pielÄgnacja maÅych ssaków - zobacz wszystko </span> 16020 </a> 16021 </li> 16022 16023 <li data-level="2"> 16024 <a 16025 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow/witaminy-dla-malych-ssakow.html" 16026 class="dropdown-list-item" 16027 > 16028 <span>Witaminy dla maÅych ssaków</span> 16029 </a> 16030 </li> 16031 16032 <li data-level="2"> 16033 <a 16034 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow/usuwanie-plam-i-zapachow-malych-ssakow.html" 16035 class="dropdown-list-item" 16036 > 16037 <span>Usuwanie plam i zapachów maÅych ssaków</span> 16038 </a> 16039 </li> 16040 16041 <li data-level="2"> 16042 <a 16043 href="https://fera.pl/male-ssaki/higiena-i-pielegnacja-malych-ssakow/usuwanie-siersci-malych-ssakow.html" 16044 class="dropdown-list-item" 16045 > 16046 <span>Usuwanie sierÅci maÅych ssaków</span> 16047 </a> 16048 </li> 16049 </ul> 16050 </li> 16051 16052 <li data-level="1" x-data="initMobileSubMenu"> 16053 <button 16054 type="button" 16055 class="dropdown-list-item" 16056 aria-controls="category-node-449-mobile-menu-panel" 16057 aria-expanded="false" 16058 x-ref="openSubMenuBtn" 16059 :aria-expanded="isOpen" 16060 :disabled="isOpen" 16061 @click="open" 16062 > 16063 <span>Grooming i uroda dla maÅych ssaków</span> 16064 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16065 </button> 16066 <ul 16067 id="category-node-449-mobile-menu-panel" 16068 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16069 x-show="isOpen" 16070 x-transition:enter-start="opacity-0 translate-x-8" 16071 x-transition:enter-end="opacity-100 translate-x-0" 16072 x-transition:leave-start="opacity-100 translate-x-0" 16073 x-transition:leave-end="opacity-0 translate-x-8" 16074 @keydown.escape.stop.prevent="close" 16075 > 16076 <li data-level="2"> 16077 <button 16078 type="button" 16079 class="dropdown-list-item font-bold justify-normal" 16080 @click="close" 16081 x-ref="closeSubMenuBtn" 16082 > 16083 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16084 Grooming i uroda dla maÅych ssaków </button> 16085 </li> 16086 <li> 16087 <a 16088 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow.html" 16089 class="dropdown-list-item font-bold" 16090 > 16091 <span> 16092 Grooming i uroda dla maÅych ssaków - zobacz wszystko </span> 16093 </a> 16094 </li> 16095 16096 <li data-level="2"> 16097 <a 16098 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/piasek-dla-szynszyli.html" 16099 class="dropdown-list-item" 16100 > 16101 <span>Piasek dla szynszyli</span> 16102 </a> 16103 </li> 16104 16105 <li data-level="2"> 16106 <a 16107 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/szczotki-i-grzebienie-dla-malych-ssakow.html" 16108 class="dropdown-list-item" 16109 > 16110 <span>Szczotki i grzebienie dla maÅych ssaków</span> 16111 </a> 16112 </li> 16113 16114 <li data-level="2"> 16115 <a 16116 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/szampony-i-odzywki-dla-malych-ssakow.html" 16117 class="dropdown-list-item" 16118 > 16119 <span>Szampony i odżywki dla maÅych ssaków</span> 16120 </a> 16121 </li> 16122 16123 <li data-level="2"> 16124 <a 16125 href="https://fera.pl/male-ssaki/grooming-i-uroda-dla-malych-ssakow/pielegnacja-pazurow-malych-ssakow.html" 16126 class="dropdown-list-item" 16127 >
16128 <span>PielÄgnacja pazurów maÅych ssaków</span> 16129 </a> 16130 </li> 16131 </ul> 16132 </li> 16133 16134 <li data-level="1" x-data="initMobileSubMenu"> 16135 <button 16136 type="button" 16137 class="dropdown-list-item" 16138 aria-controls="category-node-454-mobile-menu-panel" 16139 aria-expanded="false" 16140 x-ref="openSubMenuBtn" 16141 :aria-expanded="isOpen" 16142 :disabled="isOpen" 16143 @click="open" 16144 > 16145 <span>Zabawki dla maÅych ssaków</span> 16146 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16147 </button> 16148 <ul 16149 id="category-node-454-mobile-menu-panel" 16150 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16151 x-show="isOpen" 16152 x-transition:enter-start="opacity-0 translate-x-8" 16153 x-transition:enter-end="opacity-100 translate-x-0" 16154 x-transition:leave-start="opacity-100 translate-x-0" 16155 x-transition:leave-end="opacity-0 translate-x-8" 16156 @keydown.escape.stop.prevent="close" 16157 > 16158 <li data-level="2"> 16159 <button 16160 type="button" 16161 class="dropdown-list-item font-bold justify-normal" 16162 @click="close" 16163 x-ref="closeSubMenuBtn" 16164 > 16165 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16166 Zabawki dla maÅych ssaków </button> 16167 </li> 16168 <li> 16169 <a 16170 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow.html" 16171 class="dropdown-list-item font-bold" 16172 > 16173 <span> 16174 Zabawki dla maÅych ssaków - zobacz wszystko </span> 16175 </a> 16176 </li> 16177 16178 <li data-level="2"> 16179 <a 16180 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/kolowrotek-dla-chomika.html" 16181 class="dropdown-list-item" 16182 > 16183 <span>KoÅowrotek dla chomika</span> 16184 </a> 16185 </li> 16186 16187 <li data-level="2"> 16188 <a 16189 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/kryjowki-dla-malych-ssakow.html" 16190 class="dropdown-list-item" 16191 > 16192 <span>Kryjówki dla maÅych ssaków</span> 16193 </a> 16194 </li> 16195 16196 <li data-level="2"> 16197 <a 16198 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/gryzaki-dla-malych-ssakow.html" 16199 class="dropdown-list-item" 16200 > 16201 <span>Gryzaki dla maÅych ssaków</span> 16202 </a> 16203 </li> 16204 16205 <li data-level="2"> 16206 <a 16207 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/legowiska-i-hamaki-dla-malych-ssakow.html" 16208 class="dropdown-list-item" 16209 > 16210 <span>Legowiska i hamaki dla maÅych ssaków</span> 16211 </a> 16212 </li> 16213 16214 <li data-level="2"> 16215 <a 16216 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/tunele-dla-malych-ssakow.html" 16217 class="dropdown-list-item" 16218 > 16219 <span>Tunele dla maÅych ssaków</span> 16220 </a> 16221 </li> 16222 16223 <li data-level="2"> 16224 <a 16225 href="https://fera.pl/male-ssaki/zabawki-dla-malych-ssakow/place-zabaw-dla-chomikow.html" 16226 class="dropdown-list-item" 16227 > 16228 <span>Place zabaw dla chomików</span> 16229 </a> 16230 </li> 16231 </ul> 16232 </li> 16233 16234 <li data-level="1" x-data="initMobileSubMenu"> 16235 <button 16236 type="button" 16237 class="dropdown-list-item" 16238 aria-controls="category-node-461-mobile-menu-panel" 16239 aria-expanded="false" 16240 x-ref="openSubMenuBtn" 16241 :aria-expanded="isOpen" 16242 :disabled="isOpen" 16243 @click="open" 16244 >
16245 <span>Transportówki i akcesoria</span> 16246 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16247 </button> 16248 <ul 16249 id="category-node-461-mobile-menu-panel" 16250 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16251 x-show="isOpen" 16252 x-transition:enter-start="opacity-0 translate-x-8" 16253 x-transition:enter-end="opacity-100 translate-x-0" 16254 x-transition:leave-start="opacity-100 translate-x-0" 16255 x-transition:leave-end="opacity-0 translate-x-8" 16256 @keydown.escape.stop.prevent="close" 16257 > 16258 <li data-level="2"> 16259 <button 16260 type="button" 16261 class="dropdown-list-item font-bold justify-normal" 16262 @click="close" 16263 x-ref="closeSubMenuBtn" 16264 > 16265 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16266 Transportówki i akcesoria </button> 16267 </li> 16268 <li> 16269 <a 16270 href="https://fera.pl/male-ssaki/transportowki-i-akcesoria.html" 16271 class="dropdown-list-item font-bold" 16272 > 16273 <span> 16274 Transportówki i akcesoria - zobacz wszystko </span> 16275 </a> 16276 </li> 16277 16278 <li data-level="2"> 16279 <a 16280 href="https://fera.pl/male-ssaki/transportowki-i-akcesoria/transportowki-dla-malych-ssakow.html" 16281 class="dropdown-list-item" 16282 > 16283 <span>Transportówki dla maÅych ssaków</span> 16284 </a> 16285 </li> 16286 16287 <li data-level="2"> 16288 <a 16289 href="https://fera.pl/male-ssaki/transportowki-i-akcesoria/szelki-i-smycze-dla-malych-ssakow.html" 16290 class="dropdown-list-item" 16291 > 16292 <span>Szelki i smycze dla maÅych ssaków</span> 16293 </a> 16294 </li> 16295 </ul> 16296 </li> 16297 16298 <li data-level="1" x-data="initMobileSubMenu"> 16299 <button 16300 type="button" 16301 class="dropdown-list-item" 16302 aria-controls="category-node-464-mobile-menu-panel" 16303 aria-expanded="false" 16304 x-ref="openSubMenuBtn" 16305 :aria-expanded="isOpen" 16306 :disabled="isOpen" 16307 @click="open" 16308 > 16309 <span>Zdrowie maÅych ssaków</span> 16310 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16311 </button> 16312 <ul 16313 id="category-node-464-mobile-menu-panel" 16314 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16315 x-show="isOpen" 16316 x-transition:enter-start="opacity-0 translate-x-8" 16317 x-transition:enter-end="opacity-100 translate-x-0" 16318 x-transition:leave-start="opacity-100 translate-x-0" 16319 x-transition:leave-end="opacity-0 translate-x-8" 16320 @keydown.escape.stop.prevent="close" 16321 > 16322 <li data-level="2"> 16323 <button 16324 type="button" 16325 class="dropdown-list-item font-bold justify-normal" 16326 @click="close" 16327 x-ref="closeSubMenuBtn" 16328 > 16329 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16330 Zdrowie maÅych ssaków </button> 16331 </li> 16332 <li> 16333 <a 16334 href="https://fera.pl/male-ssaki/zdrowie-malych-ssakow.html" 16335 class="dropdown-list-item font-bold" 16336 >
16337 <span> 16338 Zdrowie maÅych ssaków - zobacz wszystko </span> 16339 </a> 16340 </li> 16341 16342 <li data-level="2"> 16343 <a 16344 href="https://fera.pl/male-ssaki/zdrowie-malych-ssakow/medykamenty-dla-malych-ssakow.html" 16345 class="dropdown-list-item" 16346 > 16347 <span>Medykamenty dla maÅych ssaków</span> 16348 </a> 16349 </li> 16350 </ul> 16351 </li> 16352 </ul> 16353 </li> 16354 16355 <li data-level="0" x-data="initMobileSubMenu"> 16356 <button 16357 type="button" 16358 class="dropdown-list-item" 16359 aria-controls="category-node-480-mobile-menu-panel" 16360 aria-expanded="false" 16361 x-ref="openSubMenuBtn" 16362 :aria-expanded="isOpen" 16363 :disabled="isOpen" 16364 @click="open" 16365 > 16366 <span>Gady i pÅazy</span> 16367 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16368 </button> 16369 <ul 16370 id="category-node-480-mobile-menu-panel" 16371 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16372 x-show="isOpen" 16373 x-transition:enter-start="opacity-0 translate-x-8" 16374 x-transition:enter-end="opacity-100 translate-x-0" 16375 x-transition:leave-start="opacity-100 translate-x-0" 16376 x-transition:leave-end="opacity-0 translate-x-8" 16377 @keydown.escape.stop.prevent="close" 16378 > 16379 <li data-level="1"> 16380 <button 16381 type="button" 16382 class="dropdown-list-item font-bold justify-normal" 16383 @click="close" 16384 x-ref="closeSubMenuBtn" 16385 > 16386 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16387 Gady i pÅazy </button> 16388 </li> 16389 <li> 16390 <a 16391 href="https://fera.pl/gady-i-plazy.html" 16392 class="dropdown-list-item font-bold" 16393 > 16394 <span> 16395 Gady i pÅazy - zobacz wszystko </span> 16396 </a> 16397 </li> 16398 16399 <li data-level="1" x-data="initMobileSubMenu"> 16400 <button 16401 type="button" 16402 class="dropdown-list-item" 16403 aria-controls="category-node-481-mobile-menu-panel" 16404 aria-expanded="false" 16405 x-ref="openSubMenuBtn" 16406 :aria-expanded="isOpen" 16407 :disabled="isOpen" 16408 @click="open" 16409 > 16410 <span>Karma dla gadów i pÅazów</span> 16411 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16412 </button> 16413 <ul 16414 id="category-node-481-mobile-menu-panel" 16415 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16416 x-show="isOpen" 16417 x-transition:enter-start="opacity-0 translate-x-8" 16418 x-transition:enter-end="opacity-100 translate-x-0" 16419 x-transition:leave-start="opacity-100 translate-x-0" 16420 x-transition:leave-end="opacity-0 translate-x-8" 16421 @keydown.escape.stop.prevent="close" 16422 > 16423 <li data-level="2"> 16424 <button 16425 type="button" 16426 class="dropdown-list-item font-bold justify-normal" 16427 @click="close" 16428 x-ref="closeSubMenuBtn" 16429 > 16430 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16431 Karma dla gadów i pÅazów </button> 16432 </li> 16433 <li> 16434 <a 16435 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow.html" 16436 class="dropdown-list-item font-bold" 16437 >
16438 <span> 16439 Karma dla gadów i pÅazów - zobacz wszystko </span> 16440 </a> 16441 </li> 16442 16443 <li data-level="2"> 16444 <a 16445 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-zolwia.html" 16446 class="dropdown-list-item" 16447 > 16448 <span>Karma dla żóÅwia</span> 16449 </a> 16450 </li> 16451 16452 <li data-level="2"> 16453 <a 16454 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-krabow.html" 16455 class="dropdown-list-item" 16456 > 16457 <span>Karma dla krabów</span> 16458 </a> 16459 </li> 16460 16461 <li data-level="2"> 16462 <a 16463 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-kameleona.html" 16464 class="dropdown-list-item" 16465 > 16466 <span>Karma dla kameleona</span> 16467 </a> 16468 </li> 16469 16470 <li data-level="2"> 16471 <a 16472 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-iguany.html" 16473 class="dropdown-list-item" 16474 > 16475 <span>Karma dla iguany</span> 16476 </a> 16477 </li> 16478 16479 <li data-level="2"> 16480 <a 16481 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-jaszczurki.html" 16482 class="dropdown-list-item" 16483 > 16484 <span>Karma dla jaszczurki</span> 16485 </a> 16486 </li> 16487 16488 <li data-level="2"> 16489 <a 16490 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-zolwi-wodnych.html" 16491 class="dropdown-list-item" 16492 > 16493 <span>Karma dla żóÅwi wodnych</span> 16494 </a> 16495 </li> 16496 16497 <li data-level="2"> 16498 <a 16499 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-gekona.html" 16500 class="dropdown-list-item" 16501 > 16502 <span>Karma dla gekona</span> 16503 </a> 16504 </li> 16505 16506 <li data-level="2"> 16507 <a 16508 href="https://fera.pl/gady-i-plazy/karma-dla-gadow-i-plazow/karma-dla-zab.html" 16509 class="dropdown-list-item" 16510 > 16511 <span>Karma dla żab</span> 16512 </a> 16513 </li> 16514 </ul> 16515 </li> 16516 16517 <li data-level="1" x-data="initMobileSubMenu"> 16518 <button 16519 type="button" 16520 class="dropdown-list-item" 16521 aria-controls="category-node-490-mobile-menu-panel" 16522 aria-expanded="false" 16523 x-ref="openSubMenuBtn" 16524 :aria-expanded="isOpen" 16525 :disabled="isOpen" 16526 @click="open" 16527 > 16528 <span>PodÅoże i akcesoria</span> 16529 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16530 </button> 16531 <ul 16532 id="category-node-490-mobile-menu-panel" 16533 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16534 x-show="isOpen" 16535 x-transition:enter-start="opacity-0 translate-x-8" 16536 x-transition:enter-end="opacity-100 translate-x-0" 16537 x-transition:leave-start="opacity-100 translate-x-0" 16538 x-transition:leave-end="opacity-0 translate-x-8" 16539 @keydown.escape.stop.prevent="close" 16540 > 16541 <li data-level="2"> 16542 <button 16543 type="button" 16544 class="dropdown-list-item font-bold justify-normal" 16545 @click="close" 16546 x-ref="closeSubMenuBtn" 16547 > 16548 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16549 PodÅoże i akcesoria </button> 16550 </li> 16551 <li> 16552 <a 16553 href="https://fera.pl/gady-i-plazy/podloze-i-akcesoria.html" 16554 class="dropdown-list-item font-bold" 16555 >
16556 <span> 16557 PodÅoże i akcesoria - zobacz wszystko </span> 16558 </a> 16559 </li> 16560 16561 <li data-level="2"> 16562 <a 16563 href="https://fera.pl/gady-i-plazy/podloze-i-akcesoria/podloze-do-terrarium.html" 16564 class="dropdown-list-item" 16565 > 16566 <span>PodÅoże do terrarium</span> 16567 </a> 16568 </li> 16569 </ul> 16570 </li> 16571 16572 <li data-level="1" x-data="initMobileSubMenu"> 16573 <button 16574 type="button" 16575 class="dropdown-list-item" 16576 aria-controls="category-node-492-mobile-menu-panel" 16577 aria-expanded="false" 16578 x-ref="openSubMenuBtn" 16579 :aria-expanded="isOpen" 16580 :disabled="isOpen" 16581 @click="open" 16582 > 16583 <span>Dekoracje do terrariów</span> 16584 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16585 </button> 16586 <ul 16587 id="category-node-492-mobile-menu-panel" 16588 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16589 x-show="isOpen" 16590 x-transition:enter-start="opacity-0 translate-x-8" 16591 x-transition:enter-end="opacity-100 translate-x-0" 16592 x-transition:leave-start="opacity-100 translate-x-0" 16593 x-transition:leave-end="opacity-0 translate-x-8" 16594 @keydown.escape.stop.prevent="close" 16595 > 16596 <li data-level="2"> 16597 <button 16598 type="button" 16599 class="dropdown-list-item font-bold justify-normal" 16600 @click="close" 16601 x-ref="closeSubMenuBtn" 16602 > 16603 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16604 Dekoracje do terrariów </button> 16605 </li> 16606 <li> 16607 <a 16608 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow.html" 16609 class="dropdown-list-item font-bold" 16610 > 16611 <span> 16612 Dekoracje do terrariów - zobacz wszystko </span> 16613 </a> 16614 </li> 16615 16616 <li data-level="2"> 16617 <a 16618 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow/dekoracje-do-terrarium.html" 16619 class="dropdown-list-item" 16620 > 16621 <span>Dekoracje do terrarium</span> 16622 </a> 16623 </li> 16624 16625 <li data-level="2"> 16626 <a 16627 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow/ozdoby-do-terrarium.html" 16628 class="dropdown-list-item" 16629 > 16630 <span>Ozdoby do terrarium</span> 16631 </a> 16632 </li> 16633 16634 <li data-level="2"> 16635 <a 16636 href="https://fera.pl/gady-i-plazy/dekoracje-do-terrariow/kryjowki-dla-gadow-i-plazow.html" 16637 class="dropdown-list-item" 16638 > 16639 <span>Kryjówki dla gadów i pÅazów</span> 16640 </a> 16641 </li> 16642 </ul> 16643 </li> 16644 16645 <li data-level="1" x-data="initMobileSubMenu"> 16646 <button 16647 type="button" 16648 class="dropdown-list-item" 16649 aria-controls="category-node-496-mobile-menu-panel" 16650 aria-expanded="false" 16651 x-ref="openSubMenuBtn" 16652 :aria-expanded="isOpen" 16653 :disabled="isOpen" 16654 @click="open" 16655 > 16656 <span>Akcesoria do karmienia gadów i pÅazów</span> 16657 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16658 </button> 16659 <ul 16660 id="category-node-496-mobile-menu-panel" 16661 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16662 x-show="isOpen" 16663 x-transition:enter-start="opacity-0 translate-x-8" 16664 x-transition:enter-end="opacity-100 translate-x-0" 16665 x-transition:leave-start="opacity-100 translate-x-0" 16666 x-transition:leave-end="opacity-0 translate-x-8" 16667 @keydown.escape.stop.prevent="close" 16668 > 16669 <li data-level="2"> 16670 <button 16671 type="button" 16672 class="dropdown-list-item font-bold justify-normal" 16673 @click="close" 16674 x-ref="closeSubMenuBtn" 16675 > 16676 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16677 Akcesoria do karmienia gadów i pÅazów </button> 16678 </li> 16679 <li> 16680 <a 16681 href="https://fera.pl/gady-i-plazy/akcesoria-do-karmienia-gadow-i-plazow.html" 16682 class="dropdown-list-item font-bold" 16683 >
16684 <span> 16685 Akcesoria do karmienia gadów i pÅazów - zobacz wszystko </span> 16686 </a> 16687 </li> 16688 16689 <li data-level="2"> 16690 <a 16691 href="https://fera.pl/gady-i-plazy/akcesoria-do-karmienia-gadow-i-plazow/karmniki-i-pesety-dla-gadow-i-plazow.html" 16692 class="dropdown-list-item" 16693 > 16694 <span>Karmniki i pÄsety dla gadów i pÅazów</span> 16695 </a> 16696 </li> 16697 </ul> 16698 </li> 16699 16700 <li data-level="1" x-data="initMobileSubMenu"> 16701 <button 16702 type="button" 16703 class="dropdown-list-item" 16704 aria-controls="category-node-498-mobile-menu-panel" 16705 aria-expanded="false" 16706 x-ref="openSubMenuBtn" 16707 :aria-expanded="isOpen" 16708 :disabled="isOpen" 16709 @click="open" 16710 > 16711 <span>Zdrowie i uroda gadów i pÅazów</span> 16712 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16713 </button> 16714 <ul 16715 id="category-node-498-mobile-menu-panel" 16716 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16717 x-show="isOpen" 16718 x-transition:enter-start="opacity-0 translate-x-8" 16719 x-transition:enter-end="opacity-100 translate-x-0" 16720 x-transition:leave-start="opacity-100 translate-x-0" 16721 x-transition:leave-end="opacity-0 translate-x-8" 16722 @keydown.escape.stop.prevent="close" 16723 > 16724 <li data-level="2"> 16725 <button 16726 type="button" 16727 class="dropdown-list-item font-bold justify-normal" 16728 @click="close" 16729 x-ref="closeSubMenuBtn" 16730 > 16731 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16732 Zdrowie i uroda gadów i pÅazów </button> 16733 </li> 16734 <li> 16735 <a 16736 href="https://fera.pl/gady-i-plazy/zdrowie-i-uroda-gadow-i-plazow.html" 16737 class="dropdown-list-item font-bold" 16738 > 16739 <span> 16740 Zdrowie i uroda gadów i pÅazów - zobacz wszystko </span> 16741 </a> 16742 </li> 16743 16744 <li data-level="2"> 16745 <a 16746 href="https://fera.pl/gady-i-plazy/zdrowie-i-uroda-gadow-i-plazow/odzywki-i-witaminy-dla-gadow-i-plazow.html" 16747 class="dropdown-list-item" 16748 > 16749 <span>Odżywki i witaminy dla gadów i pÅazów</span> 16750 </a> 16751 </li> 16752 </ul> 16753 </li> 16754 16755 <li data-level="1" x-data="initMobileSubMenu"> 16756 <button 16757 type="button" 16758 class="dropdown-list-item" 16759 aria-controls="category-node-500-mobile-menu-panel" 16760 aria-expanded="false" 16761 x-ref="openSubMenuBtn" 16762 :aria-expanded="isOpen" 16763 :disabled="isOpen" 16764 @click="open" 16765 > 16766 <span>Terraria i akcesoria</span> 16767 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16768 </button> 16769 <ul 16770 id="category-node-500-mobile-menu-panel" 16771 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16772 x-show="isOpen" 16773 x-transition:enter-start="opacity-0 translate-x-8" 16774 x-transition:enter-end="opacity-100 translate-x-0" 16775 x-transition:leave-start="opacity-100 translate-x-0" 16776 x-transition:leave-end="opacity-0 translate-x-8" 16777 @keydown.escape.stop.prevent="close" 16778 > 16779 <li data-level="2"> 16780 <button 16781 type="button" 16782 class="dropdown-list-item font-bold justify-normal" 16783 @click="close" 16784 x-ref="closeSubMenuBtn" 16785 > 16786 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16787 Terraria i akcesoria </button> 16788 </li> 16789 <li> 16790 <a 16791 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria.html" 16792 class="dropdown-list-item font-bold" 16793 >
16794 <span> 16795 Terraria i akcesoria - zobacz wszystko </span> 16796 </a> 16797 </li> 16798 16799 <li data-level="2"> 16800 <a 16801 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/terraria.html" 16802 class="dropdown-list-item" 16803 > 16804 <span>Terraria</span> 16805 </a> 16806 </li> 16807 16808 <li data-level="2"> 16809 <a 16810 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/klatki-plastikowe.html" 16811 class="dropdown-list-item" 16812 > 16813 <span>Klatki plastikowe</span> 16814 </a> 16815 </li> 16816 16817 <li data-level="2"> 16818 <a 16819 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/tlo-do-terrarium.html" 16820 class="dropdown-list-item" 16821 > 16822 <span>TÅo do terrarium</span> 16823 </a> 16824 </li> 16825 16826 <li data-level="2"> 16827 <a 16828 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/filtry-do-terrarium.html" 16829 class="dropdown-list-item" 16830 > 16831 <span>Filtry do terrarium</span> 16832 </a> 16833 </li> 16834 16835 <li data-level="2"> 16836 <a 16837 href="https://fera.pl/gady-i-plazy/terraria-i-akcesoria/akcesoria-do-terrarium.html" 16838 class="dropdown-list-item" 16839 > 16840 <span>Akcesoria do terrarium</span> 16841 </a> 16842 </li> 16843 </ul> 16844 </li> 16845 16846 <li data-level="1" x-data="initMobileSubMenu"> 16847 <button 16848 type="button" 16849 class="dropdown-list-item" 16850 aria-controls="category-node-506-mobile-menu-panel" 16851 aria-expanded="false" 16852 x-ref="openSubMenuBtn" 16853 :aria-expanded="isOpen" 16854 :disabled="isOpen" 16855 @click="open" 16856 > 16857 <span>Czyszczenie i utrzymanie</span> 16858 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16859 </button> 16860 <ul 16861 id="category-node-506-mobile-menu-panel" 16862 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16863 x-show="isOpen" 16864 x-transition:enter-start="opacity-0 translate-x-8" 16865 x-transition:enter-end="opacity-100 translate-x-0" 16866 x-transition:leave-start="opacity-100 translate-x-0" 16867 x-transition:leave-end="opacity-0 translate-x-8" 16868 @keydown.escape.stop.prevent="close" 16869 > 16870 <li data-level="2"> 16871 <button 16872 type="button" 16873 class="dropdown-list-item font-bold justify-normal" 16874 @click="close" 16875 x-ref="closeSubMenuBtn" 16876 > 16877 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16878 Czyszczenie i utrzymanie </button> 16879 </li> 16880 <li> 16881 <a 16882 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie.html" 16883 class="dropdown-list-item font-bold" 16884 > 16885 <span> 16886 Czyszczenie i utrzymanie - zobacz wszystko </span> 16887 </a> 16888 </li> 16889 16890 <li data-level="2"> 16891 <a 16892 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie/utrzymanie-czystosci-w-terrarium.html" 16893 class="dropdown-list-item" 16894 > 16895 <span>Utrzymanie czystoÅci w terrarium</span> 16896 </a> 16897 </li> 16898 16899 <li data-level="2"> 16900 <a 16901 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie/utrzymanie-temperatury-w-terrarium.html" 16902 class="dropdown-list-item" 16903 > 16904 <span>Utrzymanie temperatury w terrarium</span> 16905 </a> 16906 </li> 16907 16908 <li data-level="2"> 16909 <a 16910 href="https://fera.pl/gady-i-plazy/czyszczenie-i-utrzymanie/utrzymanie-nawilzenia-w-terrarium.html" 16911 class="dropdown-list-item" 16912 >
16913 <span>Utrzymanie nawilżenia w terrarium</span> 16914 </a> 16915 </li> 16916 </ul> 16917 </li> 16918 16919 <li data-level="1" x-data="initMobileSubMenu"> 16920 <button 16921 type="button" 16922 class="dropdown-list-item" 16923 aria-controls="category-node-510-mobile-menu-panel" 16924 aria-expanded="false" 16925 x-ref="openSubMenuBtn" 16926 :aria-expanded="isOpen" 16927 :disabled="isOpen" 16928 @click="open" 16929 > 16930 <span>Ogrzewanie i oÅwietlenie</span> 16931 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 16932 </button> 16933 <ul 16934 id="category-node-510-mobile-menu-panel" 16935 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 16936 x-show="isOpen" 16937 x-transition:enter-start="opacity-0 translate-x-8" 16938 x-transition:enter-end="opacity-100 translate-x-0" 16939 x-transition:leave-start="opacity-100 translate-x-0" 16940 x-transition:leave-end="opacity-0 translate-x-8" 16941 @keydown.escape.stop.prevent="close" 16942 > 16943 <li data-level="2"> 16944 <button 16945 type="button" 16946 class="dropdown-list-item font-bold justify-normal" 16947 @click="close" 16948 x-ref="closeSubMenuBtn" 16949 > 16950 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 16951 Ogrzewanie i oÅwietlenie </button> 16952 </li> 16953 <li> 16954 <a 16955 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie.html" 16956 class="dropdown-list-item font-bold" 16957 > 16958 <span> 16959 Ogrzewanie i oÅwietlenie - zobacz wszystko </span> 16960 </a> 16961 </li> 16962 16963 <li data-level="2"> 16964 <a 16965 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie/grzalki-do-terrarium.html" 16966 class="dropdown-list-item" 16967 > 16968 <span>GrzaÅki do terrarium</span> 16969 </a> 16970 </li> 16971 16972 <li data-level="2"> 16973 <a 16974 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie/zarowki-do-terrarium.html" 16975 class="dropdown-list-item" 16976 > 16977 <span>Å»arówki do terrarium</span> 16978 </a> 16979 </li> 16980 16981 <li data-level="2"> 16982 <a 16983 href="https://fera.pl/gady-i-plazy/ogrzewanie-i-oswietlenie/oswietlenie-terrarium.html" 16984 class="dropdown-list-item" 16985 > 16986 <span>OÅwietlenie terrarium</span> 16987 </a> 16988 </li> 16989 </ul> 16990 </li> 16991 </ul> 16992 </li> 16993 16994 <li data-level="0" x-data="initMobileSubMenu"> 16995 <button 16996 type="button" 16997 class="dropdown-list-item" 16998 aria-controls="category-node-514-mobile-menu-panel" 16999 aria-expanded="false" 17000 x-ref="openSubMenuBtn" 17001 :aria-expanded="isOpen" 17002 :disabled="isOpen" 17003 @click="open" 17004 > 17005 <span>Dom</span> 17006 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 17007 </button> 17008 <ul 17009 id="category-node-514-mobile-menu-panel" 17010 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 17011 x-show="isOpen" 17012 x-transition:enter-start="opacity-0 translate-x-8" 17013 x-transition:enter-end="opacity-100 translate-x-0" 17014 x-transition:leave-start="opacity-100 translate-x-0" 17015 x-transition:leave-end="opacity-0 translate-x-8" 17016 @keydown.escape.stop.prevent="close" 17017 > 17018 <li data-level="1"> 17019 <button 17020 type="button" 17021 class="dropdown-list-item font-bold justify-normal" 17022 @click="close" 17023 x-ref="closeSubMenuBtn" 17024 > 17025 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 17026 Dom </button> 17027 </li> 17028 <li> 17029 <a 17030 href="https://fera.pl/dom.html" 17031 class="dropdown-list-item font-bold" 17032 >
17033 <span> 17034 Dom - zobacz wszystko </span> 17035 </a> 17036 </li> 17037 17038 <li data-level="1"> 17039 <a 17040 href="https://fera.pl/dom/detergenty-i-maseczki.html" 17041 class="dropdown-list-item" 17042 > 17043 <span>Detergenty i maseczki</span> 17044 </a> 17045 </li> 17046 17047 <li data-level="1"> 17048 <a 17049 href="https://fera.pl/dom/kosze-i-pojemniki.html" 17050 class="dropdown-list-item" 17051 > 17052 <span>Kosze i pojemniki</span> 17053 </a> 17054 </li> 17055 17056 <li data-level="1"> 17057 <a 17058 href="https://fera.pl/dom/skrzynie-do-warsztatu.html" 17059 class="dropdown-list-item" 17060 > 17061 <span>Skrzynie do warsztatu</span> 17062 </a> 17063 </li> 17064 17065 <li data-level="1"> 17066 <a 17067 href="https://fera.pl/dom/pozostale-dla-domu.html" 17068 class="dropdown-list-item" 17069 > 17070 <span>PozostaÅe dla domu</span> 17071 </a> 17072 </li> 17073 17074 <li data-level="1" x-data="initMobileSubMenu"> 17075 <button 17076 type="button" 17077 class="dropdown-list-item" 17078 aria-controls="category-node-519-mobile-menu-panel" 17079 aria-expanded="false" 17080 x-ref="openSubMenuBtn" 17081 :aria-expanded="isOpen" 17082 :disabled="isOpen" 17083 @click="open" 17084 > 17085 <span>Akcesoria ogrodnicze</span> 17086 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-right-solid"/></svg> 17087 </button> 17088 <ul 17089 id="category-node-519-mobile-menu-panel" 17090 class="z-10 flex flex-col gap-1.5 absolute inset-0 bg-white overflow-y-auto overscroll-y-contain transition duration-300" 17091 x-show="isOpen" 17092 x-transition:enter-start="opacity-0 translate-x-8" 17093 x-transition:enter-end="opacity-100 translate-x-0" 17094 x-transition:leave-start="opacity-100 translate-x-0" 17095 x-transition:leave-end="opacity-0 translate-x-8" 17096 @keydown.escape.stop.prevent="close" 17097 > 17098 <li data-level="2"> 17099 <button 17100 type="button" 17101 class="dropdown-list-item font-bold justify-normal" 17102 @click="close" 17103 x-ref="closeSubMenuBtn" 17104 > 17105 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" aria-hidden="true"><use href="#tk-icon-chevron-left-solid"/></svg> 17106 Akcesoria ogrodnicze </button> 17107 </li> 17108 <li> 17109 <a 17110 href="https://fera.pl/dom/akcesoria-ogrodnicze.html" 17111 class="dropdown-list-item font-bold" 17112 > 17113 <span> 17114 Akcesoria ogrodnicze - zobacz wszystko </span> 17115 </a> 17116 </li> 17117 17118 <li data-level="2"> 17119 <a 17120 href="https://fera.pl/dom/akcesoria-ogrodnicze/kosiarki.html" 17121 class="dropdown-list-item" 17122 > 17123 <span>Kosiarki</span> 17124 </a> 17125 </li> 17126 17127 <li data-level="2"> 17128 <a 17129 href="https://fera.pl/dom/akcesoria-ogrodnicze/siewniki-do-traw.html" 17130 class="dropdown-list-item" 17131 > 17132 <span>Siewniki do traw</span> 17133 </a> 17134 </li> 17135 17136 <li data-level="2"> 17137 <a 17138 href="https://fera.pl/dom/akcesoria-ogrodnicze/zraszacze-ogrodowe.html" 17139 class="dropdown-list-item" 17140 > 17141 <span>Zraszacze ogrodowe</span> 17142 </a> 17143 </li> 17144 17145 <li data-level="2"> 17146 <a 17147 href="https://fera.pl/dom/akcesoria-ogrodnicze/weze-ogrodowe.html" 17148 class="dropdown-list-item" 17149 > 17150 <span>WÄże ogrodowe</span> 17151 </a> 17152 </li> 17153 17154 <li data-level="2"> 17155 <a 17156 href="https://fera.pl/dom/akcesoria-ogrodnicze/wozki-i-bebny-na-weze-ogrodowe.html" 17157 class="dropdown-list-item" 17158 >
17159 <span>Wózki i bÄbny na wÄże ogrodowe</span> 17160 </a> 17161 </li> 17162 17163 <li data-level="2"> 17164 <a 17165 href="https://fera.pl/dom/akcesoria-ogrodnicze/narzedzia-ogrodnicze.html" 17166 class="dropdown-list-item" 17167 > 17168 <span>NarzÄdzia ogrodnicze</span> 17169 </a> 17170 </li> 17171 </ul> 17172 </li> 17173 17174 <li data-level="1"> 17175 <a 17176 href="https://fera.pl/dom/ochrona-przed-komarami.html" 17177 class="dropdown-list-item" 17178 > 17179 <span>Ochrona przed komarami</span> 17180 </a> 17181 </li> 17182 17183 <li data-level="1"> 17184 <a 17185 href="https://fera.pl/dom/ochrona-przed-szkodnikami.html" 17186 class="dropdown-list-item" 17187 > 17188 <span>Ochrona przed szkodnikami</span> 17189 </a> 17190 </li> 17191 </ul> 17192 </li> 17193 </ul> 17194 17195 <ul class="flex flex-col gap-1.5"> 17196 <li 17197 data-level="0" 17198 class="" 17199 x-data="initMobileSubMenu" 17200 > 17201 17202<a href="https://fera.pl/promocje/promocja-megaokazje.html" 17203 class="dropdown-list-item " 17204 data-menu="menu-224" 17205 > 17206 <span> 17207 Promocje </span> 17208</a> 17209 </li> 17210 <li 17211 data-level="0" 17212 class="" 17213 x-data="initMobileSubMenu" 17214 > 17215 <a href="https://fera.pl/inspiracje.html" 17216 class="dropdown-list-item " 17217 data-menu="menu-44" 17218 > 17219 <span> 17220 Inspiracje </span> 17221</a> 17222 17223 </li> 17224 <li 17225 data-level="0" 17226 class="" 17227 x-data="initMobileSubMenu" 17228 > 17229 17230<a href="https://fera.pl/blog" 17231 class="dropdown-list-item " 17232 data-menu="menu-43" 17233 > 17234 <span> 17235 Blog </span> 17236</a> 17237 </li> 17238 </ul> 17239 </nav> 17240 </div> 17241 <ul class="nav items flex flex-col gap-4"> 17242<li class="nav item"> 17243 <a href="https://fera.pl/install-fera-app/" target="_blank" class="btn btn-primary"> 17244 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 17245 <path fill-rule="evenodd" d="M3 4a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1V4zm2 2V5h1v1H5zM3 13a1 1 0 011-1h3a1 1 0 011 1v3a1 1 0 01-1 1H4a1 1 0 01-1-1v-3zm2 2v-1h1v1H5zM13 3a1 1 0 00-1 1v3a1 1 0 001 1h3a1 1 0 001-1V4a1 1 0 00-1-1h-3zm1 2v1h1V5h-1z" clip-rule="evenodd"/> 17246 <path d="M11 4a1 1 0 10-2 0v1a1 1 0 002 0V4zM10 7a1 1 0 011 1v1h2a1 1 0 110 2h-3a1 1 0 01-1-1V8a1 1 0 011-1zM16 9a1 1 0 100 2 1 1 0 000-2zM9 13a1 1 0 011-1h1a1 1 0 110 2v2a1 1 0 11-2 0v-3zM7 11a1 1 0 100-2H4a1 1 0 100 2h3zM17 13a1 1 0 01-1 1h-2a1 1 0 110-2h2a1 1 0 011 1zM16 17a1 1 0 100-2h-3a1 1 0 100 2h3z"/> 17247</svg> 17248 Pobierz aplikacjÄ </a> 17249</li> 17250</ul></dialog> 17251 <!-- BLOCK authentication-popup -->
17251<script> 17252 function initAuthentication() { 17253 return { 17254 open: false, 17255 close() { 17256 this.open = false; 17257 }, 17258 forceAuthentication: false, 17259 checkoutUrl: 'https://fera.pl/checkout/index/', 17260 errors: 0, 17261 hasCaptchaToken: 0, 17262 displayErrorMessage: false, 17263 errorMessages: [], 17264 setErrorMessages(message) { 17265 this.errorMessages = [message]; 17266 this.displayErrorMessage = true; 17267 }, 17268 submitForm() { 17269 // Do not rename $form, the variable is expected to be declared in the recaptcha output 17270 const $form = document.querySelector('#login-form'); 17271 17272 if (this.errors === 0) { 17273 this.dispatchLoginRequest($form); 17274 } 17275 }, 17276 onPrivateContentLoaded() { 17277 const data = this.$event.detail.data; 17278 const isLoggedIn = data.customer && data.customer.firstname; 17279 if (data.cart && !isLoggedIn) { 17280 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 17281 } 17282 }, 17283 redirectIfAuthenticated() { 17284 const event = this.$event; 17285 this.open = this.forceAuthentication; 17286 17287 if (event.detail && event.detail.url) { 17288 this.checkoutUrl = event.detail.url; 17289 } 17290 if (!this.forceAuthentication) { 17291 window.location.href = this.checkoutUrl; 17292 } 17293 }, 17294 resetErrors() { 17295 this.errors = 0; 17296 }, 17297 dispatchLoginRequest(form) { 17298 this.isLoading = true; 17299 const username = this.$refs['customer-email'].value; 17300 const password = this.$refs['customer-password'].value; 17301 const formKey = hyva.getFormKey(); 17302 const bodyFields = { 17303 'username': username, 17304 'password': password, 17305 'formKey': formKey 17306 }; 17307 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 17308 const recaptchaField = fieldName && form[fieldName]; 17309 if (recaptchaField) { 17310 bodyFields[fieldName] = recaptchaField.value; 17311 } 17312 fetch('https://fera.pl/customer/ajax/login/', { 17313 method: 'POST', 17314 headers: { 17315 'Content-Type': 'application/json', 17316 'X-Requested-With': 'XMLHttpRequest' 17317 }, 17318 body: JSON.stringify(bodyFields) 17319 } 17320 ).then(response => { 17321 return response.json() 17322 } 17323 ).then(data => { 17324 this.isLoading = false; 17325 if (data.errors) { 17326 this.setErrorMessages(data.message); 17327 this.errors = 1; 17328 this.hasCaptchaToken = 0; 17329 } else { 17330 window.location.href = this.checkoutUrl; 17331 } 17332 }); 17333 } 17334 } 17335 } 17336 17337 window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true}) 17338</script>
17338 17339<section id="authentication-popup" 17340 x-data="initAuthentication" 17341 @private-content-loaded.window="onPrivateContentLoaded" 17342 @toggle-authentication.window="redirectIfAuthenticated" 17343 @keydown.window.escape="close" 17344> 17345 <div 17346 class="backdrop" 17347 aria-hidden="true" 17348 x-cloak 17349 x-show="open" 17350 x-transition:enter="ease-in-out duration-500" 17351 x-transition:enter-start="opacity-0" 17352 x-transition:enter-end="opacity-100" 17353 x-transition:leave="ease-in-out duration-500" 17354 x-transition:leave-start="opacity-100" 17355 x-transition:leave-end="opacity-0" 17356 @click="close" 17357 ></div> 17358 <div role="dialog" 17359 aria-modal="true" 17360 @click.outside="close" 17361 class="inset-y-0 right-0 z-30 flex max-w-full fixed" 17362 x-cloak 17363 x-show="open" 17364 > 17365 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 17366 x-show="open" 17367 x-cloak 17368 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 17369 x-transition:enter-start="translate-x-full" 17370 x-transition:enter-end="translate-x-0" 17371 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 17372 x-transition:leave-start="translate-x-0" 17373 x-transition:leave-end="translate-x-full" 17374 > 17375 <div 17376 x-show="open" 17377 x-cloak 17378 x-transition:enter="ease-in-out duration-500" 17379 x-transition:enter-start="opacity-0" 17380 x-transition:enter-end="opacity-100" 17381 x-transition:leave="ease-in-out duration-500" 17382 x-transition:leave-start="opacity-100" 17383 x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2"> 17384 <button 17385 type="button" 17386 @click="close" 17387 aria-label="Zamknij panel" 17388 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black" 17389 > 17390 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 17391 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 17392</svg> 17393 </button> 17394 </div> 17395 <template x-if="open"> 17396 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 17397 <div class="mx-4"> 17398 <div class="message error mb-0" x-show="errors" x-cloak> 17399 <template x-for="(message, index) in errorMessages" :key="index"> 17400 <div> 17401 <template x-if="message"> 17402 <span x-html="message"></span> 17403 </template> 17404 </div> 17405 </template> 17406 </div> 17407 </div> 17408 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 17409 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 17410 <strong class="font-medium">Kontynuuj Podsumowanie używajÄ c swojego konta</strong> 17411 </p> 17412 17413 <form class="form form-login" 17414 method="post" 17415 @submit.prevent="submitForm" 17416 id="login-form" 17417 > 17418 <div class="fieldset login"> 17419 <div class="field email required"> 17420 <label class="label" for="form-login-username" form="login-form" > 17421 <span>Adres e-mail</span> 17422 </label> 17423 <div class="control"> 17424 <input name="username" 17425 id="form-login-username" 17426 x-ref="customer-email" 17427 @change="resetErrors" 17428 type="email" 17429 required 17430 autocomplete="off" 17431 class="form-input" 17432 > 17433 </div> 17434 </div> 17435 <div class="field password required"> 17436 <label for="form-login-password" class="label" form="login-form">
17437 <span>HasÅo</span> 17438 </label> 17439 <div class="control"> 17440 <input name="password" 17441 id="form-login-password" 17442 type="password" 17443 class="form-input" 17444 required 17445 x-ref="customer-password" 17446 autocomplete="off" 17447 @change="resetErrors" 17448 > 17449 </div> 17450 </div> 17451 17452 <input name="context" type="hidden" value="checkout"> 17453 <div class="actions-toolbar pt-6 pb-2"> 17454 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 17455 > 17456 Zaloguj siÄ </button> 17457 <a href="https://fera.pl/customer/account/forgotpassword/" 17458 > 17459 Nie pamiÄtasz hasÅa? </a> 17460 </div> 17461 17462 </div> 17463 </form> 17464 </div> 17465 <div class="mx-4"> 17466 </div> 17467 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm"> 17468 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 17469 <strong class="font-medium">Kontynuuj Podsumowanie jako nowy klient</strong> 17470 </p> 17471 17472 <div class="block-content"> 17473 <p class="mb-1"> 17474 Stworzenie konta ma wiele korzyÅci: </p> 17475 <ul class="list-disc pl-5"> 17476 <li> Zobacz zamówienie i stan wysyÅki</li> 17477 <li> Åledzenie historii zamówieÅ</li> 17478 <li> Zamawiaj szybciej</li> 17479 </ul> 17480 <div class="actions-toolbar mt-6 mb-2"> 17481 <a href="https://fera.pl/customer/account/create/" 17482 class="inline-flex btn btn-primary"> 17483 Utwórz konto </a> 17484 </div> 17485 </div> 17486 </div> 17487 </div> 17488 </template> 17489 </div> 17490 </div> 17491</section> 17492<!-- /BLOCK authentication-popup --></div> 17493</header><main id="maincontent" class="page-main-full-width"><div id="contentarea" tabindex="-1"></div> 17494<div class="page messages">
17494<script> 17495 window.defaultSuccessMessageTimeout = 5000; 17496 function initMessages() { 17497 return { 17498 messages: [], 17499 init() { 17500 if (window.mageMessages && window.mageMessages.length) { 17501 this.addMessages(window.mageMessages); 17502 } 17503 }, 17504 isEmpty() { 17505 return this.messages.reduce( 17506 function (isEmpty, message) { 17507 return isEmpty && message === undefined 17508 }, true 17509 ) 17510 }, 17511 hasMessages() { 17512 return !this.isEmpty(); 17513 }, 17514 hasMessage() { 17515 return !!this.message; 17516 }, 17517 removeMessage() { 17518 this.messages[this.index] = undefined; 17519 }, 17520 addMessages(messages, hideAfter) { 17521 messages.map((message) => { 17522 const isDuplicate = this.messages.some( 17523 m => m && m.text === message.text && m.type === message.type 17524 ); 17525 17526 if (isDuplicate) { 17527 return; 17528 } 17529 17530 this.messages = this.messages.concat(message); 17531 if (hideAfter === undefined && window.defaultSuccessMessageTimeout) { 17532 hideAfter = window.defaultSuccessMessageTimeout; 17533 } 17534 if (hideAfter) { 17535 this.setHideTimeOut(this.messages.length -1, hideAfter); 17536 } 17537 }); 17538 }, 17539 setHideTimeOut(messageIndex, hideAfter) { 17540 setTimeout((messageIndex) => { 17541 this.messages[messageIndex] = undefined; 17542 }, hideAfter, messageIndex); 17543 }, 17544 getIcon() { 17545 switch (this.message.type) { 17546 case 'success': 17547 return "<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"56\" height=\"56\" role=\"img\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"\/>\n<title>check-circle<\/title><\/svg>\n"; 17548 case 'error': 17549 case 'warning': 17550 return "<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"56\" height=\"56\" role=\"img\">\n <path fill-rule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"\/>\n<title>exclamation<\/title><\/svg>\n"; 17551 default: 17552 return "<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"56\" height=\"56\" role=\"img\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clip-rule=\"evenodd\"\/>\n<title>information-circle<\/title><\/svg>\n"; 17553 } 17554 }, 17555 getTitle() { 17556 switch (this.message.type) { 17557 case 'success': 17558 return 'ZakoÅczono pomyÅlnie' 17559 case 'error': 17560 return 'BÅÄ d' 17561 case 'warning': 17562 return 'Ostrzeżenie' 17563 case 'notice': 17564 return 'Notice' 17565 case 'info': 17566 return 'Info' 17567 default: 17568 return '' 17569 } 17570 }, 17571 getMessageStyle() { 17572 switch (this.message.type) { 17573 case 'success': 17574 return '[--message-lighter:theme(colors.green.50)] [--message:theme(colors.green.100)] [--message-darker:theme(colors.green.500)]' 17575 case 'error': 17576 return '[--message-lighter:theme(colors.red.50)] [--message:theme(colors.red.100)] [--message-darker:theme(colors.red.600)]' 17577 case 'warning': 17578 return '[--message-lighter:theme(colors.yellow.50)] [--message:theme(colors.yellow.100)] [--message-darker:theme(colors.yellow.500)]' 17579 case 'notice': 17580 case 'info': 17581 return '[--message-lighter:theme(colors.blue.50)] [--message:theme(colors.blue.100)] [--message-darker:theme(colors.blue.500)]' 17582 default: 17583 return '[--message-lighter:theme(colors.white)] [--message:theme(colors.brandTertiary.100)] [--message-darker:theme(colors.brandTertiary.300)]' 17584 } 17585 }, 17586 getMessageUiId() { 17587 return 'message-' + this.message.type; 17588 }, 17589 eventListeners: { 17590 ['@messages-loaded.window'](event) { 17591 this.addMessages(event.detail.messages, event.detail.hideAfter) 17592 }, 17593 ['@private-content-loaded.window'](event) { 17594 const data = event.detail.data; 17595 if ( 17596 data.messages && 17597 data.messages.messages && 17598 data.messages.messages.length 17599 ) { 17600 this.addMessages(data.messages.messages); 17601 } 17602 }, 17603 ['@clear-messages.window']() { 17604 this.messages = []; 17605 } 17606 } 17607 } 17608 } 17609 window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true}) 17610</script>
17610 17611<section 17612 id="messages" 17613 x-data="initMessages" 17614 x-bind="eventListeners" 17615 aria-live="assertive" 17616 role="alert" 17617> 17618 <template x-if="hasMessages"> 17619 <div class="messages container absolute top-3 inset-x-0 flex flex-col 17620 items-end"> 17621 <template x-for="(message, index) in messages" :key="index"> 17622 <template x-if="hasMessage"> 17623 <div 17624 class="message max-w-screen-sm justify-start gap-1 bg-[var(--message-lighter)] border border-[var(--message-darker)] text-brandSecondary-900 17625 items-start" 17626 :ui-id="getMessageUiId" 17627 :class="getMessageStyle" 17628 > 17629 <div> 17630 <div 17631 x-text="getTitle" 17632 class="mb-1 font-bold" 17633 ></div> 17634 <div x-html="message.text"></div> 17635 </div> 17636 <button 17637 type="button" 17638 class="-mt-2 -mr-2 ml-auto p-2 rounded-md transition-colors text-[var(--message-darker)] bg-transparent hover:bg-[var(--message)] 17639 " 17640 aria-label="Zamknij wiadomoÅÄ" 17641 @click.prevent="removeMessage" 17642 > 17643 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 17644 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 17645</svg> 17646 </button> 17647 </div> 17648 </template> 17649 </template> 17650 </div> 17651 </template> 17652</section> 17653</div> 17654<nav class="container breadcrumbs py-3" aria-label="Breadcrumb"> 17655 17656 <ol class="overflow-x-auto overscroll-x-contain snap text-sm text-slate-700 flex" 17657 x-data="initBreadcrumbs" 17658 @resize.window.debounce="checkIfIsSticky" 17659 @scroll="checkIfIsSticky" 17660 :class="setMaskOverflowClass" 17661 > 17662 <li 17663 class="flex items-center whitespace-nowrap" 17664 x-ref="firstItem" 17665 > 17666 17667 17668 <a 17669 href="https://fera.pl/" 17670 class="flex items-center gap-1 w-full hover:text-primary hover:underline" 17671 aria-label="Przejdź na stronę główną" 17672 > 17673 <span class="text-ellipsis overflow-hidden">Strona gÅówna</span> 17674 </a> 17675 </li> 17676 <li 17677 class="flex items-center whitespace-nowrap" 17678 x-ref="lastItem" 17679 :class="setIsStickyClasses" 17680 > 17681 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="separator shrink-0 mx-1 text-slate-400 rtl:rotate-180" width="12" height="12" aria-hidden="true"> 17682 <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/> 17683</svg> 17684 17685 <span 17686 aria-hidden="true" 17687 class="separator block ml-2.5 pl-2.5 border-l border-slate-400 h-full" 17688 x-show="isSticky" 17689 x-cloak 17690 ></span> 17691
17692 <span 17693 class="flex items-center gap-1 w-full" 17694 aria-current="page" 17695 aria-label="Blog" 17696 > 17697 <span class="text-ellipsis overflow-hidden">Blog</span> 17698 </span> 17699 </li> 17700 </ol> 17701</nav> 17702 17703
17703<script type="application/ld+json"> 17704 { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/fera.pl\/","name":"Strona g\u0142\u00f3wna"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/fera.pl\/blog","name":"Blog"}}] } 17705 </script>
17705 17706
17707<script> 17708 document.addEventListener('alpine:init', () => { 17709 Alpine.data('initBreadcrumbs', () => ({ 17710 isSticky: false, 17711 isHidden: false, 17712 init() { 17713 this.checkIfIsSticky(); 17714 }, 17715 setIsStickyClasses() { 17716 const baseClasses = 'sticky bg-container right-0' 17717 + ' after:absolute after:inset-y-0 after:left-full after:w-[theme(container.padding)] after:bg-container'; 17718 const isStickyClasses = '[&>svg]:hidden pr-[theme(container.padding)] before:absolute before:inset-y-0 before:right-full before:w-8' 17719 + ' before:bg-gradient-to-l before:from-[theme(backgroundColor.container.DEFAULT)]'; 17720 17721 return this.isSticky ? baseClasses + ' ' + isStickyClasses : baseClasses; 17722 }, 17723 setMaskOverflowClass() { 17724 return this.isHidden ? 'mask-overflow mask-overflow-start' : ''; 17725 }, 17726 checkIfIsSticky() { 17727 const breadcrumbsList = this.$root; 17728 const firstItem = this.$refs.firstItem; 17729 17730 this.isSticky = breadcrumbsList.scrollLeft + breadcrumbsList.clientWidth <= breadcrumbsList.scrollWidth - 1; 17731 17732 new IntersectionObserver(([e]) => { 17733 this.isHidden = e.intersectionRatio < 1; 17734 }, { root: this.$root ,threshold: [0, 1] }).observe(firstItem); 17735 } 17736 })); 17737 }); 17738</script>
17738 17739 17740 17741<div class="columns"><div class="column main"> 17742
17742<script> 17743 /* e.g. hyva theme */ 17744 document.addEventListener('DOMContentLoaded', function(){ 17745 var items = document.getElementsByClassName('mfblogunveil'); 17746 var el, url; 17747 if (items.length) { 17748 for (var i=0; i<items.length;i++) { 17749 el = items[i]; 17750 url = el.getAttribute('data-original'); 17751 if (!url) { 17752 continue; 17753 }; 17754 if ('IMG' == el.tagName) { 17755 el.src = url; 17756 } else { 17757 el.style.backgroundImage = "url('" + url + "')"; 17758 } 17759 } 17760 } 17761 }); 17762 </script>
17762 17763<div class="index-description w-full bg-brandTertiary-100 pt-12 px-8 gap-6 flex flex-col items-center box-border text-center"> 17764 <div class="w-full flex flex-col items-center justify-center gap-2 content-stretch"> 17765 <div class="text-brandSecondary-900 text-lg font-bold">Blog</div> 17766 <h1 class="text-brandSecondary-900 text-3xl font-extrabold font-heading"> 17767 Witamy na naszym blogu </h1> 17768 </div> 17769 <div class="w-full max-w-[820px]"> 17770 <div class="text-brandSecondary-700 text-base font-semibold leading-6"> 17771 Znajdziesz tu wszystko o opiece nad zwierzakami. Od porad zdrowotnych po trendy w akcesoriach. Postaramy siÄ pomóc Ci zrozumieÄ potrzeby czworonoga i dostarczyÄ inspiracji do zabaw. DoÅÄ cz do spoÅecznoÅci miÅoÅników zwierzÄ t! </div> 17772 </div> 17773 </div> 17774 17775<div class="blog-search-wrapper w-full bg-brandTertiary-100 flex flex-col items-center box-border py-6 px-8"> 17776 <div class="max-w-[820px] w-full relative"> 17777 <form class="form blog-search flex items-start w-full" id="blog_search_mini_form" 17778 action="https://fera.pl/blog/search/" 17779 method="get"> 17780 <div class="relative flex-1"> 17781 <input id="blog_search" 17782 type="text" 17783 name="q" 17784 value="" 17785 placeholder="Szukaj artykuÅu..." 17786 class="w-full pl-6 pr-4 py-4 rounded-l-[18px] border border-stone-200 bg-white text-base font-sans text-brandSecondary-700 focus:outline-none focus:border-brandPrimary-500 shadow-sm box-border" 17787 maxlength="128" role="combobox" 17788 aria-haspopup="false" 17789 aria-autocomplete="both" 17790 autocomplete="off" 17791 aria-label="Szukaj"> 17792 </div> 17793 <button type="submit" 17794 class="w-[59px] h-[58px] bg-stone-700 text-white rounded-r-[15px] flex items-center justify-center hover:bg-black transition-colors shrink-0"> 17795 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-6 h-6" width="24" height="24" role="img"> 17796 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 17797<title>search</title></svg> 17798 </button> 17799 </form> 17800 </div> 17801</div> 17802
17803<script> 17804 document.addEventListener('DOMContentLoaded', function() { 17805 var form = document.getElementById('blog_search_mini_form'); 17806 form.addEventListener('submit', function(event) { 17807 event.preventDefault(); 17808 var value = document.getElementById('blog_search').value; 17809 if (value) { 17810 var a = form.action; 17811 window.location = a + ( ('/' != a.charAt(a.length - 1)) ? '/' : '' ) + encodeURI(value) + '/'; 17812 } 17813 return false; 17814 }); 17815 }); 17816</script>
17816 17817<div class="container mx-auto px-4 flex flex-col gap-6"> 17818 17819
17820<script> 17821 function categoryTree() { 17822 return { 17823 mobileOpen: false, 17824 currentPath: '', 17825 activeTitle: 'Wszystkie\u0020artyku\u0142y', 17826 clsActive: '!bg-brandPrimary-50 !outline-brandPrimary-500 !text-brandPrimary-800 hover:!bg-brandPrimary-50 hover:!outline-brandPrimary-500 hover:!text-brandPrimary-800 font-bold', 17827 clsInactive: '', 17828 17829 init() { 17830 this.currentPath = this.normalizeUrl(window.location.href); 17831 this.$nextTick(() => { 17832 this.updateMobileTitle(); 17833 }); 17834 }, 17835 normalizeUrl(url) { 17836 try { 17837 const urlObj = new URL(url, window.location.origin); 17838 return urlObj.pathname.replace(/\/+$/, ''); 17839 } catch (e) { 17840 return ''; 17841 } 17842 }, 17843 isActive(url) { 17844 if (!url) return false; 17845 return this.normalizeUrl(url) === this.currentPath; 17846 }, 17847 isParentActive(parentUrl, childUrls = []) { 17848 if (this.isActive(parentUrl)) return true; 17849 if (childUrls && childUrls.length > 0) { 17850 return childUrls.some(childUrl => this.isActive(childUrl)); 17851 } 17852 return false; 17853 }, 17854 updateMobileTitle() { 17855 const links = this.$root ? this.$root.querySelectorAll('a[href]') : []; 17856 const activeLink = Array.from(links).find(link => this.isActive(link.href)); 17857 if (activeLink && activeLink.innerText) { 17858 this.activeTitle = activeLink.innerText.replace(/^[-â¢\s]+/, ''); 17859 } 17860 } 17861 } 17862 } 17863</script>
17863 17864 17865<div class="border-b border-slate-100 w-full mb-1.5 relative z-30" x-data="categoryTree()"> 17866 17867 <!-- MOBILE VIEW --> 17868 <div class="md:hidden relative pb-4 px-1"> 17869 <button @click="mobileOpen = !mobileOpen" @click.outside="mobileOpen = false" type="button" 17870 class="w-full px-3.5 py-2.5 bg-white rounded-md outline outline-1 outline-offset-[-1px] outline-slate-300 inline-flex justify-between items-center gap-2 overflow-hidden hover:bg-gray-50 transition-colors"> 17871 <span class="flex-1 text-left text-brandPrimary-900 text-base font-normal font-sans leading-6 truncate" 17872 x-text="activeTitle">Wszystkie artykuÅy</span> 17873 <span class="w-5 h-5 text-gray-600 transition-transform duration-200" 17874 :class="{ 'rotate-180': mobileOpen }"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-5 h-5" width="24" height="24" role="img"> 17875 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 17876<title>chevron-down</title></svg> 17877</span> 17878 </button> 17879 17880 <div x-show="mobileOpen" x-cloak x-transition 17881 class="absolute z-50 left-0 right-0 mt-2 mx-1 bg-white rounded-md shadow-xl border border-slate-100 py-2 max-h-[80vh] overflow-y-auto"> 17882 <a href="https://fera.pl/blog" 17883 class="block px-4 py-3 text-sm font-sans transition-colors truncate border-l-4" 17884 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-700 hover:bg-slate-50'"> 17885 Wszystkie artykuÅy </a> 17886 <a href="https://fera.pl/blog/pies" 17887 class="block px-4 py-3 text-sm font-sans transition-colors truncate border-l-4" 17888 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-700 hover:bg-slate-50'"> 17889 Pies </a> 17890 <a href="https://fera.pl/blog/pies/zachowanie-psa" 17891 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17892 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzachowanie\u002Dpsa') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17893 - Zachowanie psa </a> 17894 <a href="https://fera.pl/blog/pies/zywienie-psow" 17895 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17896 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzywienie\u002Dpsow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17897 - Å»ywienie psów </a> 17898 <a href="https://fera.pl/blog/pies/zdrowie-psa-profilaktyka-i-choroby" 17899 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17900 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzdrowie\u002Dpsa\u002Dprofilaktyka\u002Di\u002Dchoroby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17901 - Zdrowie psa - profilaktyka i choroby </a> 17902 <a href="https://fera.pl/blog/pies/rasy-psow" 17903 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17904 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Frasy\u002Dpsow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17905 - Rasy psów </a> 17906 <a href="https://fera.pl/blog/pies/zycie-z-psem" 17907 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17908 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzycie\u002Dz\u002Dpsem') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17909 - Å»ycie z psem </a> 17910 <a href="https://fera.pl/blog/kot" 17911 class="block px-4 py-3 text-sm font-sans transition-colors truncate border-l-4" 17912 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-700 hover:bg-slate-50'"> 17913 Kot </a> 17914 <a href="https://fera.pl/blog/kot/zachowanie-kota" 17915 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17916 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzachowanie\u002Dkota') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17917 - Zachowanie kota </a> 17918 <a href="https://fera.pl/blog/kot/zywienie-kotow" 17919 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17920 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzywienie\u002Dkotow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17921 - Å»ywienie kotów </a> 17922 <a href="https://fera.pl/blog/kot/zdrowie-kota-profilaktyka-i-choroby" 17923 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17924 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzdrowie\u002Dkota\u002Dprofilaktyka\u002Di\u002Dchoroby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17925 - Zdrowie kota - profilaktyka i choroby </a> 17926 <a href="https://fera.pl/blog/kot/rasy-kotow" 17927 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17928 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Frasy\u002Dkotow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17929 - Rasy kotów </a> 17930 <a href="https://fera.pl/blog/kot/zycie-z-kotem" 17931 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17932 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzycie\u002Dz\u002Dkotem') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'">
17933 - Å»ycie z kotem </a> 17934 <a href="https://fera.pl/blog/gryzonie-i-kroliki" 17935 class="block px-4 py-3 text-sm font-sans transition-colors truncate border-l-4" 17936 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-700 hover:bg-slate-50'"> 17937 Gryzonie i króliki </a> 17938 <a href="https://fera.pl/blog/gryzonie-i-kroliki/zywienie-krolikow-i-gryzoni" 17939 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17940 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fzywienie\u002Dkrolikow\u002Di\u002Dgryzoni') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17941 - Å»ywienie królików i gryzoni </a> 17942 <a href="https://fera.pl/blog/gryzonie-i-kroliki/zdrowie-profilaktyka-i-choroby" 17943 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17944 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fzdrowie\u002Dprofilaktyka\u002Di\u002Dchoroby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17945 - Zdrowie - profilaktyka i choroby </a> 17946 <a href="https://fera.pl/blog/gryzonie-i-kroliki/encyklopedia-ras" 17947 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17948 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fencyklopedia\u002Dras') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17949 - Encyklopedia ras </a> 17950 <a href="https://fera.pl/blog/gryzonie-i-kroliki/ciekawostki" 17951 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17952 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fciekawostki') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17953 - Ciekawostki </a> 17954 <a href="https://fera.pl/blog/pozostale-zwierzeta" 17955 class="block px-4 py-3 text-sm font-sans transition-colors truncate border-l-4" 17956 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-700 hover:bg-slate-50'"> 17957 PozostaÅe zwierzÄta </a> 17958 <a href="https://fera.pl/blog/pozostale-zwierzeta/ssaki" 17959 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17960 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta\u002Fssaki') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17961 - Ssaki </a> 17962 <a href="https://fera.pl/blog/pozostale-zwierzeta/ryby" 17963 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17964 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u
17964002Dzwierzeta\u002Fryby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17965 - Ryby </a> 17966 <a href="https://fera.pl/blog/pozostale-zwierzeta/ptaki" 17967 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17968 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta\u002Fptaki') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17969 - Ptaki </a> 17970 <a href="https://fera.pl/blog/pozostale-zwierzeta/gady-i-plazy" 17971 class="block pl-8 pr-4 py-2 text-sm font-sans transition-colors truncate border-l-4" 17972 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta\u002Fgady\u002Di\u002Dplazy') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-500 hover:text-slate-800'"> 17973 - Gady i pÅazy </a> 17974 <a href="https://fera.pl/blog/fera-o-nas" 17975 class="block px-4 py-3 text-sm font-sans transition-colors truncate border-l-4" 17976 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Ffera\u002Do\u002Dnas') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-700 hover:bg-slate-50'"> 17977 Fera - o nas </a> 17978 <a href="https://fera.pl/blog/aktualnosci" 17979 class="block px-4 py-3 text-sm font-sans transition-colors truncate border-l-4" 17980 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Faktualnosci') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'border-transparent text-slate-700 hover:bg-slate-50'"> 17981 AktualnoÅci </a> 17982 </div> 17983 </div> 17984 17985 <!-- DESKTOP VIEW --> 17986 <nav class="hidden md:flex justify-start items-center gap-3 overflow-x-visible flex-wrap w-full relative z-30"> 17987 17988 <div class="relative group" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false"> 17989 17990 <a href="https://fera.pl/blog" 17991 class="px-4 py-2 rounded-md text-sm font-medium font-sans leading-5 flex justify-center items-center gap-2.5 whitespace-nowrap outline outline-2 outline-offset-[-2px] transition-all duration-200 bg-white outline-slate-200 text-slate-800 hover:outline-brandPrimary-300 hover:text-brandPrimary-700 hover:bg-slate-50 cursor-pointer max-w-[240px]" 17992 :class='isParentActive("https\u003A\u002F\u002Ffera.pl\u002Fblog", []) ? clsActive : clsInactive'> 17993 17994 <span class="truncate">Wszystkie artykuÅy</span> 17995 17996 </a> 17997 17998 </div> 17999 18000 <div class="relative group" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false"> 18001 18002 <a href="https://fera.pl/blog/pies" 18003 class="px-4 py-2 rounded-md text-sm font-medium font-sans leading-5 flex justify-center items-center gap-2.5 whitespace-nowrap outline outline-2 outline-offset-[-2px] transition-all duration-200 bg-white outline-slate-200 text-slate-800 hover:outline-brandPrimary-300 hover:text-brandPrimary-700 hover:bg-slate-50 cursor-pointer max-w-[240px]" 18004 :class='isParentActive("https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies", ["https:\/\/fera.pl\/blog\/pies\/zycie-z-psem","https:\/\/fera.pl\/blog\/pies\/rasy-psow","https:\/\/fera.pl\/blog\/pies\/zdrowie-psa-profilaktyka-i-choroby","https:\/\/fera.pl\/blog\/pies\/zywienie-psow","https:\/\/fera.pl\/blog\/pies\/zachowanie-psa"]) ? clsActive : clsInactive'> 18005
18006 <span class="truncate">Pies</span> 18007 18008 <span class="w-4 h-4 transition-transform duration-200 opacity-60 group-hover:opacity-100" 18009 :class="{ 'rotate-180': open }"> 18010 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 18011 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 18012<title>chevron-down</title></svg> 18013 </span> 18014 </a> 18015 18016 <div x-show="open" x-cloak 18017 x-transition:enter="transition ease-out duration-100" 18018 x-transition:enter-start="opacity-0 translate-y-2" 18019 x-transition:enter-end="opacity-100 translate-y-0" 18020 x-transition:leave="transition ease-in duration-75" 18021 x-transition:leave-start="opacity-100 translate-y-0" 18022 x-transition:leave-end="opacity-0 translate-y-2" 18023 class="absolute left-0 top-full mt-1 w-64 bg-white rounded-md shadow-xl border border-slate-200 py-1 z-50 flex flex-col max-h-[60vh] overflow-y-auto"> 18024 18025 <a href="https://fera.pl/blog/pies/zachowanie-psa" 18026 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18027 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzachowanie\u002Dpsa') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18028 Zachowanie psa </a> 18029 <a href="https://fera.pl/blog/pies/zywienie-psow" 18030 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18031 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzywienie\u002Dpsow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18032 Żywienie psów </a> 18033 <a href="https://fera.pl/blog/pies/zdrowie-psa-profilaktyka-i-choroby" 18034 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18035 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzdrowie\u002Dpsa\u002Dprofilaktyka\u002Di\u002Dchoroby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18036 Zdrowie psa - profilaktyka i choroby </a> 18037 <a href="https://fera.pl/blog/pies/rasy-psow" 18038 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18039 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Frasy\u002Dpsow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18040 Rasy psów </a> 18041 <a href="https://fera.pl/blog/pies/zycie-z-psem" 18042 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18043 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpies\u002Fzycie\u002Dz\u002Dpsem') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18044 Życie z psem </a> 18045 18046 </div> 18047 </div> 18048 18049 <div class="relative group" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false"> 18050 18051 <a href="https://fera.pl/blog/kot" 18052 class="px-4 py-2 rounded-md text-sm font-medium font-sans leading-5 flex justify-center items-center gap-2.5 whitespace-nowrap outline outline-2 outline-offset-[-2px] transition-all duration-200 bg-white outline-slate-200 text-slate-800 hover:outline-brandPrimary-300 hover:text-brandPrimary-700 hover:bg-slate-50 cursor-pointer max-w-[240px]" 18053 :class='isParentActive("https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot", ["https:\/\/fera.pl\/blog\/kot\/zycie-z-kotem","https:\/\/fera.pl\/blog\/kot\/rasy-kotow","https:\/\/fera.pl\/blog\/kot\/zdrowie-kota-profilaktyka-i-choroby","https:\/\/fera.pl\/blog\/kot\/zywienie-kotow","https:\/\/fera.pl\/blog\/kot\/zachowanie-kota"]) ? clsActive : clsInactive'> 18054
18055 <span class="truncate">Kot</span> 18056 18057 <span class="w-4 h-4 transition-transform duration-200 opacity-60 group-hover:opacity-100" 18058 :class="{ 'rotate-180': open }"> 18059 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 18060 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 18061<title>chevron-down</title></svg> 18062 </span> 18063 </a> 18064 18065 <div x-show="open" x-cloak 18066 x-transition:enter="transition ease-out duration-100" 18067 x-transition:enter-start="opacity-0 translate-y-2" 18068 x-transition:enter-end="opacity-100 translate-y-0" 18069 x-transition:leave="transition ease-in duration-75" 18070 x-transition:leave-start="opacity-100 translate-y-0" 18071 x-transition:leave-end="opacity-0 translate-y-2" 18072 class="absolute left-0 top-full mt-1 w-64 bg-white rounded-md shadow-xl border border-slate-200 py-1 z-50 flex flex-col max-h-[60vh] overflow-y-auto"> 18073 18074 <a href="https://fera.pl/blog/kot/zachowanie-kota" 18075 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18076 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzachowanie\u002Dkota') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18077 Zachowanie kota </a> 18078 <a href="https://fera.pl/blog/kot/zywienie-kotow" 18079 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18080 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzywienie\u002Dkotow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18081 Żywienie kotów </a> 18082 <a href="https://fera.pl/blog/kot/zdrowie-kota-profilaktyka-i-choroby" 18083 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18084 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzdrowie\u002Dkota\u002Dprofilaktyka\u002Di\u002Dchoroby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18085 Zdrowie kota - profilaktyka i choroby </a> 18086 <a href="https://fera.pl/blog/kot/rasy-kotow" 18087 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18088 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Frasy\u002Dkotow') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18089 Rasy kotów </a> 18090 <a href="https://fera.pl/blog/kot/zycie-z-kotem" 18091 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18092 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fkot\u002Fzycie\u002Dz\u002Dkotem') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'">
18093 Życie z kotem </a> 18094 18095 </div> 18096 </div> 18097 18098 <div class="relative group" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false"> 18099 18100 <a href="https://fera.pl/blog/gryzonie-i-kroliki" 18101 class="px-4 py-2 rounded-md text-sm font-medium font-sans leading-5 flex justify-center items-center gap-2.5 whitespace-nowrap outline outline-2 outline-offset-[-2px] transition-all duration-200 bg-white outline-slate-200 text-slate-800 hover:outline-brandPrimary-300 hover:text-brandPrimary-700 hover:bg-slate-50 cursor-pointer max-w-[240px]" 18102 :class='isParentActive("https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki", ["https:\/\/fera.pl\/blog\/gryzonie-i-kroliki\/ciekawostki","https:\/\/fera.pl\/blog\/gryzonie-i-kroliki\/encyklopedia-ras","https:\/\/fera.pl\/blog\/gryzonie-i-kroliki\/zdrowie-profilaktyka-i-choroby","https:\/\/fera.pl\/blog\/gryzonie-i-kroliki\/zywienie-krolikow-i-gryzoni"]) ? clsActive : clsInactive'> 18103 18104 <span class="truncate">Gryzonie i króliki</span> 18105 18106 <span class="w-4 h-4 transition-transform duration-200 opacity-60 group-hover:opacity-100" 18107 :class="{ 'rotate-180': open }"> 18108 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 18109 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 18110<title>chevron-down</title></svg> 18111 </span> 18112 </a> 18113 18114 <div x-show="open" x-cloak 18115 x-transition:enter="transition ease-out duration-100" 18116 x-transition:enter-start="opacity-0 translate-y-2" 18117 x-transition:enter-end="opacity-100 translate-y-0" 18118 x-transition:leave="transition ease-in duration-75" 18119 x-transition:leave-start="opacity-100 translate-y-0" 18120 x-transition:leave-end="opacity-0 translate-y-2" 18121 class="absolute left-0 top-full mt-1 w-64 bg-white rounded-md shadow-xl border border-slate-200 py-1 z-50 flex flex-col max-h-[60vh] overflow-y-auto"> 18122 18123 <a href="https://fera.pl/blog/gryzonie-i-kroliki/zywienie-krolikow-i-gryzoni" 18124 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18125 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fzywienie\u002Dkrolikow\u002Di\u002Dgryzoni') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18126 Żywienie królików i gryzoni </a> 18127 <a href="https://fera.pl/blog/gryzonie-i-kroliki/zdrowie-profilaktyka-i-choroby" 18128 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18129 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fzdrowie\u002Dprofilaktyka\u002Di\u002Dchoroby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18130 Zdrowie - profilaktyka i choroby </a> 18131 <a href="https://fera.pl/blog/gryzonie-i-kroliki/encyklopedia-ras" 18132 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18133 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fencyklopedia\u002Dras') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18134 Encyklopedia ras </a> 18135 <a href="https://fera.pl/blog/gryzonie-i-kroliki/ciekawostki" 18136 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18137 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fgryzonie\u002Di\u002Dkroliki\u002Fciekawostki') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18138 Ciekawostki </a> 18139 18140 </div> 18141 </div> 18142 18143 <div class="relative group" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false"> 18144 18145 <a href="https://fera.pl/blog/pozostale-zwierzeta" 18146 class="px-4 py-2 rounded-md text-sm font-medium font-sans leading-5 flex justify-center items-center gap-2.5 whitespace-nowrap outline outline-2 outline-offset-[-2px] transition-all duration-200 bg-white outline-slate-200 text-slate-800 hover:outline-brandPrimary-300 hover:text-brandPrimary-700 hover:bg-slate-50 cursor-pointer max-w-[240px]" 18147 :class='isParentActive("https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u
18147002Dzwierzeta", ["https:\/\/fera.pl\/blog\/pozostale-zwierzeta\/gady-i-plazy","https:\/\/fera.pl\/blog\/pozostale-zwierzeta\/ptaki","https:\/\/fera.pl\/blog\/pozostale-zwierzeta\/ryby","https:\/\/fera.pl\/blog\/pozostale-zwierzeta\/ssaki"]) ? clsActive : clsInactive'> 18148 18149 <span class="truncate">PozostaÅe zwierzÄta</span> 18150 18151 <span class="w-4 h-4 transition-transform duration-200 opacity-60 group-hover:opacity-100" 18152 :class="{ 'rotate-180': open }"> 18153 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 18154 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 18155<title>chevron-down</title></svg> 18156 </span> 18157 </a> 18158 18159 <div x-show="open" x-cloak 18160 x-transition:enter="transition ease-out duration-100" 18161 x-transition:enter-start="opacity-0 translate-y-2" 18162 x-transition:enter-end="opacity-100 translate-y-0" 18163 x-transition:leave="transition ease-in duration-75" 18164 x-transition:leave-start="opacity-100 translate-y-0" 18165 x-transition:leave-end="opacity-0 translate-y-2" 18166 class="absolute left-0 top-full mt-1 w-64 bg-white rounded-md shadow-xl border border-slate-200 py-1 z-50 flex flex-col max-h-[60vh] overflow-y-auto"> 18167 18168 <a href="https://fera.pl/blog/pozostale-zwierzeta/ssaki" 18169 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18170 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta\u002Fssaki') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18171 Ssaki </a> 18172 <a href="https://fera.pl/blog/pozostale-zwierzeta/ryby" 18173 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18174 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta\u002Fryby') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18175 Ryby </a> 18176 <a href="https://fera.pl/blog/pozostale-zwierzeta/ptaki" 18177 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18178 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta\u002Fptaki') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18179 Ptaki </a> 18180 <a href="https://fera.pl/blog/pozostale-zwierzeta/gady-i-plazy" 18181 class="block px-4 py-2.5 text-sm transition-colors border-l-4" 18182 :class="isActive('https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Fpozostale\u002Dzwierzeta\u002Fgady\u002Di\u002Dplazy') ? 'bg-brandPrimary-50 text-brandPrimary-800 border-brandPrimary-500 font-bold' : 'text-slate-700 hover:bg-brandPrimary-50 hover:text-brandPrimary-800 border-transparent'"> 18183 Gady i pÅazy </a> 18184 18185 </div> 18186 </div> 18187 18188 <div class="relative group" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false"> 18189 18190 <a href="https://fera.pl/blog/fera-o-nas" 18191 class="px-4 py-2 rounded-md text-sm font-medium font-sans leading-5 flex justify-center items-center gap-2.5 whitespace-nowrap outline outline-2 outline-offset-[-2px] transition-all duration-200 bg-white outline-slate-200 text-slate-800 hover:outline-brandPrimary-300 hover:text-brandPrimary-700 hover:bg-slate-50 cursor-pointer max-w-[240px]" 18192 :class='isParentActive("https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Ffera\u002Do\u002Dnas", []) ? clsActive : clsInactive'> 18193
18194 <span class="truncate">Fera - o nas</span> 18195 18196 </a> 18197 18198 </div> 18199 18200 <div class="relative group" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false"> 18201 18202 <a href="https://fera.pl/blog/aktualnosci" 18203 class="px-4 py-2 rounded-md text-sm font-medium font-sans leading-5 flex justify-center items-center gap-2.5 whitespace-nowrap outline outline-2 outline-offset-[-2px] transition-all duration-200 bg-white outline-slate-200 text-slate-800 hover:outline-brandPrimary-300 hover:text-brandPrimary-700 hover:bg-slate-50 cursor-pointer max-w-[240px]" 18204 :class='isParentActive("https\u003A\u002F\u002Ffera.pl\u002Fblog\u002Faktualnosci", []) ? clsActive : clsInactive'> 18205 18206 <span class="truncate">AktualnoÅci</span> 18207 18208 </a> 18209 18210 </div> 18211 </nav> 18212</div> 18213 <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-
182135"> 18214 18215 <article 18216 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18217 <a href="https://fera.pl/jamnik-charakter-odmiany-zdrowie-pielegnacja-cena.html" 18218 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18219 aria-label="Read more about Jamnik: odmiany, charakter i cena. Co warto wiedzieć o tej rasie? "> 18220 <img 18221 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18222 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/jamnik_foto_1.jpg" 18223 alt="Jamnik: odmiany, charakter i cena. Co warto wiedzieć o tej rasie? " 18224 loading="lazy" 18225 width="329" 18226 height="140" 18227 /> 18228 </a> 18229 18230 <div class="p-3 flex flex-col gap-3 flex-grow"> 18231 <div class="flex flex-col gap-2 flex-grow"> 18232 <div class="flex justify-between items-end"> 18233 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18234 Rasy psów </span> 18235 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18236 16.09.2026 </span> 18237 </div> 18238 18239 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18240 <a href="https://fera.pl/jamnik-charakter-odmiany-zdrowie-pielegnacja-cena.html" class="hover:underline"> 18241 Jamnik: odmiany, charakter i cena. Co warto wiedzieÄ o tej rasie? </a> 18242 </h3> 18243 18244 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18245 Jamnik to niewielki, ale odważny i wytrzymaÅy pies myÅliwski, którego trudno pomyliÄ z innÄ rasÄ psów. Charakterystyczne krótkie koÅczyny, wydÅużony tuÅów, opadajÄ ce uszy i mocna budowa ciaÅa powstaÅy w zwiÄ zku z jego pierwotnym przeznaczeniem â prac... </div> 18246 </div> 18247 18248 <div class="mt-auto pt-1"> 18249 <a href="https://fera.pl/jamnik-charakter-odmiany-zdrowie-pielegnacja-cena.html" 18250 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18251 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18252 Przejdź do artykuÅu </span> 18253 </a> 18254 </div> 18255 </div> 18256 </article> 18257 18258 <article 18259 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18260 <a href="https://fera.pl/labrador-retriever-najwazniejsze-informacje-o-rasie.html" 18261 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18262 aria-label="Read more about Labrador retriever: charakter, cena, wygląd, zdrowie i wymagania rasy"> 18263 <img 18264 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18265 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/labrador_foto_1.jpg" 18266 alt="Labrador retriever: charakter, cena, wygląd, zdrowie i wymagania rasy" 18267 loading="lazy" 18268 width="329" 18269 height="140" 18270 /> 18271 </a> 18272 18273 <div class="p-3 flex flex-col gap-3 flex-grow"> 18274 <div class="flex flex-col gap-2 flex-grow"> 18275 <div class="flex justify-between items-end">
18276 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18277 Rasy psów </span> 18278 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18279 15.09.2026 </span> 18280 </div> 18281 18282 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18283 <a href="https://fera.pl/labrador-retriever-najwazniejsze-informacje-o-rasie.html" class="hover:underline"> 18284 Labrador retriever: charakter, cena, wyglÄ d, zdrowie i wymagania rasy </a> 18285 </h3> 18286 18287 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18288 Labrador retriever to przyjazny, inteligentny i energiczny pies, który silnie przywiÄ zuje siÄ do czÅowieka i zwykle dobrze odnajduje siÄ w aktywnej rodzinie. Ma mocny instynkt aportera, duÅ¼Ä potrzebÄ ruchu i stymulacji umysÅowej, dlatego nie jest ras... </div> 18289 </div> 18290 18291 <div class="mt-auto pt-1"> 18292 <a href="https://fera.pl/labrador-retriever-najwazniejsze-informacje-o-rasie.html" 18293 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18294 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18295 Przejdź do artykuÅu </span> 18296 </a> 18297 </div> 18298 </div> 18299 </article> 18300 18301 <article 18302 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18303 <a href="https://fera.pl/usg-kota.html" 18304 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18305 aria-label="Read more about USG kota: cena. Jak wygląda badanie i jak przygotować pupila?"> 18306 <img 18307 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18308 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/USG_kota.jpg" 18309 alt="USG kota: cena. Jak wygląda badanie i jak przygotować pupila?" 18310 loading="lazy" 18311 width="329" 18312 height="140" 18313 /> 18314 </a> 18315 18316 <div class="p-3 flex flex-col gap-3 flex-grow"> 18317 <div class="flex flex-col gap-2 flex-grow"> 18318 <div class="flex justify-between items-end"> 18319 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18320 Zdrowie kota - profilaktyka i choroby </span> 18321 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18322 14.09.2026 </span> 18323 </div> 18324 18325 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18326 <a href="https://fera.pl/usg-kota.html" class="hover:underline"> 18327 USG kota: cena. Jak wyglÄ da badanie i jak przygotowaÄ pupila? </a> 18328 </h3> 18329 18330 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18331 USG kota to bezpieczne, nieinwazyjne badanie obrazowe, które pozwala lekarzowi weterynarii oceniÄ narzÄ dy wewnÄtrzne i wykryÄ wiele nieprawidÅowoÅci niewidocznych podczas zwykÅego badania klinicznego. NajczÄÅciej wykonuje siÄ USG jamy brzusznej kota,... </div> 18332 </div> 18333 18334 <div class="mt-auto pt-1"> 18335 <a href="https://fera.pl/usg-kota.html" 18336 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn">
18337 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18338 Przejdź do artykuÅu </span> 18339 </a> 18340 </div> 18341 </div> 18342 </article> 18343 18344 <article 18345 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18346 <a href="https://fera.pl/bol-brzucha-u-kota.html" 18347 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18348 aria-label="Read more about Ból brzucha u kota: jak go rozpoznać i co zrobić?"> 18349 <img 18350 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18351 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/Bol_brzucha_u_kota.jpg" 18352 alt="Ból brzucha u kota: jak go rozpoznać i co zrobić?" 18353 loading="lazy" 18354 width="329" 18355 height="140" 18356 /> 18357 </a> 18358 18359 <div class="p-3 flex flex-col gap-3 flex-grow"> 18360 <div class="flex flex-col gap-2 flex-grow"> 18361 <div class="flex justify-between items-end"> 18362 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18363 Zdrowie kota - profilaktyka i choroby </span> 18364 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18365 14.09.2026 </span> 18366 </div> 18367 18368 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18369 <a href="https://fera.pl/bol-brzucha-u-kota.html" class="hover:underline"> 18370 Ból brzucha u kota: jak go rozpoznaÄ i co zrobiÄ? </a> 18371 </h3> 18372 18373 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18374 Ból brzucha u kota może mieÄ wiele przyczyn â od stosunkowo Åagodnych problemów trawiennych i zaparÄ po niedrożnoÅÄ przewodu pokarmowego, choroby trzustki, ukÅadu moczowego czy zatrucie. Rozpoznanie problemu nie zawsze jest Åatwe, ponieważ koty czÄst... </div> 18375 </div> 18376 18377 <div class="mt-auto pt-1"> 18378 <a href="https://fera.pl/bol-brzucha-u-kota.html" 18379 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18380 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18381 Przejdź do artykuÅu </span> 18382 </a> 18383 </div> 18384 </div> 18385 </article> 18386 18387 <article 18388 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18389 <a href="https://fera.pl/choroba-cushinga-u-psa-objawy-leczenie-rokowania.html" 18390 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18391 aria-label="Read more about Choroba Cushinga u psa: objawy, leczenie i rokowania"> 18392 <img 18393 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18394 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/choroba_cushinga_u_psa_foto_1.jpg" 18395 alt="Choroba Cushinga u psa: objawy, leczenie i rokowania" 18396 loading="lazy" 18397 width="329" 18398 height="140" 18399 /> 18400 </a> 18401 18402 <div class="p-3 flex flex-col gap-3 flex-grow"> 18403 <div class="flex flex-col gap-2 flex-grow"> 18404 <div class="flex justify-between items-end">
18405 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18406 Zdrowie psa - profilaktyka i choroby </span> 18407 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18408 14.09.2026 </span> 18409 </div> 18410 18411 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18412 <a href="https://fera.pl/choroba-cushinga-u-psa-objawy-leczenie-rokowania.html" class="hover:underline"> 18413 Choroba Cushinga u psa: objawy, leczenie i rokowania </a> 18414 </h3> 18415 18416 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18417 Choroba Cushinga u psa to przewlekÅe zaburzenie endokrynologiczne zwiÄ zane z dÅugotrwaÅym nadmiarem kortyzolu lub nadmiernym dziaÅaniem glikokortykosteroidów na organizm. NajczÄÅciej rozwija siÄ u psów w Årednim i starszym wieku, a pierwszymi zauważa... </div> 18418 </div> 18419 18420 <div class="mt-auto pt-1"> 18421 <a href="https://fera.pl/choroba-cushinga-u-psa-objawy-leczenie-rokowania.html" 18422 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18423 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18424 Przejdź do artykuÅu </span> 18425 </a> 18426 </div> 18427 </div> 18428 </article> 18429 18430 <article 18431 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18432 <a href="https://fera.pl/robaki-u-kota-objawy-przyczyny.-kiedy-i-jak-odrobaczyc-kota.html" 18433 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18434 aria-label="Read more about Robaki u kota: objawy, przyczyny. Jak zapobiegać?"> 18435 <img 18436 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18437 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/Robaki_u_kota.jpg" 18438 alt="Robaki u kota: objawy, przyczyny. Jak zapobiegać?" 18439 loading="lazy" 18440 width="329" 18441 height="140" 18442 /> 18443 </a> 18444 18445 <div class="p-3 flex flex-col gap-3 flex-grow"> 18446 <div class="flex flex-col gap-2 flex-grow"> 18447 <div class="flex justify-between items-end"> 18448 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18449 Zdrowie kota - profilaktyka i choroby </span> 18450 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18451 11.09.2026 </span> 18452 </div> 18453 18454 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18455 <a href="https://fera.pl/robaki-u-kota-objawy-przyczyny.-kiedy-i-jak-odrobaczyc-kota.html" class="hover:underline"> 18456 Robaki u kota: objawy, przyczyny. Jak zapobiegaÄ? </a> 18457 </h3> 18458 18459 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3">
18460 Robaki u kota, jak potocznie mówi siÄ o pasożytach wewnÄtrznych, mogÄ pojawiÄ siÄ zarówno u zwierzÄ t wychodzÄ cych, jak i tych, które caÅe życie spÄdzajÄ w domu. Koty majÄ ce dostÄp do przebywania nazewnÄ trz, a zwÅaszcza polujÄ ce, sÄ jednak bardziej na... </div> 18461 </div> 18462 18463 <div class="mt-auto pt-1"> 18464 <a href="https://fera.pl/robaki-u-kota-objawy-przyczyny.-kiedy-i-jak-odrobaczyc-kota.html" 18465 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18466 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18467 Przejdź do artykuÅu </span> 18468 </a> 18469 </div> 18470 </div> 18471 </article> 18472 18473 <article 18474 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18475 <a href="https://fera.pl/puppy-yoga-chwila-relaksu-ze-szczeniakami.html" 18476 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18477 aria-label="Read more about Puppy yoga: na czym polegają zajęcia w towarzystwie szczeniąt?"> 18478 <img 18479 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18480 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/Puppy_yoga.jpg" 18481 alt="Puppy yoga: na czym polegają zajęcia w towarzystwie szczeniąt?" 18482 loading="lazy" 18483 width="329" 18484 height="140" 18485 /> 18486 </a> 18487 18488 <div class="p-3 flex flex-col gap-3 flex-grow"> 18489 <div class="flex flex-col gap-2 flex-grow"> 18490 <div class="flex justify-between items-end"> 18491 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18492 AktualnoÅci </span> 18493 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18494 11.09.2026 </span> 18495 </div> 18496 18497 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18498 <a href="https://fera.pl/puppy-yoga-chwila-relaksu-ze-szczeniakami.html" class="hover:underline"> 18499 Puppy yoga: na czym polegajÄ zajÄcia w towarzystwie szczeniÄ t? </a> 18500 </h3> 18501 18502 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18503 Puppy yoga, czyli joga w towarzystwie szczeniÄ t, ÅÄ czy tradycyjne Äwiczenia na macie ze swobodnÄ obecnoÅciÄ mÅodych psów. Podczas zajÄÄ uczestnicy wykonujÄ proste asany, Äwiczenia oddechowe i rozciÄ gajÄ ce, a szczeniaki mogÄ poruszaÄ siÄ po sali i wch... </div> 18504 </div> 18505 18506 <div class="mt-auto pt-1"> 18507 <a href="https://fera.pl/puppy-yoga-chwila-relaksu-ze-szczeniakami.html" 18508 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18509 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18510 Przejdź do artykuÅu </span> 18511 </a> 18512 </div> 18513 </div> 18514 </article> 18515 18516 <article 18517 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18518 <a href="https://fera.pl/biegunka-u-psa-przyczyny-objawy-leczenie.html" 18519 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18520 aria-label="Read more about Biegunka u psa: skąd się bierze i kiedy reagować?"> 18521 <img 18522 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18523 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/biegunka_u_psa_foto_1.jpg" 18524 alt="Biegunka u psa: skąd się bierze i kiedy reagować?" 18525 loading="lazy" 18526 width="329" 18527 height="140" 18528 /> 18529 </a> 18530 18531 <div class="p-3 flex flex-col gap-3 flex-grow"> 18532 <div class="flex flex-col gap-2 flex-grow"> 18533 <div class="flex justify-between items-end">
18534 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18535 Zdrowie psa - profilaktyka i choroby </span> 18536 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18537 10.09.2026 </span> 18538 </div> 18539 18540 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18541 <a href="https://fera.pl/biegunka-u-psa-przyczyny-objawy-leczenie.html" class="hover:underline"> 18542 Biegunka u psa: skÄ d siÄ bierze i kiedy reagowaÄ? </a> 18543 </h3> 18544 18545 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18546 Biegunka u psa oznacza oddawanie luźnego, papkowatego lub wodnistego kaÅu, czÄsto czÄÅciej niż zwykle. Może pojawiÄ siÄ po zmianie karmy lub zjedzeniu czegoÅ nieÅwieżego, ale bywa też objawem zakażenia pasożytami, choroby jelit, zapalenia trzustki cz... </div> 18547 </div> 18548 18549 <div class="mt-auto pt-1"> 18550 <a href="https://fera.pl/biegunka-u-psa-przyczyny-objawy-leczenie.html" 18551 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18552 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18553 Przejdź do artykuÅu </span> 18554 </a> 18555 </div> 18556 </div> 18557 </article> 18558 18559 <article 18560 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18561 <a href="https://fera.pl/ile-trwa-ciaza-kota-objawy-porod.html" 18562 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18563 aria-label="Read more about Ile trwa ciąża kota? Od pierwszych objawów do porodu"> 18564 <img 18565 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18566 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/magnific_editorial-photograph-of-a_rg4dNr9xtc.jpeg" 18567 alt="Ile trwa ciąża kota? Od pierwszych objawów do porodu" 18568 loading="lazy" 18569 width="329" 18570 height="140" 18571 /> 18572 </a> 18573 18574 <div class="p-3 flex flex-col gap-3 flex-grow"> 18575 <div class="flex flex-col gap-2 flex-grow"> 18576 <div class="flex justify-between items-end"> 18577 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18578 Zdrowie kota - profilaktyka i choroby </span> 18579 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18580 09.09.2026 </span> 18581 </div> 18582 18583 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18584 <a href="https://fera.pl/ile-trwa-ciaza-kota-objawy-porod.html" class="hover:underline"> 18585 Ile trwa ciÄ Å¼a kota? Od pierwszych objawów do porodu </a> 18586 </h3> 18587 18588 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18589 CiÄ Å¼a kota trwa najczÄÅciej okoÅo 63â65 dni, czyli mniej wiÄcej dziewiÄÄ tygodni. DokÅadny termin porodu może jednak nieznacznie różniÄ siÄ miÄdzy poszczególnymi kotkami, dlatego data wyliczona od dnia krycia jest orientacyjna. W czasie kocie
18589j ciÄ Å¼y ... </div> 18590 </div> 18591 18592 <div class="mt-auto pt-1"> 18593 <a href="https://fera.pl/ile-trwa-ciaza-kota-objawy-porod.html" 18594 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18595 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18596 Przejdź do artykuÅu </span> 18597 </a> 18598 </div> 18599 </div> 18600 </article> 18601 18602 <article 18603 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18604 <a href="https://fera.pl/wymiana-zebow-u-psa.html" 18605 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18606 aria-label="Read more about Wymiana zębów u psa: kiedy wypadają mleczaki i jakie są objawy?"> 18607 <img 18608 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18609 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/wymiana_z_b_w_u_psa_foto_1.jpg" 18610 alt="Wymiana zębów u psa: kiedy wypadają mleczaki i jakie są objawy?" 18611 loading="lazy" 18612 width="329" 18613 height="140" 18614 /> 18615 </a> 18616 18617 <div class="p-3 flex flex-col gap-3 flex-grow"> 18618 <div class="flex flex-col gap-2 flex-grow"> 18619 <div class="flex justify-between items-end"> 18620 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18621 Zdrowie psa - profilaktyka i choroby </span> 18622 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18623 31.08.2026 </span> 18624 </div> 18625 18626 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18627 <a href="https://fera.pl/wymiana-zebow-u-psa.html" class="hover:underline"> 18628 Wymiana zÄbów u psa: kiedy wypadajÄ mleczaki i jakie sÄ objawy? </a> 18629 </h3> 18630 18631 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18632 Wymiana zÄbów u psa jest caÅkowicie naturalnym zjawiskiem zwiÄ zanym z rozwojem szczeniÄcia. Pierwsze zÄby mleczne pojawiajÄ siÄ już w pierwszych tygodniach życia, natomiast okoÅo 3.â4. miesiÄ ca wypadajÄ , a na ich miejscu stopniowo wyrastajÄ zÄby staÅ... </div> 18633 </div> 18634 18635 <div class="mt-auto pt-1"> 18636 <a href="https://fera.pl/wymiana-zebow-u-psa.html" 18637 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18638 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18639 Przejdź do artykuÅu </span> 18640 </a> 18641 </div> 18642 </div> 18643 </article> 18644 18645 <article 18646 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18647 <a href="https://fera.pl/kot-brytyjski-krotkowlosy-charakter-pielegnacja-cena.html" 18648 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18649 aria-label="Read more about Kot brytyjski krótkowłosy: charakter, wygląd, zdrowie i cena"> 18650 <img 18651 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18652 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/kot_brytyjski_foto_1.jpg" 18653 alt="Kot brytyjski krótkowłosy: charakter, wygląd, zdrowie i cena" 18654 loading="lazy" 18655 width="329" 18656 height="140" 18657 /> 18658 </a> 18659 18660 <div class="p-3 flex flex-col gap-3 flex-grow"> 18661 <div class="flex flex-col gap-2 flex-grow"> 18662 <div class="flex justify-between items-end">
18663 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18664 Rasy kotów </span> 18665 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18666 13.08.2026 </span> 18667 </div> 18668 18669 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18670 <a href="https://fera.pl/kot-brytyjski-krotkowlosy-charakter-pielegnacja-cena.html" class="hover:underline"> 18671 Kot brytyjski krótkowÅosy: charakter, wyglÄ d, zdrowie i cena </a> 18672 </h3> 18673 18674 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18675 Kot brytyjski krótkowÅosy (British Shorthair) to Årednia lub duża rasa o mocnej, krÄpej sylwetce, okrÄ gÅej gÅowie, peÅnych policzkach i wyjÄ tkowo gÄstym, pluszowym futrze. Brytyjczyki sÄ zwykle spokojne, zrównoważone i przywiÄ zane do ludzi, ale zacho... </div> 18676 </div> 18677 18678 <div class="mt-auto pt-1"> 18679 <a href="https://fera.pl/kot-brytyjski-krotkowlosy-charakter-pielegnacja-cena.html" 18680 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn"> 18681 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18682 Przejdź do artykuÅu </span> 18683 </a> 18684 </div> 18685 </div> 18686 </article> 18687 18688 <article 18689 class="flex flex-col bg-white rounded-2xl shadow-lg overflow-hidden group transition-transform hover:-translate-y-1 duration-300"> 18690 <a href="https://fera.pl/co-to-jest-pseudohodowla-po-czym-ja-poznac-i-dlaczego-unikac.html" 18691 class="block relative h-36 w-full overflow-hidden bg-gray-100" 18692 aria-label="Read more about Pseudohodowla: po czym ją rozpoznać? Oto znaki ostrzegawcze"> 18693 <img 18694 class="w-full h-full object-cover transform group-hover:scale-105 transition-transform duration-700" 18695 src="https://media.fera.pl/blog/cache/329x140/magefan_blog/pseudohodowla_foto_1.jpg" 18696 alt="Pseudohodowla: po czym ją rozpoznać? Oto znaki ostrzegawcze" 18697 loading="lazy" 18698 width="329" 18699 height="140" 18700 /> 18701 </a> 18702 18703 <div class="p-3 flex flex-col gap-3 flex-grow"> 18704 <div class="flex flex-col gap-2 flex-grow"> 18705 <div class="flex justify-between items-end"> 18706 <span class="text-brandSecondary-900 text-sm font-bold font-sans leading-5"> 18707 Å»ycie z psem </span> 18708 <span class="text-brandSecondary-600 text-sm font-medium font-sans leading-5 text-right"> 18709 12.08.2026 </span> 18710 </div> 18711 18712 <h3 class="text-brandSecondary-900 text-lg font-bold font-sans leading-7 line-clamp-2 min-h-14"> 18713 <a href="https://fera.pl/co-to-jest-pseudohodowla-po-czym-ja-poznac-i-dlaczego-unikac.html" class="hover:underline"> 18714 Pseudohodowla: po czym jÄ rozpoznaÄ? Oto znaki ostrzegawcze </a> 18715 </h3> 18716 18717 <div class="text-brandSecondary-700 text-sm font-normal font-sans leading-5 line-clamp-3"> 18718 Pseudohodowla to potoczne okreÅlenie miejsca lub dziaÅalnoÅci, w których psy, koty albo inne zwierzÄta sÄ rozmnażane przede wszystkim z myÅlÄ o sprzedaży i zysku, czÄsto kosztem ich zdrowia, dobrostanu i prawidÅowego rozwoju. Sam termin âpseudohodowl... </div> 18719 </div> 18720 18721 <div class="mt-auto pt-1"> 18722 <a href="https://fera.pl/co-to-jest-pseudohodowla-po-czym-ja-poznac-i-dlaczego-unikac.html" 18723 class="flex w-full justify-center items-center px-4 py-2 bg-brandTertiary-200 hover:bg-brandSecondary-300 transition-colors rounded-md overflow-hidden group/btn">
18724 <span class="text-brandTertiary-900 text-sm font-semibold font-sans leading-5"> 18725 Przejdź do artykuÅu </span> 18726 </a> 18727 </div> 18728 </div> 18729 </article> 18730 </div> 18731 18732 <div class="w-full mt-6"> 18733 18734<!-- Wrapper: Flex Column na mobile (stack), Flex Row na desktop (jedna linia) --> 18735<div class="w-full px-6 py-4 flex flex-col lg:flex-row justify-between items-center gap-4 lg:gap-0 font-sans"> 18736 18737 <!-- 1. LEWA STRONA: Info --> 18738 <!-- ZMIANA: Dodano 'hidden' (ukryte na mobile) oraz 'lg:flex' (widoczne na desktop) --> 18739 <!-- UsuniÄto 'w-auto' i 'justify-center', zostawiono staÅe 'lg:w-44' dla zachowania symetrii grida --> 18740 <div class="hidden lg:flex lg:w-44 justify-start text-slate-800 text-sm font-normal leading-5 font-sans"> 18741 ArtykuÅy 1 do 12 z 1239 </div> 18742 18743 <!-- 2. ÅRODEK: Paginacja --> 18744 <div class="flex justify-center items-center gap-1"> 18745 18746 <!-- PREV --> 18747 <div class="flex justify-start items-start"> 18748 <div class="p-2.5 rounded-md flex justify-center items-center gap-1.5 overflow-hidden transition-colors bg-slate-100 text-slate-400 opacity-70 cursor-not-allowed"> 18749 <span class="w-6 h-6 relative flex items-center justify-center"> 18750 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-5 h-5" width="24" height="24" role="img"> 18751 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 18752<title>chevron-left</title></svg> 18753 </span> 18754 </div> 18755 </div> 18756 18757 <!-- PAGES --> 18758 <div class="flex justify-start items-start"> 18759 <span class="px-5 py-2.5 rounded-md flex justify-center items-center gap-2.5 overflow-hidden text-base font-semibold leading-6 transition-colors font-sans bg-brandSecondary-200 text-brandTertiary-900"> 18760 1 </span> 18761 </div> 18762 <div class="flex justify-start items-start"> 18763 <a href="https://fera.pl/blog?page=2" 18764 class="px-5 py-2.5 rounded-md flex justify-center items-center gap-2.5 overflow-hidden text-base font-semibold leading-6 transition-colors font-sans text-slate-600 hover:bg-slate-50"> 18765 2 </a> 18766 </div> 18767 <div class="flex justify-start items-start"> 18768 <a href="https://fera.pl/blog?page=3" 18769 class="px-5 py-2.5 rounded-md flex justify-center items-center gap-2.5 overflow-hidden text-base font-semibold leading-6 transition-colors font-sans text-slate-600 hover:bg-slate-50"> 18770 3 </a> 18771 </div> 18772 <div class="flex justify-start items-start"> 18773 <a href="https://fera.pl/blog?page=4" 18774 class="px-5 py-2.5 rounded-md flex justify-center items-center gap-2.5 overflow-hidden text-base font-semibold leading-6 transition-colors font-sans text-slate-600 hover:bg-slate-50"> 18775 4 </a> 18776 </div> 18777 <div class="flex justify-start items-start"> 18778 <a href="https://fera.pl/blog?page=5" 18779 class="px-5 py-2.5 rounded-md flex justify-center items-center gap-2.5 overflow-hidden text-base font-semibold leading-6 transition-colors font-sans text-slate-600 hover:bg-slate-50"> 18780 5 </a> 18781 </div> 18782 18783 <!-- NEXT --> 18784 <div class="flex justify-start items-start"> 18785 <a href="https://fera.pl/blog?page=2" 18786 class="p-2.5 rounded-md flex justify-center items-center gap-1.5 overflow-hidden transition-colors text-slate-600 hover:bg-slate-100 cursor-pointer" 18787 aria-label="Następne">
18788 <span class="w-6 h-6 relative flex items-center justify-center"> 18789 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-5 h-5" width="24" height="24" role="img"> 18790 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 18791<title>chevron-right</title></svg> 18792 </span> 18793 </a> 18794 </div> 18795 18796 </div> 18797 18798 <!-- 3. PRAWA STRONA: Limiter --> 18799 <div class="w-auto lg:w-44 flex justify-center lg:justify-end items-center gap-4"> 18800 </div> 18801 18802</div> </div> 18803</div></div></div></main><footer class="page-footer"><div class="footer content"> 18804<div 18805 class="bg-brandTertiary-800 bg-no-repeat bg-[position:right_0px_bottom_54px]" 18806 style="background-image: url(https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/images/fera-icon.svg)" 18807> 18808 <div class="container py-8 mx-auto"> 18809 18810<div 18811 > 18812 <ul class="font-semibold lg:-mb-2 lg:[column-count:3] lg:[column-gap:1rem]" 18813 > 18814 <li class="mb-10 last:mb-0 lg:break-inside-avoid" aria-label="Zakupy"> 18815 <div> 18816 <span class="block font-heading text-2xl font-extraBold mb-4 text-primary"> 18817 Zakupy </span> 18818 18819<ul class="flex flex-col gap-2 text-sm text-white" 18820 title="Zakupy" 18821> 18822 <li 18823 > 18824 <div class="group"> 18825 18826 <a href="/customer/account" 18827 data-menu="menu-8" 18828 data-menu="menu-8" > 18829 Konto Moja Fera </a> 18830 </div> 18831 </li> 18832 <li 18833 > 18834 <div class="group"> 18835 18836<a href="https://fera.pl/aplikacja-fera" 18837 data-menu="menu-9" 18838 > 18839 Aplikacja Fera</a> 18840 </div> 18841 </li> 18842 </ul> 18843 </div> 18844 </li> 18845 <li class="mb-10 last:mb-0 lg:break-inside-avoid" aria-label="Sprawdź także"> 18846 <div> 18847 <span class="block font-heading text-2xl font-extraBold mb-4 text-primary"> 18848 Sprawdź także </span> 18849 18850<ul class="flex flex-col gap-2 text-sm text-white" 18851 title="Sprawdź także" 18852> 18853 <li 18854 > 18855 <div class="group"> 18856 18857 <a href="/blog" 18858 data-menu="menu-16" 18859 data-menu="menu-16" > 18860 Zajrzyj na Bloga </a> 18861 </div> 18862 </li> 18863 <li 18864 > 18865 <div class="group"> 18866 18867 <a href="/weterynarz" 18868 data-menu="menu-17" 18869 data-menu="menu-17" > 18870 Znajdź weterynarza </a> 18871 </div> 18872 </li> 18873 </ul> 18874 </div> 18875 </li> 18876 <li class="mb-10 last:mb-0 lg:break-inside-avoid" aria-label="Status zamówienia"> 18877 <div> 18878 <span class="block font-heading text-2xl font-extraBold mb-4 text-primary"> 18879 Status zamówienia </span> 18880 18881<ul class="flex flex-col gap-2 text-sm text-white" 18882 title="Status zamówienia" 18883> 18884 <li 18885 > 18886 <div class="group"> 18887 18888 <a href="/sales/order/history/" 18889 data-menu="menu-20" 18890 data-menu="menu-20" > 18891 Sprawdź przesyÅkÄ </a> 18892 </div> 18893 </li> 18894 </ul> 18895 </div> 18896 </li> 18897 <li class="mb-10 last:mb-0 lg:break-inside-avoid" aria-label="Zamówienie"> 18898 <div>
18899 <span class="block font-heading text-2xl font-extraBold mb-4 text-primary"> 18900 Zamówienie </span> 18901 18902<ul class="flex flex-col gap-2 text-sm text-white" 18903 title="Zamówienie" 18904> 18905 <li 18906 > 18907 <div class="group"> 18908 18909 <a href="/centrum-pomocy/pomoc-konto-klienta-rejestracja-i-logowanie/" 18910 data-menu="menu-22" 18911 data-menu="menu-22" > 18912 Rejestracja i logowanie </a> 18913 </div> 18914 </li> 18915 <li 18916 > 18917 <div class="group"> 18918 18919 <a href="/centrum-pomocy/pomoc-platnosci-platnosci-i-sposoby-dostawy/" 18920 data-menu="menu-23" 18921 data-menu="menu-23" > 18922 PlatnosÌci i sposoÌb dostawy </a> 18923 </div> 18924 </li> 18925 <li 18926 > 18927 <div class="group"> 18928 18929 <a href="/centrum-pomocy/pomoc-zamowienia-skladanie-i-potwierdzanie-zamowienia/" 18930 data-menu="menu-24" 18931 data-menu="menu-24" > 18932 SkÅadanie i potwierdzanie zamoÌwienia </a> 18933 </div> 18934 </li> 18935 <li 18936 > 18937 <div class="group"> 18938 18939 <a href="/centrum-pomocy/pomoc-zamowienia-czas-realizacji-zamowienia/" 18940 data-menu="menu-25" 18941 data-menu="menu-25" > 18942 Czas realizacji zamówienia </a> 18943 </div> 18944 </li> 18945 <li 18946 > 18947 <div class="group"> 18948 18949 <a href="/centrum-pomocy/pomoc-dostawa-stan-pakowania-i-dostawy/" 18950 data-menu="menu-26" 18951 data-menu="menu-26" > 18952 Stan pakowania i dostawy </a> 18953 </div> 18954 </li> 18955 <li 18956 > 18957 <div class="group"> 18958 18959 <a href="/centrum-pomocy/pomoc-zwroty-i-reklamacje-gwarancja-i-serwis/" 18960 data-menu="menu-28" 18961 data-menu="menu-28" > 18962 Gwarancja i serwis </a> 18963 </div> 18964 </li> 18965 <li 18966 > 18967 <div class="group"> 18968 18969 <a href="/centrum-pomocy/pomoc-platnosci-faktury-vat/" 18970 data-menu="menu-29" 18971 data-menu="menu-29" > 18972 Faktury VAT </a> 18973 </div> 18974 </li> 18975 <li 18976 > 18977 <div class="group"> 18978 18979 <a href="/centrum-pomocy/pomoc-platnosci-numer-rachunku-bankowego/" 18980 data-menu="menu-30" 18981 data-menu="menu-30" > 18982 Numer rachunku bankowego </a> 18983 </div> 18984 </li> 18985 </ul> 18986 </div> 18987 </li> 18988 <li class="mb-10 last:mb-0 lg:break-inside-avoid" aria-label="Dokumenty i informacje"> 18989 <div> 18990 <span class="block font-heading text-2xl font-extraBold mb-4 text-primary"> 18991 Dokumenty i informacje </span> 18992 18993<ul class="flex flex-col gap-2 text-sm text-white" 18994 title="Dokumenty i informacje" 18995> 18996 <li 18997 > 18998 <div class="group"> 18999 19000 <a href="/centrum-pomocy/pomoc-dokumenty-i-informacje-regulamin/" 19001 data-menu="menu-32" 19002 data-menu="menu-32" > 19003 Regulamin </a> 19004 </div> 19005 </li> 19006 <li 19007 > 19008 <div class="group"> 19009 19010 <a href="/privacy-policy-cookie-restriction-mode/" 19011 data-menu="menu-33" 19012 data-menu="menu-33" > 19013 Polityka prywatnosÌci i cookies </a> 19014 </div> 19015 </li> 19016 </ul> 19017 </div> 19018 </li> 19019 <li class="mb-10 last:mb-0 lg:break-inside-avoid" aria-label="Pomoc i kontakt"> 19020 <div>
19021 <span class="block font-heading text-2xl font-extraBold mb-4 text-primary"> 19022 Pomoc i kontakt </span> 19023 19024<ul class="flex flex-col gap-2 text-sm text-white" 19025 title="Pomoc i kontakt" 19026> 19027 <li 19028 > 19029 <div class="group"> 19030 19031<a href="https://fera.pl/centrum-pomocy" 19032 data-menu="menu-39" 19033 > 19034 Centrum pomocy</a> 19035 </div> 19036 </li> 19037 <li 19038 > 19039 <div class="group"> 19040 19041 <a href="/contact" 19042 data-menu="menu-40" 19043 data-menu="menu-40" > 19044 Kontakt </a> 19045 </div> 19046 </li> 19047 </ul> 19048 </div> 19049 </li> 19050 </ul> 19051</div> 19052 </div> 19053 <div class="container"> 19054 <div class="grid sm:grid-cols-1 lg:grid-cols-3 gap-x-4 gap-y-6 py-8 mb:pt-6 mb:pb-8 md:border-t md:border-brandSecondary-700"> 19055 19056 19057<section 19058 aria-labelledby="payment-methods" 19059 > 19060 <span id="payment-methods" class="block font-bold text-white text-xl mb-4"> 19061 Metody pÅatnoÅci </span> 19062 <div class="grid grid-cols-[repeat(4,auto)] gap-4 justify-start"> 19063 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" fill="none" viewBox="0 0 48 32" aria-label="Blik" role="img"><g clip-path="url(#a)"><path fill="#030303" d="M0 4a4 4 0 0 1 4-4h40a4 4 0 0 1 4 4v24a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z"/><path fill="#fff" d="M20.076 8.7h2.715v15.21h-2.715zm5.034 5.145h2.714v10.076H25.11zM40 23.921l-4.071-5.342 3.737-4.734H36.46l-3.59 4.601V8.701h-2.715v15.223h2.714V18.74l3.59 5.182zM13.155 13.733a5.16 5.16 0 0 0-2.443.617V8.688H8v10.177a5.157 5.157 0 1 0 5.157-5.144zm0 7.587a2.443 2.443 0 1 1-.024-4.886 2.443 2.443 0 0 1 .024 4.886"/><path fill="url(#b)" d="M15.797 12.797a2.418 2.418 0 1 0 0-4.837 2.418 2.418 0 0 0 0 4.837"/></g><defs><radialGradient id="b" cx="0" cy="0" r="1" gradientTransform="translate(13.836 7.824)scale(7.932)" gradientUnits="userSpaceOnUse"><stop stop-color="red"/><stop offset=".49" stop-color="#E83E49"/><stop offset="1" stop-color="#F0F"/></radialGradient><clipPath id="a"><path fill="#fff" d="M0 0h48v32H0z"/></clipPath></defs><title>Blik</title></svg> 19064 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" fill="none" viewBox="0 0 48 32" aria-label="Visa" role="img"><g clip-path="url(#a_2)"><path fill="#fff" d="M0 4a4 4 0 0 1 4-4h40a4 4 0 0 1 4 4v24a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z"/><path fill="#1434CB" d="M19.108 10.212 14.243 21.82H11.07l-2.393-9.263c-.146-.57-.272-.78-.714-1.02-.722-.391-1.913-.759-2.962-.987l.071-.337h5.109c.651 0 1.237.434 1.385 1.184l1.264 6.715 3.124-7.9zm12.435 7.817c.013-3.063-4.236-3.232-4.206-4.6.009-.417.405-.86 1.273-.973.43-.056 1.616-.099 2.96.52l.527-2.461A8.1 8.1 0 0 0 29.29 10c-2.968 0-5.056 1.578-5.074 3.837-.019 1.67 1.491 2.603 2.629 3.158 1.17.569 1.563.934 1.558 1.443-.008.778-.933 1.122-1.798 1.135-1.509.024-2.385-.408-3.083-.733l-.544 2.543c.702.322 1.997.603 3.339.617 3.154 0 5.218-1.558 5.227-3.97m7.837 3.79h2.777l-2.424-11.607H37.17c-.577 0-1.063.336-1.278.852L31.387 21.82h3.152l.626-1.734h3.852zm-3.35-4.113 1.58-4.358.91 4.358zm-12.632-7.494L20.915 21.82h-3.002l2.483-11.607z"/></g><defs><clipPath id="a_2"><path fill="#fff" d="M0 0h48v32H0z"/></clipPath></defs><title>Visa</title></svg> 19065 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" fill="none" viewBox="0 0 48 32" aria-label="Mastercard" role="img"><g clip-path="url(#a_3)"><path fill="#fff" d="M0 4a4 4 0 0 1 4-4h40a4 4 0 0 1 4 4v24a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z"/><path fill="#FF5F00" d="M28.376 8.139h-8.75v15.725h8.75z"/><path fill="#EB001B" d="M20.181 16a9.98 9.98 0 0 1 3.82-7.861A9.96 9.96 0 0 0 17.82 6c-5.522 0-10 4.478-10 10s4.478 10 10 10A9.96 9.96 0 0 0 24 23.861 9.98 9.98 0 0 1 20.182 16"/><path fill="#F79E1B" d="M40.178 16c0 5.522-4.477 10-10 10-2.333 0-4.477-.8-6.18-2.139A9.98 9.98 0 0 0 27.818 16a9.98 9.98 0 0 0-3.82-7.861A9.96 9.96 0 0 1 30.178 6c5.522 0 10 4.478 10 10"/></g><defs><clipPath id="a_3"><path fill="#fff" d="M0 0h48v32H0z"/></clipPath></defs><title>Mastercard</title></svg> 19066 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" fill="none" viewBox="0 0 48 32" aria-label="Przelewy24" role="img"><g clip-path="url(#a_4)"><path fill="#fff" d="M0 4a4 4 0 0 1 4-4h40a4 4 0 0 1 4 4v24a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z"/><path fill="#D13239" fill-rule="evenodd" d="m12.96 16.387 3.137-.004-.114.714-2.624 2.505 2.203-.004-.129.77-3.243.002.136-.796 2.515-2.409h-2.007zm-3.431-1.221a.8.8 0 0 0-.275-.173 2 2 0 0 0-.365-.098 3 3 0 0 0-.417-.044c-.1-.004-.165-.004-.165-.004H5.915L5 20.37h.854l.337-2.046 1.657.008s.646.026 1.103-.216c.457-.243.58-.794.58-.794s.05-.205.092-.454c.046-.274.092-.603.116-.778l.016-.124s.012-.056.012-.145a1 1 0 0 0-.112-.483.8.8 0 0 0-.126-.172m-.658.974c0 .01-.076.453-.177.979-.038.2-.192.3
1906609-.369.347-.293.062-.607.05-.607.05l-1.384-.004.305-1.835 1.253.004s.084-.002.203 0c.134.002.313.008.459.028.126.016.227.042.259.082a.34.34 0 0 1 .064.18c.008.089-.006.163-.006.17m11.479-1.294h.823l-.92 5.523-.825-.002zm4.389 1.54.788-.002.279 2.804 1.213-2.808.973.002.287 2.816 1.211-2.814h.819l-1.737 3.981H27.6l-.28-2.788-1.226 2.788-.955.004z" clip-rule="evenodd"/><path fill="#D13239" d="M18.833 16.419c-.231-.074-.63-.09-.97-.086-.326.004-.476.02-.599.046 0 0-.581.084-.912.493-.331.41-.43 1.304-.43 1.304s-.196.989-.138 1.32c.058.329.16.635.534.778.373.144.69.136.69.136s.665.052 1.167-.066c.501-.118.766-.471.766-.471s.118-.153.202-.333.11-.307.115-.323l.052-.215-.852.002s-.047.564-.508.616c-.46.052-.706.032-.796.028-.088-.004-.582.018-.542-.395l.002-.026c.023-.47.075-.592.075-.592l2.677-.008.114-.662c.133-.75.038-1.321-.647-1.546m-.179 1.452-1.835-.002.072-.29s.064-.23.19-.326c.13-.096.291-.114.444-.128.152-.014.56-.044.89.024.11.022.215.084.243.177.064.216-.004.545-.004.545"/><path fill="#D13239" d="m16.618 19.235-.002.018c-.002.032.002-.02.002-.018m5.051.002-.003.018c0 .032.003-.02.003-.018"/><path fill="#D13239" d="M23.885 16.421c-.23-.074-.63-.09-.969-.086-.327.004-.477.02-.6.046 0 0-.581.084-.912.493-.331.41-.43 1.304-.43 1.304s-.196.989-.138 1.32c.058.328.16.635.534.778.373.144.69.136.69.136s.666.052 1.167-.066.766-.471.766-.471.118-.153.203-.333c.084-.18.11-.307.114-.323l.052-.215-.852.002s-.047.564-.508.616c-.459.052-.706.032-.796.03-.088-.004-.582.016-.541-.395l.002-.026c.022-.47.074-.592.074-.592l2.677-.008.114-.662c.133-.752.039-1.325-.647-1.548m-.187 1.45-1.835-.002.072-.29s.064-.23.19-.326c.127-.096.292-.114.444-.128s.56-.044.89.024c.11.022.215.084.243.177.064.214-.004.545-.004.545"/><path fill="#D13239" fill-rule="evenodd" d="m31.255 16.387.528 2.912 1.49-2.914.838.008-2.148 4.162s-.389.754-.63.944c-.24.19-.389.277-.585.297-.197.02-.277.034-.466 0l-.2-.036.124-.744s.333.062.53-.016c.198-.078.357-.415.357-.415l.1-.169-.776-4.031z" clip-rule="evenodd"/><path fill="#B3B2B1" fill-rule="evenodd" d="m34.416 16.782.864.002.053-.335s.092-.606.298-.722a1 1 0 0 1 .295-.094 4 4 0 0 1 .748-.036c.36.012.496.016.86.058.366.042.273.395.273.395l-.072.527s-.032.237-.116.383c-.074.13-.279.22-.397.257-.285.092-1.26.341-1.26.341l-.766.22s-.471.137-.734.428c-.265.293-.369.624-.405.796s-.239 1.366-.239 1.366l4.136.002.138-.826-3.27.004.057-.337s.038-.347.179-.461c.044-.037.066-.085.327-.177.156-.056.69-.199.69-.199l1.233-.336s.674-.173.939-.542c.264-.367.367-1.071.367-1.071s.072-.684.016-.899a.96.96 0 0 0-.504-.581c-.246-.11-.503-.175-1.247-.165s-1.113.045-1.49.185c-.377.138-.596.391-.734.748-.15.339-.239 1.069-.239 1.069m7.786 1.536.58-3.473h-1.027l-3.197 3.433-.145.87h2.796l-.205 1.22.859.002.202-1.221.793.002.142-.833zm-.855.002-1.807-.002 2.2-2.344zm-30.005-3.018h2.633s.59-.477 1.009-.784 1.181-.79 1.181-.79l-1.488-.696s-1.258.778-1.791 1.145c-.518.339-1.544 1.125-1.544 1.125m5.659-2.066-1.221-.822s1.105-.628 2.575-1.214c1.468-.585 2.253-.83 2.253-.83l.248 1.165s-1.414.474-2.224.857c-.838.357-1.63.844-1.63.844m4.757-1.956-.213-1.193s1.508-.4 2.888-.658c1.382-.256 3.213-.379 3.213-.379l-.605 1.844s-1.611-.221-3.123-.014c-1.178.14-2.16.4-2.16.4M28 11.05l1.019-2.048s2.232-.044 4.158.255c1.925.297 3.686.754 3.648.774l-4.882 2.553s-1.141-.722-2.557-1.165C28.584 11.182 28 11.05 28 11.
1906605m4.818 2.09 1.073.814h8.818s-.018-.285-.253-.69c-.146-.252-.413-.521-.691-.8a8 8 0 0 0-.813-.616c-.778-.505-1.213-.7-2.021-1.067z" clip-rule="evenodd"/><path fill="#D13239" d="M11.913 16.383c-.33 0-.643.13-.91.277l.046-.277h-.877l-.702 3.965h.879l.389-2.196c.08-.445.413-.997 1.063-.997l.453-.002.137-.77z"/></g><defs><clipPath id="a_4"><path fill="#fff" d="M0 0h48v32H0z"/></clipPath></defs><title>Przelewy24</title></svg> 19067 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" fill="none" viewBox="0 0 48 32" aria-label="Google&#x20;Pay" role="img"><g clip-path="url(#a_5)"><path fill="#fff" d="M0 4a4 4 0 0 1 4-4h40a4 4 0 0 1 4 4v24a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z"/><path fill="#3C4043" d="M22.869 16.488v3.933H21.62v-9.712h3.309q1.259 0 2.139.838.897.84.897 2.048c0 .826-.3 1.508-.898 2.06q-.869.828-2.138.827h-2.061zm0-4.583v3.387h2.087c.494 0 .91-.17 1.235-.5.331-.332.5-.735.5-1.19a1.62 1.62 0 0 0-.5-1.177q-.486-.516-1.235-.514h-2.087zm8.361 1.651q1.383 0 2.183.741.8.74.8 2.029v4.095h-1.19v-.923h-.052q-.771 1.139-2.06 1.138-1.1.001-1.84-.65-.741-.652-.741-1.626 0-1.033.78-1.638.781-.613 2.08-.611 1.113 0 1.827.41v-.287c0-.435-.17-.8-.514-1.105a1.76 1.76 0 0 0-1.209-.455c-.695 0-1.248.293-1.651.884l-1.099-.689q.909-1.314 2.685-1.313m-1.613 4.824c0 .325.136.598.416.812q.411.324.968.325.79 0 1.405-.585.616-.583.617-1.371-.584-.46-1.625-.462-.76.002-1.268.364-.515.381-.513.917M41 13.77l-4.16 9.57h-1.288l1.547-3.348-2.743-6.221h1.359l1.976 4.771h.026l1.924-4.771z"/><path fill="#4285F4" d="M17.904 15.695q-.001-.61-.104-1.171h-5.232v2.145l3.013.001a2.58 2.58 0 0 1-1.118 1.728v1.392h1.794c1.047-.97 1.647-2.402 1.647-4.095"/><path fill="#34A853" d="M14.464 18.398c-.5.337-1.142.534-1.895.534-1.453 0-2.685-.98-3.127-2.3h-1.85v1.436a5.57 5.57 0 0 0 4.977 3.067c1.505 0 2.768-.494 3.688-1.346z"/><path fill="#FABB05" d="M9.268 15.568c0-.37.062-.729.174-1.065v-1.436h-1.85A5.54 5.54 0 0 0 7 15.568c0 .9.214 1.749.592 2.501l1.85-1.435a3.4 3.4 0 0 1-.174-1.066"/><path fill="#E94235" d="M12.57 12.204c.82 0 1.556.283 2.136.835l1.59-1.588c-.966-.9-2.224-1.451-3.727-1.451a5.57 5.57 0 0 0-4.977 3.067l1.85 1.436c.442-1.32 1.674-2.3 3.127-2.3"/></g><defs><clipPath id="a_5"><path fill="#fff" d="M0 0h48v32H0z"/></clipPath></defs><title>Google&#x20;Pay</title></svg> 19068 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" fill="none" viewBox="0 0 48 32" aria-label="Apple&#x20;Pay" role="img"><g clip-path="url(#a_6)"><path fill="#fff" d="M0 4a4 4 0 0 1 4-4h40a4 4 0 0 1 4 4v24a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z"/><path fill="#000" d="M13.422 11.356a2.62 2.62 0 0 0 .604-1.856 2.6 2.6 0 0 0-1.718.88 2.47 2.47 0 0 0-.615 1.793 2.12 2.12 0 0 0 1.729-.817m.605.944c-.955-.063-1.761.541-2.217.541s-1.157-.509-1.91-.498a2.81 2.81 0 0 0-2.397 1.453c-1.06 1.76-.265 4.38.732 5.823.488.71 1.06 1.496 1.835 1.464s1.008-.467 1.888-.467 1.146.467 1.91.456c.763-.01 1.293-.71 1.781-1.421a6.4 6.4 0 0 0 .796-1.644 2.57 2.57 0 0 1-1.549-2.344 2.61 2.61 0 0 1 1.252-2.207 2.73 2.73 0 0 0-2.121-1.156m8.305-1.983a3.34 3.34 0 0 1 3.51 3.51 3.393 3.393 0 0 1-3.563 3.48h-2.291v3.648h-1.666V10.317zm-2.344 5.643h1.92a2.005 2.005 0 0 0 2.259-2.122 1.983 1.983 0 0 0-2.249-2.121h-1.91zm6.29 2.821c0-1.358 1.06-2.196 2.895-2.302l2.122-.127v-.594c0-.87-.584-1.39-1.56-1.39a1.485 1.485 0 0 0-1.644 1.146h-1.506c.096-1.39 1.294-2.45 3.214-2.45s3.097 1.008 3.097 2.567v5.367H31.37v-1.283a2.76 2.76 0 0 1-2.46 1.41 2.364 2.364 0 0 1-2.631-2.344m5.027-.7v-.615l-1.92.116c-.954.064-1.495.488-1.495 1.157 0 .668.562 1.124 1.421 1.124a1.87 1.87 0 0 0 1.994-1.782m3.033 5.781V22.61q.26.024.52 0a1.305 1.305 0 0 0 1.39-1.06l.137-.478-2.81-7.86h1.728l1.973 6.365 1.962-6.365H41l-2.917 8.189c-.657 1.888-1.432 2.493-3.044 2.493-.18 0-.573-.011-.7-.032"/></g><defs><clipPath id="a_6"><path fill="#fff" d="M0 0h48v32H0z"/></clipPath></defs><title>Apple&#x20;Pay</title></svg> 19069 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" fill="none" viewBox="0 0 48 32" aria-label="PayPo" role="img"><g clip-path="url(#a_7)"><path fill="#fff" d="M0 4a4 4 0 0 1 4-4h40a4 4 0 0 1 4 4v24a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4z"/><path fill="#A70584" d="M10.21 19.621v-2.21H7.98v2.21z"/><path fill="#36B588" d="M10.201 16.64v-2.229h-2.23v2.23z"/>
19069<path fill="#FAD05B" d="M7.23 19.612v-2.23H5v2.23z"/><path fill="#000" d="M16.856 14.272c0 1.537-1.238 2.77-2.832 2.77H12.81v2.541h-1.85V11.5h3.06c1.598 0 2.835 1.238 2.835 2.772m-1.847 0c0-.592-.416-1.04-.98-1.04h-1.216v2.08h1.216c.564 0 .98-.45.98-1.04m8.296-.619v5.93h-1.78v-.557c-.39.45-.973.724-1.769.724-1.553 0-2.833-1.363-2.833-3.131s1.28-3.131 2.833-3.131c.796 0 1.375.27 1.769.724v-.557zm-1.78 2.966c0-.887-.596-1.45-1.411-1.45s-1.413.558-1.413 1.45c0 .887.596 1.45 1.413 1.45.817-.005 1.41-.562 1.41-1.45m8.536-2.966-2.014 5.715c-.66 1.872-1.707 2.616-3.357 2.533v-1.648c.824 0 1.215-.26 1.47-.976l-2.339-5.624h1.944l1.307 3.604 1.107-3.604zm6.586.619c0 1.537-1.236 2.77-2.83 2.77h-1.216v2.541h-1.85V11.5h3.062c1.597 0 2.834 1.238 2.834 2.772m-1.846 0c0-.592-.415-1.04-.98-1.04h-1.216v2.08h1.216c.564 0 .98-.45.98-1.04m2.077 2.43a3.027 3.027 0 0 1 3.062-3.051A3.03 3.03 0 0 1 43 16.7a3.025 3.025 0 0 1-3.06 3.05 3.03 3.03 0 0 1-3.062-3.05m4.39 0c0-.823-.579-1.365-1.33-1.365-.75 0-1.33.542-1.33 1.364 0 .821.58 1.363 1.33 1.363.755 0 1.33-.542 1.33-1.363"/></g><defs><clipPath id="a_7"><path fill="#fff" d="M0 0h48v32H0z"/></clipPath></defs><title>PayPo</title></svg> 19070 </div> 19071</section> 19072 19073 19074<section 19075 aria-labelledby="delivery-methods" 19076 > 19077 <span id="delivery-methods" class="block font-bold text-white text-xl mb-4"> 19078 Dostawa </span> 19079 <div class="grid grid-cols-[repeat(4,auto)] gap-4 justify-start"> 19080 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" viewBox="0 0 48 32" fill="none" aria-label="DHL" role="img"> 19081 <g clip-path="url(#a_8)"> 19082 <path d="M0 4C0 1.79086 1.79086 0 4 0H44C46.2091 0 48 1.79086 48 4V28C48 30.2091 46.2091 32 44 32H4C1.79086 32 0 30.2091 0 28V4Z" fill="#FFCB01"/> 19083 <path d="M11.6825 13L10.4685 14.6862H17.0851C17.4197 14.6862 17.4155 14.815 17.2519 15.0427C17.0859 15.273 16.8081 15.6713 16.6387 15.9059C16.5528 16.0244 16.3976 16.2402 16.9115 16.2402H19.6175L20.4192 15.1264C20.9166 14.4363 20.4627 13.0009 18.6846 13.0009L11.6825 13Z" fill="#D80613"/> 19084 <path d="M9.97705 18.4936L12.416 15.1059H15.4422C15.7768 15.1059 15.7726 15.2355 15.6091 15.4623L14.9916 16.3221C14.9057 16.4406 14.7505 16.6564 15.2645 16.6564H19.3179C18.9816 17.129 17.887 18.4936 15.9245 18.4936H9.97705ZM23.9428 16.6556L22.6204 18.4936H19.1319L20.4543 16.6556H23.9428ZM29.2862 16.2394H20.7547L23.0876 13H26.5744L25.2378 14.8576H26.7939L28.1322 13H31.6191L29.2862 16.2394ZM28.9867 16.6556L27.6641 18.4936H24.1773L25.4998 16.6556H28.9867ZM5 17.3806H10.1381L9.85774 17.7703H5V17.3806ZM5 16.6556H10.6604L10.3792 17.0453H5V16.6556ZM5 18.1055H9.6166L9.33708 18.4936H5V18.1055ZM43 17.7703H37.8802L38.1614 17.3806H43V17.7703ZM43 18.4936H37.3604L37.6391 18.1055H43V18.4936ZM38.6829 16.6556H43V17.0462H38.4025L38.6829 16.6556ZM36.4484 13L34.1156 16.2394H30.4201L32.7547 13H36.4484ZM30.1213 16.6556C30.1213 16.6556 29.8669 17.0121 29.7426 17.1827C29.3053 17.7883 29.6917 18.4927 31.1209 18.4927H36.7213L38.0438 16.6556H30.1213Z" fill="#D80613"/> 19085 </g> 19086 <defs> 19087 <clipPath id="a_8"> 19088 <rect width="48" height="32" fill="white"/> 19089 </clipPath> 19090 </defs> 19091<title>DHL</title></svg> 19092 <svg xmlns="http://www.w3.org/2000/svg" width="48" height="32" viewBox="0 0 48 32" fill="none" aria-label="InPost" role="img"> 19093 <g clip-path="url(#a_9)"> 19094 <path d="M0 4C0 1.79086 1.79086 0 4 0H44C46.2091 0 48 1.79086 48 4V28C48 30.2091 46.2091 32 44 32H4C1.79086 32 0 30.2091 0 28V4Z" fill="white"/> 19095 <path fill-rule="evenodd" clip-rule="evenodd" d="M28.6721 16.6111C29.116 16.1684 29.3385 15.5729 29.3385 14.8403C29.3385 14.0716 29.1172 13.4653 28.6829 13.0274C28.239 12.5907 27.6049 12.3693 26.7782 12.3693H24.2239V19.5513H25.4155V17.28H26.8608C27.6193 17.28 28.2282 17.0586 28.6721 16.6111ZM26.8811 13.5338C27.7114 13.5338 28.1301 13.9705 28.1301 14.8403C28.1301 15.2457 28.0165 15.5621 27.7952 15.7883C27.5738 16.0156 27.258 16.1251 26.8608 16.1251H25.4108V13.5326H26.8823L26.8811 13.5338ZM17.3591 12.385H16.1663V19.5669H17.3591V12.385ZM42.1937 19.6836C42.3995 19.6836 42.6017 19.6571 42.7919 19.6102H42.7979V18.6189C42.6986 18.6334 42.5981 18.6406 42.4988 18.6406C42.1997 18.6406 42.0035 18.572 41.9101 18.4457C41.8324 18.3459 41.7917 18.1402 41.7917 17.8238V14.9149H42.8182V13.9513H41.7917V12.397H40.6348V17.8971C40.6348 18.5564 40.7173 18.9979 40.8872 19.2361C41.099 19.5368 41.5321 19.6848 42.1925 19.6848L42.1937 19.6836ZM21.8862 19.5777H23.0575V15.9314C23.0575 15.3203 22.8876 14.8451 22.5574 14.5083C22.2272 14.1654 21.7833 13.9657 21.2258 13.9657C19.9409 13.9657 18.516 14.2869 18.516 14.2869V19.5765H19.6872V15.135C20.0952 15.0448 20.6575 14.9606 21.008 14.9871C21.5763 15.0352 21.885 15.425 21.885 16.
190951468V19.5765L21.8862 19.5777ZM34.8598 16.7218C34.8598 17.5856 34.6229 18.2821 34.148 18.809C33.673 19.3359 33.0581 19.5994 32.3055 19.5994C31.553 19.5994 30.9321 19.3359 30.4631 18.809C29.9881 18.2821 29.7512 17.5868 29.7512 16.723C29.7512 15.8592 29.9881 15.1639 30.4631 14.6418C30.9381 14.1209 31.5518 13.8562 32.3055 13.8562C33.0593 13.8562 33.6838 14.1197 34.1587 14.6418C34.6229 15.1687 34.8598 15.8592 34.8598 16.723V16.7218ZM33.6527 16.7266C33.6527 16.1841 33.5294 15.757 33.2866 15.4406C33.0389 15.1242 32.7135 14.9666 32.3055 14.9666C31.8976 14.9666 31.5722 15.1254 31.3257 15.4454C31.078 15.7666 30.9596 16.1937 30.9596 16.7266C30.9596 17.2595 31.0828 17.6962 31.3257 18.0126C31.5733 18.329 31.8988 18.4866 32.3055 18.4866C32.7123 18.4866 33.0389 18.3278 33.2866 18.0126C33.5294 17.6962 33.6527 17.2692 33.6527 16.7266ZM39.3247 19.0568C39.7375 18.7092 39.9445 18.2617 39.9445 17.7191C39.9445 16.8758 39.4336 16.3597 38.4059 16.1648C37.9728 16.0854 37.5338 16.006 37.0899 15.9374C36.7752 15.8532 36.6209 15.6956 36.6209 15.4683C36.6209 15.0737 36.9619 14.8788 37.6474 14.8788C38.1834 14.8788 38.6643 15.0689 39.0819 15.4478L39.7782 14.6995C39.2003 14.151 38.504 13.8779 37.6833 13.8779C37.0073 13.8779 36.4654 14.0415 36.0574 14.3735C35.6494 14.7044 35.4484 15.1218 35.4484 15.6114C35.4484 16.1011 35.6135 16.4595 35.9485 16.7026C36.2381 16.9023 36.7118 17.0502 37.3842 17.1501C37.9417 17.2391 38.2827 17.3077 38.4107 17.3558C38.632 17.44 38.7409 17.5976 38.7409 17.825C38.7409 18.0198 38.6428 18.1883 38.4514 18.3206C38.26 18.4529 38.0027 18.5203 37.6725 18.5203C37.0839 18.5203 36.5671 18.2989 36.1232 17.8562L35.2355 18.6153C35.8133 19.2589 36.6293 19.5789 37.6869 19.5789C38.3628 19.5789 38.9096 19.4057 39.3224 19.058L39.3247 19.0568Z" fill="#1D1D1D"/> 19096 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.41016 16.0361C8.41016 16.0361 7.47459 16.4006 6.32007 16.4006C5.16556 16.4006 4.22998 16.0361 4.22998 16.0361C4.22998 16.0361 5.16556 15.6716 6.32007 15.6716C7.47459 15.6716 8.41016 16.0361 8.41016 16.0361Z" fill="#FFCC05"/> 19097 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.2994 10.6791C11.2994 10.6791 10.4703 10.1161 9.82427 9.17173C9.17941 8.22617 8.96167 7.25654 8.96167 7.25654C8.96167 7.25654 9.79077 7.81835 10.4368 8.76391C11.0829 9.70947 11.2994 10.6791 11.2994 10.6791Z" fill="#FFCC05"/> 19098 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.1828 12.9901C9.1828 12.9901 8.18382 12.8782 7.16449 12.3429C6.14517 11.8075 5.49194 11.052 5.49194 11.052C5.49194 11.052 6.49093 11.1639 7.51025 11.6992C8.52957 12.2346 9.1828 12.9901 9.1828 12.9901Z" fill="#FFCC05"/> 19099 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.2994 21.3738C11.2994 21.3738 10.4703 21.9368 9.82427 22.8812C9.17941 23.8256 8.96167 24.7964 8.96167 24.7964C8.96167 24.7964 9.79077 24.2346 10.4368 23.289C11.0829 22.3447 11.2994 21.3738 11.2994 21.3738Z" fill="#FFCC05"/> 19100 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.1828 19.0629C9.1828 19.0629 8.18382
1910019.1747 7.16449 19.7101C6.14517 20.2454 5.49194 21.0009 5.49194 21.0009C5.49194 21.0009 6.49093 20.889 7.51025 20.3537C8.52957 19.8183 9.1828 19.0629 9.1828 19.0629Z" fill="#FFCC05"/> 19101 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.6092 17.7913C12.3617 19.7293 13.5712 21.1188 15.7319 21.4484C15.4855 21.4821 15.2354 21.5026 14.9794 21.5038C11.9178 21.517 9.42337 19.0773 9.41021 16.0541C9.39705 13.031 11.8676 10.5684 14.9291 10.5552C15.2019 10.554 15.4699 10.5732 15.7331 10.6093C13.2578 10.9197 11.6068 12.8517 11.2802 15.3107C11.1761 16.8096 12.912 17.3161 12.912 17.3161C12.912 17.3161 12.2014 17.7829 11.6092 17.7925V17.7913Z" fill="#FFCC05"/> 19102 </g> 19103 <defs> 19104 <clipPath id="a_9"> 19105 <rect width="48" height="32" fill="white"/> 19106 </clipPath> 19107 </defs> 19108<title>InPost</title></svg> 19109 </div> 19110</section> 19111 19112 <div class="max-w-80" x-data="{ open: false }" @click.outside="open = false" @keydown.escape.window="open = false"> 19113 <div id="website-switcher-label" class="text-sm text-white font-medium mb-2"> 19114 Wybierz kraj </div> 19115 19116 <div class="relative"> 19117 <button type="button" 19118 class="dropdown w-full flex items-center justify-between gap-2 cursor-pointer" 19119 :class="{ 'rounded-b-none': open }" 19120 id="website-switcher-button" 19121 :aria-expanded="open" 19122 aria-haspopup="true" 19123 @click="open = !open"> 19124 <span class="flex items-center gap-2 truncate"> 19125 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_10"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_10)"><path fill="#d80027" d="m0 256 256.4-44.3L512 256v256H0z"/><path fill="#eee" d="M0 0h512v256H0z"/></g><title>pl</title></svg> 19126 <span class="truncate"> 19127 fera.pl </span> 19128 </span> 19129 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="transition-transform duration-200 text-secondary-600" width="20" height="20" :class="{ 'rotate-180': open }" role="img"> 19130 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 19131<title>chevron-down</title></svg> 19132 </button> 19133 19134 <ul class="dropdown-list max-h-[220px] overflow-y-auto scrollbar-custom absolute w-full z-50 left-0" 19135 x-show="open" 19136 x-transition:enter="transition ease-out duration-100" 19137 x-transition:enter-start="transform opacity-0 scale-95" 19138 x-transition:enter-end="transform opacity-100 scale-100" 19139 x-transition:leave="transition ease-in duration-75" 19140 x-transition:leave-start="transform opacity-100 scale-100" 19141 x-transition:leave-end="transform opacity-0 scale-95" 19142 role="menu" 19143 aria-orientation="vertical" 19144 aria-labelledby="website-switcher-button" 19145 style="display: none;"> 19146 <li> 19147 <a href="https://fera.pl" 19148 class="dropdown-list-item justify-normal gap-2 w-full flex items-center selected" 19149 role="menuitem"> 19150 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_11"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_11)"><path fill="#d80027" d="m0 256 256.4-44.3L512 256v256H0z"/><path fill="#eee" d="M0 0h512v256H0z"/></g><title>pl</title></svg> 19151 <span class="truncate"> 19152 fera.pl </span> 19153 </a> 19154 </li> 19155 <li> 19156 <a href="https://fera24.de" 19157 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19158 role="menuitem"> 19159 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_12"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_12)"><path fill="#ffda44" d="m0 345 256.7-25.5L512 345v167H0z"/><path fill="#d80027" d="m0 167 255-23 257 23v178H0z"/><path fill="#333" d="M0 0h512v167H0z"/></g><title>de</title></svg>
19160 <span class="truncate"> 19161 fera24.de </span> 19162 </a> 19163 </li> 19164 <li> 19165 <a href="https://fera24.at/" 19166 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19167 role="menuitem"> 19168 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_13"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_13)"><path fill="#d80027" d="M0 0h512v167l-23.2 89.7L512 345v167H0V345l29.4-89L0 167z"/><path fill="#eee" d="M0 167h512v178H0z"/></g><title>at</title></svg> 19169 <span class="truncate"> 19170 fera24.at </span> 19171 </a> 19172 </li> 19173 <li> 19174 <a href="https://fera24.cz/" 19175 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19176 role="menuitem"> 19177 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_14"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_14)"><path fill="#eee" d="M0 0h512v256l-265 45.2z"/><path fill="#d80027" d="M210 256h302v256H0z"/><path fill="#0052b4" d="M0 0v512l256-256L0 0z"/></g><title>cz</title></svg> 19178 <span class="truncate"> 19179 fera24.cz </span> 19180 </a> 19181 </li> 19182 <li> 19183 <a href="https://fera.lt" 19184 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19185 role="menuitem"> 19186 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_15"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_15)"><path fill="#6da544" d="m0 167 253.8-19.3L512 167v178l-254.9 32.3L0 345z"/><path fill="#ffda44" d="M0 0h512v167H0z"/><path fill="#d80027" d="M0 345h512v167H0z"/></g><title>lt</title></svg> 19187 <span class="truncate"> 19188 fera.lt </span> 19189 </a> 19190 </li> 19191 <li> 19192 <a href="https://fera.sk" 19193 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19194 role="menuitem"> 19195 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_16"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_16)"><path fill="#0052b4" d="m0 160 256-32 256 32v192l-256 32L0 352z"/><path fill="#eee" d="M0 0h512v160H0z"/><path fill="#d80027" d="M0 352h512v160H0z"/><path fill="#eee" d="M64 63v217c0 104 144 137 144 137s144-33 144-137V63z"/><path fill="#d80027" d="M96 95v185a83 78 0 0 0 9 34h206a83 77 0 0 0 9-34V95z"/><path fill="#eee" d="M288 224h-64v-32h32v-32h-32v-32h-32v32h-32v32h32v32h-64v32h64v32h32v-32h64z"/><path fill="#0052b4" d="M152 359a247 231 0 0 0 56 24c12-3 34-11 56-24a123 115 0 0 0 47-45 60 56 0 0 0-34-10l-14 2a60 56 0 0 0-110 0 60 56 0 0 0-14-2c-12 0-24 4-34 10a123 115 0 0 0 47 45z"/></g><title>sk</title></svg> 19196 <span class="truncate"> 19197 fera.sk </span> 19198 </a> 19199 </li> 19200 <li> 19201 <a href="https://fera.hu" 19202 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19203 role="menuitem"> 19204 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_17"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_17)"><path fill="#eee" d="m0 167 253.8-19.3L512 167v178l-254.9 32.3L0 345z"/><path fill="#d80027" d="M0 0h512v167H0z"/><path fill="#6da544" d="M0 345h512v167H0z"/></g><title>hu</title></svg>
19205 <span class="truncate"> 19206 fera.hu </span> 19207 </a> 19208 </li> 19209 <li> 19210 <a href="https://fera.ro" 19211 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19212 role="menuitem"> 19213 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_18"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_18)"><path fill="#ffda44" d="M167 0h178l25.9 252.3L345 512H167l-29.8-253.4z"/><path fill="#0052b4" d="M0 0h167v512H0z"/><path fill="#d80027" d="M345 0h167v512H345z"/></g><title>ro</title></svg> 19214 <span class="truncate"> 19215 fera.ro </span> 19216 </a> 19217 </li> 19218 <li> 19219 <a href="https://fera.ee" 19220 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19221 role="menuitem"> 19222 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_19"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_19)"><path fill="#333" d="m0 167 254.6-36.6L512 166.9v178l-254.6 36.4L0 344.9z"/><path fill="#0052b4" d="M0 0h512v166.9H0z"/><path fill="#eee" d="M0 344.9h512V512H0z"/></g><title>ee</title></svg> 19223 <span class="truncate"> 19224 fera.ee </span> 19225 </a> 19226 </li> 19227 <li> 19228 <a href="https://fera24.lv" 19229 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19230 role="menuitem"> 19231 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_20"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_20)"><path fill="#a2001d" d="M0 0h512v189.2l-38.5 70 38.5 63.6V512H0V322.8l39.4-63L0 189.1z"/><path fill="#eee" d="M0 189.2h512v133.6H0z"/></g><title>lv</title></svg> 19232 <span class="truncate"> 19233 fera24.lv </span> 19234 </a> 19235 </li> 19236 <li> 19237 <a href="https://fera24.it" 19238 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19239 role="menuitem"> 19240 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_21"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_21)"><path fill="#eee" d="M167 0h178l25.9 252.3L345 512H167l-29.8-253.4z"/><path fill="#6da544" d="M0 0h167v512H0z"/><path fill="#d80027" d="M345 0h167v512H345z"/></g><title>it</title></svg> 19241 <span class="truncate"> 19242 fera24.it </span> 19243 </a> 19244 </li> 19245 <li> 19246 <a href="https://fera.fr" 19247 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19248 role="menuitem"> 19249 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_22"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_22)"><path fill="#eee" d="M167 0h178l25.9 252.3L345 512H167l-29.8-253.4z"/>
19249<path fill="#0052b4" d="M0 0h167v512H0z"/><path fill="#d80027" d="M345 0h167v512H345z"/></g><title>fr</title></svg> 19250 <span class="truncate"> 19251 fera.fr </span> 19252 </a> 19253 </li> 19254 <li> 19255 <a href="https://fera24.be" 19256 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19257 role="menuitem"> 19258 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_23"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_23)"><path fill="#333" d="M0 0h167l38.2 252.6L167 512H0z"/><path fill="#d80027" d="M345 0h167v512H345l-36.7-256z"/><path fill="#ffda44" d="M167 0h178v512H167z"/></g><title>be</title></svg> 19259 <span class="truncate"> 19260 fera24.be </span> 19261 </a> 19262 </li> 19263 <li> 19264 <a href="https://fera.se" 19265 class="dropdown-list-item justify-normal gap-2 w-full flex items-center " 19266 role="menuitem"> 19267 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 512 512" role="img"><mask id="a_24"><circle cx="256" cy="256" r="256" fill="#fff"/></mask><g mask="url(#a_24)"><path fill="#0052b4" d="M0 0h133.6l35.3 16.7L200.3 0H512v222.6l-22.6 31.7 22.6 35.1V512H200.3l-32-19.8-34.7 19.8H0V289.4l22.1-33.3L0 222.6z"/><path fill="#ffda44" d="M133.6 0v222.6H0v66.8h133.6V512h66.7V289.4H512v-66.8H200.3V0z"/></g><title>se</title></svg> 19268 <span class="truncate"> 19269 fera.se </span> 19270 </a> 19271 </li> 19272 </ul> 19273 </div> 19274 </div> 19275 </div> 19276 </div> 19277 <div class="rounded-t-3xl bg-primary text-brandSecondary-900"> 19278 <div class="container py-5 grid grid-cols-1 justify-items-center items-center gap-4 xl:grid-cols-3 xl:justify-items-start 19279 xl:[&>*:nth-child(2):last-child]:col-span-2 19280 xl:[&>*:nth-child(2):last-child>*]:flex-1 19281 xl:[&>*:nth-child(2):last-child>*:first-child]:justify-center 19282 xl:[&>*:nth-child(2):last-child>*:last-child]:justify-end"> 19283 <div> 19284<div class="flex gap-6 items-end"> 19285 <div class="hidden xl:block shrink-0 rounded-lg overflow-hidden"> 19286 <?xml version="1.0"?> 19287<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="90px" height="90px" viewBox="0 0 90 90"><title>Pobierz aplikacjÄ!</title><rect x="0" y="0" width="90" height="90" fill="#ffffff" fill-opacity="1"/><path fill="#000000" fill-opacity="1" d="M10,10L26.9,10L26.9,12.41L10,12.41ZM31.72,10L34.14,10L34.14,12.41L31.72,12.41ZM46.21,10L51.03,10L51.03,12.41L46.21,12.41ZM63.1,10L80,10L80,12.41L63.1,12.41ZM10,12.41L12.41,12.41L12.41,14.83L10,14.83ZM24.48,12.41L26.9,12.41L26.9,14.83L24.48,14.83ZM29.31,12.41L34.14,12.41L34.14,14.83L29.31,14.83ZM36.55,12.41L41.38,12.41L41.38,14.83L36.55,14.83ZM51.03,12.41L53.45,12.41L53.45,14.83L51.03,14.83ZM63.1,12.41L65.52,12.41L65.52,14.83L63.1,14.83ZM77.59,12.41L80,12.41L80,14.83L77.59,14.83ZM10,14.83L12.41,14.83L12.41,17.24L10,17.24ZM14.83,14.83L22.07,14.83L22.07,17.24L14.83,17.24ZM24.48,14.83L26.9,14.83L26.9,17.24L24.48,17.24ZM31.72,14.83L38.97,14.83L38.97,17.24L31.72,17.24ZM43.79,14.83L46.21,14.83L46.21,17.24L43.79,17.24ZM48.62,14.83L60.69,14.83L60.69,17.24L48.62,17.24ZM63.1,14.83L65.52,14.83L65.52,17.24L63.1,17.24ZM67.93,14.83L75.17,14.83L75.17,17.24L67.93,17.24ZM77.59,14.83L80,14.83L80,17.24L77.59,17.24ZM10,17.24L12.41,17.24L12.41,19.66L10,19.66ZM14.83,17.24L22.07,17.24L22.07,19.66L14.83,19.66ZM24.48,17.24L26.9,17.24L26.9,19.66L24.48,19.66ZM29.31,17.24L34.14,17.24L34.14,19.66L29.31,19.66ZM36.55,17.24L38.97,17.24L38.97,19.66L36.55,19.66ZM63.1,17.24L65.52,17.24L65.52,19.66L63.1,19.66ZM67.93,17.24L75.17,17.24L75.17,19.66L67.93,19.66ZM77.59,17.24L80,17.24L80,19.66L77.59,19.66ZM10,19.66L12.41,19.66L12.41,22.07L10,22.07ZM14.83,19.66L22.07,19.66L22.07,22.07L14.83,22.07ZM24.48,19.66L26.9,19.66L26.9,22.07L24.48,22.07ZM34.14,19.66L36.55,19.66L36.55,22.07L34.14,22.07ZM38.97,19.66L48.62,19.66L48.62,22.07L38.97,22.07ZM53.45,19.66L55.86,19.66L55.86,22.07L53.45,22.07ZM58.28,19.66L60.69,19.66L60.69,22.07L58.28,22.07ZM63.1,19.66L65.52,19.66L65.52,22.07L63.1,22.07ZM67.93,19.66L75.17,19.66L75.17,22.07L67.93,22.07ZM77.59,19.66L80,19.66L80,22.07L77.59,22.07ZM10,22.07L12.41,22.07L12.41,24.48L10,24.48ZM24.48,22.07L26.9,22.07L26.9,24.48L24.48,24.48ZM29.31,22.07L31.72,22.07L31.72,24.48L29.31,24.48ZM34.14,22.07L36.55,22.07L36.55,24.48L34.14,24.48ZM41.38,22.07L48.62,22.07L48.62,24.48L41.38,24.48ZM51.03,22.07L53.45,22.07L53.45,24.48L51.03,24.48ZM58.28,22.07L60.69,22.07L60.69,24.48L58.28,24.48ZM63.1,22.07L65.52,22.07L65.52,24.48L63.1,24.48ZM77.59,22.07L80,22.07L80,24.48L77.59,24.48ZM10,24.48L26.9,24.48L26.9,26.9L10,26.9ZM29.31,24.48L31.72,24.48L31.72,26.9L29.31,26.9ZM34.14,24.48L36.55,24.48L36.55,26.9L34.14,26.9ZM38.97,24.48L41.38,24.48L41.38,26.9L38.97,26.9ZM43.79,24.48L46.21,24.48L46.21,26.9L43.79,26.9ZM48.62,24.48L51.03,24.48L51.03,26.9L48.62,26.9ZM53.45,24.48L55.86,24.48L55.86,26.9L53.45,26.9ZM58.28,24.48L60.
1928769,24.48L60.69,26.9L58.28,26.9ZM63.1,24.48L80,24.48L80,26.9L63.1,26.9ZM38.97,26.9L43.79,26.9L43.79,29.31L38.97,29.31ZM46.21,26.9L48.62,26.9L48.62,29.31L46.21,29.31ZM51.03,26.9L60.69,26.9L60.69,29.31L51.03,29.31ZM10,29.31L22.07,29.31L22.07,31.72L10,31.72ZM24.48,29.31L36.55,29.31L36.55,31.72L24.48,31.72ZM38.97,29.31L41.38,29.31L41.38,31.72L38.97,31.72ZM43.79,29.31L51.03,29.31L51.03,31.72L43.79,31.72ZM58.28,29.31L63.1,29.31L63.1,31.72L58.28,31.72ZM65.52,29.31L67.93,29.31L67.93,31.72L65.52,31.72ZM70.34,29.31L72.76,29.31L72.76,31.72L70.34,31.72ZM75.17,29.31L77.59,29.31L77.59,31.72L75.17,31.72ZM10,31.72L14.83,31.72L14.83,34.14L10,34.14ZM26.9,31.72L29.31,31.72L29.31,34.14L26.9,34.14ZM31.72,31.72L34.14,31.72L34.14,34.14L31.72,34.14ZM48.62,31.72L51.03,31.72L51.03,34.14L48.62,34.14ZM53.45,31.72L58.28,31.72L58.28,34.14L53.45,34.14ZM60.69,31.72L65.52,31.72L65.52,34.14L60.69,34.14ZM67.93,31.72L72.76,31.72L72.76,34.14L67.93,34.14ZM75.17,31.72L77.59,31.72L77.59,34.14L75.17,34.14ZM12.41,34.14L14.83,34.14L14.83,36.55L12.41,36.55ZM17.24,34.14L22.07,34.14L22.07,36.55L17.24,36.55ZM24.48,34.14L29.31,34.14L29.31,36.55L24.48,36.55ZM31.72,34.14L34.14,34.14L34.14,36.55L31.72,36.55ZM36.55,34.14L41.38,34.14L41.38,36.55L36.55,36.55ZM51.03,34.14L55.86,34.14L55.86,36.55L51.03,36.55ZM58.28,34.14L60.69,34.14L60.69,36.55L58.28,36.55ZM65.52,34.14L67.93,34.14L67.93,36.55L65.52,36.55ZM70.34,34.14L75.17,34.14L75.17,36.55L70.34,36.55ZM12.41,36.55L14.83,36.55L14.83,38.97L12.41,38.97ZM19.66,36.55L24.48,36.55L24.48,38.97L19.66,38.97ZM26.9,36.55L38.97,36.55L38.97,38.97L26.9,38.97ZM43.79,36.55L46.21,36.55L46.21,38.97L43.79,38.97ZM51.03,36.55L72.76,36.55L72.76,38.97L51.03,38.97ZM77.59,36.55L80,36.55L80,38.97L77.59,38.97ZM12.41,38.97L14.83,38.97L14.83,41.38L12.41,41.38ZM24.48,38.97L26.9,38.97L26.9,41.38L24.48,41.38ZM31.72,38.97L34.14,38.97L34.14,41.38L31.72,41.38ZM36.55,38.97L38.97,38.97L38.97,41.38L36.55,41.38ZM46.21,38.97L48.62,38.97L48.62,41.38L46.21,41.38ZM60.
1928769,38.97L63.1,38.97L63.1,41.38L60.69,41.38ZM65.52,38.97L70.34,38.97L70.34,41.38L65.52,41.38ZM10,41.38L12.41,41.38L12.41,43.79L10,43.79ZM17.24,41.38L22.07,41.38L22.07,43.79L17.24,43.79ZM26.9,41.38L29.31,41.38L29.31,43.79L26.9,43.79ZM34.14,41.38L36.55,41.38L36.55,43.79L34.14,43.79ZM38.97,41.38L48.62,41.38L48.62,43.79L38.97,43.79ZM55.86,41.38L60.69,41.38L60.69,43.79L55.86,43.79ZM65.52,41.38L72.76,41.38L72.76,43.79L65.52,43.79ZM75.17,41.38L77.59,41.38L77.59,43.79L75.17,43.79ZM19.66,43.79L22.07,43.79L22.07,46.21L19.66,46.21ZM24.48,43.79L26.9,43.79L26.9,46.21L24.48,46.21ZM41.38,43.79L53.45,43.79L53.45,46.21L41.38,46.21ZM55.86,43.79L58.28,43.79L58.28,46.21L55.86,46.21ZM60.69,43.79L63.1,43.79L63.1,46.21L60.69,46.21ZM70.34,43.79L80,43.79L80,46.21L70.34,46.21ZM17.24,46.21L24.48,46.21L24.48,48.62L17.24,48.62ZM26.9,46.21L29.31,46.21L29.31,48.62L26.9,48.62ZM31.72,46.21L36.55,46.21L36.55,48.62L31.72,48.62ZM38.97,46.21L43.79,46.21L43.79,48.62L38.97,48.62ZM48.62,46.21L51.03,46.21L51.03,48.62L48.62,48.62ZM53.45,46.21L70.34,46.21L70.34,48.62L53.45,48.62ZM75.17,46.21L80,46.21L80,48.62L75.17,48.62ZM24.48,48.62L26.9,48.62L26.9,51.03L24.48,51.03ZM38.97,48.62L41.38,48.62L41.38,51.03L38.97,51.03ZM43.79,48.62L48.62,48.62L48.62,51.03L43.79,51.03ZM51.03,48.62L53.45,48.62L53.45,51.03L51.03,51.03ZM58.28,48.62L60.69,48.62L60.69,51.03L58.28,51.03ZM63.1,48.62L65.52,48.62L65.52,51.03L63.1,51.03ZM10,51.03L12.41,51.03L12.41,53.45L10,53.45ZM17.24,51.03L22.07,51.03L22.07,53.45L17.24,53.45ZM46.21,51.03L48.62,51.03L48.62,53.45L46.21,53.45ZM53.45,51.03L55.86,51.03L55.86,53.45L53.45,53.45ZM60.69,51.03L72.76,51.03L72.76,53.45L60.69,53.45ZM10,53.45L12.41,53.45L12.41,55.86L10,55.86ZM14.83,53.45L17.24,53.45L17.24,55.86L14.83,55.86ZM19.66,53.45L22.07,53.45L22.07,55.86L19.66,55.86ZM24.48,53.45L31.72,53.45L31.72,55.86L24.48,55.86ZM34.14,53.45L41.38,53.45L41.38,55.86L34.14,55.86ZM46.21,53.45L53.45,53.45L53.45,55.86L46.21,55.86ZM55.86,53.45L58.28,53.45L58.28,55.86L55.86,55.86ZM70.34,53.45L77.59,53.45L77.59,55.86L70.34,55.86ZM10,55.86L12.41,55.86L12.41,58.28L10,58.28ZM17.24,55.86L22.07,55.86L22.07,58.28L17.24,58.28ZM26.9,55.86L34.14,55.86L34.14,58.28L26.9,58.28ZM36.55,55.86L38.97,55.86L38.97,58.28L36.55,58.28ZM43.79,55.86L46.21,55.86L46.21,58.28L43.79,58.28ZM48.62,55.86L51.03,55.86L51.03,58.28L48.62,58.28ZM53.45,55.86L60.69,55.86L60.69,58.28L53.45,58.28ZM63.1,55.86L70.34,55.86L70.34,58.28L63.1,58.28ZM75.17,55.86L80,55.86L80,58.28L75.17,58.28ZM10,58.28L12.41,58.28L12.41,60.69L10,60.69ZM14.83,58.28L17.24,58.28L17.24,60.69L14.83,60.69ZM19.66,58.28L26.9,58.28L26.9,60.69L19.66,60.69ZM36.55,58.28L38.97,58.28L38.97,60.69L36.55,60.69ZM46.21,58.28L51.03,58.28L51.03,60.69L46.21,60.69ZM58.28,58.28L77.59,58.28L77.59,60.69L58.28,60.69ZM29.31,60.69L34.14,60.69L34.14,63.1L29.31,63.1ZM38.97,60.69L48.62,60.69L48.62,63.1L38.97,63.1ZM55.86,60.69L60.69,60.69L60.69,63.1L55.86,63.1ZM67.93,60.69L70.34,60.69L70.34,63.1L67.93,63.1ZM75.17,60.69L77.59,60.69L77.59,63.1L75.17,63.1ZM10,63.1L26.9,63.1L26.9,65.52L10,65.52ZM29.31,63.1L36.55,63.1L36.55,65.52L29.31,65.52ZM41.38,63.1L48.62,63.1L48.62,65.52L41.38,65.52ZM51.03,63.1L53.45,63.1L53.45,65.52L51.03,65.52ZM55.86,63.1L60.69,63.1L60.69,65.52L55.86,65.52ZM63.1,63.1L65.52,63.1L65.52,65.52L63.1,65.52ZM67.93,63.1L75.17,63.1L75.17,65.52L67.93,65.52ZM10,65.52L12.41,65.52L12.41,67.93L10,67.93ZM24.48,65.52L26.9,65.52L26.9,67.93L24.48,67.93ZM31.72,65.52L34.14,65.52L34.14,67.93L31.72,67.93ZM38.97,65.52L43.79,65.52L43.79,67.93L38.97,67.93ZM48.62,65.52L51.03,65.52L51.03,67.93L48.62,67.93ZM55.86,65.52L60.69,65.52L60.69,67.93L55.86,67.93ZM67.93,65.52L70.34,65.52L70.34,67.93L67.93,67.93ZM72.76,65.52L80,65.52L80,67.93L72.76,67.93ZM10,67.93L12.41,67.93L12.41,70.34L10,70.34ZM14.83,67.93L22.07,67.93L22.07,70.34L14.83,70.34ZM24.48,67.93L26.9,67.93L26.9,70.34L24.48,70.34ZM29.31,67.93L31.72,67.93L31.72,70.34L29.31,70.34ZM38.97,67.93L41.38,67.93L41.38,70.34L38.97,70.34ZM43.79,67.93L70.34,67.93L70.34,70.34L43.79,70.34ZM72.76,67.93L80,67.93L80,70.34L72.76,70.34ZM10,70.34L12.41,70.34L12.41,72.76L10,72.76ZM14.83,70.34L22.07,70.34L22.07,72.76L14.83,72.76ZM24.48,70.34L26.9,70.34L26.9,72.76L24.48,72.76ZM29.31,70.34L31.72,70.34L31.72,72.76L29.31,72.76ZM46.21,70.34L51.03,70.34L51.03,72.76L46.21,72.76ZM53.45,70.34L55.86,70.34L55.86,72.76L53.45,72.76ZM58.28,70.34L63.1,70.34L63.1,72.76L58.28,72.76ZM65.52,70.34L67.93,70.34L67.93,72.76L65.52,72.76ZM10,72.76L12.41,72.76L12.41,75.17L10,75.17ZM14.83,72.76L22.07,72.76L22.07,75.17L14.83,75.17ZM24.48,72.76L26.9,72.76L26.9,75.17L24.48,75.17ZM29.31,72.76L31.72,72.76L31.72,75.17L29.31,75.17ZM34.14,72.76L41.38,72.76L41.38,75.17L34.14,75.17ZM51.03,72.76L53.45,72.76L53.45,75.17L51.03,75.17ZM60.69,72.76L63.1,72.76L63.1,75.17L60.69,75.17ZM65.52,72.76L67.93,72.76L67.93,75.17L65.52,75.17ZM72.76,72.76L77.59,72.76L77.59,75.17L72.76,75.17ZM10,75.17L12.41,75.17L12.41,77.59L10,77.59ZM24.48,75.17L26.9,75.17L26.9,77.59L24.48,77.59ZM29.31,75.17L31.72,75.17L31.72,77.59L29.31,77.59ZM34.14,75.17L38.97,75.17L38.97,77.59L34.14,77.59ZM43.79,75.17L46.21,75.17L46.21,7
192877.59L43.79,77.59ZM53.45,75.17L55.86,75.17L55.86,77.59L53.45,77.59ZM70.34,75.17L75.17,75.17L75.17,77.59L70.34,77.59ZM77.59,75.17L80,75.17L80,77.59L77.59,77.59ZM10,77.59L26.9,77.59L26.9,80L10,80ZM29.31,77.59L31.72,77.59L31.72,80L29.31,80ZM34.14,77.59L38.97,77.59L38.97,80L34.14,80ZM46.21,77.59L51.03,77.59L51.03,80L46.21,80ZM53.45,77.59L65.52,77.59L65.52,80L53.45,80ZM67.93,77.59L75.17,77.59L75.17,80L67.93,80Z"/></svg> 19288 </div> 19289 <div class="flex flex-col gap-4 items-center xl:items-start"> 19290 <span class="font-heading text-2xl font-extrabold"> 19291 Pobierz aplikacjÄ! </span> 19292 <div class="flex gap-4"> 19293 <a href="https://play.google.com/store/apps/details?id=com.fera.app.ferastore&hl=pl" 19294 target="_blank" 19295 aria-label="Pobierz z Google Play" 19296 rel="nofollow"> 19297 <svg xmlns="http://www.w3.org/2000/svg" width="135" height="40" viewBox="0 0 135 40" class="shrink-0" role="img"> 19298 <path d="M77.4 23.4c-1.3.1-2.2 1.1-2.4 2.4-.1 1.4.9 2.7 2.4 2.8h.1c1.3-.1 2.3-1.3 2.2-2.6v-.1c.1-1.3-.9-2.4-2.3-2.5M56.2 12c.2-.2.3-.4.3-.7 0-.6-.4-1-1-1H54v2h1.5c.3 0 .5-.1.7-.3M50.6 11.7c.9-1 .9-2.5 0-3.4s-2.4-.9-3.3 0c-.9 1-.9 2.5 0 3.4 1 .9 2.4.9 3.3 0M44.2 9.5c.4-.4.4-1 0-1.4-.2-.2-.5-.3-.8-.3h-1.3v2.1h1.3c.4-.1.6-.2.8-.4M58.5 23.4c-1.4.1-2.5 1.3-2.4 2.8.1 1.4 1.3 2.5 2.8 2.4h.1c1.4-.1 2.4-1.2 2.3-2.6v-.2c-.2-1.4-1.4-2.5-2.8-2.4M89.5 23.4s-.1 0 0 0c-1.3.1-2.3 1.2-2.2 2.5l3.8-1.6c-.3-.6-1-.9-1.6-.9M67.8 23.4c-1.4.1-2.5 1.3-2.4 2.8s1.3 2.5 2.8 2.4h.1c1.4-.1 2.4-1.2 2.3-2.6v-.2c-.2-1.4-1.4-2.5-2.8-2.4M111.7 27.5c0 .8.8 1.1 1.5 1.1 1.1 0 2.1-.9 2.2-2-.5-.3-1.1-.4-1.7-.4-1 0-2 .3-2 1.3M68 9.5c.2-.2.3-.5.3-.8s-.1-.5-.3-.7-.5-.3-.8-.3h-1.3v2.1h1.2c.4.1.7-.1.9-.3M56 9.3c.3-.4.3-.9 0-1.3-.2-.2-.4-.3-.7-.3h-1.4v1.9h1.4c.3 0 .6-.1.7-.3"/> 19299 <path d="M130 .8H5C2.7.8.8 2.7.8 5v30c0 2.3 1.9 4.2 4.2 4.2h125c2.3 0 4.2-1.9 4.2-4.2V5c0-2.3-1.9-4.2-4.2-4.2M76.8 12.2 80 7.7h-3.1V7h4v.8l-3.2 4.5h3.2v.7h-4.2v-.8zm-7 0L73 7.7h-3V7h4v.8l-3.2 4.5H74v.7h-4.2zM65.2 7h2c.5 0 1 .2 1.3.5.7.6.7 1.7.2 2.4-.3.3-.6.5-1 .6l1.7 2.5h-.9l-1.6-2.4H66V13h-.8zm-4.7 0H64v.7h-2.8v1.9h2.5v.7h-2.5v1.9H64v.8h-3.5zm-2.2 0h.8v6h-.8zm-5.1 0h2.2c.5 0 .9.2 1.2.5s.5.7.5 1.2c0 .3-.1.5-.2.8-.1.2-.4.4-.6.5.3.1.5.3.7.5s.3.5.3.9c0 .5-.2.9-.5 1.2s-.8.5-1.3.5h-2.3zm-6.4.8c1.2-1.2 3.2-1.2 4.4 0s1.2 3.2 0 4.4-3.2 1.2-4.4 0-1.2-3.2 0-4.4M41.4 7h2c.5 0 1 .2 1.3.5.7.7.8 1.8.1 2.5l-.1.1c-.4.3-.8.5-1.3.5h-1.2V13h-.8zm10.9 21.4c-1.2 1.3-2.9 1.9-4.6 1.9h-.5c-3.6-.1-6.5-3.2-6.3-6.9.1-3.6 3.2-6.5 6.9-6.3 1.7 0 3.3.7 4.5 1.9L51 20.1c-.9-.8-2.1-1.3-3.3-1.3-2.7 0-4.8 2.1-4.8 4.8s2.1 4.8 4.8 4.8c1.2 0 2.5-.4 3.3-1.3.6-.6.9-1.4 1-2.3h-4.3V23h6.1c.1.4.1.8.1 1.1.1 1.6-.5 3.1-1.6 4.3m6.5 1.8c-2.3 0-4.3-1.9-4.3-4.2s1.9-4.3 4.2-4.3h.1c2.3 0 4.2 1.9 4.1 4.3.2 2.3-1.7 4.2-4.1 4.2m9.4 0c-2.3 0-4.3-1.9-4.3-4.2s1.9-4.3 4.2-4.3h.1c2.3 0 4.2 1.9 4.1 4.3.1 2.3-1.8 4.2-4.1 4.2m13.1-.6c0 3.1-1.8 4.4-4 4.4-1.7 0-3.1-1-3.8-2.5l1.6-.7c.3.9 1.2 1.5 2.1 1.5 1.4 0 2.3-.9 2.3-2.5v-.6h-.1c-.6.6-1.4 1-2.2 1-2.2-.1-3.9-1.9-4-4-.1-2.3 1.7-4.3 4-4.5.9 0 1.7.4 2.2 1h.1V22h1.7v7.6zm3.2.4h-1.9V17.5h1.9zm5.1-1.5q1.35 0 2.1-1.2l1.4 1c-.8 1.2-2.1 1.9-3.5 1.9h-.2c-2.3 0-4.1-2-4.1-4.2v-.3c0-2.2 1.8-4 4-4 1.7.1 3.1 1.1 3.6 2.7l.2.4-5.7 2.4c.5.9 1.3 1.4 2.2 1.3m12.2-3.2h-2.6V30h-1.9V17.5h5.1c2.1.2 3.8 2 3.6 4.2s-2 3.7-4.2 3.6m7 4.7h-1.9V17.5h1.9zm8.4 0h-1.8v-1h-.1c-.5.8-1.4 1.3-2.4 1.2h-.1c-1.6.1-2.9-1.2-3-2.8 0-1.8 1.8-2.8 3.6-2.8.7 0 1.3.2 2 .5V25c-.1-1-1-1.7-2-1.6-.7-.1-1.4.3-1.7.9l-1.7-.7c.6-1.2 1.9-2 3.3-1.9 2.1 0 3.8 1.3 3.8 3.5V30zm3.5 3.8h-2l1.9-4.2-3.3-7.6h2l2.2 5.4h.1l2.1-5.4h2.1z"/> 19300 <path d="M101.8 19.2h-2.6v4.3h2.6c1.2 0 2.1-1 2.1-2.1.1-1.2-.9-2.2-2.1-2.2"/> 19301 <path d="M130 0H5C2.2 0 0 2.2 0 5v30c0 2.8 2.2 5 5 5h125c2.8 0 5-2.2 5-5V5c0-2.8-2.2-5-5-5m4.2 35c0 2.3-1.9 4.2-4.2 4.2H5C2.7 39.2.8 37.3.8 35V5C.8 2.7 2.7.8 5 .8h125c2.3 0 4.2 1.9 4.2 4.2z" fill="#a6a6a6"/> 19302 <path d="M102.4 17.5h-5.1V30h1.9v-4.7h2.6c2.1.2 4-1.5 4.2-3.6s-1.5-4-3.6-4.2m-.6 6h-2.6v-4.3h2.6c1.2 0 2.1 1 2.1 2.1.1 1.3-.9 2.2-2.1 2.2M113.4 21.7c-1.4-.1-2.7.6-3.4 1.9l1.7.7c.3-.6 1-1 1.7-.9 1-.1 1.9.6 2 1.6v.1c-.6-.3-1.3-.5-2-.5-1.8 0-3.6 1-3.6 2.8.1 1.6 1.4 2.8 3 2.8h.1c1 .1 1.9-.4 2.4-1.2h.1v1h1.8v-4.8c0-2.2-1.7-3.5-3.8-3.5m-.2 6.9c-.7 0-1.5-.3-1.5-1.1 0-1 1.1-1.3 2-1.3.6 0 1.2.1 1.7.4-.2
193021.1-1.1 2-2.2 2M59 21.7h-.1c-2.3 0-4.2 1.9-4.2 4.3 0 2.3 1.9 4.2 4.3 4.2 2.3 0 4.2-1.9 4.2-4.2-.1-2.3-1.9-4.2-4.2-4.3m-.1 6.9s-.1 0 0 0c-1.5.1-2.7-1-2.8-2.4s1-2.7 2.4-2.8 2.7 1 2.8 2.4v.2c0 1.4-1.1 2.5-2.4 2.6M121.6 27.4h-.1l-2.2-5.4h-2l3.4 7.6-1.9 4.2h1.9l5.1-11.8h-2.1zM47.7 23.1v1.8H52c-.1.8-.4 1.6-1 2.3-.9.9-2.1 1.4-3.3 1.3-2.7 0-4.8-2.1-4.8-4.8s2.1-4.8 4.8-4.8c1.2 0 2.4.4 3.3 1.3l1.3-1.3c-1.2-1.2-2.8-1.9-4.5-1.9-3.6-.1-6.7 2.7-6.9 6.3-.1 3.6 2.7 6.7 6.3 6.9h.5c1.7.1 3.4-.6 4.6-1.9 1-1.2 1.6-2.7 1.6-4.2 0-.4 0-.8-.1-1.1zM106.9 17.5h1.9V30h-1.9zM82.6 17.5h1.9V30h-1.9zM79.6 22.7c-.6-.6-1.5-1-2.3-1-2.3.1-4.2 2.1-4 4.5.1 2.2 1.9 3.9 4 4 .9 0 1.7-.4 2.2-1h.1v.6c0 1.6-.9 2.5-2.3 2.5-1 0-1.8-.6-2.1-1.5l-1.6.7c.6 1.5 2.1 2.5 3.8 2.5 2.2 0 4-1.3 4-4.4V22h-1.7v.7zm.1 3.3c.1 1.3-.9 2.5-2.2 2.6h-.1c-1.4-.1-2.5-1.4-2.4-2.8.1-1.3 1.1-2.2 2.4-2.4 1.4.1 2.4 1.2 2.3 2.6M93 24.5c-.5-1.6-2-2.6-3.6-2.7-2.2 0-4 1.8-4 4v.3c0 2.3 1.8 4.2 4.1 4.2h.2c1.4 0 2.8-.7 3.5-1.9l-1.4-1c-.4.7-1.2 1.2-2.1 1.2s-1.7-.5-2.1-1.3l5.7-2.4zm-5.8 1.4c-.1-1.3.9-2.4 2.2-2.5.7 0 1.3.3 1.6.9zM68.3 21.7h-.1c-2.3 0-4.2 1.9-4.2 4.3s1.9 4.2 4.3 4.2c2.3 0 4.2-1.9 4.2-4.2-.1-2.3-1.9-4.2-4.2-4.3m-.1 6.9c-1.5.1-2.7-1-2.8-2.4s1-2.7 2.4-2.8 2.7 1 2.8 2.4v.2c0 1.4-1 2.5-2.4 2.6M74 12.3h-3.2L74 7.8V7h-4v.7h3l-3.2 4.5v.8H74zM42.2 10.6h1.2c.5 0 1-.2 1.3-.5l.1-.1c.7-.7.6-1.8-.1-2.5-.4-.3-.8-.5-1.3-.5h-2v6h.8zm0-2.9h1.3c.3 0 .6.1.8.3.4.4.4 1 0 1.4-.2.2-.5.3-.8.3h-1.3zM80.9 12.3h-3.2l3.2-4.5V7h-4v.7h3l-3.1 4.5v.8h4.1zM64 12.3h-2.8v-1.9h2.5v-.8h-2.5V7.7H64V7h-3.5v6H64zM65.9 10.6h.9l1.6 2.4h.9l-1.7-2.5c.4-.1.7-.3 1-.6.6-.7.5-1.8-.2-2.4-.4-.3-.8-.5-1.3-.5h-2v6h.8zm0-2.9h1.3c.3 0 .6.1.8.3s.3.5.3.7c0 .3-.1.6-.3.8s-.5.3-.8.3H66V7.7zM51.2 12.2c1.2-1.2 1.2-3.2 0-4.4s-3.2-1.2-4.4
193020-1.2 3.2 0 4.4 3.2 1.2 4.4 0m-3.8-3.9c.9-.9 2.4-.9 3.3 0 .9 1 .9 2.5 0 3.4s-2.4.9-3.3 0c-.9-1-.9-2.4 0-3.4M58.3 7h.8v6h-.8zM56.8 12.5c.4-.3.6-.8.5-1.2q0-.45-.3-.9c-.2-.2-.4-.4-.7-.5.2-.1.4-.3.6-.5.1-.2.2-.5.2-.8 0-.4-.2-.9-.5-1.2s-.8-.5-1.2-.5h-2.2v6h2.3c.4.1.9-.1 1.3-.4m-2.9-4.8h1.4c.3 0 .5.1.7.3.4.3.4.9 0 1.3-.2.2-.4.3-.7.3h-1.4zm0 2.6h1.5c.6 0 1 .4 1 1 0 .3-.1.5-.3.7s-.4.3-.7.3h-1.5z" fill="#fff"/> 19303 <path d="m20.717 19.424-10.646 11.3.001.007a2.875 2.875 0 0 0 4.237 1.734l.034-.02 11.983-6.914z" fill="#e84436"/> 19304 <path d="m31.488 17.5-.01-.007-5.174-3-5.828 5.188 5.849 5.848 5.146-2.97a2.878 2.878 0 0 0 .017-5.06" fill="#fbbc0c"/> 19305 <path d="M10.07 9.277a2.8 2.8 0 0 0-.097.74v19.968q0 .385.098.739l11.012-11.01z" fill="#517cbe"/> 19306 <path d="m20.796 20 5.51-5.508-11.97-6.94a2.88 2.88 0 0 0-4.265 1.722l-.001.003z" fill="#32a853"/> 19307<title>Pobierz z Google Play</title></svg> 19308 </a> 19309 <a href="https://apps.apple.com/pl/app/id6443771523" 19310 target="_blank" 19311 aria-label="Pobierz w App Store" 19312 rel="nofollow"> 19313 <svg xmlns="http://www.w3.org/2000/svg" width="120" height="40" viewBox="0 0 119.664 40" class="shrink-0" role="img"> 19314 <path fill="#a6a6a6" d="M110.135 0H9.535Q8.986 0 8.44.002q-.457.004-.919.013A13 13 0 0 0 5.517.19a6.7 6.7 0 0 0-1.9.627 6.4 6.4 0 0 0-1.62 1.18A6.3 6.3 0 0 0 .82 3.617 6.6 6.6 0 0 0 .195 5.52a13 13 0 0 0-.179 2.002c-.01.307-.01.615-.015.921V31.56c.005.31.006.61.015.921a13 13 0 0 0 .18 2.002 6.6 6.6 0 0 0 .624 1.905A6.2 6.2 0 0 0 1.998 38a6.3 6.3 0 0 0 1.618 1.179 6.7 6.7 0 0 0 1.901.63 13.5 13.5 0 0 0 2.004.177c.31.007.613.011.919.011.366.002.728.002 1.095.002h100.6c.36 0 .724 0 1.084-.002.304 0 .617-.004.922-.01a13 13 0 0 0 2-.178 6.8 6.8 0 0 0 1.908-.63A6.3 6.3 0 0 0 117.666 38a6.4 6.4 0 0 0 1.182-1.614 6.6 6.6 0 0 0 .619-1.905 13.5 13.5 0 0 0 .185-2.002c.004-.31.004-.61.004-.921.008-.364.008-.725.008-1.094V9.536q.002-.549-.008-1.092.001-.46-.004-.92a13.5 13.5 0 0 0-.185-2.003 6.6 6.6 0 0 0-.62-1.903 6.47 6.47 0 0 0-2.798-2.8 6.8 6.8 0 0 0-1.908-.627 13 13 0 0 0-2-.176c-.305-.005-.618-.011-.922-.013-.36-.002-.725-.002-1.084-.002"/> 19315 <path d="M8.445 39.125c-.305 0-.602-.004-.904-.01a13 13 0 0 1-1.87-.164 5.9 5.9 0 0 1-1.656-.548 5.4 5.4 0 0 1-1.397-1.016 5.3 5.3 0 0 1-1.02-1.397 5.7 5.7 0 0 1-.544-1.657 12.4 12.4 0 0 1-.166-1.875c-.007-.21-.015-.913-.015-.913v-23.1s.009-.692.015-.895a12.4 12.4 0 0 1 .165-1.872 5.8 5.8 0 0 1 .544-1.662 5.4 5.4 0 0 1 1.015-1.398 5.6 5.6 0 0 1 1.402-1.023 5.8 5.8 0 0 1 1.653-.544A12.6 12.6 0 0 1 7.543.887l.902-.012h102.769l.913.013a12.4 12.4 0 0 1 1.858.162 6 6 0 0 1 1.671.548 5.6 5.6 0 0 1 2.415 2.42 5.8 5.8 0 0 1 .535 1.649 13 13 0 0 1 .174 1.887c.003.283.003.588.003.89.008.375.008.732.008 1.092v20.929c0 .363 0 .718-.008 1.075 0 .325 0 .623-.004.93a13 13 0 0 1-.17 1.853 5.7 5.7 0 0 1-.54 1.67 5.5 5.5 0 0 1-1.016 1.386 5.4 5.4 0 0 1-1.4 1.022 5.9 5.9 0 0 1-1.668.55 12.5 12.5 0 0 1-1.869.163c-.293.007-.6.011-.897.011l-1.084.002z"/> 19316 <g fill="#fff"> 19317 <g> 19318 <path d="M24.769 20.3a4.95 4.95 0 0 1 2.356-4.151 5.07 5.07 0 0 0-3.99-2.158c-1.68-.176-3.308 1.005-4.164 1.005-.872 0-2.19-.988-3.608-.958a5.32 5.32 0 0 0-4.473 2.728c-1.934 3.348-.491 8.269 1.361 10.976.927 1.325 2.01 2.805 3.428 2.753 1.387-.058 1.905-.885 3.58-.885 1.658 0 2.144.885 3.59.852 1.489-.025 2.426-1.332 3.32-2.67a11 11 0 0 0 1.52-3.092 4.78 4.78 0 0 1-2.92-4.4m-2.732-8.09a4.87 4.87 0 0 0 1.115-3.49 4.96 4.96 0 0 0-3.208 1.66 4.64 4.64 0 0 0-1.144 3.36 4.1 4.1 0 0 0 3.237-1.53"/> 19319 </g> 19320 <path d="M42.302 27.14H37.57l-1.137 3.356h-2.005l4.484-12.418h2.083l4.483 12.418h-2.039zm-4.243-1.55h3.752l-1.85-5.446h-.051zm17.101.38c0 2.813-1.506 4.62-3.779 4.62a3.07 3.07 0 0 1-2.848-1.583h-.043v4.484h-1.86V21.442h1.8v1.506h.033a3.21 3.21 0 0 1 2.883-1.6c2.298 0 3.813 1.816 3.813 4.622zm-1.91 0c0-1.833-.948-3.038-2.393-3.038-1.42 0-2.375 1.23-2.375 3.038 0 1.824.955 3.046 2.375 3.046 1.445 0 2.393-1.197 2.393-3.046m11.875 0c0 2.813-1.506 4.62-3.779 4.62a3.07 3.07 0 0 1-2.848-1.583h-.043v4.484h-1.859V21.442h1.799v1.506h.034a3.21 3.21 0 0 1 2.883-1.6c2.298 0 3.813 1.816 3.813 4.622m-1.91 0c0-1.833-.948-3.038-2.393-3.038-1.42 0-2.375 1.23-2.375 3.038 0 1.824.955 3.046 2.375 3.046 1.445 0 2.392-1.197 2.392-3.046zm8.495 1.066c.138 1.232 1.334 2.04 2.97 2.04 1.566 0 2.693-.808 2.693-1.919 0-.964-.68-1.54-2.29-1.936l-1.609-.388c-2.28-.55-3.339-1.617-3.339-3.348 0-2.142 1.867-3.614 4.519-3.614 2.624 0 4.423 1.472 4.483 3.614h-1.876c-.112-1.239-1.136-1.987-2.634-1.987s-2.521.757-2.521 1.858c0 .878.654 1.395 2.255 1.79l1.368.336c2.548.603 3.606 1.626 3.606 3.443 0 2.323-1.85 3.778-4.793 3.778-2.754 0-4.614-1.42-4.734-3.667zM83.346 19.3v2.142h1.722v1.472h-1.722v4.991c0 .776.345 1.137 1.102 1.137a6 6 0 0 0 .611-.043v1.463a5 5 0 0 1-1.032.086c-1.833 0-2.548-.689-2.548-2.445v-5.189h-1.316v-1.472h1.316V19.3zm2.719 6.67c0-2.849 1.678-4.639 4.294-4.639 2.625 0 4.295 1.79 4.295 4.639 0 2.856-1.661 4.638-4.295 4.638s-4.294-1.782-4.294-4.638m6.695 0c0-1.954-.895-3.108-2.401-3.108s-2.4 1.162-2.4 3.108c0 1.962.894 3.106 2.4 3.106s2.401-1.144 2.401-3.106m3.426-4.528h1.773v1.541h.043a2.16 2.16 0 0 1 2.177-1.635 3 3 0 0 1 .637.069v1.738a2.6 2.6 0 0 0-.835-.112 1.873 1.873 0 0 0-1.937 2.083v5.37h-1.858zm13.198 6.395c-.25 1.643-1.85 2.771-3.898 2.771-2.634 0-4.269-1.764-4.269-4.595 0-2.84 1.644-4.682 4.19-4.682 2.506 0 4.08 1.72 4.08 4.466v.637h-6.394v.112a2.358 2.358 0 0 0 2.436 2.564 2.05 2.05 0 0 0 2.09-1.273zm-6.282-2.702h4.526a2.177 2.177 0 0 0-2.22-2.298 2.29 2.29 0 0 0-2.306 2.298"/> 19321 </g> 19322 <path fill="#fff" d="M38.008 8.731a1.88 1.88 0 0 1 1.968 1.989 1.896 1.896 0 0 1-1.997 1.968h-1.381v2.01h-.927V8.73zm-1.41 3.143h1.166c.798 0 1.265-.414 1.265-1.154 0-.757-.45-1.17-1.265-1.17h-1.166zm4.244.57a2.133 2.133 0 1 1 4.247 0 2.134 2.134 0 1 1-4.247 0m3.333 0c0-.976-.439-1.547-1.208-1.547-.773 0-1.207.571-1.207 1.547 0 .984.434 1.55 1.207 1.55.77 0 1.208-.57 1.208-1.55m3.069 1.542h-.066v.712h-.856V8.437h.889v2.473h.07a1.5 1.5 0 0 1 1.386-.79c1.14 0 1.86.893 1.86 2.324 0 1.427-.723 2.328-1.86 2.328a1.56 1.56 0 0 1-1.423-.786m-.05-1.538c.005.943.468 1.526 1.216 1.526.753 0 1.203-.575 1.203-1.53 0-.947-.45-1.526-1.203-1.526-.744 0-1.21.587-1.216 1.53m4.411-3.585a.576.576 0 1 1 .575.542.547.547 0 0 1-.575-.542m.131 1.332h.886v4.503h-.886zm6.127 3.287a1.83 1.83 0 0 1-1.95 1.303 2.045 2.045 0 0 1-2.08-2.325 2.077 2.077 0 0 1 2.075-2.352c1.253 0 2.009.856 2.009 2.27v.31h-3.18v.05a1.19 1.19 0 0 0 1.2 1.29 1.08 1.08 0 0 0 1.07-.546zm-3.126-1.451h2.275a1.086 1.086 0 0 0-1.109-1.167 1.15 1.15 0 0 0-1.166 1.167m4.373-1.836h.856v.69h.066a1.22 1.22 0 0 1 1.216-.765 2 2 0 0 1 .397.037v.877a2.4 2.4 0 0 0-.497-.053A1.055 1.055 0 0 0 60 12.039v2.659h-.889zm3.413 3.899L65 11.018v-.07h-2.46v-.753h3.523v.649l-2.423 3.031v.07h2.448v.753h-3.565zm11.947.604h-.922l-.93-3.317h-.07l-.927 3.317h-.913l-1.242-4.503h.902l.806 3.436h.067l.926-3.436h.852l.926 3.436h.07l.803-3.436h.889z"/> 19323<title>Pobierz w App Store</title></svg> 19324 </a> 19325 </div> 19326 </div> 19327</div> 19328</div><div> 19329<div 19330 class="grid grid-cols-2 justify-center items-center gap-y-2 gap-x-6 text-[10px] md:grid-cols-[repeat(3,auto)] md:justify-start"> 19331 <a 19332 class="col-span-2 justify-self-center md:col-span-1" 19333 href="https://www.wetgiw.gov.pl/nadzor-weterynaryjny/obrot-detaliczny-produktami-otc-na-odleglosc" 19334 target="_blank" 19335 rel="nofollow"> 19336 <img 19337 src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Hyva_Theme/svg/veterinary-badge.svg" 19338 alt="GÅówny Inspektorat Sanitarny" 19339 width="90" 19340 height="75" 19341 loading="lazy" 19342 /> 19343 </a> 19344 <a 19345 class="max-w-[103px]" 19346 href="https://pasze.wetgiw.gov.pl/otc/demo/index.php?jezyk=1" 19347 target="_blank" 19348 rel="nofollow">Wykaz podmiotów prowadzÄ cych internetowÄ sprzedaż detalicznÄ OTC</a> 19349 <a 19350 class="max-w-[134px]" 19351 href="https://wroc.wiw.gov.pl" 19352 target="_blank" 19353 aria-label="Provincial Veterinary Inspectorate" 19354 rel="nofollow">Wojewódzki Inspektorat Weterynaryjny we WrocÅawiu ul. Januszowicka 48, 50-983 WrocÅaw</a> 19355</div> 19356</div><div class="flex gap-4 flex-col items-center justify-between w-full xl:flex-row"> 19357 19358<div class="flex flex-wrap gap-4"> 19359 19360 <img src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Hyva_Theme/svg/polska-marka.svg" alt="Polska Marka" class="w-[54px] h-[54px] object-contain" width="54" height="54" loading="lazy"> 19361 <img src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Hyva_Theme/svg/laur-konsumenta.svg" alt="Laur Konsumenta 2019" class="w-[54px] h-[54px] object-contain" width="54" height="54" loading="lazy"> 19362 <img src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/images/topfordog.png" alt="Top for Dog" class="w-[54px] h-[54px] object-contain" width="54" height="54" loading="lazy"> </div> 19363<div class="flex gap-2.5 items-center"> 19364 <a id="footer.social.link.facebook" 19365 href="https://www.facebook.com/sklepferapl" 19366 title="Facebook" 19367 aria-label="Facebook" 19368 target="_blank" 19369 rel="nofollow" 19370 > 19371 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" aria-hidden="true"> 19372 <path d="M16 0C24.8364 0 31.9998 7.16385 32 16C32 24.8363 24.8365 32.001 16 32.001C7.16347 32.001 0 24.8363 0 16C0.000151283 7.16386 7.16357 5.92263e-06 16 0ZM17.2695 6.52441C14.435 6.34965 12.8653 8.57394 12.8652 11.2344V13.8945H9.6377V17.4707H12.8652V26.3232H16.7031V17.4707H19.5371L20.1045 13.8945H16.7031V11.1904C16.7034 10.1878 17.6624 9.62012 18.5781 9.62012H20.2354V6.65527L17.2695 6.52441Z" fill="white"/> 19373</svg> 19374 </a> 19375 19376 19377 <a id="footer.social.link.instagram" 19378 href="https://www.instagram.com/fera_pl" 19379 title="Instagram" 19380 aria-label="Instagram" 19381 target="_blank" 19382 rel="nofollow" 19383 > 19384 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" aria-hidden="true"> 19385 <path d="M16 0C24.8365 0 31.9998 7.16384 32 16C32 24.8363 24.8365 32.001 16 32.001C7.16339 32.001 0 24.8363 0 16C0.00016117 7.16386 7.16349 2.4533e-05 16 0ZM11.7129 6.7627C8.95837 6.7627 6.69238 9.02834 6.69238 11.7832V20.3135C6.6924 23.0683 8.95839 25.334 11.7129 25.334H20.2871C23.0416 25.334 25.3076 23.0683 25.3076 20.3135V11.7832C25.3076 9.02834 23.0416 6.7627 20.2871 6.7627H11.7129ZM20.2432 8.3623C22.1535 8.36244 23.708 9.91764 23.708 11.8281V20.2686C23.708 22.179 22.1535 23.7342 20.2432 23.7344H11.7568C9.84656 23.7342 8.29199 22.179 8.29199 20.2686V11.8281C8.29199 9.91764 9.84656 8.36245 11.7568 8.3623H20.2432ZM15.9775 10.9834C13.2233 10.9835 10.9573 13.2933 10.957 16.0479C10.957 18.8463 13.2231 21.1132 15.9775 21.1133H16.0225C18.7769 21.1132 21.0869 18.8464 21.0869 16.0479C21.0867 13.2933 18.7767 10.9835 16.0225 10.9834H15.9775ZM16.0225 12.7168C17.8437 12.7169 19.3542 14.2267 19.3545 16.0479C19.3545 17.9138 17.8439 19.4247 16.0225 19.4248H15.9775C14.1561 19.4247 12.6455 17.9138 12.6455 16.0479C12.6458 14.2267 14.1563 12.7169 15.9775 12.7168H16.0225ZM20.998 10.
193850059C20.3763 10.0059 19.9318 10.4947 19.9316 11.0723C19.9316 11.65 20.3762 12.1386 20.998 12.1387C21.5757 12.1387 22.0645 11.65 22.0645 11.0723C22.0643 10.4947 21.5756 10.0059 20.998 10.0059Z" fill="white"/> 19386</svg> 19387 </a> 19388 19389 <a id="footer.social.link.youtube" 19390 href="https://www.youtube.com/FeraPlsklepzoologiczny" 19391 title="YouTube" 19392 aria-label="YouTube" 19393 target="_blank" 19394 rel="nofollow" 19395 > 19396 <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" aria-hidden="true"> 19397 <path d="M16 0C24.837 0.000235779 31.9999 7.16361 32 16C32 24.8365 24.837 31.9998 16 32C7.16364 32 0 24.8366 0 16C9.67478e-05 7.16346 7.1637 0 16 0ZM16.0254 9.47559C14.4184 9.47559 12.3107 9.54659 10.5254 9.68945C8.4186 9.86799 7.31087 10.2251 7.02539 12.332C6.91826 13.2962 6.8467 14.6176 6.84668 15.9746C6.84668 17.3317 6.91825 18.6896 7.02539 19.6182C7.31089 21.7607 8.41862 22.0822 10.5254 22.2607C12.3107 22.4393 14.4184 22.4746 16.0254 22.4746C17.6316 22.4746 19.7031 22.4393 21.5244 22.2607C23.6312 22.0822 24.7029 21.7607 24.9893 19.6182C25.1315 18.6896 25.2041 17.3317 25.2041 15.9746C25.2041 14.6176 25.1315 13.2962 24.9893 12.332C24.7029 10.2251 23.6312 9.86799 21.5244 9.68945C19.7031 9.54659 17.6316 9.47559 16.0254 9.47559ZM18.9531 15.9746L14.168 18.7607V13.2256L18.9531 15.9746Z" fill="white"/> 19398</svg> 19399 </a> 19400</div></div> </div> 19401 </div> 19402 <div class="bg-brandTertiary-800"> 19403 <div class="container py-6"> 19404 <small class="flex flex-col xl:flex-row xl:justify-between gap-3 text-sm text-white"> 19405 19406<div class="flex flex-col gap-y-1.5 gap-x-6 font-medium xl:flex-row" aria-label="Store information"> 19407 <div aria-label="Store address"> 19408 Fera sp. z o.o., ZbÄ szyÅska 3, 91-342 Åódź </div> 19409 19410 <div aria-label="VAT ID"> 19411 VAT ID 8992750635 </div> 19412 </div> 19413 19414<nav 19415 > 19416 <ul class="flex flex-col gap-y-2 gap-x-6 font-semibold xl:flex-row"> 19417 <li> 19418 19419<a href="https://fera.pl/o-nas" 19420 data-menu="menu-1" 19421 > 19422 O nas</a> 19423 </li> 19424 <li> 19425 19426 <a href="https://fera.pl/centrum-pomocy/pomoc-zwroty-i-reklamacje-jak-moge-zwrocic-zakupiony-produkt-w-ciagu-40-dni/" 19427 data-menu="menu-3" 19428 data-menu="menu-3" > 19429 Zwroty </a> 19430 </li> 19431 <li> 19432 19433 <a href="/contact" 19434 data-menu="menu-4" 19435 data-menu="menu-4" > 19436 Kontakt </a> 19437 </li> 19438 <li> 19439 19440<a href="https://fera.pl/sygnalisci" 19441 data-menu="menu-6" 19442 > 19443 SygnaliÅci</a> 19444 </li> 19445 </ul> 19446</nav> 19447</small> 19448 </div> 19449 </div> 19450</div> 19451</div></footer>
19452<script type="text/javascript">window.dataLayer = window.dataLayer || []; 19453 19454(function () { 19455 /** 19456 * @var {[Object]} 19457 */ 19458 const dataToPush = JSON.parse('[]'); 19459 19460 dataToPush.forEach((dataObject) => { 19461 window.dataLayer.push(dataObject); 19462 }); 19463})(); 19464</script>
19464 19465
19466<script> 19467 (_ => { 19468 'use strict'; 19469 19470 const SECTION_KEY = 'amga4_hyva_event_pool'; 19471 const MAGE_CACHE_SECTION_KEY = 'mage-cache-storage'; 19472 const storage = hyva.getBrowserStorage(); 19473 19474 window.addEventListener('private-content-loaded', ({ detail }) => { 19475 if (!detail?.data) { 19476 return; 19477 } 19478 19479 const data = detail?.data[SECTION_KEY]; 19480 if (!data) { 19481 return; 19482 } 19483 19484 let eventsPool = data?.events || []; 19485 if (eventsPool.length) { 19486 eventsPool.forEach(event => { 19487 window.dataLayer.push({ecommerce: null}); 19488 window.dataLayer.push(event); 19489 }); 19490 19491 setTimeout(() => { 19492 storage.setItem( 19493 MAGE_CACHE_SECTION_KEY, 19494 JSON.stringify({ 19495 ...detail.data, 19496 [SECTION_KEY]: {} 19497 }) 19498 ); 19499 }, 0); 19500 } 19501 }); 19502 })(); 19503</script>
19503 19504 19505<div x-data="initAmGdprPolicyPopup" x-bind="eventListeners"> 19506 <div x-cloak 19507 x-bind="overlay" 19508 class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-60" 19509 > 19510 <div x-ref="amgdpr-policy-popup" role="dialog" aria-labelledby="amgdpr-policy-content" 19511 class="flex flex-col bg-white shadow-xl rounded-lg p-10 max-h-[95vh] max-w-6xl relative"> 19512 <div tabindex="0" @focusin="focusAcceptButton"></div> 19513 <button @click.stop="hidePopup" 19514 x-ref="amgdpr-close-policy" 19515 aria-label="Zamknij" 19516 class="absolute right-4 top-4 text-gray-300 transition 19517 hover:text-black focus:drop-shadow-md hover:drop-shadow-md" 19518 > 19519 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-6 w-6" width="24" height="24" role="img"> 19520 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 19521<title>x</title></svg> 19522 </button> 19523 <div class="flex w-full"> 19524 <p class="w-full text-brandSecondary-900 text-3xl mb-5 ml-3" x-text="title"></p> 19525 </div> 19526 <div x-show="isNotificationTextVisible" class="flex w-full"> 19527 <p class="mb-4 p-4 bg-yellow-100 w-full" x-text="notificationText"></p> 19528 </div> 19529 <div id="amgdpr-policy-content" 19530 class="max-h-[500px] overflow-auto first:mx-0 child:mx-0" 19531 tabindex="0" 19532 x-html="policyText" 19533 ></div> 19534 <div class="mt-8 flex w-full justify-center"> 19535 <button x-focus-first 19536 @click.stop="triggerAcceptPolicy" 19537 x-ref="amgdpr-accept-policy" 19538 type="button" 19539 class="btn btn-primary" 19540 aria-label="Przeczytałem i akceptuję" 19541 > 19542 PrzeczytaÅem i akceptujÄ </button> 19543 </div> 19544 <div tabindex="0" @focusin="focusCloseButton"></div> 19545 </div> 19546 19547 </div> 19548</div> 19549
19550<script data-cfasync="false"> 19551 'use strict'; 19552 19553 /** 19554 * @typedef PolicyData 19555 * @property {string} policyVersion 19556 * @property {boolean} show 19557 * @property {string} title 19558 * @property{boolean} versionChanged 19559 * @property {boolean} hideClose 19560 * @property {boolean} action 19561 */ 19562 19563 function initAmGdprPolicyPopup() { 19564 return { 19565 ...hyva.modal({ 19566 dialog: 'amgdpr-policy-popup' 19567 }), 19568 eventListeners: { 19569 ['@amgdpr-accept-policy']() { 19570 if (this.consentId) { 19571 window.dispatchEvent(new CustomEvent('amgdpr-consent-accepted', {detail: this.consentId})); 19572 this.consentId = undefined; 19573 this.hidePopup(); 19574 } else { 19575 this.acceptPolicy(); 19576 } 19577 }, 19578 ['@amgdpr-show-policy.window'](event) { 19579 this.consentId = event.detail; 19580 this.fetchPolicyContent().then(() => { 19581 this.$nextTick(() => { 19582 this.showPopup(); 19583 }); 19584 }); 19585 }, 19586 ['@amgdpr-close-policy']() { 19587 this.hidePopup(); 19588 } 19589 }, 19590 textUrl: 'https://fera.pl/gdpr/policy/policytext/', 19591 acceptUrl: 'https://fera.pl/gdpr/policy/accept/', 19592 popupDataUrl: 'https://fera.pl/gdpr/policy/popupData/', 19593 notificationText: 'We would like to inform you that our Privacy Policy has been amended.Please, read and accept the new terms.', 19594 showOnPageLoad: false, 19595 /** 19596 * @type PolicyData 19597 */ 19598 policyData: { 19599 policyVersion: '', 19600 show: false, 19601 title: '', 19602 versionChanged: false, 19603 hideClose: false, 19604 action: true 19605 }, 19606 title: '', 19607 policyText: '', 19608 consentId: undefined, 19609 init: async function () { 19610 await this.fetchPolicyData(); 19611 if ((this.showOnPageLoad && this.policyData.show) || this.policyData.versionChanged) { 19612 await this.fetchPolicyContent(); 19613 this.$nextTick(() => { 19614 this.show('amgdpr-policy-popup'); 19615 }); 19616 } 19617 }, 19618 19619 /** 19620 * @returns {void} 19621 */ 19622 hidePopup: function () { 19623 this.hide('amgdpr-policy-popup'); 19624 }, 19625 19626 /** 19627 * @returns {void} 19628 */ 19629 showPopup: function () { 19630 this.show('amgdpr-policy-popup'); 19631 }, 19632 19633 /** 19634 * @returns {void} 19635 */ 19636 triggerAcceptPolicy: function () { 19637 this.$dispatch('amgdpr-accept-policy'); 19638 }, 19639 19640 /** 19641 * @returns {Boolean} 19642 */ 19643 isNotificationTextVisible: function () { 19644 return this.notificationText && this.policyData.versionChanged; 19645 }, 19646 19647 /** 19648 * @returns {Promise} 19649 */ 19650 fetchPolicyData: function () { 19651 return fetch(this.popupDataUrl) 19652 .then(response => response.json()) 19653 .then((data) => { 19654 this.policyData = {...data} 19655 }) 19656 .catch(error => this.dispatchErrorMessage(error)); 19657 }, 19658 19659 /** 19660 * @returns {Promise} 19661 */ 19662 fetchPolicyContent: function () { 19663 this.title = ''; 19664 this.policyText = ''; 19665 19666 const params = !!this.consentId 19667 ? '?' + new URLSearchParams({consent_id: this.consentId}) 19668 : '' 19669 19670 return fetch(this.textUrl + params) 19671 .then(response => response.json()) 19672 .then(policyContent => { 19673 this.title = policyContent.title; 19674 this.policyText = policyContent.content; 19675 }).catch(error => this.dispatchErrorMessage(error)); 19676 }, 19677 19678 /** 19679 * @returns {void} 19680 */ 19681 acceptPolicy: function () { 19682 window.dispatchEvent(new Event('amgdpr-loading-start')); 19683 19684 const body = new URLSearchParams({form_key: hyva.getFormKey(), ...this.policyData}); 19685 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 19686 19687 fetch(this.acceptUrl, {method: 'POST', body, headers: {'Content-Type': contentType}}) 19688 .then(response => response.json()) 19689 .then(data => { 19690 if (data.error) { 19691 this.dispatchErrorMessage(data.message) 19692 } else { 19693 this.notificationText = ''; 19694 this.hide('amgdpr-policy-popup'); 19695 } 19696 }) 19697 .catch(error => this.dispatchErrorMessage(error)) 19698 .finally(() => window.dispatchEvent(new Event('amgdpr-loading-stop'))); 19699 }, 19700 19701 /** 19702 * @param {string} message 19703 * @returns {void} 19704 */ 19705 dispatchErrorMessage: function (message) { 19706 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 19707 { 19708 type: "error", 19709 text: message 19710 } 19711 ]); 19712 }, 19713 19714 /** 19715 * @returns {void} 19716 */ 19717 focusAcceptButton: function () { 19718 this.$refs['amgdpr-accept-policy']?.focus(); 19719 }, 19720 19721 /** 19722 * @returns {void} 19723 */ 19724 focusCloseButton: function () { 19725 this.$refs['amgdpr-close-policy']?.focus(); 19726 } 19727 } 19728 } 19729 19730 window.addEventListener( 19731 'alpine:init', 19732 () => Alpine.data('initAmGdprPolicyPopup', initAmGdprPolicyPopup), 19733 { once: true } 19734 ); 19735</script>
vendor: 1 bytes, line 19735
19735
19736<script> 19737 'use strict'; 19738 19739 (function() { 19740 window.AmClarityGdprTrackEvents = { 19741 /** 19742 * @param {array} 19743 */ 19744 allGroups: ['0'], 19745 19746 /** 19747 * @param {object} 19748 */ 19749 resolveAllowEvent: { 19750 getAllowedGroups: () => window.AmClarityGdprTrackEvents.allGroups 19751 }, 19752 19753 /** 19754 * @param {object} 19755 */ 19756 resolveAcceptEvent: { 19757 getAllowedGroups: () => Alpine.store('AmastyCookieGroups')?.getCheckedGroupIds() ?? [] 19758 }, 19759 19760 /** 19761 * @return {void} 19762 */ 19763 init: function () { 19764 window.addEventListener('cookiebar-action-accept-finish', this.updateConsent.bind(this.resolveAcceptEvent)); 19765 window.addEventListener('cookiebar-action-allow-finish', this.updateConsent.bind(this.resolveAllowEvent)); 19766 }, 19767 19768 /** 19769 * @return {void} 19770 */ 19771 updateConsent: function () { 19772 if (!window.amClarityConsentManager) { 19773 return; 19774 } 19775 19776 window.amClarityConsentManager.updateConsent( 19777 window.amClarityConsentManager.getConsentTypeStateByGroupIds(this.getAllowedGroups()) 19778 ); 19779 } 19780 } 19781 19782 window.AmClarityGdprTrackEvents.init(); 19783 })() 19784</script>
vendor: 1 bytes, line 19784
19784
19785<script> 19786 'use strict'; 19787 19788 (function() { 19789 const allGroups = ['0']; 19790 19791 const resolveAllowEvent = { 19792 getAllowedGroups: () => allGroups 19793 } 19794 19795 const resolveAcceptEvent = { 19796 getAllowedGroups: () => Alpine.store('AmastyCookieGroups').getCheckedGroupIds() ?? [] 19797 } 19798 19799 function updateConsent () { 19800 if (!window.amConsentManager) { 19801 return; 19802 } 19803 19804 window.amConsentManager.updateConsent( 19805 window.amConsentManager.getConsentTypeStateByGroupIds(this.getAllowedGroups()) 19806 ); 19807 } 19808 19809 window.addEventListener('cookiebar-action-accept-finish', updateConsent.bind(resolveAcceptEvent)); 19810 window.addEventListener('cookiebar-action-allow-finish', updateConsent.bind(resolveAllowEvent)); 19811 })() 19812</script>
vendor: 1 bytes, line 19812
19812
19813<script> 19814 'use strict'; 19815 19816 (function() { 19817 window.AmPixelBingTrackEvents = { 19818 /** 19819 * @param {array} 19820 */ 19821 allGroups: ['0'], 19822 19823 /** 19824 * @param {object} 19825 */ 19826 resolveAllowEvent: { 19827 getAllowedGroups: () => window.AmPixelBingTrackEvents.allGroups 19828 }, 19829 19830 /** 19831 * @param {object} 19832 */ 19833 resolveAcceptEvent: { 19834 getAllowedGroups: () => Alpine.store('AmastyCookieGroups').getCheckedGroupIds() ?? [] 19835 }, 19836 19837 /** 19838 * @return {void} 19839 */ 19840 init: function () { 19841 window.addEventListener('cookiebar-action-accept-finish', this.updateConsent.bind(this.resolveAcceptEvent)); 19842 window.addEventListener('cookiebar-action-allow-finish', this.updateConsent.bind(this.resolveAllowEvent)); 19843 }, 19844 19845 /** 19846 * @return {void} 19847 */ 19848 updateConsent: function () { 19849 if (!window.amMicrosoftConsentManager) { 19850 return; 19851 } 19852 19853 window.amMicrosoftConsentManager.updateConsent( 19854 window.amMicrosoftConsentManager.getConsentTypeStateByGroupIds(this.getAllowedGroups()) 19855 ); 19856 } 19857 } 19858 19859 window.AmPixelBingTrackEvents.init(); 19860 })() 19861</script>
19861 19862
19863<script>document.addEventListener("DOMContentLoaded", function() { 19864 if (document.querySelectorAll('.mf-ytw-wrapper').length 19865 || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 19866 !function (f, b, e, v, t, s) { 19867 if(f.mfytwcss)return; 19868 f.mfytwcss=1; 19869 t = b.createElement(e); 19870 t.rel = 'stylesheet'; 19871 t.type = 'text/css'; 19872 t.href = v; 19873 s = b.getElementsByTagName('HEAD')[0]; 19874 s.appendChild(t) 19875 }(window, document, 'link', 'https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Magefan_YouTubeWidget/css/youtubewidget.css'); 19876 } 19877 if (document.querySelectorAll('.mf-ytw-wrapper').length) { 19878 !function (f, b, e, v, t, s) { 19879 if(f.mfytwjs)return; 19880 f.mfytwjs=1; 19881 t = b.createElement(e); 19882 t.type = 'text/javascript'; 19883 t.src = v; 19884 s = b.getElementsByTagName('HEAD')[0]; 19885 s.appendChild(t) 19886 }(window, document, 'script', 'https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Magefan_YouTubeWidget/js/iframe.js'); 19887 } 19888 if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 19889 !function (f, b, e, v, t) { 19890 if(f.mflinkjs)return; 19891 f.mflinkjs=1; 19892 t = b.createElement(e); 19893 t.type = 'text/javascript'; 19894 t.src = v; 19895 s = b.getElementsByTagName('HEAD')[0]; 19896 s.appendChild(t) 19897 }(window, document, 'script', 'https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Magefan_YouTubeWidget/js/link.js'); 19898 } 19899 });</script>
19899<script>try { 19900smileTracker.addPageVar('type.identifier', 'blog_index_index'); 19901smileTracker.addPageVar('type.label', 'Blog Homepage'); 19902smileTracker.addPageVar('locale', 'pl_PL'); 19903} catch (err) { ; }</script>
19903<link rel="preconnect" href="//web.snrbox.com"> 19904<link rel="dns-prefetch" href="//web.snrbox.com"> 19905<link rel="dns-prefetch" href="//snrcdn.net"> 19906<style> 19907 body.synerise-unavailable li.category-list-desktop-banner:has([id^="synerise"]), 19908 body.synerise-unavailable li.category-list-mobile-banner:has([id^="synerise"]), 19909 body.synerise-unavailable div[id^="synerise-"] { 19910 display: none !important; 19911 } 19912</style>
19913<script nonce="ZWJ1MW9odHdwdmRzNDRja3pscG81ZmUwOGs5Mm05dTE="> 19914 /* tooks-synerise-consent-gate */ 19915 (function () { 19916 var isInitialized = false; 19917 var maxDeferTimer = null; 19918 19919 var syneriseExternalResources = []; 19920 19921function loadSyneriseExternalResources(next) { 19922 var pending = 0; 19923 19924 function onSettled() { 19925 if (--pending === 0) { 19926 next(); 19927 } 19928 } 19929 19930 syneriseExternalResources.forEach(function (resource) { 19931 var element = document.createElement(resource.tag); 19932 19933 Object.keys(resource.attributes).forEach(function (name) { 19934 element.setAttribute(name, resource.attributes[name]); 19935 }); 19936 19937 if (resource.tag === 'script') { 19938 element.async = false; 19939 pending++; 19940 element.addEventListener('load', onSettled, { once: true }); 19941 element.addEventListener('error', onSettled, { once: true }); 19942 } 19943 19944 document.head.appendChild(element); 19945 }); 19946 19947 if (pending === 0) { 19948 next(); 19949 } 19950} 19951 19952 function initSynerise() { 19953 if (isInitialized) { 19954 return; 19955 } 19956 isInitialized = true; 19957 clearTimeout(maxDeferTimer); 19958 window.removeEventListener('load', initSynerise); 19959 19960 // Watchdog: mark body as unavailable if SDK fails to init within 8000ms 19961 var watchdog = setTimeout(function () { 19962 document.body.classList.add('synerise-unavailable'); 19963 }, 8000); 19964 19965 // Intercept window.onSyneriseLoad BEFORE running vendor code. 19966 // The SDK may load synchronously from browser cache and fire the callback 19967 // during insertBefore â before a post-hoc override would have a chance to run. 19968 // defineProperty captures whatever the vendor script assigns while always 19969 // routing the actual call through our watchdog-clearing try/catch wrapper. 19970 var _capturedInit = null; 19971 Object.defineProperty(window, 'onSyneriseLoad', { 19972 configurable: true, 19973 enumerable: true, 19974 get: function () { 19975 return function () { 19976 clearTimeout(watchdog); 19977 document.body.classList.remove('synerise-unavailable'); 19978 Object.defineProperty(window, 'onSyneriseLoad', { 19979 configurable: true, 19980 writable: true, 19981 value: _capturedInit 19982 }); 19983 try { 19984 if (typeof _capturedInit === 'function') { 19985 _capturedInit(); 19986 } 19987 } catch (e) { 19988 console.error('Synerise initialization failed:', e); 19989 document.body.classList.add('synerise-unavailable'); 19990 } 19991 }; 19992 }, 19993 set: function (fn) { 19994 _capturedInit = fn; 19995 } 19996 }); 19997 19998 // Run original Synerise tracking code. 19999 // Any assignment to window.onSyneriseLoad is captured by the setter above; 20000 // any synchronous call to window.onSyneriseLoad goes through the getter wrapper. 20001 loadSyneriseExternalResources(function () { 20002 window.onSyneriseLoad = onSyneriseLoad; function onSyneriseLoad() { SR.init({nonce: "ZWJ1MW9odHdwdmRzNDRja3pscG81ZmUwOGs5Mm05dTE=", trackerKey: "b95c4270-6a6d-424d-ba8e-5954d857d00b", dataLayer: dataLayer, gaVersion: "GA_4" }); } (function(s,y,n,e,r,i,se){s["SyneriseObjectNamespace"]=r;s[r]=s[r]||[], s[r]._t=1*new Date(),s[r]._i=0,s[r]._l=i;var z=y.createElement(n), se=y.getElementsByTagName(n)[0];z.async=1;z.src=e;se.parentNode.insertBefore(z,se); z.onload=z.onreadystatechange=function(){var rdy=z.readyState; if(!rdy||/complete|loaded/.test(z.readyState)){s[i]();z.onload = null; z.onreadystatechange=null;}};})(window,document,"script", "//web.snrbox.com/synerise-javascript-sdk.min.js", "SR", "onSyneriseLoad"); 20003 }); 20004 } 20005 20006 function armSyneriseDeferredBoot() { 20007 if (document.readyState === 'complete') { 20008 initSynerise(); 20009 } else { 20010 window.addEventListener('load', initSynerise); 20011 maxDeferTimer = setTimeout(initSynerise, 3000); 20012 } 20013 } 20014 20015 var syneriseConsentEvents = [ 20016 'user-allowed-save-cookie', 20017 'cookiebar-action-accept-finish', 20018 'cookiebar-action-allow-finish', 20019 'amasty-cookie-group-updated' 20020]; 20021 20022var syneriseGatedCookies = ["_snrs_uuid","_snrs_puuid","_snrs_p","_snrs_sa","_snrs_sb"]; 20023 20024function getSyneriseCookieGroups() { 20025 return typeof window.amastyCookieManager !== 'undefined' 20026 && typeof window.amastyCookieManager.getAmastyCookieGroupStorage === 'function' 20027 ? window.amastyCookieManager.getAmastyCookieGroupStorage() 20028 : null; 20029} 20030 20031function isSyneriseCookieDeclared(cookieGroups, cookieName) { 20032 return (cookieGroups.groupData || []).some(function (group) { 20033 if (group.isEssential) { 20034 return false;
20035 } 20036 20037 return (group.cookies || []).some(function (cookie) { 20038 var wildcard = String(cookie.name).match(/^\{(.*)\}$/); 20039 20040 return wildcard 20041 ? new RegExp(cookieGroups.getCookiePattern(wildcard[1])).test(cookieName) 20042 : cookie.name === cookieName; 20043 }); 20044 }); 20045} 20046 20047function hasSyneriseConsent() { 20048 try { 20049 var cookieGroups = getSyneriseCookieGroups(); 20050 20051 if (!cookieGroups 20052 || typeof cookieGroups.hasGroupData !== 'function' 20053 || !cookieGroups.hasGroupData() 20054 ) { 20055 return false; 20056 } 20057 20058 if (typeof window.hyva === 'undefined' 20059 || typeof window.hyva.getCookie !== 'function' 20060 || !window.hyva.getCookie('amcookie_allowed') 20061 ) { 20062 return false; 20063 } 20064 20065 return syneriseGatedCookies.some(function (cookieName) { 20066 return isSyneriseCookieDeclared(cookieGroups, cookieName) 20067 && window.amastyCookieManager.isCookieAllowed(cookieName); 20068 }); 20069 } catch (e) { 20070 return false; 20071 } 20072} 20073 20074function removeSyneriseConsentListeners() { 20075 syneriseConsentEvents.forEach(function (eventName) { 20076 window.removeEventListener(eventName, onSyneriseConsentGranted); 20077 }); 20078} 20079 20080// Re-checks consent on every firing rather than trusting the event alone: several of 20081// these events fire on state changes that are not necessarily "granted" (e.g. 20082// amasty-cookie-group-updated also fires when a group is toggled OFF). 20083function onSyneriseConsentGranted() { 20084 if (!hasSyneriseConsent()) { 20085 return; 20086 } 20087 removeSyneriseConsentListeners(); 20088 armSyneriseDeferredBoot(); 20089} 20090 20091function bindSyneriseConsentListeners() { 20092 syneriseConsentEvents.forEach(function (eventName) { 20093 window.addEventListener(eventName, onSyneriseConsentGranted, { passive: true }); 20094 }); 20095} 20096 20097if (hasSyneriseConsent()) { 20098 armSyneriseDeferredBoot(); 20099} else { 20100 bindSyneriseConsentListeners(); 20101} 20102 })(); 20103</script>
20103<div 20104 class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-slate-800" 20105 x-data="initLoading" 20106 x-bind="loaderListeners" 20107 x-show="isLoading" 20108 x-cloak 20109 x-transition.opacity.duration.200ms 20110> 20111 <div class="flex gap-10 items-center p-4"> 20112 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 20113 <style> 20114 @keyframes spinner-ball-triangle1 { 20115 0% { transform: translate(0%, 0%); } 20116 33% { transform: translate(38%, -79%); } 20117 66% { transform: translate(77%, 0%); } 20118 100% { transform: translate(0%, 0%); } 20119 } 20120 20121 @keyframes spinner-ball-triangle2 { 20122 0% { transform: translate(0%, 0%); } 20123 33% { transform: translate(38%, 79%); } 20124 66% { transform: translate(-38%, 79%); } 20125 100% { transform: translate(0%, 0%); } 20126 } 20127 20128 @keyframes spinner-ball-triangle3 { 20129 0% { transform: translate(0%, 0%); } 20130 33% { transform: translate(-77%, 0%); } 20131 66% { transform: translate(-38%, -79%); } 20132 100% { transform: translate(0%, 0%); } 20133 } 20134 </style> 20135 <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/> 20136 <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/> 20137 <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/> 20138</svg> 20139 <span class="text-xl select-none"> 20140 ÅadujÄ... </span> 20141 </div> 20142</div>
20143<script> 20144 function initLoading() { 20145 return { 20146 isLoading: false, 20147 toggleLoader(event) { 20148 if (event.detail && event.detail.isLoading) { 20149 this.isLoading = event.detail.isLoading; 20150 } else { 20151 this.isLoading = !this.isLoading; 20152 } 20153 }, 20154 loaderListeners: { 20155 ['@loader.window'](event) { 20156 this.toggleLoader(event); 20157 } 20158 } 20159 }; 20160 } 20161 20162 window.addEventListener('alpine:init', () => { 20163 Alpine.data('initLoading', initLoading); 20164 }, { once: true }) 20165 20166</script>
20166 20167
20168<script> 20169 'use strict'; 20170 20171 function showMessage(text, type = 'success') { 20172 dispatchMessages([{type, text}]); 20173 } 20174 20175 async function sendCartRequest( 20176 { 20177 form = null, 20178 url = '', 20179 body = '', 20180 redirect = 'default', 20181 message = '', 20182 } = {}, 20183 ) { 20184 if (form && (form.hasAttribute('enctype') || !form.reportValidity())) return form.submit(); 20185 20186 const formData = body ? body : (form ? new FormData(form) : ''); 20187 const formUenc = hyva.getUenc(); 20188 20189 const postUrl = url ? url : (form ? form.action.replace('%25uenc%25', formUenc) : ''); 20190 20191 if (!formData || !postUrl) { 20192 console.warn('You must provide the form or formData and postUrl!'); 20193 return; 20194 } 20195 20196 const itemId = body ? new URLSearchParams(body).get('item_id') : formData.get('item_id'); 20197 const bodyUrl = new URLSearchParams(formData); 20198 20199 bodyUrl.append('uenc', formUenc); 20200 20201 if (bodyUrl.get('qty') === '') bodyUrl.delete('qty'); 20202 20203 window.dispatchEvent(new CustomEvent('loader')); 20204 20205 try { 20206 const response = await fetch(postUrl, { 20207 method: 'POST', 20208 body: bodyUrl.toString(), 20209 credentials: 'include', 20210 headers: { 20211 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 20212 'X-Requested-With': 'XMLHttpRequest' 20213 } 20214 }); 20215 20216 if (form && !response.ok) return form.submit(); 20217 20218 if (redirect === 'default' && response.redirected) { 20219 return window.location.href = response.url; 20220 } else if (redirect !== 'default' && redirect !== false) { 20221 return window.location.href = redirect; 20222 } 20223 20224 const responseData = await response.json(); 20225 20226 if (responseData.success === false) { 20227 showMessage(responseData.error_message, 'error'); 20228 // Re-sync the sections so optimistic counters fall back to the real server state. 20229 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 20230 return false; 20231 } 20232 20233 if (responseData.backUrl && responseData.backUrl.includes('checkout/cart')) { 20234 return window.location.href = responseData.backUrl; 20235 } 20236 20237 if (message) showMessage(message); 20238 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 20239 20240 return true; 20241 } catch (error) { 20242 window.dispatchEvent(new CustomEvent('product-cart-error', { detail: { itemId, message: error } })); 20243 return false; 20244 } finally { 20245 window.dispatchEvent(new CustomEvent('loader')); 20246 } 20247 } 20248 20249 function addToCart(form) { 20250 return sendCartRequest({form}); 20251 } 20252 20253 function updateItemQty(item, qty) { 20254 return sendCartRequest( 20255 { 20256 url: 'https\u003A\u002F\u002Ffera.pl\u002Fcheckout\u002Fsidebar\u002FupdateItemQty\u002F', 20257 body: `form_key=${hyva.getFormKey()}&item_id=${item.item_id}&item_qty=${qty}`, 20258 message: hyva.strf('Zmieni\u0142e\u015B\u0020ilo\u015B\u0107\u0020\u00250\u0020na\u0020\u00251\u0020szt.', item.product_name, qty) 20259 } 20260 ); 20261 } 20262 20263 function removeItem(item) { 20264 return sendCartRequest( 20265 { 20266 url: 'https\u003A\u002F\u002Ffera.pl\u002Fcheckout\u002Fsidebar\u002FremoveItem\u002F', 20267 body: `form_key=${hyva.getFormKey()}&item_id=${item.item_id}`, 20268 message: 'Usuni\u0119to\u0020element.' 20269 }, 20270 ); 20271 } 20272 20273 /** 20274 * Quantity bounds (minSalesQty / maxSalesQty / step) MUST be injected from PHP by the calling template. 20275 * They cannot be read from `$refs` here: Alpine runs the root `x-data` init() before the `x-ref` 20276 * directives of its children are registered, so `$refs` is still empty at this point. 20277 */ 20278 function initAddToCart(config = {}) { 20279 const positiveNumber = (value, fallback) => { 20280 const number = Number(value); 20281 20282 return Number.isFinite(number) && number > 0 ? number : fallback; 20283 }; 20284 20285 return { 20286 show: false, 20287 cartItem: null, 20288 productId: null, 20289 itemQty: null, 20290 prevQty: null, 20291 cartId: null, 20292 closeTimer: null, 20293 step: positiveNumber(config.step, 1), 20294 minSalesQty: positiveNumber(config.minSalesQty, 1), 20295 maxSalesQty: positiveNumber(config.maxSalesQty, 0), 20296 form: null, 20297 debouncedUpdateQty: null, 20298 pendingRemoval: false,
20299 isReward: false, 20300 rewardPointsCost: 0, 20301 customerRewardBalance: 0, 20302 canRedeem: true, 20303 20304 init() { 20305 this.productId = Number(this.$root.dataset.id); 20306 this.form = this.$root.closest('form') || document.querySelector('form[action*="checkout/cart/add"]'); 20307 20308 if (this.form) { 20309 this.isReward = this.form.dataset.isReward === '1' || 20310 this.form.dataset.isReward === 'true' || 20311 !!this.form.querySelector('input[name="is_reward"]'); 20312 20313 const costInput = this.form.querySelector('input[name="reward_points_cost"]'); 20314 if (costInput) { 20315 this.rewardPointsCost = Number(costInput.value); 20316 } 20317 20318 if (!this.isReward && this.form.dataset.cartParams) { 20319 try { 20320 const params = JSON.parse(this.form.dataset.cartParams); 20321 if (params.is_reward) this.isReward = true; 20322 } catch (e) { 20323 console.error('Invalid cart params JSON', e); 20324 } 20325 } 20326 } 20327 20328 // Initial validation (might be 0 balance until data loads, but safer to block early) 20329 this.validateRewardPurchase(); 20330 20331 this.debouncedUpdateQty = Alpine.debounce(() => this.commitQty(), 1000); 20332 }, 20333 20334 /** 20335 * Single commit point for every stepper interaction. 20336 * The operation is picked by the *intent* recorded by the caller, never by the quantity bounds, 20337 * so removal stays reachable from decrement() only. 20338 */ 20339 commitQty() { 20340 if (this.pendingRemoval) { 20341 this.pendingRemoval = false; 20342 this.removeItem(); 20343 20344 return; 20345 } 20346 20347 if (this.cartItem === null) { 20348 this.form?.dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); 20349 20350 return; 20351 } 20352 20353 this.updateQty(this.itemQty); 20354 }, 20355 20356 onGetCartData(data) { 20357 if (this.isReward) { 20358 const rewardSection = data?.reward || data?.['magento-reward']; 20359 if (rewardSection) { 20360 if (typeof rewardSection.available_reward_points_amount !== 'undefined') { 20361 this.customerRewardBalance = Number(rewardSection.available_reward_points_amount); 20362 } else if (typeof rewardSection.balance !== 'undefined') { 20363 this.customerRewardBalance = Number(rewardSection.balance); 20364 } 20365 } 20366 } 20367 20368 const cart = data?.cart; 20369 if (!cart) return; 20370 20371 this.cartId = cart.cartId; 20372 20373 const cartItem = cart.items?.find(item => { 20374 // `product_id` may arrive as a string or an int depending on the section provider. 20375 return Number(item.product_id) === this.productId && !!item.is_reward_product === this.isReward; 20376 }); 20377 20378 if (cartItem?.qty) { 20379 this.itemQty = Number(cartItem.qty); 20380 this.prevQty = Number(cartItem.qty); 20381 this.cartItem = cartItem; 20382 } else { 20383 this.resetItem(); 20384 } 20385 20386 // Validate after updating itemQty 20387 this.validateRewardPurchase(); 20388 }, 20389 20390 resetItem() { 20391 this.itemQty = null; 20392 this.prevQty = null; 20393 this.cartItem = null; 20394 this.pendingRemoval = false; 20395 this.show = false; 20396 }, 20397 20398 buttonText() { 20399 return hyva.strf('\u00250\u0020szt.\u0020w\u0020koszyku', this.itemQty || 0); 20400 }, 20401 20402 open() { 20403 if (!this.itemQty) return; 20404 this.show = true; 20405 this.cancelCloseTimer(); 20406 }, 20407
20408 close(shouldRestoreFocus = true) { 20409 if (!this.show) return; 20410 20411 this.show = false; 20412 if (shouldRestoreFocus) this.$refs.addToButton?.focus(); 20413 }, 20414 20415 delayedClose() { 20416 this.cancelCloseTimer(); 20417 this.closeTimer = setTimeout(() => this.close(false), 500); 20418 }, 20419 20420 cancelCloseTimer() { 20421 if (this.closeTimer) { 20422 clearTimeout(this.closeTimer); 20423 this.closeTimer = null; 20424 } 20425 }, 20426 20427 changeQty(qty) { 20428 const nextQty = Number(qty); 20429 20430 this.pendingRemoval = false; 20431 20432 if (!Number.isFinite(nextQty) || nextQty <= 0 || (this.maxSalesQty && nextQty > this.maxSalesQty)) { 20433 this.itemQty = this.prevQty; 20434 20435 return; 20436 } 20437 20438 this.itemQty = nextQty; 20439 this.commitQty(); 20440 }, 20441 20442 increment() { 20443 const nextQty = Math.max((Number(this.itemQty) || 0) + this.step, this.minSalesQty); 20444 20445 if (!this.maxSalesQty || nextQty <= this.maxSalesQty) { 20446 this.pendingRemoval = false; 20447 this.itemQty = nextQty; 20448 this.debouncedUpdateQty(); 20449 } 20450 20451 this.open(); 20452 }, 20453 20454 decrement() { 20455 const nextQty = Math.max(0, (Number(this.itemQty) || 0) - this.step); 20456 20457 // Removal is the only operation reachable from here, and only once the stepper hits the floor. 20458 this.pendingRemoval = nextQty <= 0 || nextQty < this.minSalesQty; 20459 this.itemQty = nextQty; 20460 this.debouncedUpdateQty(); 20461 }, 20462 20463 validateRewardPurchase() { 20464 if (!this.isReward) return; 20465 20466 this.canRedeem = this.customerRewardBalance >= this.rewardPointsCost; 20467 }, 20468 20469 async updateQty(qty) { 20470 const nextQty = Number(qty); 20471 const isOutOfBounds = !Number.isFinite(nextQty) 20472 || nextQty <= 0 20473 || (this.maxSalesQty && nextQty > this.maxSalesQty); 20474 20475 // Roll the optimistic counter back instead of leaving it ahead of the server. 20476 if (!this.cartItem || isOutOfBounds) { 20477 this.itemQty = this.prevQty; 20478 20479 return; 20480 } 20481 20482 if (nextQty === this.prevQty) return; 20483 20484 const response = await updateItemQty(this.cartItem, nextQty); 20485 if (!response) this.itemQty = this.prevQty; 20486 }, 20487 20488 async removeItem() { 20489 if (!this.cartItem) { 20490 this.itemQty = this.prevQty; 20491 20492 return; 20493 } 20494 20495 const response = await removeItem(this.cartItem); 20496 20497 if (response) { 20498 this.resetItem(); 20499 } else { 20500 this.itemQty = this.prevQty; 20501 } 20502 } 20503 }; 20504 } 20505 20506 window.addEventListener('alpine:init', () => { 20507 Alpine.data('initAddToCart', initAddToCart); 20508 }, {once: true}); 20509 20510 document.addEventListener('submit', (event) => { 20511 const form = event.target; 20512 20513 if (!form.matches('#product_addtocart_form, .product_addtocart_form')) return; 20514 20515 event.preventDefault(); 20516 20517 addToCart(form); 20518 }); 20519 20520 document.addEventListener('keydown', (event) => { 20521 if ((event.key === 'Enter' || event.keyCode === 13) && event.target.name === 'qty') { 20522 const form = event.target.closest('form'); 20523 if (form?.matches('#product_addtocart_form, .product_addtocart_form')) { 20524 event.preventDefault(); 20525 } 20526 } 20527 }); 20528</script>
20528 20529 20530<div id="mobile-bottom-nav" class="sticky bottom-0 left-0 right-0 grid grid-cols-[1fr_1fr_82px_1fr_1fr] align-center py-1 border-t border-secondary-lighter bg-white z-50 xl:hidden"> 20531 20532<button 20533 type="button" 20534 class="flex flex-col gap-y-2 items-center justify-center p-1 min-h-[72px]" 20535 aria-label="Otwórz menu" 20536 aria-haspopup="dialog" 20537 x-data="initMenuButton" 20538 x-ref="menuButton" 20539 @click.prevent="openMenu" 20540 @toggle-menu.window="toggleMenu" 20541 :aria-expanded="isMenuOpen" 20542> 20543 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 20544 <path fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 15a1 1 0 011-1h6a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/> 20545</svg> 20546 <span class="text-sm font-semibold"> 20547 Menu </span> 20548 </button> 20549
20550<script> 20551 function initMenuButton() { 20552 return { 20553 isMenuOpen: false, 20554 openMenu() { 20555 this.$dispatch('toggle-menu', { 20556 isOpen: true 20557 }) 20558 }, 20559 toggleMenu() { 20560 const event = this.$event; 20561 if (event.detail && event.detail.isOpen !== undefined) { 20562 this.isMenuOpen = event.detail.isOpen 20563 if (!this.isMenuOpen && this.$refs && this.$refs.menuButton) { 20564 this.$refs.menuButton.focus() 20565 } 20566 } else { 20567 this.isMenuOpen = true 20568 } 20569 }, 20570 hasActiveSubMenu() { 20571 this.isSubMenuOpen = !!this.$root.querySelector('[data-open]'); 20572 }, 20573 } 20574 } 20575 20576 document.addEventListener('alpine:init', () => { 20577 Alpine.data('initMenuButton', initMenuButton); 20578 }); 20579</script>
20579 20580
20580<script> 20581 function initWishlistLink() { 20582 return { 20583 wishlistProducts: null, 20584 itemCount: 0, 20585 linkAriaLabel() { 20586 const countLabel = this.itemCount > 1 20587 ? hyva.str('Produkty\u0020\u00251', this.itemCount) 20588 : hyva.str('\u00251\u0020element', this.itemCount); 20589 return `Ulubione (${countLabel})`; 20590 }, 20591 receiveWishlistData() { 20592 const data = this.$event.detail.data; 20593 20594 if (data.wishlist && data.wishlist.wishlist_item_count !== undefined) { 20595 this.itemCount = data.wishlist.wishlist_item_count; 20596 } else { 20597 this.itemCount = data.wishlist && data.wishlist.items 20598 ? data.wishlist.items.length 20599 : 0; 20600 } 20601 } 20602 } 20603 } 20604 20605 window.addEventListener('alpine:init', () => { 20606 Alpine.data('initWishlistLink', initWishlistLink); 20607 }, {once: true}) 20608</script>
20608 20609<a 20610 href="https://fera.pl/wishlist/" 20611 class="relative flex flex-col gap-y-2 items-center justify-center p-1 min-h-[72px]" 20612 x-data="initWishlistLink" 20613 @private-content-loaded.window="receiveWishlistData" 20614 aria-label="Ulubione" 20615 :aria-label="linkAriaLabel" 20616> 20617 <span class="relative"> 20618 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 20619 <path fill-rule="evenodd" d="M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z" clip-rule="evenodd"/> 20620</svg> 20621 <template x-if="itemCount"> 20622 <span 20623 x-text="itemCount" 20624 class="absolute -top-2.5 -right-2 p-0.5 min-w-4 rounded-full bg-red-600 text-white 20625 text-xs font-medium leading-none text-center uppercase tabular-nums" 20626 aria-hidden="true" 20627 ></span> 20628 </template> 20629 </span> 20630 <span class="text-sm font-semibold text-center"> 20631 Ulubione </span> 20632 </a> 20633 <a href="https://fera.pl/" 20634 class="flex items-center justify-center rounded-full mx-2 w-[66px] h-[66px] bg-primary text-white" 20635 title="Przejdź do strony głównej" 20636 > 20637 <svg xmlns="http://www.w3.org/2000/svg" width="29" height="50" viewBox="0 0 277 588" fill="none" aria-hidden="true"> 20638 <path d="M193.084 0.44751C285.291 0.447795 325.344 49.4212 330.99 105.229L330.995 105.22C330.995 105.22 331.528 123.562 321.143 139.461C321.152 139.49 321.163 139.52 321.172 139.549C321.063 139.673 320.95 139.795 320.841 139.919C317.317 145.191 312.576 150.174 306.188 154.097C306.064 154.175 303.652 155.697 301.303 157.181C299.828 158.187 298.329 159.152 296.793 160.043L296.787 160.032L296.784 160.038L296.787 160.026L254.879 45.5734C252.525 39.3441 246.612 36.7495 241.263 37.5651C240.136 37.6496 239.079 37.9659 238.029 38.4507C234.463 39.9062 231.623 42.9025 230.658 47.4237L222.961 85.2598H201.724C181.631 85.2602 165.352 100.447 163.322 119.606H125.235C118.272 119.606 112.683 125.19 112.598 132.136V132.221C112.598 143.05 115.354 153.246 120.295 162.134C130.902 181.772 151.812 195.193 175.71 195.193H203.262L212.259 216.23C218.703 230.494 225.185 243.54 232.954 260.552V333.943H196.473V587.448H42.822C47.9669 573.638 58.3927 553.013 66.0679 544.864C76.7033 533.556 96.1256 491.102 95.2094 475.866C94.2932 460.637 84.1102 442.862 83.8838 434.79C83.6441 426.711 82.4948 411.943 88.274 405.938C94.0675 399.934 115.69 398.964 120.546 393.423C125.41 387.882 123.154 385.448 124.535 384.415C125.924 383.381 128.178 381.82 129.743 379.057C131.286 376.28 129.906 373.172 131.471 371.955C133.035 370.739 134.946 368.145 134.763 364.51C134.594 360.861 133.029 357.407 131.119 355.502C129.21 353.596 124.515 348.585 122.436 345.118C120.342 341.666 116.88 325.565 113.06 320.551C109.241 315.517 95.0262 299.955 85.3072 297.177C75.6029 294.414 73.8545 294.414 72.4732 291.82C71.0707 289.219 80.6273 267.759 79.4086 264.995C78.1893 262.218 74.3678 264.994 72.2886 266.716C70.2095 268.446 66.0453 273.98 64.8261 273.291C63.6076 272.6 63.6066 268.11 61.3525 267.933C59.0972 267.757 45.7323 277.285 40.3618 281.61C34.9916 285.934 30.6569 289.824 19.0284 298.57C13.2072 302.937 6.64574 307.521 0 314.481V197.352H34.4222V178.291C34.4222 165.382 35.374 153.478 37.1782 142.643C44.5503 50.7287 109.891 0.44751 193.084 0.44751Z" fill="currentColor"/> 20639</svg> 20640 </a> 20641
20642<script> 20643 function initCart() { 20644 return { 20645 cart: {}, 20646 summaryCount() { 20647 return this.cart.summary_count || 0; 20648 }, 20649 isCartOpen: false, 20650 getData() { 20651 const data = this.$event.detail.data; 20652 if (data.cart) { 20653 this.cart = data.cart 20654 } 20655 }, 20656 ariaLabel() { 20657 return 'Poka\u017C\u002Fukryj\u0020koszyk, ' + 20658 (this.isCartEmpty() ? 'Koszyk\u0020jest\u0020pusty' : ( 20659 Math.abs(this.summaryCount()) > 1 ? 20660 hyva.str('\u00251\u0020element\u00F3w', this.summaryCount()) : 20661 hyva.str('\u00251\u0020pozycja', this.summaryCount()) 20662 )) 20663 }, 20664 isCartEmpty() { 20665 return !this.summaryCount() 20666 }, 20667 openCart() { 20668 this.$dispatch('toggle-cart', { 20669 isOpen: true 20670 }) 20671 }, 20672 toggleCart() { 20673 const event = this.$event; 20674 if (event.detail && event.detail.isOpen !== undefined) { 20675 this.isCartOpen = event.detail.isOpen 20676 if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { 20677 this.$refs.cartButton.focus() 20678 } 20679 } else { 20680 this.isCartOpen = true 20681 } 20682 }, 20683 } 20684 } 20685 20686 window.addEventListener('alpine:init', () => { 20687 Alpine.data('initCart', initCart); 20688 }, {once: true}) 20689</script>
20689 20690 20691 <button 20692 class="relative flex flex-col gap-y-2 items-center justify-center p-1 min-h-[72px]" 20693 x-data="initCart" 20694 x-ref="cartButton" 20695 @private-content-loaded.window="getData" 20696 :aria-disabled="isCartEmpty" 20697 :aria-label="ariaLabel" 20698 @click.prevent="openCart" 20699 @toggle-cart.window="toggleCart" 20700 :aria-expanded="isCartOpen" 20701 aria-haspopup="dialog" 20702 > 20703 <span class="relative"> 20704 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 20705 <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/> 20706</svg> 20707 <span 20708 x-text="summaryCount" 20709 x-show="summaryCount" 20710 x-cloak 20711 class="absolute -top-2.5 -right-2 p-0.5 min-w-4 rounded-full bg-red-600 text-white 20712 text-xs font-medium leading-none text-center uppercase tabular-nums" 20713 aria-hidden="true" 20714 ></span> 20715 </span> 20716 <span class="text-sm font-semibold"> 20717 Koszyk </span> 20718 </button> 20719 <!-- BLOCK mobile.bottom.nav.customer --> 20720 <a class="relative flex flex-col gap-y-2 items-center justify-center p-1 min-h-[72px]" 20721 aria-label="Konto" 20722 onclick="hyva.setCookie && hyva.setCookie( 20723 'login_redirect', 20724 window.location.href, 20725 1 20726 )" 20727 href="https://fera.pl/customer/account/index/" 20728 title="Konto" 20729 > 20730 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 20731 <path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"/> 20732</svg> 20733 <span class="text-sm font-semibold"> 20734 Konto </span> 20735 </a> 20736<!-- /BLOCK mobile.bottom.nav.customer --></div> 20737
vendor: 2,348 bytes, lines 20738-20797
20738<script> 20739 (() => { 20740 function src_default(Alpine) { 20741 Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 20742 let evaluate = evaluateLater(expression); 20743 let options = { 20744 rootMargin: getRootMargin(modifiers), 20745 threshold: getThreshold(modifiers) 20746 }; 20747 let observer = new IntersectionObserver((entries) => { 20748 entries.forEach((entry) => { 20749 if (entry.isIntersecting === (value === "leave")) 20750 return; 20751 evaluate(); 20752 modifiers.includes("once") && observer.disconnect(); 20753 }); 20754 }, options); 20755 observer.observe(el); 20756 cleanup(() => { 20757 observer.disconnect(); 20758 }); 20759 })); 20760 } 20761 function getThreshold(modifiers) { 20762 if (modifiers.includes("full")) 20763 return 0.99; 20764 if (modifiers.includes("half")) 20765 return 0.5; 20766 if (!modifiers.includes("threshold")) 20767 return 0; 20768 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 20769 if (threshold === "100") 20770 return 1; 20771 if (threshold === "0") 20772 return 0; 20773 return Number(`.${threshold}`); 20774 } 20775 function getLengthValue(rawValue) { 20776 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 20777 return match ? match[1] + (match[2] || "px") : void 0; 20778 } 20779 function getRootMargin(modifiers) { 20780 const key = "margin"; 20781 const fallback = "0px 0px 0px 0px"; 20782 const index = modifiers.indexOf(key); 20783 if (index === -1) 20784 return fallback; 20785 let values = []; 20786 for (let i = 1; i < 5; i++) { 20787 values.push(getLengthValue(modifiers[index + i] || "")); 20788 } 20789 values = values.filter((v) => v !== void 0); 20790 return values.length ? values.join(" ").trim() : fallback; 20791 } 20792 20793 document.addEventListener("alpine:init", () => { 20794 window.Alpine.plugin(src_default); 20795 }); 20796 })(); 20797</script>
vendor: 1 bytes, line 20797
20797
20798<script> 20799 for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]:not([x-data] [x-data])":"intersect",".product-info [x-data]:not([x-data] [x-data])":"intersect","#filters-content [x-data]:not([x-data] [x-data])":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]:not([x-data] [x-data])":"intersect","#notice-cookie-block":"idle"})) { 20800 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 20801 } 20802</script>
vendor: 1 bytes, line 20802
20802
20803<script> 20804 (function () { 20805 "use strict"; 20806 20807 const hasAlpine = new Promise(resolve => { 20808 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 20809 }); 20810 20811 const hasInteract = new Promise(resolve => { 20812 (events => { 20813 const onInteract = () => { 20814 resolve(); 20815 events.forEach(type => window.removeEventListener(type, onInteract)); 20816 } 20817 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 20818 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 20819 }); 20820 20821 const onIntersect = (el) => { 20822 return new Promise(resolve => { 20823 const observer = new IntersectionObserver(entries => { 20824 for (const entry of entries) { 20825 if (entry.isIntersecting) { 20826 observer.disconnect() 20827 resolve(); 20828 } 20829 } 20830 }, {}); 20831 observer.observe(el); 20832 }); 20833 } 20834 20835 function runComponent(el) { 20836 hasAlpine.then(() => { 20837 el.removeAttribute('x-ignore'); 20838 queueMicrotask(() => Alpine.initTree(el)); 20839 }); 20840 } 20841 20842 function initDeferredComponents() { 20843 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 20844 el.setAttribute('x-ignore', ''); 20845 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 20846 switch (deferUntil) { 20847 case 'interact': 20848 hasInteract.then(() => runComponent(el)); 20849 break; 20850 case 'intersect': 20851 onIntersect(el).then(() => runComponent(el)) 20852 break; 20853 case 'idle': 20854 window.requestIdleCallback 20855 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 20856 : setTimeout(() => runComponent(el), 4000); 20857 break; 20858 case 'eager': 20859 runComponent(el); 20860 break; 20861 default: 20862 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 20863 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 20864 } 20865 } 20866 }); 20867 } 20868 20869 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 20870 })() 20871</script>
vendor: 1 bytes, line 20871
20871
20872<script> 20873 (() => { 20874 // src/dialog.js 20875 function dialog_default(Alpine) { 20876 Alpine.directive("htmldialog", fylgjaAlpineDialog); 20877 20878 function fylgjaAlpineDialog(el, { 20879 expression, 20880 modifiers 20881 }, { 20882 evaluateLater, 20883 cleanup 20884 }) { 20885 const evaluate = expression.length ? evaluateLater(expression) : () => {}; 20886 const lockPageScroll = modifiers.includes("noscroll"); 20887 const closeby = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest"); 20888 el.style.display = null; 20889 el.hidden = false; 20890 el.style.length === 0 && el.removeAttribute("style"); 20891 el.addEventListener("keydown", escapeDialog); 20892 el.addEventListener("click", backdropDialog); 20893 el.addEventListener("submit", methodDialog); 20894 20895 function scrollLock(use = true) { 20896 document.body.style.overflow = use ? "hidden" : ""; 20897 } 20898 20899 function methodDialog(event) { 20900 if (event.target.getAttribute("method") === "dialog" || event.submitter && event.submitter.getAttribute("formmethod") === "dialog") { 20901 evaluate(); 20902 } 20903 } 20904 20905 function escapeDialog(event) { 20906 if (event.key !== "Escape") 20907 return; 20908 event.preventDefault(); 20909 if (closeby !== "any" && closeby !== "closerequest") 20910 return; 20911 evaluate(); 20912 } 20913 20914 function backdropDialog(event) { 20915 if (event.target !== el || closeby !== "any") 20916 return; 20917 const rect = el.getBoundingClientRect(); 20918 const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width; 20919 if (isInDialog) 20920 return; 20921 evaluate(); 20922 } 20923 el._x_doShow = () => { 20924 if (el.hasAttribute("open")) 20925 return; 20926 el.showModal(); 20927 scrollLock(lockPageScroll); 20928 }; 20929 el._x_doHide = () => { 20930 if (!el.hasAttribute("open")) 20931 return; 20932 el.close(); 20933 scrollLock(false); 20934 }; 20935 cleanup(() => { 20936 el.removeEventListener("keydown", escapeDialog); 20937 el.removeEventListener("click", backdropDialog); 20938 el.removeEventListener("submit", methodDialog); 20939 scrollLock(false); 20940 }); 20941 } 20942 } 20943 20944 function modifierValue(modifiers, key, fallback) { 20945 if (modifiers.indexOf(key) === -1) 20946 return fallback; 20947 const rawValue = modifiers[modifiers.indexOf(key) + 1]; 20948 if (!rawValue) 20949 return fallback; 20950 if (key === "closeby") { 20951 const allowedValues = ["auto", "none", "closerequest", "any"]; 20952 const options = allowedValues.join(", "); 20953 if (!allowedValues.includes(rawValue)) { 20954 console.warn( 20955 `"${rawValue}" is not one of the allowed values for closeby: ${options}` 20956 ); 20957 } 20958 return rawValue; 20959 } 20960 return rawValue; 20961 } 20962 20963 // src/cdn.js 20964 document.addEventListener("alpine:init", () => { 20965 window.Alpine.plugin(dialog_default); 20966 }); 20967 })(); 20968</script>
vendor: 1 bytes, line 20968
20968
20969<script> 20970 (() => { 20971 // src/index.js 20972 function truncate_default(Alpine) { 20973 const appendEllipsis = (string, parameters) => { 20974 if (parameters[0].length <= string.length) return string 20975 20976 let ellipsis = 'â¦' 20977 20978 // 3rd parameter is an optional 'â¦' override (soon to be deprecated) 20979 if (typeof parameters[2] !== 'undefined') { 20980 ellipsis = parameters[2] 20981 } 20982 20983 // If the second parameter is an object 20984 if (Object.prototype.hasOwnProperty.call(parameters[1], 'ellipsis')) { 20985 ellipsis = parameters[1].ellipsis 20986 } 20987 20988 return string + ellipsis 20989 } 20990 20991 Alpine.magic('truncate', () => { 20992 return function (...parameters) { 20993 if (typeof parameters[0] !== 'string') return parameters[0] 20994 20995 // If the second parameter isn't truthy, return the full string 20996 if (!parameters[1]) return parameters[0] 20997 20998 // if only a number or string is passed in, keep it simple 20999 if (typeof parameters[1] !== 'object') { 21000 return appendEllipsis(parameters[0].slice(0, parameters[1]), parameters) 21001 } 21002 21003 // If words or characters is set, also check that they are truthy. Setting to 0, for example, shoudld show all 21004 if (Object.prototype.hasOwnProperty.call(parameters[1], 'words') && parameters[1].words) { 21005 return appendEllipsis(parameters[0].split(' ').splice(0, parameters[1].words).join(' '), parameters) 21006 } 21007 21008 if (Object.prototype.hasOwnProperty.call(parameters[1], 'characters') && parameters[1].characters) { 21009 return appendEllipsis(parameters[0].slice(0, parameters[1].characters), parameters) 21010 } 21011 21012 return parameters[0] 21013 } 21014 }) 21015 } 21016 21017 // builds/cdn.js 21018 document.addEventListener("alpine:init", () => { 21019 window.Alpine.plugin(truncate_default); 21020 }); 21021 })(); 21022</script>
21022 21023
21024<script> 21025 (() => { 21026 function input_sanitize_default(Alpine) { 21027 Alpine.directive('input-sanitize', inputSanitize); 21028 21029 function inputSanitize(el, { expression }) { 21030 const createAllowedPattern = (value) => { 21031 try { 21032 return new RegExp(`[${value}]`); 21033 } catch (error) { 21034 console.warn('[input-sanitize] Invalid expression; allowing all input instead.', value, error); 21035 return /[\s\S]/; 21036 } 21037 }; 21038 21039 const allowed = createAllowedPattern(expression); 21040 21041 const filterText = (text) => text 21042 .split('') 21043 .filter(char => allowed.test(char)) 21044 .join(''); 21045 21046 const insertAtCursor = (text) => { 21047 const start = el.selectionStart; 21048 const end = el.selectionEnd; 21049 el.setRangeText(text, start, end, 'end'); 21050 el.dispatchEvent(new Event('input', { bubbles: true })); 21051 }; 21052 21053 el.addEventListener('keydown', (e) => { 21054 if (e.ctrlKey || e.metaKey) return; 21055 if (e.key.length !== 1) return; 21056 if (!allowed.test(e.key)) { 21057 e.preventDefault(); 21058 } 21059 }); 21060 21061 el.addEventListener('paste', (e) => { 21062 e.preventDefault(); 21063 const filtered = filterText(e.clipboardData.getData('text')); 21064 if (filtered) insertAtCursor(filtered); 21065 }); 21066 21067 el.addEventListener('drop', (e) => { 21068 e.preventDefault(); 21069 const filtered = filterText(e.dataTransfer.getData('text')); 21070 if (filtered) insertAtCursor(filtered); 21071 }); 21072 21073 el.addEventListener('input', () => { 21074 const filtered = filterText(el.value); 21075 21076 if (filtered !== el.value) { 21077 const start = el.selectionStart; 21078 const end = el.selectionEnd; 21079 21080 const removedBefore = el.value 21081 .slice(0, start) 21082 .split('') 21083 .filter(char => !allowed.test(char)) 21084 .length; 21085 21086 el.value = filtered; 21087 21088 const newPos = Math.max(0, start - removedBefore); 21089 el.setSelectionRange(newPos, Math.max(0, end - removedBefore)); 21090 21091 el.dispatchEvent(new Event('input', { bubbles: true })); 21092 } 21093 }); 21094 } 21095 } 21096 21097 document.addEventListener('alpine:init', () => { 21098 window.Alpine.plugin(input_sanitize_default); 21099 }); 21100 })(); 21101</script>
21101 21102
21103<script type="module" 21104 src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Hyva_Theme/js/alpine3.min.js" 21105 defer 21106 crossorigin 21107></script>
vendor: 1 bytes, line 21107
21107
21108<script> 21109 'use strict'; 21110 function dispatchMessages(messages, hideAfter) { 21111 const messagesEvent = new CustomEvent("messages-loaded", { 21112 detail: { 21113 messages: messages, 21114 hideAfter: hideAfter 21115 } 21116 }); 21117 window.dispatchEvent(messagesEvent); 21118 } 21119 21120 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 21121 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 21122 } 21123 21124 (function( hyva, undefined ) { 21125 21126 hyva.initFormKey = () => { 21127 const inputSelector = 'input[name="form_key"]', 21128 formKey = hyva.getFormKey(); 21129 21130 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 21131 input.value = formKey 21132 }); 21133 } 21134 21135 hyva.initMessages = () => { 21136 try { 21137 const messages = hyva.getCookie('mage-messages'); 21138 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 21139 21140 dispatchMessages(window.mageMessages); 21141 21142 // empty `mage-messages` cookie 21143 const skipSetDomain = true; 21144 hyva.setCookie('mage-messages','', -1, skipSetDomain); 21145 21146 } catch (error) { 21147 console.warn('Error parsing Cookie Messages:', error); 21148 } 21149 } 21150 21151 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 21152 hyva.alpineInitialized(hyva.initMessages) 21153 21154 }( window.hyva = window.hyva || {} )); 21155</script>
vendor: 1 bytes, line 21155
21155
21156<script> 21157 'use strict'; 21158 { 21159 const private_content_key = 'mage-cache-storage'; 21160 const private_content_expire_key = 'mage-cache-timeout'; 21161 const private_content_version_key = 'private_content_version'; 21162 const section_data_ids_key = 'section_data_ids'; 21163 const mage_cache_session_id_key = 'mage-cache-sessid'; 21164 const last_visited_store_key = 'last_visited_store'; 21165 21166 const ttl = 3600; 21167 21168 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 21169 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 21170 } 21171 21172 function loadSectionData () { 21173 const browserStorage = hyva.getBrowserStorage(); 21174 if (!browserStorage) { 21175 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 21176 [{ 21177 type: "warning", 21178 text: "W przeglÄ darce należy wÅÄ czyÄ funkcjÄ LocalStorage." 21179 }] 21180 ); 21181 return; 21182 } 21183 try { 21184 let isInvalid = false; 21185 21186 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 21187 isInvalid = true; 21188 } 21189 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 21190 21191 if (!hyva.getCookie(mage_cache_session_id_key)) { 21192 isInvalid = true; 21193 browserStorage.removeItem(private_content_key); 21194 const skipSetDomain = true; 21195 const days = false; 21196 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 21197 } 21198 21199 const cookieVersion = hyva.getCookie(private_content_version_key); 21200 const storageVersion = browserStorage.getItem(private_content_version_key); 21201 21202 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 21203 isInvalid = true; 21204 } 21205 21206 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 21207 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 21208 browserStorage.removeItem(private_content_key); 21209 } 21210 21211 if (isInvalid && cookieVersion) { 21212 fetchPrivateContent([]); 21213 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 21214 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 21215 if ( 21216 privateContent && 21217 privateContentExpires && 21218 privateContent.cart && 21219 privateContent.customer 21220 ) { 21221 dispatchPrivateContent(privateContent); 21222 } else { 21223 fetchPrivateContent([]); 21224 } 21225 } else { 21226 if (document.getElementById('default-section-data')) { 21227 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 21228 dispatchPrivateContent(privateContent); 21229 } else { 21230 dispatchPrivateContent({}); 21231 } 21232 } 21233 21234 } catch (error) { 21235 console.warn('Error retrieving Private Content:', error); 21236 } 21237 } 21238 21239 hyva.alpineInitialized(loadSectionData) 21240 window.addEventListener('reload-customer-section-data', loadSectionData); 21241 21242 window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data); 21243 21244 function dispatchPrivateContent(data) { 21245 21246 const privateContentEvent = new CustomEvent("private-content-loaded", { 21247 detail: { 21248 data: window.processSectionDataBeforeDispatch(data) 21249 } 21250 }); 21251 window.dispatchEvent(privateContentEvent); 21252 } 21253 21254 function fetchPrivateContent(sections) { 21255 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 21256 method: 'GET', 21257 headers: { 21258 'Content-Type': 'application/json', 21259 'X-Requested-With': 'XMLHttpRequest' 21260 } 21261 }) 21262 .then(response => response.ok && response.json()) 21263 .then( 21264 data => { 21265 if (data) { 21266 try { 21267 const browserStorage = hyva.getBrowserStorage(); 21268 21269 // merge new data preserving non-invalidated sections 21270 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 21271 21272 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 21273 delete oldSectionData['checkout-data']; 21274 } 21275 const newSectionData = Object.assign(oldSectionData, data); 21276 21277 dispatchPrivateContent(newSectionData); 21278 21279 // don't persist messages, they've been dispatched already 21280 if (newSectionData.messages && newSectionData.messages.messages ) { 21281 newSectionData.messages.messages = []; 21282 } 21283 21284 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 21285 21286 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 21287 browserStorage.setItem(private_content_expire_key, expiresAt); 21288 21289 const newCookieVersion = hyva.getCookie(private_content_version_key); 21290 browserStorage.setItem(private_content_version_key, newCookieVersion); 21291 21292 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 21293 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 21294 hyva.setCookie( 21295 section_data_ids_key, 21296 JSON.stringify( 21297 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 21298 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 21299 return sectionDataIds; 21300 }, {}) 21301 ), 21302 false, 21303 true 21304 ); 21305 } catch (error) { 21306 console.warn("Couldn't store privateContent", error); 21307 } 21308 } 21309 } 21310 ); 21311 } 21312 } 21313</script>
vendor: 1 bytes, line 21313
21313
21314<script> 21315 (() => { 21316 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 21317 })() 21318</script>
vendor: 1 bytes, line 21318
21318
21319<script> 21320 (events => { 21321 const dispatchUserInteractionEvent = () => { 21322 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 21323 window.dispatchEvent(new Event('init-external-scripts')) 21324 }; 21325 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 21326 })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown']) 21327</script>
vendor: 1 bytes, line 21327
21327
21328<script type="application/ld+json"> 21329 {"@context":"https:\/\/schema.org","@type":"Organization","name":"Fera sp. z o.o.","url":"https:\/\/fera.pl\/","logo":"https:\/\/media.fera.pl\/logo\/default\/Path_0.png","sameAs":["https:\/\/www.facebook.com\/sklepferapl","https:\/\/www.instagram.com\/fera_pl","https:\/\/www.youtube.com\/FeraPlsklepzoologiczny"]}</script>
21329 21330 21331<div 21332 id="scroll-to-top" 21333 class="z-30 fixed bottom-6 sm:bottom-12 lg:bottom-32 xl:bottom-40 hidden lg:block right-4 sm:left-auto sm:right-8 md:right-12 lg:right-20" 21334 x-data="initScrollToTop" 21335 x-cloak 21336 x-show="visible" 21337 x-transition.duration.250ms 21338 x-bind="eventListeners" 21339> 21340 <button 21341 type="button" 21342 class="btn btn-icon-size-2xl rounded-full" 21343 @click="scrollToTop" 21344 aria-label="Scroll back to the top of the page" 21345 > 21346 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="32" height="32" aria-hidden="true"> 21347 <path stroke-linecap="round" stroke-linejoin="round" d="M5 10l7-7m0 0l7 7m-7-7v18"/> 21348</svg> 21349 </button> 21350 21351
21351<script> 21352 function initScrollToTop() { 21353 return { 21354 visible: false, 21355 scrollOffset: 200, 21356 scrollPosition: 0, 21357 init() { 21358 scrollPosition = document.documentElement.scrollTop; 21359 this.$watch('scrollPosition', (pos, prevPos) => { 21360 this.visible = pos > this.scrollOffset; 21361 }); 21362 }, 21363 scrollToTop() { 21364 this.visible = false; 21365 document.documentElement.scrollIntoView({ behavior: 'smooth' }) 21366 }, 21367 eventListeners: { 21368 ['@scroll.window.throttle.50ms']() { 21369 this.scrollPosition = document.documentElement.scrollTop; 21370 }, 21371 ['@scroll.window.debounce.4000ms']() { 21372 this.visible = false; 21373 } 21374 } 21375 } 21376 } 21377 window.addEventListener('alpine:init', () => Alpine.data('initScrollToTop', initScrollToTop), { once: true }); 21378 </script>
21378 21379 </div> 21380
21381<script> 21382 (() => { 21383 window.lastPageYOffset = window.pageYOffset; 21384 document.documentElement.dataset.scrollDirY = 'initial'; 21385 21386 const throttle = (fn, wait) => { 21387 let timer; 21388 return function () { 21389 const context = this; 21390 const args = arguments; 21391 clearTimeout(timer); 21392 timer = setTimeout(() => { fn.apply(context, args) }, wait); 21393 }; 21394 }; 21395 21396 const setScrollDirY = () => { 21397 const lastScrollPosition = window.lastPageYOffset; 21398 const newScrollPosition = window.pageYOffset; 21399 const scrollDir = newScrollPosition < 1 21400 ? 'initial' 21401 : newScrollPosition > lastScrollPosition ? 'down' : 'up'; 21402 21403 document.documentElement.dataset.scrollDirY = scrollDir; 21404 window.lastPageYOffset = newScrollPosition; 21405 window.dispatchEvent(new Event('scrollPosition')); 21406 } 21407 21408 window.addEventListener('scroll', throttle(setScrollDirY, 30)); 21409 })(); 21410</script>
vendor: 1 bytes, line 21410
21410
21411<script> 21412 function initConfigurableOptions(productId, optionConfig) { 21413 21414 function findPathParam(key) { 21415 const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; 21416 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 21417 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 21418 for (let i = 0; i < pathParts.length; i += 2) { 21419 if (pathParts[i] === key && pathParts.length > i) { 21420 return pathParts[i + 1]; 21421 } 21422 } 21423 } 21424 21425 return { 21426 optionConfig, 21427 productId, 21428 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 21429 allowedAttributeOptions: [], 21430 selectedValues: [], 21431 init() { 21432 this.findAllowedAttributeOptions(); 21433 this.$nextTick(() => { 21434 if (typeof this.optionConfig.defaultValues === 'object') { 21435 for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { 21436 this.changeOption(attributeId, value + ''); 21437 } 21438 } 21439 this.preselectQuerystringItems(); 21440 this.preselectLocationHashItems(); 21441 }); 21442 }, 21443 productIndex: 0, 21444 productIndexForPrice: 0, 21445 optionIsActive(attributeId, optionId) { 21446 return !!this.getAllowedAttributeOptions(attributeId).find( 21447 option => option.id === optionId 21448 ) 21449 }, 21450 optionIsEnabled(attributeId, optionId) { 21451 for (const productId in this.optionConfig.index) { 21452 if (this.optionConfig.index[productId][attributeId] === optionId) { 21453 return true; 21454 } 21455 } 21456 return false; 21457 }, 21458 findSimpleIndex() { 21459 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 21460 this.productIndexForPrice = this.findCheapestProductForPartialSelection(this.selectedValues); 21461 }, 21462 calculateSimpleIndexForPartialSelection(selectedValues) { 21463 if (selectedValues.length === 0) return 0; 21464 return this.findProductIdsForPartialSelection(selectedValues)[0]; 21465 }, 21466 calculateSimpleIndexForFullSelection(selectedValues) { 21467 if (! this.isFullSelection(selectedValues)) return false; 21468 21469 const productIndexes = this.optionConfig.index; 21470 return Object.keys(productIndexes).find(productIndex => { 21471 const productCandidateOptions = productIndexes[productIndex]; 21472 21473 for (const productOption in productCandidateOptions) { 21474 if ( 21475 !selectedValues[productOption] || 21476 selectedValues[productOption] !== productCandidateOptions[productOption] 21477 ) { 21478 return false; 21479 } 21480 } 21481 return productIndex; 21482 }); 21483 }, 21484 findAllowedAttributeOptions() { 21485 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 21486 }, 21487 calculateAllowedAttributeOptions(selectedValues) { 21488 const allAttributes = this.optionConfig.attributes; 21489 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 21490 return a.position - b.position 21491 }); 21492 21493 const newAllowedAttributeOptions = []; 21494 21495 allAttributesSorted.forEach(attribute => { 21496 const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); 21497 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); 21498 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 21499 return !!option.products.find(product => { 21500 return availableIndexes.includes(product); 21501 }) 21502 }); 21503 }); 21504 return newAllowedAttributeOptions; 21505 }, 21506 calculateAvailableProductIndexes(selectedOptions) { 21507 if (Object.keys(selectedOptions).length === 0) { 21508 if (Object.values(this.optionConfig.salable || {}).length) { 21509 return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) 21510 } 21511 return Object.keys(this.optionConfig.index); 21512 } 21513 21514 const selectedIds = Object.keys(selectedOptions); 21515 if (Object.values(this.optionConfig.salable || {}).length) { 21516 const selectedOptionIndexes = selectedIds.map(attrId => { 21517 const optionValue = selectedOptions[attrId]; 21518 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 21519 }) 21520 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 21521 return acc.filter(index => optionIndexes.includes(index)); 21522 }); 21523 } else { 21524 const productIndexes = this.optionConfig.index; 21525 return Object.keys(productIndexes).filter(index => { 21526 for (const attrId of selectedIds) { 21527 if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false 21528 } 21529 return true 21530 }); 21531 } 21532 }, 21533 findAttributeByOptionId(optionId) { 21534 for (const attributeId in this.optionConfig.attributes) { 21535 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 21536 if (attributeOptions.find(option => option.id === optionId)) { 21537 return attributeId; 21538 } 21539 } 21540 }, 21541 getAllowedAttributeOptions(attributeId) { 21542 return this.allowedAttributeOptions[attributeId] || [] 21543 }, 21544 getAllAttributeOptions(attributeId) { 21545 return ( 21546 this.optionConfig.attributes[attributeId] && 21547 this.optionConfig.attributes[attributeId].options 21548 ) || [] 21549 }, 21550 getProductIdsForOption(option) { 21551 const attributeId = this.findAttributeByOptionId(option.id); 21552 const allOptions = this.optionConfig.attributes[attributeId]; 21553 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 21554 return opt && opt.products 21555 ? opt.products 21556 : []; 21557 }, 21558 findProductIdsForPartialSelection(optionSelection) { 21559 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 21560 const newCandidates = this.getProductIdsForOption({id: optionId}); 21561 return candidates === null 21562 ? newCandidates 21563 : candidates.filter(productId => newCandidates.includes(productId)); 21564 }, null); 21565 return candidateProducts || []; 21566 },
21567 findCheapestProductForPartialSelection(optionSelection) { 21568 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 21569 return candidateProducts.reduce((cheapest, simpleIdx) => { 21570 // in the first iteration we start with simpleIdx as the currently cheapest product 21571 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 21572 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 21573 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 21574 ? simpleIdx 21575 : cheapest; 21576 }, 0) 21577 }, 21578 findProductIdToUseForOptionPrice(option) { 21579 // try to find a product for a complete selection 21580 const attributeId = this.findAttributeByOptionId(option.id); 21581 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 21582 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 21583 // if there is no complete selection, use the cheapest product for the option 21584 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 21585 }, 21586 getAttributeOptionLabel(option) { 21587 const optionProduct = this.findProductIdToUseForOptionPrice(option); 21588 21589 if ((! optionProduct) || (optionProduct === this.productIndexForPrice)) { 21590 return option.label; 21591 } 21592 21593 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 21594 21595 if (this.optionConfig.optionPrices[optionProduct]) { 21596 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 21597 if (optionPrice !== currentPrice){ 21598 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 21599 } 21600 } 21601 return option.label; 21602 }, 21603 getOptionPriceAdjustmentBasePrice() { 21604 if (this.optionConfig.optionPrices[this.productIndexForPrice]) { 21605 return this.optionConfig.optionPrices[this.productIndexForPrice].finalPrice.amount 21606 } 21607 return this.optionConfig.prices.finalPrice.amount; // default price if no option selection 21608 }, 21609 clearOptionIfActive(optionId, value) { 21610 if (this.selectedValues[optionId] === value) { 21611 this.blurLabel() 21612 this.changeOption(optionId, '') 21613 } 21614 }, 21615 removeAttrFromSelection(selectedValues, attributeId) { 21616 attributeId = parseInt(attributeId); 21617 return selectedValues.reduce((newSelection, val, attr) => { 21618 if (attr !== attributeId) { 21619 newSelection[attr] = val; 21620 } 21621 return newSelection; 21622 }, []); 21623 }, 21624 changeOption(attributeId, value) { 21625 if (value === '') { 21626 this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) 21627 } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { 21628 this.selectedValues[attributeId] = value; 21629 } 21630 this.findSimpleIndex(); 21631 this.findAllowedAttributeOptions(); 21632 this.updatePrices(); 21633 this.updateGallery(); 21634 21635 const candidates = this.findProductIdsForPartialSelection(this.selectedValues); 21636 21637 window.dispatchEvent( 21638 new CustomEvent( 21639 'configurable-selection-changed', 21640 { 21641 detail: { 21642 productId: this.productId, 21643 optionId: attributeId, 21644 value: value, 21645 productIndex: this.productIndex, 21646 selectedValues: this.selectedValues, 21647 candidates: candidates, 21648 skuCandidates: Object.values(candidates).map(id =>
21648 this.optionConfig.sku?.[id] ?? null).filter(Boolean), 21649 } 21650 } 21651 ) 21652 ); 21653 }, 21654 calculateIsMinimalPrice() { 21655 return ! this.isFullSelection(this.selectedValues); 21656 }, 21657 isFullSelection(selectedValues) { 21658 return Object.values(selectedValues).length === Object.keys(this.optionConfig.attributes).length; 21659 }, 21660 updatePrices() { 21661 const value = this.optionConfig.optionPrices[this.productIndexForPrice] || this.optionConfig.prices; 21662 window.dispatchEvent( 21663 new CustomEvent( 21664 "update-prices-" + this.productId, 21665 { 21666 detail: Object.assign( 21667 value, 21668 { isMinimalPrice: this.calculateIsMinimalPrice() } 21669 ) 21670 } 21671 ) 21672 ); 21673 }, 21674 updateGallery () { 21675 if (this.productIndex) { 21676 const images = this.optionConfig.images[this.productIndex]; 21677 images && window.dispatchEvent(new CustomEvent( 21678 "update-gallery", 21679 { detail: this.sortImagesByPosition(images) } 21680 )); 21681 } else { 21682 window.dispatchEvent(new Event("reset-gallery")); 21683 } 21684 }, 21685 sortImagesByPosition(images) { 21686 return images.sort((x, y) => { 21687 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 21688 }); 21689 }, 21690 onGetCartData(data) { 21691 }, 21692 preselectCartItems(data) { 21693 // pre-select options based on cart data for current (quote) itemId 21694 const cart = data && data.cart; 21695 if (cart && cart.items) { 21696 const cartItem = cart.items.find((item) => { 21697 return ( 21698 item.item_id === this.itemId 21699 && item.product_id === this.productId 21700 ) 21701 }); 21702 if (cartItem && cartItem.options && cartItem.options.length) { 21703 cartItem.options.map(option => { 21704 this.changeOption(option.option_id, option.option_value); 21705 }) 21706 } 21707 } 21708 }, 21709 preselectQuerystringItems() { 21710 // pre-select option like ?size=167 21711 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 21712 this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); 21713 }, 21714 preselectLocationHashItems() { 21715 // pre-select option like #144=167 21716 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 21717 this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); 21718 }, 21719 preselectItemsBasedOnLocation(getLocationValue) { 21720 Object.values(this.optionConfig.attributes).map(attribute => { 21721 const v = getLocationValue(attribute); 21722 v && this.changeOption(attribute.id, v) 21723 }); 21724 } 21725 } 21726 } 21727</script>
21727 21728
21729<script> 21730 function initSwatchOptions(swatchConfig) { 21731 return { 21732 swatchConfig, 21733 getAttributeSwatchData(attributeId) { 21734 const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); 21735 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 21736 21737 return swatchConfig; 21738 }, 21739 mapSwatchTypeNumberToTypeCode(typeNumber) { 21740 switch ("" + typeNumber) { 21741 case "1": 21742 return "color" 21743 case "2": 21744 return "image" 21745 case "3": 21746 return "empty" 21747 case "0": 21748 default: 21749 return "text" 21750 } 21751 }, 21752 getTypeOfFirstOption(attributeId) { 21753 for (const optionId in this.swatchConfig[attributeId]) { 21754 const option = this.swatchConfig[attributeId][optionId]; 21755 if (typeof option.type !== 'undefined') { 21756 return this.mapSwatchTypeNumberToTypeCode(option.type); 21757 } 21758 } 21759 }, 21760 getVisualSwatchType(attributeId, targetOptionId) { 21761 // If a type configuration is present for the given option id, use it 21762 const config = this.swatchConfig[attributeId]; 21763 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 21764 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 21765 } 21766 21767 // Otherwise - if no config is present for the target option - use the type of the first option 21768 // with a type property from the attribute, thus assuming its the same type as the target option. 21769 // (This edge case condition can occur on single swatch products if some options are not salable) 21770 return this.getTypeOfFirstOption(attributeId); 21771 }, 21772 getSwatchType(attributeId, optionId) { 21773 // Deserialize the attribute details the first time they are used 21774 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 21775 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 21776 } 21777 const type = this.swatchConfig[attributeId] && 21778 this.swatchConfig[attributeId].details && 21779 this.swatchConfig[attributeId].details.swatch_input_type || 21780 "empty"; 21781 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 21782 }, 21783 isTextSwatch(attributeId, optionId) { 21784 return this.getSwatchType(attributeId, optionId) === 'text'; 21785 }, 21786 isVisualSwatch(attributeId, optionId) { 21787 const type = this.getSwatchType(attributeId, optionId); 21788 21789 return ['image', 'color'].includes(type); 21790 }, 21791 getSwatchBackgroundStyle(attributeId, optionId) { 21792 const config = this.getSwatchConfig(attributeId, optionId); 21793 const type = this.getSwatchType(attributeId, optionId); 21794 21795 if (type === "color") { 21796 return 'background-color:' + config.value; 21797 } else if (type === "image") { 21798 return "background: #fff url('" + config.value + "') no-repeat center"; 21799 } else { 21800 return ''; 21801 } 21802 }, 21803 getSwatchText(attributeId, optionId) { 21804 const config = this.getSwatchConfig(attributeId, optionId); 21805 return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); 21806 }, 21807 getOptionLabelFromOptionConfig(attributeId, optionId) { 21808 // Fallback if no value is present in swatchConfig data 21809 // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 21810 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); 21811 return option && option[0] && option[0].label ||''; 21812 }, 21813 getSwatchConfig(attributeId, optionId) { 21814 return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] 21815 ? this.swatchConfig[attributeId][optionId] 21816 : false;
21817 }, 21818 activeTooltipItem: false, 21819 tooltipPositionElement: false, 21820 isTooltipVisible() { 21821 return this.activeTooltipItem && 21822 this.getSwatchConfig( 21823 this.activeTooltipItem.attribute, 21824 this.activeTooltipItem.item 21825 ); 21826 }, 21827 isFirstItemCol() { 21828 return this.activeTooltipItem.index === 0; 21829 }, 21830 getTooltipImageStyle(attributeId, optionId) { 21831 const config = this.getSwatchConfig(attributeId, optionId); 21832 const type = this.getSwatchType(attributeId, optionId); 21833 21834 if (type === "color") { 21835 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 21836 } else if (type === "image") { 21837 return "background: #ffffff url('" + config.thumb + 21838 "') center center no-repeat; width: 110px; height: 90px;"; 21839 } else { 21840 return 'display:none'; 21841 } 21842 }, 21843 getTooltipPosition() { 21844 return this.tooltipPositionElement ? 21845 `top: ${this.tooltipPositionElement.offsetTop}px;` + 21846 `left: ${ 21847 this.tooltipPositionElement.offsetLeft - ( 21848 this.tooltipPositionElement.closest('.snap') && 21849 this.tooltipPositionElement.closest('.snap').scrollLeft || 21850 0 21851 ) 21852 }px;` : '' 21853 }, 21854 getTooltipLabel() { 21855 return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 21856 }, 21857 focusedLabel: false, 21858 focusLabel(optionId) { 21859 this.focusedLabel = optionId; 21860 }, 21861 blurLabel() { 21862 this.focusedLabel = false; 21863 }, 21864 showSwatches: false, 21865 initShowSwatchesIntersect() { 21866 if ('IntersectionObserver' in window && !window.scrollY) { 21867 let io = new IntersectionObserver( 21868 entries => { 21869 entries.map(entry => { 21870 if (entry.isIntersecting) { 21871 this.showSwatches = true; 21872 io.unobserve(this.$root); 21873 } 21874 }) 21875 } 21876 ); 21877 io.observe(this.$root); 21878 } else { 21879 this.showSwatches = true 21880 } 21881 } 21882 } 21883 } 21884</script>
vendor: 1 bytes, line 21884
21884
21885<script> 21886 'use strict'; 21887 21888 (function () { 21889 const modals = []; 21890 const excludedFromFocusTrapping = new Set(); 21891 21892 function trapFocusInNextModalWithOverlay() { 21893 for (let idx = modals.length -1; idx >= 0; idx--) { 21894 const nextOnStack = modals[idx]; 21895 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 21896 if (! isOverlayDisabled(nextDialogElement)) { 21897 hyva.trapFocus(nextDialogElement); 21898 break; 21899 } 21900 } 21901 } 21902 21903 function focusables(dialogElement) { 21904 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 21905 return Array.from(dialogElement.querySelectorAll(selector)) 21906 .filter(el => !el.hasAttribute('disabled')); 21907 } 21908 21909 function firstVisible(elements) { 21910 const a = Array.from(elements); 21911 for (let i = 0; i < a.length; i++) { 21912 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 21913 } 21914 return null; 21915 } 21916 21917 function isInViewport(element) { 21918 const rect = element && element.getBoundingClientRect(); 21919 return rect && 21920 rect.top >= 0 && 21921 rect.left >= 0 && 21922 rect.right <= window.innerWidth && 21923 rect.bottom <= window.innerHeight; 21924 } 21925 21926 function setFocusAfterTransition(dialogElement, duration) { 21927 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 21928 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 21929 next: for (let candidate of candidates) { 21930 for (let child of nested) { 21931 if (child.contains(candidate)) continue next; 21932 } 21933 setTimeout(() => candidate.focus(), 50); 21934 break; 21935 } 21936 window.setTimeout(() => { 21937 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 21938 focusables(dialogElement)[0] || 21939 null; 21940 focusElement && isInViewport(focusElement) && focusElement.focus(); 21941 }, Math.max(1, duration)); 21942 } 21943 21944 function determineTrigger($refs, dialog, trigger) { 21945 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 21946 return dialog.target; 21947 } 21948 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 21949 return trigger.target; 21950 } 21951 if (typeof trigger === 'string') { 21952 try { 21953 return $refs[trigger] || document.querySelector(trigger) 21954 } catch (e) {} 21955 } 21956 if (trigger instanceof Element) { 21957 return trigger; 21958 } 21959 21960 return null; 21961 } 21962 21963 function isOverlayDisabled(dialog) { 21964 return dialog && dialog.hasAttribute('x-no-overlay') 21965 } 21966 21967 function areRemainingModalsWithoutOverlay(modals) 21968 { 21969 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 21970 21971 return overflowDisabled.length === modals.length; 21972 } 21973 21974 window.hyva.modal = function(options = {}) { 21975 if (this.$el && this.$el.dataset && this.$el.dataset.options) { 21976 try { 21977 options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}')); 21978 } catch (e) { 21979 throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON'); 21980 } 21981 } 21982 21983 const config = Object.assign({ 21984 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 21985 transitionEnterStart: 'opacity-0', 21986 transitionEnterEnd: 'opacity-100', 21987 transitionLeave: 'transition ease-in duration-300', 21988 transitionLeaveStart: 'opacity-100', 21989 transitionLeaveEnd: 'opacity-0', 21990 }, options); 21991 let lastHide = 0; 21992 21993 return { 21994 opened: {}, 21995 show(dialog, trigger) { 21996 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 21997 const name = typeof dialog === 'string' ? dialog : config.dialog; 21998 const dialogElement = this.$refs[name]; 21999 if (! dialogElement) { 22000 return; 22001 } 22002 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 22003 22004 dialogElement.scrollTop = 0; 22005 22006 if (this.opened[name]) { 22007 return; 22008 } 22009 22010 if (focusTargetAfterHide) { 22011 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 22012 } 22013 22014 this.opened[name] = true; 22015 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 22016 setFocusAfterTransition(dialogElement, config.duration); 22017 22018 const frame = {name, instance: this, focusTarget: focu
22018sTargetAfterHide, time: Date.now()}; 22019 22020 modals.push(frame); 22021 if (useOverlay) { 22022 document.body.classList.add('overflow-hidden'); 22023 } 22024 return new Promise(resolve => frame.resolve = resolve); 22025 }, 22026 cancel() { 22027 this.hide(false); 22028 }, 22029 ok() { 22030 this.hide(true); 22031 }, 22032 hide(value) { 22033 if (Date.now() - lastHide < config.duration) { 22034 return; 22035 } 22036 lastHide = Date.now(); 22037 22038 const modal = modals.pop() || {}; 22039 if (! modal.instance) { 22040 return; 22041 } 22042 22043 const name = modal.name; 22044 this.opened[name] = false; 22045 hyva.releaseFocus(modal.instance.$refs[modal.name]) 22046 trapFocusInNextModalWithOverlay(); 22047 22048 const nextFocusAfterHide = modal.focusTarget; 22049 nextFocusAfterHide && setTimeout(() => { 22050 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 22051 nextFocusAfterHide.focus() 22052 }, config.duration); 22053 22054 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 22055 document.body.classList.remove('overflow-hidden'); 22056 } 22057 22058 modal.resolve(value); 22059 }, 22060 overlay(dialog) { 22061 dialog = this.$el.dataset.dialogRefName || dialog; 22062 const name = typeof dialog === 'string' ? dialog : config.dialog; 22063 return { 22064 ['x-show']() { 22065 return this.opened[name] 22066 }, 22067 ['x-transition:enter']: config.transitionEnter, 22068 ['x-transition:enter-start']: config.transitionEnterStart, 22069 ['x-transition:enter-end']: config.transitionEnterEnd, 22070 ['x-transition:leave']: config.transitionLeave, 22071 ['x-transition:leave-start']: config.transitionLeaveStart, 22072 ['x-transition:leave-end']: config.transitionLeaveEnd, 22073 ['@hyva-modal-show.window'](event) { 22074 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 22075 } 22076 }; 22077 }, 22078 showDialogOnInit() { 22079 const parent = this.$el.closest('[data-dialog-ref-name]'); 22080 if (parent && parent.dataset.dialogRefName) { 22081 this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName}) 22082 } 22083 } 22084 }; 22085 } 22086 22087 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 22088 22089 window.hyva.modal.pop = function () { 22090 if (modals.length > 0) { 22091 const modal = modals[modals.length -1]; 22092 modal.instance.hide(); 22093 } 22094 } 22095 22096 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 22097 typeof selectors === 'string' || selectors instanceof String 22098 ? excludedFromFocusTrapping.add(selectors) 22099 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 22100 } 22101 22102 window.hyva.modal.eventListeners = { 22103 keydown: event => { 22104 if (event.key === 'Escape') { 22105 window.hyva.modal.pop(); 22106 } 22107 }, 22108 click: event => { 22109 if (modals.length > 0) { 22110 const modal = modals[modals.length -1]; 22111 const dialog = modal.instance.$refs[modal.name]; 22112 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 22113 ! isOverlayDisabled(dialog) && // if dialog has overlay 22114 ! dialog.contains(event.target)) { // if click is outside of dialog 22115 modal.instance.hide(); 22116 } 22117 } 22118 } 22119 }; 22120 22121 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 22122 22123 document.addEventListener('click', window.hyva.modal.eventListeners.click); 22124 })(); 22125 window.addEventListener('alpine:init', () => { 22126 Alpine.data('hyvaModal', window.hyva.modal); 22127 }, {once: true}); 22128</script>
vendor: 1 bytes, line 22128
22128
22129<script> 22130 function initRating() { 22131 return { 22132 reviewsSection: document.getElementById('customer-review-list') 22133 || document.getElementById('customer-reviews') 22134 || document.getElementById('review-form'), 22135 scrollToRatingsClasses() { 22136 return { 22137 'cursor-pointer': this.reviewsSection 22138 } 22139 }, 22140 scrollToRatingsTabIndex() { 22141 return this.reviewsSection ? '0' : '-1'; 22142 }, 22143 scrollToRatingsAriaLabel() { 22144 return this.reviewsSection 22145 ? this.$el.dataset.ariaLabelReviewSection 22146 : this.$el.dataset.ariaLabelNoReviewSection 22147 22148 }, 22149 elementRole() { 22150 return this.reviewsSection ? 'button' : 'img'; 22151 }, 22152 scrollToRatings() { 22153 let scrollTimeout = null 22154 22155 if (!this.reviewsSection) { 22156 return 22157 } 22158 22159 addEventListener('scroll', () => { 22160 clearTimeout(scrollTimeout); 22161 22162 scrollTimeout = setTimeout(() => { 22163 if (this.reviewsSection) { 22164 this.reviewsSection.focus() 22165 } 22166 }, 50); 22167 }, { once: true }); 22168 22169 this.reviewsSection.scrollIntoView({behavior: 'smooth'}) 22170 } 22171 } 22172 } 22173 window.addEventListener('alpine:init', () => Alpine.data('initRating', initRating), {once: true}) 22174</script>
22174 22175
22176<script data-cfasync="false"> 22177 'use strict'; 22178 22179 /** 22180 * @typedef {Object} CookieGroupData 22181 * @prop {Boolean} checked 22182 * @prop {[{description: string, lifetime: number|null, name: string, provider: string, type: string}]} cookies 22183 * @prop {String} description 22184 * @prop {string|null} groupId 22185 * @prop {Boolean} isEssential 22186 * @prop {String} name 22187 */ 22188 22189 function initAmastyCookieGroupsStorage() { 22190 return { 22191 /** 22192 * @type {[CookieGroupData]} 22193 */ 22194 groupData: [], 22195 cookiePolicy: undefined, 22196 lastUpdate: undefined, 22197 22198 /** 22199 * @returns {string|number[]} 22200 */ 22201 getEssentialGroupIds: function () { 22202 return this.groupData.reduce(function (essentialGroupIds, group) { 22203 if (group.isEssential) { 22204 essentialGroupIds.push(group.groupId) 22205 } 22206 22207 return essentialGroupIds; 22208 }, []); 22209 }, 22210 22211 /** 22212 * @returns {string|number[]} 22213 */ 22214 getCheckedGroupIds: function () { 22215 return this.groupData.reduce(function (checkedGroupIds, group) { 22216 if (group.checked) { 22217 checkedGroupIds.push(group.groupId); 22218 } 22219 22220 return checkedGroupIds; 22221 }, []); 22222 }, 22223 22224 /** 22225 * @param {string} cookieName 22226 * @returns {boolean} 22227 */ 22228 isCookieEssential: function (cookieName) { 22229 const allEssentialCookies = this.getEssentialCookies(); 22230 22231 return !!allEssentialCookies.find(cookie => cookie.name === cookieName); 22232 }, 22233 22234 /** 22235 * @returns {array} 22236 */ 22237 getEssentialCookies: function () { 22238 return this.groupData 22239 .filter(group => group.isEssential) 22240 .map(group => group.cookies) 22241 .flat(); 22242 }, 22243 22244 /** 22245 * @returns {boolean} 22246 */ 22247 hasGroupData: function () { 22248 return !!this.groupData.length; 22249 }, 22250 22251 /** 22252 * @param {string} cookieName 22253 * @param {string} pattern 22254 * @returns {boolean} 22255 */ 22256 isEssentialByPattern: function (cookieName, pattern) { 22257 const essentialCookiePatterns = this.getEssentialCookiesPattern(pattern); 22258 22259 return essentialCookiePatterns.some((pattern) => !!cookieName.match(this.getCookiePattern(pattern))); 22260 }, 22261 22262 /** 22263 * @param {string} pattern 22264 * @return {Array} 22265 */ 22266 getEssentialCookiesPattern: function (pattern) { 22267 return this.getCookiesByPattern(pattern, this.getEssentialCookies()); 22268 }, 22269 22270 /** 22271 * @param {string} pattern 22272 * @param {Array|undefined} cookies 22273 * @return {Array} 22274 */ 22275 getCookiesByPattern: function (pattern, cookies) { 22276 if (typeof cookie === 'undefined') { 22277 cookies = this.getAllCookies(); 22278 } 22279 22280 return cookies
22281 .map((cookie) => typeof cookie === 'object' ? cookie.name : cookie.split('=')[0].trim()) 22282 .filter((cookie) => cookie.match(pattern) !== null); 22283 }, 22284 22285 /** 22286 * @returns {array} 22287 */ 22288 getDisallowedCookies: function () { 22289 const disallowedCookie = decodeURIComponent(hyva.getCookie('amcookie_disallowed') ?? ''); 22290 if (!disallowedCookie) { 22291 return []; 22292 } 22293 22294 return disallowedCookie.split(','); 22295 }, 22296 22297 /** 22298 * @returns {string} 22299 */ 22300 getCookiePattern: function (pattern) { 22301 return `^${pattern.replaceAll('*', '.*')}$`; 22302 }, 22303 22304 /** 22305 * @returns {array} 22306 */ 22307 getAllCookies: function () { 22308 return document.cookie.split(';'); 22309 }, 22310 22311 /** 22312 * @param {boolean} setAcceptance 22313 * @returns {Promise} 22314 */ 22315 updateGroupData: function (setAcceptance = false) { 22316 const cookieFetchUrl = `${BASE_URL}amcookie/cookie/cookies`; 22317 return fetch(cookieFetchUrl, { 22318 method: "POST", 22319 headers: { 22320 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 22321 'X-Requested-With': 'XMLHttpRequest' 22322 }, 22323 body: new URLSearchParams({ 22324 allowed: hyva.getCookie('amcookie_allowed'), 22325 restriction: hyva.getCookie('amcookie_policy_restriction') 22326 }) 22327 }).then(response => { 22328 if (response.ok) { 22329 return response.json(); 22330 } 22331 22332 return Promise.reject(`${response.status} ${response.statusText}`); 22333 }).then(data => { 22334 this.cookiePolicy = data.cookiePolicy ?? 'allowed'; 22335 this.lastUpdate = data.lastUpdate ?? 0; 22336 this.groupData = [...data.groupData]; 22337 22338 hyva.setCookie('amcookie_policy_restriction', this.cookiePolicy, 10); 22339 if (setAcceptance) { 22340 amastyCookieManager.setLastCookieAcceptance(this.lastUpdate); 22341 } 22342 22343 return data; 22344 }).catch(error => { 22345 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 22346 { 22347 type: "error", 22348 text: error 22349 } 22350 ]); 22351 }).finally(() => window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated'))); 22352 } 22353 } 22354 } 22355 22356 window.addEventListener( 22357 'alpine:init', 22358 () => Alpine.store('AmastyCookieGroups', initAmastyCookieGroupsStorage()), 22359 { once: true } 22360 ); 22361</script>
22361 22362
22363<script data-cfasync="false"> 22364 (function (amastyCookieManager) { 22365 'use strict'; 22366 22367 amastyCookieManager.pattern = '{(?<cookiePattern>.*)}'; 22368 22369 amastyCookieManager.getAmastyCookieGroupStorage = function () { 22370 return Alpine.store('AmastyCookieGroups') ?? {}; 22371 }; 22372 22373 amastyCookieManager.deleteDisallowedCookie = function () { 22374 const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); 22375 const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; 22376 22377 disallowedCookies.forEach((name) => { 22378 const pattern = name.match(this.pattern); 22379 if (!!pattern && !!amastyCookieGroupStorage) { 22380 const cookiePattern = amastyCookieGroupStorage.getCookiePattern(pattern.groups.cookiePattern) ?? ''; 22381 22382 amastyCookieGroupStorage.getCookiesByPattern(cookiePattern).forEach((cookieName) => { 22383 this.deleteNotEssentialCookie(cookieName); 22384 }); 22385 } else { 22386 this.deleteNotEssentialCookie(name); 22387 } 22388 }); 22389 }; 22390 22391 amastyCookieManager.isCookieAllowed = function (cookieName) { 22392 const allowedGroups = hyva.getCookie('amcookie_allowed'); 22393 const disallowedCookie = this.getAmastyCookieGroupStorage()?.getDisallowedCookies() ?? []; 22394 const isCookiePolicyAllowed = hyva.getCookie('amcookie_policy_restriction') === 'allowed'; 22395 const isCookieEssential = this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName); 22396 const isCookieEssentialByPattern = this.getAmastyCookieGroupStorage()?.isEssentialByPattern(cookieName, this.pattern); 22397 22398 if (!isCookiePolicyAllowed || isCookieEssential || isCookieEssentialByPattern) { 22399 return true; 22400 } 22401 22402 return !((!allowedGroups && !disallowedCookie) || this.isCookieDisallowed(cookieName)); 22403 }; 22404 22405 amastyCookieManager.isCookieDisallowed = function (cookieName) { 22406 const amastyCookieGroupStorage = this.getAmastyCookieGroupStorage(); 22407 const disallowedCookies = amastyCookieGroupStorage?.getDisallowedCookies() ?? []; 22408 22409 return disallowedCookies.some((cookie) => { 22410 const pattern = cookie.match(this.pattern); 22411 22412 return !!pattern && !!cookieName.match(amastyCookieGroupStorage?.getCookiePattern(pattern.groups.cookiePattern)); 22413 }) || disallowedCookies.indexOf(cookieName) !== -1; 22414 }; 22415 22416 amastyCookieManager.processManageableCookies = function () { 22417 let cookieScripts = document.querySelectorAll('script[data-amcookie-groupid][type="text/plain"]'); 22418 22419 cookieScripts.forEach((elem) => { 22420 if (this.isChecked(elem.dataset['amcookie-groupid'])) { 22421 let elClone = elem.cloneNode(true).setAttribute('type', 'text/javascript'); 22422 22423 elem.remove(); 22424 document.body.appendChild(elClone); 22425 } 22426 }); 22427 }; 22428 22429 amastyCookieManager.deleteNotEssentialCookie = function (cookieName) { 22430 if (!this.getAmastyCookieGroupStorage()?.isCookieEssential(cookieName)) { 22431 hyva.setCookie(cookieName, '', -1, true); 22432 } 22433 }; 22434 22435 amastyCookieManager.setLastCookieAcceptance = function (lastUpdate) { 22436 localStorage.setItem('am-last-cookie-acceptance', lastUpdate); 22437 }; 22438 22439 window.addEventListener('amasty-cookie-group-updated', () => { 22440 amastyCookieManager.deleteDisallowedCookie(); 22441 }); 22442 22443 window.addEventListener('private-content-loaded', () => { 22444 amastyCookieManager.getAmastyCookieGroupStorage()?.hasGroupData() && amastyCookieManager.deleteDisallowedCookie(); 22445 }); 22446 }(window.amastyCookieManager = window.amastyCookieManager || {})); 22447</script>
22447 22448
22449<script data-cfasync="false"> 22450 (function () { 22451 'use strict'; 22452 22453 window.addEventListener('cookiebar-action-accept', (event) => { 22454 const groups = event.detail?.include_checked_groups ? Alpine.store('AmastyCookieGroups').getCheckedGroupIds() : []; 22455 const url = `${BASE_URL}amcookie/cookie/savegroups`; 22456 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 22457 const body = new URLSearchParams({ 22458 form_key: hyva.getFormKey() 22459 }); 22460 groups.length && groups.map(groupId => body.append('groups[]', groupId)); 22461 22462 fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) 22463 .then(response => { 22464 if (response.ok) { 22465 return response.json(); 22466 } 22467 22468 return Promise.reject(`${response.status} ${response.statusText}`); 22469 }) 22470 .then(data => { 22471 !!data.success && Alpine.store('AmastyCookieGroups').updateGroupData(true); 22472 }) 22473 .catch(error => { 22474 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 22475 { 22476 type: "error", 22477 text: error 22478 } 22479 ]); 22480 }) 22481 .finally(() => { 22482 amastyCookieManager.processManageableCookies(); 22483 window.dispatchEvent(new CustomEvent('cookiebar-action-accept-finish')); 22484 window.dispatchEvent(new CustomEvent('amasty-cookie-group-updated')); 22485 // Wait cookiebar close animation 22486 setTimeout(() => { 22487 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 22488 }, 100); 22489 }); 22490 }); 22491 })(); 22492</script>
22492 22493
22494<script data-cfasync="false"> 22495 (function () { 22496 'use strict'; 22497 22498 window.addEventListener('cookiebar-action-allow', () => { 22499 const url = `${BASE_URL}amcookie/cookie/allow`; 22500 const contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; 22501 const body = new URLSearchParams({ 22502 form_key: hyva.getFormKey() 22503 }); 22504 fetch(url, {method: 'POST', body, headers: {'Content-Type': contentType}}) 22505 .then(response => { 22506 if (response.ok) { 22507 return response; 22508 } 22509 22510 return Promise.reject(`${response.status} ${response.statusText}`); 22511 }) 22512 .then(() => { 22513 Alpine.store('AmastyCookieGroups').updateGroupData(true); 22514 }) 22515 .catch(error => { 22516 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 22517 { 22518 type: "error", 22519 text: error 22520 } 22521 ]); 22522 }) 22523 .finally(() => { 22524 amastyCookieManager.processManageableCookies(); 22525 window.dispatchEvent(new CustomEvent('cookiebar-action-allow-finish')); 22526 // Wait cookiebar close animation 22527 setTimeout(() => { 22528 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 22529 }, 100); 22530 }); 22531 }); 22532 })(); 22533</script>
22533 22534
22535<script data-cfasync="false"> 22536 (function () { 22537 'use strict'; 22538 22539 window.addEventListener('cookiebar-action-settings', () => { 22540 window.dispatchEvent(new Event('open-am-cookie-bar-settings')); 22541 }); 22542 })(); 22543</script>
22543 22544 22545<style> 22546 :root { 22547 /* Bar Color Settings */ 22548 --ambar-background: #fff; 22549 --ambar-links-color: #326ed1; 22550 --ambar-policy-text: #374151; 22551 --ambar-toggle-active-color: #2563eb; 22552 --ambar-toggle-inactive-color: #fff; 22553 22554 /* Buttons Color Settings */ 22555 --ambar-button-accept-color: #337ab7; 22556 --ambar-button-accept-hover-color: #337ab7; 22557 --ambar-button-accept-text: #fff; 22558 --ambar-button-accept-hover-text: #fff; 22559 22560 --ambar-button-allow-color: #337ab7; 22561 --ambar-button-allow-hover-color: #337ab7; 22562 --ambar-button-allow-text: #fff; 22563 --ambar-button-allow-hover-text: #fff; 22564 22565 --ambar-button-decline-color: #337ab7; 22566 --ambar-button-decline-hover-color: #337ab7; 22567 --ambar-button-decline-text: #fff; 22568 --ambar-button-decline-hover-text: #fff; 22569 22570 --ambar-button-settings-color: #337ab7; 22571 --ambar-button-settings-hover-color: #337ab7; 22572 --ambar-button-settings-text: #fff; 22573 --ambar-button-settings-hover-text: #fff; 22574 22575 /* Buttons Order Settings */ 22576 --ambar-button-accept-order: 0; 22577 --ambar-button-allow-order: 0; 22578 --ambar-button-settings-order: 0; 22579 --ambar-button-decline-order: 0; 22580 22581 /* Cookie Information Bar Color Settings */ 22582 --ambar-information-background: #fff; 22583 --ambar-information-title: #374151; 22584 --ambar-information-description: #374151; 22585 --ambar-information-table-header: #374151; 22586 --ambar-information-table-content: #374151; 22587 22588 /* Cookie Information Bar Done Button Settings */ 22589 --ambar-information-button-color: #1d4ed8; 22590 --ambar-information-button-hover-color: #1d4ed8; 22591 --ambar-information-button-text: #fff; 22592 --ambar-information-button-hover-text: #fff; 22593 22594 /* Settings Bar Done Button Settings */ 22595 --ambar-setting-button-color: #1d4ed8; 22596 --ambar-setting-button-hover-color: #1d4ed8; 22597 --ambar-setting-button-text: #fff; 22598 --ambar-setting-button-hover-text: #fff; 22599 } 22600</style> 22601
22602<script data-cfasync="false"> 22603 'use strict'; 22604 22605 function initAmCookieActionDispatcherBtn() { 22606 return { 22607 actiondispatchHandler: function (event) { 22608 const { dispatchAction, dispatchPayload } = event.currentTarget.dataset; 22609 this.$dispatch(dispatchAction, this.parsePayload(dispatchPayload)); 22610 }, 22611 parsePayload: function (payload) { 22612 try { 22613 return JSON.parse(payload); 22614 } catch (e) { 22615 return null; 22616 } 22617 } 22618 }; 22619 } 22620 22621 window.addEventListener( 22622 'alpine:init', 22623 () => Alpine.data('initAmCookieActionDispatcherBtn', initAmCookieActionDispatcherBtn), 22624 { once: true } 22625 ); 22626</script>
22626 22627
22628<script data-cfasync="false"> 22629 'use strict'; 22630 22631 function initAmCookieGroups() { 22632 return { 22633 /** 22634 * @withContext x-for: $store.AmastyCookieGroups.groupData 22635 * @returns {string} 22636 */ 22637 getInputGroupId: function () { 22638 return `amcookie-${this.$el.dataset.groupPrefix}group-${this.group.groupId}` 22639 }, 22640 22641 /** 22642 * @withContext x-for: $store.AmastyCookieGroups.groupData 22643 * @returns {{"!bg-gray-400": boolean}} 22644 */ 22645 getInputStyles: function () { 22646 return { 22647 '!bg-gray-400': this.group.isEssential 22648 } 22649 }, 22650 22651 /** 22652 * @withContext x-for: $store.AmastyCookieGroups.groupData 22653 * @returns {void} 22654 */ 22655 toggleGroup: function () { 22656 this.group.checked = !this.group.checked; 22657 }, 22658 22659 /** 22660 * @withContext x-for: $store.AmastyCookieGroups.groupData 22661 * @returns {void} 22662 */ 22663 moreInfoClickHandler: function () { 22664 this.$dispatch(this.$el.dataset.dispatchAction, this.group); 22665 }, 22666 22667 moreInformationAboutCookieGroup: function () { 22668 return hyva.str('About\u0020\u0022\u00251\u0022\u0020Cookie\u0020Group', this.group.name); 22669 } 22670 } 22671 } 22672 22673 window.addEventListener( 22674 'alpine:init', 22675 () => Alpine.data('initAmCookieGroups', initAmCookieGroups), 22676 {once: true} 22677 ); 22678</script>
22678 22679 22680<section x-data="initAmGdprLoader" 22681 @amgdpr-loading-start.window="showLoader" 22682 @amgdpr-loading-stop.window="hideLoader" 22683> 22684 <div 22685 class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-slate-800" 22686 x-cloak 22687 x-show="isLoading" 22688 x-transition.opacity.duration.200ms 22689> 22690 <div class="flex gap-10 items-center p-4"> 22691 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 22692 <style> 22693 @keyframes spinner-ball-triangle1 { 22694 0% { transform: translate(0%, 0%); } 22695 33% { transform: translate(38%, -79%); } 22696 66% { transform: translate(77%, 0%); } 22697 100% { transform: translate(0%, 0%); } 22698 } 22699 22700 @keyframes spinner-ball-triangle2 { 22701 0% { transform: translate(0%, 0%); } 22702 33% { transform: translate(38%, 79%); } 22703 66% { transform: translate(-38%, 79%); } 22704 100% { transform: translate(0%, 0%); } 22705 } 22706 22707 @keyframes spinner-ball-triangle3 { 22708 0% { transform: translate(0%, 0%); } 22709 33% { transform: translate(-77%, 0%); } 22710 66% { transform: translate(-38%, -79%); } 22711 100% { transform: translate(0%, 0%); } 22712 } 22713 </style> 22714 <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/> 22715 <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/> 22716 <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/> 22717</svg> 22718 <span class="text-xl select-none"> 22719 ÅadujÄ... </span> 22720 </div> 22721</div> 22722</section> 22723
22724<script data-cfasync="false"> 22725 'use strict'; 22726 22727 function initAmGdprLoader() { 22728 return { 22729 isLoading: false, 22730 22731 /** 22732 * @returns {void} 22733 */ 22734 showLoader: function () { 22735 this.isLoading = true; 22736 }, 22737 22738 /** 22739 * @returns {void} 22740 */ 22741 hideLoader: function () { 22742 this.isLoading = false; 22743 } 22744 } 22745 } 22746 22747 window.addEventListener( 22748 'alpine:init', 22749 () => Alpine.data('initAmGdprLoader', initAmGdprLoader), 22750 { once: true } 22751 ); 22752</script>
22752 22753
22754<script> 22755 'use strict'; 22756 (() => { 22757 function _calculateStrength({elementID, valid}) { 22758 const password = document.getElementById(elementID), 22759 emailElm = document.getElementById('email_address'); 22760 let displayScore; 22761 // Display score is based on combination of whether password is empty, valid, and zxcvbn strength 22762 if (!password || !password.value) { 22763 displayScore = 0; 22764 } else { 22765 // We should only perform this check in case there is an email field on screen 22766 if (emailElm && password.value && emailElm.value && 22767 password.value.toLowerCase() === emailElm.value.toLowerCase()) { 22768 displayScore = 1; 22769 } else { 22770 const zxcvbnScore = zxcvbn(password.value).score; 22771 displayScore = valid && zxcvbnScore > 0 ? zxcvbnScore : 1; 22772 } 22773 } 22774 22775 _displayStrength(displayScore); 22776 } 22777 22778 function _displayStrength(displayScore) { 22779 let strengthLabel = '', 22780 className; 22781 22782 switch (displayScore) { 22783 case 0: 22784 strengthLabel = "Bez\u0020has\u0142a"; 22785 className = 'password-none'; 22786 break; 22787 22788 case 1: 22789 strengthLabel = "S\u0142aby"; 22790 className = 'password-weak'; 22791 break; 22792 22793 case 2: 22794 strengthLabel = "\u015Aredni"; 22795 className = 'password-medium'; 22796 break; 22797 22798 case 3: 22799 strengthLabel = "Silny"; 22800 className = 'password-strong'; 22801 break; 22802 22803 case 4: 22804 strengthLabel = "Bardzo\u0020silne"; 22805 className = 'password-very-strong'; 22806 break; 22807 } 22808 const meterElm = document.getElementById('password-strength-meter-container'), 22809 meterLabelElm = document.getElementById('password-strength-meter-label'); 22810 meterElm.className = ''; 22811 meterElm.classList.add(className); 22812 meterLabelElm.textContent = strengthLabel; 22813 } 22814 22815 let loading = false; 22816 const callbacks = []; 22817 22818 function loadZxcvbn(cb) { 22819 callbacks.push(cb); 22820 if (loading) return; 22821 loading = true; 22822 22823 const script = document.createElement('script'); 22824 script.type = 'text/javascript'; 22825 script.src = 'https\u003A\u002F\u002Fstatic.fera.pl\u002Fversion1790219430\u002Ffrontend\u002FTooks\u002Fdefault\u002Fpl_PL\u002Fjs\u002Fzxcvbn.js'; 22826 script.async = true; 22827 script.onload = () => callbacks.forEach(cb => cb()); 22828 document.head.appendChild(script); 22829 } 22830 22831 window.addEventListener('password-validate', function (evt) { 22832 const meterElm = document.getElementById('password-strength-meter-container'), 22833 meterLabelElm = document.getElementById('password-strength-meter-label'); 22834 if (meterElm && meterLabelElm) { 22835 if (evt.detail && evt.detail.elementID) { 22836 const cb = () => _calculateStrength(evt.detail); 22837 window.zxcvbn ? cb() : loadZxcvbn(cb) 22838 } 22839 } 22840 }); 22841 22842 22843 document.addEventListener('DOMContentLoaded', () => { 22844 hyva && hyva.formValidation && hyva.formValidation.addRule('password-strength', function(value, options, field, context) { 22845 let counter = 0; 22846 const minCharacterSets = options.minCharacterSets !== undefined ? options.minCharacterSets : 1; 22847 if (value.match(/\d+/)) { 22848 counter++; 22849 } 22850 22851 if (value.match(/[a-z]+/)) { 22852 counter++; 22853 } 22854 22855 if (value.match(/[A-Z]+/)) { 22856 counter++; 22857 } 22858 22859 if (value.match(/[^a-zA-Z0-9]+/)) { 22860 counter++; 22861 } 22862 22863 queueMicrotask(() => { 22864 window.dispatchEvent(new CustomEvent('password-validate', { detail: {
22865 elementID: field.element.id || 'password', 22866 valid: field.state.valid 22867 }})); 22868 }); 22869 22870 if (counter < minCharacterSets) { 22871 const missing = minCharacterSets - counter; 22872 return hyva.str('Has\u0142o\u0020musi\u0020zawiera\u0107\u0020co\u0020najmniej\u0020\u00251\u0020lub\u0020wi\u0119cej\u0020z\u003A\u0020wielkich\u0020liter\u0020\u0028A\u002DZ\u0029,\u0020ma\u0142ych\u0020liter\u0020\u0028a\u002Dz\u0029,\u0020cyfr\u0020i\u0020symboli.', missing); 22873 } 22874 return true; 22875 }); 22876 }) 22877 })(); 22878 22879</script>
22879 22880
22881<script> 22882 'use strict'; 22883 22884 (() => { 22885 const browserStorage = hyva.getBrowserStorage(); 22886 const storageKey = 'mage-banners-cache-storage'; 22887 const cacheTimeoutKey = 'mage-banners-cache-timeout'; 22888 const storeIdKey = 'mage-banners-storeId'; 22889 const cartIdKey = 'mage-banners-cartDataId'; 22890 const options = { 22891 cacheTtl: 30000, 22892 sectionLoadUrl: 'https://fera.pl/banner/ajax/load/' 22893 }; 22894 22895 if (browserStorage && browserStorage.getItem(storageKey) === null) { 22896 browserStorage.setItem(storageKey, "{}"); 22897 } 22898 22899 async function initBanners(elements) { 22900 invalidateCacheBySessionTimeOut(); 22901 22902 const storageData = JSON.parse(browserStorage.getItem(storageKey)); 22903 let items = []; 22904 22905 if (storageData.data) { 22906 items = getFromStorage(); 22907 } else { 22908 items = await getFromServer(); 22909 } 22910 22911 populateDynamicBlocks(elements, items); 22912 } 22913 22914 // Cache invalidation. Banner cache ttl is 30 sec by default.
22915 function invalidateCacheBySessionTimeOut() { 22916 const cacheEol = new Date(browserStorage.getItem(cacheTimeoutKey)) 22917 const dateTo = new Date(Date.now() + options.cacheTtl); 22918 const globalStoreId = hyva.getCookie('store') || 'default'; 22919 const mageCacheStorage = JSON.parse(browserStorage.getItem('mage-cache-storage')); 22920 let cartDataId = null; 22921 22922 if (browserStorage.getItem(storeIdKey) === null) { 22923 browserStorage.setItem(storeIdKey, globalStoreId); 22924 } 22925 22926 if (mageCacheStorage !== null && 22927 mageCacheStorage.hasOwnProperty('cart')) { 22928 cartDataId = mageCacheStorage.cart['data_id']; 22929 } 22930 22931 if (cacheEol < new Date() || 22932 browserStorage.getItem(storeIdKey) !== globalStoreId || 22933 Number(browserStorage.getItem(cartIdKey)) !== cartDataId) 22934 { 22935 browserStorage.setItem(storageKey, "{}"); 22936 browserStorage.setItem(cacheTimeoutKey, dateTo); 22937 browserStorage.setItem(storeIdKey, globalStoreId); 22938 22939 if (cartDataId) { 22940 browserStorage.setItem(cartIdKey, cartDataId); 22941 } 22942 } 22943 } 22944 22945 async function getFromServer() { 22946 try { 22947 const url = new URL(options.sectionLoadUrl); 22948 url.searchParams.append('requesting_page_url', url.origin); 22949 url.searchParams.append('_', Date.now()); 22950 22951 const response = await fetch(url.href, { 22952 headers: { 22953 'Content-Type': 'application/json', 22954 'X-Requested-With': 'XMLHttpRequest' 22955 } 22956 }); 22957 const storageData = await response.json(); 22958 22959 browserStorage.setItem(storageKey, JSON.stringify(storageData)); 22960 22961 if (storageData.data && storageData.data.items) { 22962 return storageData.data.items.fixed ? storageData.data.items.fixed : []; 22963 } 22964 } catch (error) { 22965 console.warn(error); 22966 22967 return []; 22968 } 22969 } 22970 22971 function getFromStorage() { 22972 const storageData = JSON.parse(browserStorage.getItem(storageKey)); 22973 if (storageData.data && storageData.data.items) { 22974 return storageData.data.items.fixed || []; 22975 } 22976 } 22977 22978 function populateDynamicBlocks(elements, items) { 22979 if (!items || items.length === 0) { 22980 console.log(`No\u0020banners\u0020found`); 22981 22982 return; 22983 } 22984 22985 for (const element of elements) { 22986 // Filter IDs by those allowed for current customer segment 22987 const ids = element.getAttribute('data-ids').split(',').filter((id) => items.hasOwnProperty(id)); 22988 const config = { 22989 type: element.getAttribute('data-rotate'), 22990 dynamicBlockId: element.getAttribute('data-banner-id'), 22991 }; 22992 22993 getByType(config, element, items, ids); 22994 } 22995 } 22996 22997 function getByType(config = null, element, items, ids) { 22998 if (!config) return; 22999 23000 if (config.type === 'random') { 23001 ids = [ids[Math.floor(Math.random() * ids.length)]]; 23002 } 23003 23004 if (config.type === 'series' || config.type === 'shuffle') { 23005 ids = [getNextInOrder(config, ids)]; 23006 } 23007 23008 for (const id of ids) { 23009 if (items[id]) { 23010 element.insertAdjacentHTML('beforeend', items[id].content); 23011 } 23012 } 23013 } 23014 23015 function getNextInOrder(config, ids) { 23016 const dynamicBlockId = config.dynamicBlockId; 23017 const localStorageKey = 'dynamic-block-banner-rotator'; 23018 let localStorageData = JSON.parse(localStorage.getItem(localStorageKey)) || {}; 23019 let nextId; 23020 23021 if (localStorageData[dynamicBlockId] && localStorageData[dynamicBlockId].length > 0) { 23022 nextId = localStorageData[dynamicBlockId].shift(0); 23023 } else { 23024 if (config.type === 'shuffle') { 23025 ids.sort(() => Math.random() - 0.5); 23026 } 23027 nextId = ids.shift(0); 23028 localStorageData[dynamicBlockId] = ids; 23029 } 23030 23031 localStorage.setItem( 23032 localStorageKey, 23033 JSON.stringify(localStorageData) 23034 ); 23035 23036 return nextId; 23037 } 23038 23039 const elements = document.querySelectorAll('[data-banner-id][data-ids]'); 23040 if (elements.length > 0) { 23041 initBanners(elements); 23042 } 23043 })(); 23044</script>
vendor: 1 bytes, line 23044
23044
23045<script type="text/javascript"> window.amClarityConsentManager = window.amClarityConsentManager || { 23046 microsoftPixels: [], 23047 consentStates: { 23048 denied: 'denied', 23049 granted: 'granted' 23050 }, 23051 storageName: 'amClarityConsentMode', 23052 gdprCookie: { 23053 cookieGroupName: 'amcookie_allowed', 23054 allCookiesAllowed: '0' 23055 }, 23056 defaultConsentTypesData: {"analytics_Storage":{"default":"0","group":"4"},"ad_Storage":{"default":"0","group":"2"}}, 23057 currentStoreId: 1, 23058 init: function () { 23059 this.initStorage(); 23060 this.setDefaultConsent(); 23061 }, 23062 initStorage: function () { 23063 const persistedConsentTypes = this.getPersistedConsentTypeState(); 23064 23065 if (Object.keys(persistedConsentTypes).length !== 0 && !this.shouldResetConsentState(persistedConsentTypes)) { 23066 return; 23067 } 23068 23069 let consentState = {}; 23070 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 23071 consentState[type] = { 23072 group: data.group, 23073 status: data.default === '1' ? this.consentStates.granted : this.consentStates.denied 23074 }; 23075 } 23076 23077 this.resetAllowedCookiesGroups(); 23078 this.persistConsentTypeState(consentState); 23079 }, 23080 setDefaultConsent: function () { 23081 !!window.clarity && window.clarity('consentv2', this.getPersistedConsentTypeStateForClarity()); 23082 }, 23083 updateConsent: function (consent) { 23084 const storageConsent = this.getPersistedConsentTypeState(); 23085 const consentState = {...storageConsent, ...consent}; 23086 23087 this.persistConsentTypeState(consentState); 23088 !!window.clarity && window.clarity('consentv2', this.getPersistedConsentTypeStateForClarity()); 23089 }, 23090 getConsentTypeStateByGroupIds: function (groups) { 23091 let consentTypeState = {}; 23092 23093 for (const [type, data] of Object.entries(this.defaultConsentTypesData)) { 23094 consentTypeState[type] = { 23095 group: data.group, 23096 status: (groups.includes(data.group) || groups.includes(this.gdprCookie.allCookiesAllowed)) 23097 ? this.consentStates.granted 23098 : this.consentStates.denied 23099 } 23100 } 23101 23102 return consentTypeState; 23103 }, 23104 persistConsentTypeState: function (consentTypeState) { 23105 let persistedState = this.getPersistedConsentTypeState(false); 23106 persistedState[this.currentStoreId] = consentTypeState; 23107 localStorage.setItem(this.storageName, JSON.stringify(persistedState)); 23108 }, 23109 getPersistedConsentTypeState: function (forCurrentStore = true) { 23110 let persistedStates = JSON.parse(localStorage.getItem(this.storageName)) ?? {}; 23111 23112 if (forCurrentStore) { 23113 return persistedStates?.[this.currentStoreId] ?? {}; 23114 } 23115 23116 return persistedStates; 23117 }, 23118 getPersistedConsentTypeStateForClarity: function () { 23119 let consentTypeState = {}; 23120 let persistedState = this.getPersistedConsentTypeState(); 23121 23122 for (const [type, data] of Object.entries(persistedState)) { 23123 consentTypeState[type] = data.status; 23124 } 23125 23126 return consentTypeState; 23127 }, 23128 shouldResetConsentState: function (persistedConsentTypes) { 23129 if (Object.keys(persistedConsentTypes).length != Object.keys(this.defaultConsentTypesData).length 23130 || !document.cookie.includes(this.gdprCookie.cookieGroupName) 23131 ) { 23132 return true; 23133 } 23134 23135 for (const [type, data] of Object.entries(persistedConsentTypes)) { 23136 if (data.group !== this.defaultConsentTypesData[type].group) { 23137 return true; 23138 } 23139 } 23140 23141 return false; 23142 }, 23143 resetAllowedCookiesGroups: function () { 23144 document.cookie = this.gdprCookie.cookieGroupName + '=0;max-age=-1;domain=' + location.hostname; 23145 !!window.clarity && window.clarity('consent', false); 23146 } 23147 }; 23148 23149 window.amClarityConsentManager.init();</script>
23149<script type="text/json" id="default-section-data"> 23150 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"PL":{"name":"Polska","regions":{"1018":{"code":"PL-02","name":"dolno\u015bl\u0105skie"},"1019":{"code":"PL-04","name":"kujawsko-pomorskie"},"1020":{"code":"PL-06","name":"lubelskie"},"1021":{"code":"PL-08","name":"lubuskie"},"1024":{"code":"PL-14","name":"mazowieckie"},"1023":{"code":"PL-12","name":"ma\u0142opolskie"},"1025":{"code":"PL-16","name":"opolskie"},"1026":{"code":"PL-18","name":"podkarpackie"},"1027":{"code":"PL-20","name":"podlaskie"},"1028":{"code":"PL-22","name":"pomorskie"},"1029":{"code":"PL-24","name":"\u015bl\u0105skie"},"1030":{"code":"PL-26","name":"\u015bwi\u0119tokrzyskie"},"1031":{"code":"PL-28","name":"warmi\u0144sko-mazurskie"},"1032":{"code":"PL-30","name":"wielkopolskie"},"1033":{"code":"PL-32","name":"zachodniopomorskie"},"1022":{"code":"PL-10","name":"\u0142\u00f3dzkie"}}},"data_id":1790244742},"captcha":[],"wishlist":{"items":[]},"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"company":[],"company_authorization":[],"customer-companies":[],"persistent":[],"review":[],"negotiable_quote":[],"payments":[],"faq":[],"amga4_event_pool":[],"amga4_hyva_event_pool":[],"hyva_checkout":[],"ammessages":[],"cepdtech_gtm":[],"reward":[],"hyva_enterprise":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[]}</script>
23150 23151<svg xmlns="http://www.w3.org/2000/svg" class="hidden" aria-hidden="true" width="0" height="0" style="position:absolute"> 23152 <defs> 23153 <symbol id="tk-icon-star-solid" viewBox="0 0 20 20" fill="currentColor"> 23154 <path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/> 23155</symbol> <symbol id="tk-icon-shopping-cart-solid" viewBox="0 0 20 20" fill="currentColor"> 23156 <path d="M3 1a1 1 0 000 2h1.22l.305 1.222a.997.997 0 00.01.042l1.358 5.43-.893.892C3.74 11.846 4.632 14 6.414 14H15a1 1 0 000-2H6.414l1-1H14a1 1 0 00.894-.553l3-6A1 1 0 0017 3H6.28l-.31-1.243A1 1 0 005 1H3zM16 16.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM6.5 18a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"/> 23157</symbol> <symbol id="tk-icon-plus-solid" viewBox="0 0 20 20" fill="currentColor"> 23158 <path fill-rule="evenodd" d="M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z" clip-rule="evenodd"/> 23159</symbol> <symbol id="tk-icon-minus-solid" viewBox="0 0 20 20" fill="currentColor"> 23160 <path fill-rule="evenodd" d="M3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z" clip-rule="evenodd"/> 23161</symbol> <symbol id="tk-icon-trash-outline" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 23162 <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/> 23163</symbol> <symbol id="tk-icon-heart-outline" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 23164 <path stroke-linecap="round" stroke-linejoin="round" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"/> 23165</symbol> <symbol id="tk-icon-heart-solid" viewBox="0 0 20 20" fill="currentColor"> 23166 <path fill-rule="evenodd" d="M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z" clip-rule="evenodd"/> 23167</symbol> <symbol id="tk-icon-chevron-right-solid" viewBox="0 0 20 20" fill="currentColor"> 23168 <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/> 23169</symbol> <symbol id="tk-icon-chevron-left-solid" viewBox="0 0 20 20" fill="currentColor"> 23170 <path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd"/> 23171</symbol> </defs> 23172</svg> 23173<div x-data="amMessage" x-bind="eventListeners"></div> 23174
23175<script> 23176 function amMessage() { 23177 let lastProcessedDataId = null; 23178 const processedMessageHashes = new Set(); 23179 let debounceTimer; 23180 23181 return { 23182 init() { 23183 this.processStoredMessages(); 23184 23185 window.addEventListener('beforeunload', () => { 23186 processedMessageHashes.clear(); 23187 lastProcessedDataId = null; 23188 }); 23189 }, 23190 23191 eventListeners: { 23192 ['@private-content-loaded.window'](event) { 23193 const { ammessages } = event.detail.data; 23194 23195 clearTimeout(debounceTimer); 23196 debounceTimer = setTimeout(() => { 23197 if (ammessages?.data_id && ammessages.data_id === lastProcessedDataId) { 23198 return; 23199 } 23200 23201 lastProcessedDataId = ammessages?.data_id; 23202 23203 // Checking hash message 23204 if (ammessages?.messages) { 23205 const messageHash = JSON.stringify(ammessages.messages); 23206 if (processedMessageHashes.has(messageHash)) { 23207 return; 23208 } 23209 processedMessageHashes.add(messageHash); 23210 } 23211 23212 const isCartPage = document.body.classList.contains('checkout-cart-index'); 23213 const isCheckoutPage = document.body.classList.contains('hyva_checkout-index-index'); 23214 const onePageSuccessPage = document.body.classList.contains('hyva_checkout_onepage_success'); 23215 23216 if (!isCartPage && !isCheckoutPage && !onePageSuccessPage && ammessages?.messages) { 23217 this.processMessages(ammessages.messages); 23218 } 23219 }, 500); 23220 }, 23221 ['@am-promo:initialized.window']() { 23222 this.processStoredMessages(); 23223 }, 23224 ['@am-promo-products-recollect.window']() { 23225 this.processStoredMessages(); 23226 } 23227 }, 23228 23229 processStoredMessages() { 23230 try { 23231 const messages = JSON.parse(localStorage.getItem('amFreeGiftCartMessages')); 23232 if (messages?.length) { 23233 messages.forEach(message => dispatchMessages([message], 5000)); 23234 localStorage.removeItem('amFreeGiftCartMessages'); 23235 } 23236 } catch (e) { 23237 console.error('Error processing stored messages:', e); 23238 } 23239 }, 23240 23241 processMessages(messages) { 23242 if (messages?.notice) { 23243 this.handleNoticeMessage(messages.notice); 23244 } 23245 }, 23246 23247 handleNoticeMessage(notice) { 23248 if (!notice) return; 23249 dispatchMessages([{ type: notice.type, text: notice.text }]); 23250 } 23251 } 23252 } 23253 23254 window.addEventListener( 23255 'alpine:init', 23256 () => Alpine.data( 23257 'amMessage', 23258 amMessage 23259 ), 23260 {once: true} 23261 ); 23262</script>
23262 23263
23263<script> 23264 const AmAuthPopupReloadContent = function () { 23265 const customerMenuSelector = '\u0023customer\u002Dmenu\u0020\u007E\u0020nav'; 23266 23267 return { 23268 contentUpdaters: [], 23269 23270 initContentUpdaters() { 23271 window.addEventListener('amsl-register-content-updater', (event) => { 23272 event.stopPropagation(); 23273 if (typeof event.detail === 'function') { 23274 this.registerContentUpdater(event.detail); 23275 } 23276 }, true) 23277 }, 23278 23279 reloadContent() { 23280 return Promise.all([ 23281 this.reloadHeader(), 23282 ...this.contentUpdaters.map(updater => updater()) 23283 ]).then(this.updateFormKey); 23284 }, 23285 23286 registerContentUpdater(updater) { 23287 this.contentUpdaters.push(updater); 23288 }, 23289 23290 async reloadHeader() { 23291 const response = await fetch( 23292 `${BASE_URL}amsociallogin_hyva\u002Fheader\u002Fupdate?isAjax=1`, 23293 { 23294 method: 'GET', 23295 headers: { 23296 'Content-type': 'application/json' 23297 } 23298 } 23299 ); 23300 23301 const result = await response.json(); 23302 const {customer_menu_html: customerMenuHtml} = result; 23303 const container = document.createElement('div'); 23304 container.innerHTML = customerMenuHtml; 23305 const currentMenu = document.querySelector(customerMenuSelector); 23306 const newMenu = container.querySelector(customerMenuSelector); 23307 23308 if (currentMenu && newMenu) { 23309 currentMenu.replaceWith(newMenu); 23310 } 23311 }, 23312 23313 updateFormKey() { 23314 const formKeyInputs = document.querySelectorAll('input[name="form_key"]'); 23315 formKeyInputs.forEach(input => input.value = hyva.getFormKey()); 23316 } 23317 } 23318 } 23319</script>
vendor: 1 bytes, line 23319
23319
23320<script> 23321 const AmAuthPopupRedirect = function () { 23322 const redirectTimeout = 2000; 23323 const redirectUrl = 'https://fera.pl/customer/account/'; 23324 23325 return { 23326 processRedirect(forceRedirectUrl) { 23327 if (forceRedirectUrl) { 23328 setTimeout(() => { 23329 this.resetSessionCookie(); 23330 window.location.assign(forceRedirectUrl); 23331 }, redirectTimeout); 23332 return; 23333 } 23334 this.reloadPage(); 23335 }, 23336 23337 reloadCustomerData() { 23338 this.resetSessionCookie(); 23339 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 23340 }, 23341 23342 resetSessionCookie() { 23343 hyva.setCookie('mage-cache-sessid', '', -1, true); 23344 }, 23345 23346 reloadPage() { 23347 setTimeout(() => { 23348 this.resetSessionCookie(); 23349 window.location.reload(true) 23350 }, redirectTimeout) 23351 }, 23352 23353 reloadViaAjax() { 23354 window.addEventListener('private-content-loaded', () => { 23355 this.reloadContent().then(() => { 23356 window.dispatchEvent( 23357 new CustomEvent('amsl-content-updated') 23358 ); 23359 }).catch( 23360 (error) => { 23361 console.error(error); 23362 this.reloadPage(); 23363 } 23364 ); 23365 }, {once: true}); 23366 this.reloadCustomerData(); 23367 window.dispatchEvent( 23368 new CustomEvent('amsl-popup-ajax-login-success') 23369 ); 23370 } 23371 } 23372 } 23373</script>
vendor: 1 bytes, line 23373
23373
23374<script> 23375 const AmAuthPopupNotification = function () { 23376 const modalName = 'amsl\u002Dpopup\u002Dnotification'; 23377 23378 return { 23379 ...AmAuthPopupModal(modalName), 23380 notification: '', 23381 23382 initialize() { 23383 this.initModalSettings(); 23384 }, 23385 23386 showNotification(messages) { 23387 if (!messages) { 23388 return; 23389 } 23390 23391 this.notification = Array.isArray(messages) ? messages.join('<br>') : messages; 23392 23393 window.dispatchEvent( 23394 new CustomEvent('amsl-hide-popup') 23395 ); 23396 23397 this.show(modalName); 23398 } 23399 } 23400 } 23401</script>
vendor: 1 bytes, line 23401
23401
23402<script> 23403 const AmAuthPopupModal = function (modalName) { 23404 const canCloseByOverlayClick = false; 23405 23406 return { 23407 ...hyva.modal(), 23408 animationDuration: 500, 23409 23410 initModalSettings() { 23411 if (!canCloseByOverlayClick) { 23412 this.restrictOverlayClick(); 23413 } 23414 }, 23415 23416 restrictOverlayClick() { 23417 document.addEventListener('click', (event) => { 23418 const modal = this.$refs[modalName]; 23419 const isVisible = this.opened[modalName]; 23420 const topModal = window.hyva.modal.peek(); 23421 const isThisModalOnTop = !topModal || topModal.name === modalName; 23422 if (isVisible && isThisModalOnTop && !modal.contains(event.target) && !modal.hasAttribute('x-no-overlay')) { 23423 event.stopPropagation(); 23424 } 23425 }, {capture: true}); 23426 } 23427 } 23428 } 23429</script>
23429 23430 23431 <div x-data="AmAuthPopup()" 23432 x-on:private-content-loaded.window="initializeAuthPopup(event.detail)" 23433 x-on:amsl-show-popup.window="showOnExternalEvent(event)" 23434 x-on:amsl-hide-popup.window="hide(modalName)" 23435 x-on:amsl-content-updated.window="bindLinksEvents()" 23436 > 23437 <div x-cloak data-dialog-ref-name="social-login-popup" 23438 x-bind="overlay" 23439 class="fixed inset-0 bg-black/25 z-50 backdrop-blur-sm"> 23440 <div class="fixed flex justify-center items-center text-left z-40 amsl-popup-modal md:p-6 inset-0"> 23441 <div x-ref="social-login-popup" role="dialog" aria-modal="true" 23442 aria-labelledby="social-login-popup" 23443 class="w-full max-w-[960px] h-full mx-auto inline-block bg-container shadow-xl overflow-hidden md:h-auto md:rounded-4xl"> 23444 <div id="social-login-popup" 23445 class="amsl-popup-block relative focus:outline-none focus-within:outline-none 23446 -social-bottom" 23447 role="dialog" 23448 aria-labelledby="amsl-popup-dialog" 23449 tabindex="0" 23450 x-on:click.stop 23451 > 23452 <button 23453 type="button" 23454 class="btn btn-secondary btn-icon-size-l rounded-full absolute top-4 right-4" 23455 aria-label="Zamknij" 23456 x-on:click="hide()" 23457 > 23458 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 23459 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 23460</svg> 23461 </button> 23462 <h2 class="amsl-dialog-title sr-only" id="amsl-popup-dialog"> 23463 Formularz logowania i rejestracji </h2> 23464 <div 23465 class="amsl-tabs-wrapper" 23466 title="Formularz logowania i rejestracji" 23467 > 23468 <div id="amsl-login-content" 23469 x-show="activeTab === 'amsl-login'" 23470 x-cloak 23471 role="tabpanel" 23472 > 23473 <div class="grid grid-cols-1 xl:grid-cols-2 items-center"> 23474 <div 23475 class="amsl-content amsl-login-content 23476 p-8 max-h-screen overflow-y-auto md:max-h-[calc(100vh-48px)] " 23477 > 23478 <template x-if="!isLogged"> 23479 <div class="amsl-form"> 23480 23481 23482 23483<template x-if="formMessages.has('amsl-login')"> 23484 <template 23485 x-for="message in formMessages.get('amsl-login')" 23486 :key="message" 23487 > 23488 <div class="message error"> 23489 <span x-html="message"></span> 23490 </div> 23491 </template> 23492</template> 23493<form class="form form-login" 23494 action="https://fera.pl/customer/account/loginPost/" 23495 method="post" 23496 x-data="Object.assign(hyva.formValidation($el), initCustomerLoginForm())" 23497 @submit.prevent="submitForm()" 23498 id="customer-login-form"> 23499 <input name="form_key" type="hidden" value="6aqf5MmWWJaNsQwZ" /> <legend class="block text-brandSecondary-900 text-2xl font-extrabold title-font font-heading mb-2"> 23500 Logowanie </legend> 23501 <fieldset class="fieldset login"> 23502 <div class="field field-reserved w-full email required"> 23503 <label class="label" for="email"> 23504 <span>E-mail</span> 23505 </label> 23506 <div class="control"> 23507 <input name="login[username]" 23508 class="form-input w-full" 23509 required 23510 value="" 23511 autocomplete="off" 23512 id="email" 23513 type="email" 23514 title="E-mail" 23515 @input.debounce="onChange" 23516 /> 23517 </div> 23518 </div> 23519 <div class="field field-reserved w-full password required"> 23520 <label for="am-pass" class="label"> 23521 <span>HasÅo</span> 23522 </label> 23523 <div class="control relative flex items-center">
23524 <div class="sr-only" aria-live="polite"> 23525 <template x-if="!customer_form_login_popup_showPassword"> 23526 <span> 23527 HasÅo ukryte </span> 23528 </template> 23529 <template x-if="customer_form_login_popup_showPassword"> 23530 <span> 23531 HasÅo widoczne </span> 23532 </template> 23533 </div> 23534 <input name="login[password]" 23535 class="form-input w-full pr-11" 23536 required 23537 :type="customer_form_login_popup_showPassword ? 'text' : 'password'" 23538 autocomplete="off" 23539 id="am-pass" 23540 title="Hasło" 23541 @input.debounce="onChange" 23542 /> 23543 <button 23544 type="button" 23545 x-on:click="customer_form_login_popup_showPassword = !customer_form_login_popup_showPassword" 23546 :aria-pressed="customer_form_login_popup_showPassword ? 'true' : 'false'" 23547 class="absolute top-0 right-px p-3" 23548 :aria-label="customer_form_login_popup_showPassword ? 'Ukryj\u0020has\u0142o' : 'Poka\u017C\u0020has\u0142o'" 23549 > 23550 <template x-if="!customer_form_login_popup_showPassword"> 23551 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 23552 <path d="M10 12a2 2 0 100-4 2 2 0 000 4z"/> 23553 <path fill-rule="evenodd" d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z" clip-rule="evenodd"/> 23554</svg> 23555 </template> 23556 <template x-if="customer_form_login_popup_showPassword"> 23557 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 23558 <path fill-rule="evenodd" d="M3.707 2.293a1 1 0 00-1.414 1.414l14 14a1 1 0 001.414-1.414l-1.473-1.473A10.014 10.014 0 0019.542 10C18.268 5.943 14.478 3 10 3a9.958 9.958 0 00-4.512 1.074l-1.78-1.781zm4.261 4.26l1.514 1.515a2.003 2.003 0 012.45 2.45l1.514 1.514a4 4 0 00-5.478-5.478z" clip-rule="evenodd"/> 23559 <path d="M12.454 16.697L9.75 13.992a4 4 0 01-3.742-3.741L2.335 6.578A9.98 9.98 0 00.458 10c1.274 4.057 5.065 7 9.542 7 .847 0 1.669-.105 2.454-.303z"/> 23560</svg> 23561 </template> 23562 </button> 23563 </div> 23564 </div> 23565 23566 <div class="actions-toolbar"> 23567 <button type="submit" class="btn btn-primary w-full disabled:opacity-75" name="send" 23568 > 23569 <span>Zaloguj siÄ</span> 23570 </button> 23571 <a class="ml-auto text-sm text-secondary" href="https://fera.pl/customer/account/forgotpassword/"><span>ZapomniaÅem hasÅa</span> 23572 </a> 23573 </div> 23574 <div> 23575 <template x-if="displayErrorMessage"> 23576 <p class="text-red flex items-center"> 23577 <span class="inline-block w-8 h-8 mr-3"> 23578 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 23579 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 23580</svg> 23581 </span> 23582 <template x-for="errorMessage in errorMessages"> 23583 <span x-html="errorMessage"></span> 23584 </template> 23585 </p> 23586 </template> 23587 </div> 23588 </fieldset> 23589</form> 23590 23591 <div class="amsl-separator text-center py-6"> 23592 <span>lub zaloguj siÄ za poÅrednictwem</span> 23593 </div> 23594 <div class="amsl-social-wrapper" 23595 x-data="AmSocialLogin()" 23596 x-init="initializeSocialLogin()" 23597 > 23598 <div class="amsl-social-login"> 23599 <template x-if="socialErrorMessage"> 23600 <p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p> 23601 </template> 23602 <div class="amsl-buttons flex flex-wrap justify-center gap-2" 23603 > 23604 <div class="flex-grow"> 23605 <a class="btn btn-social" 23606 x-on:click="socialLoginClick($event)" 23607 href="https://fera.pl/amsociallogin/social/login/?type=google" 23608 title="Zaloguj siÄ za pomocÄ Google" 23609 role="link" 23610 > 23611 <svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" aria-hidden="true"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/></svg> 23612 </a> 23613 </div> 23614 <div class="flex-grow"> 23615 <a class="btn btn-social" 23616 x-on:click="socialLoginClick($event)" 23617 href="https://fera.pl/amsociallogin/social/login/?type=facebook" 23618 title="Zaloguj siÄ za pomocÄ Facebook" 23619 role="link" 23620 > 23621 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 25 25" fill="none" aria-hidden="true"> 23622 <g clip-path="url(#clip0_637_9019)"> 23623 <path d="M24.25 12.5C24.25 5.87258 18.8774 0.5 12.25 0.5C5.62258 0.5 0.25 5.87258 0.25 12.5C0.25 18.4895 4.6382 23.454 10.375 24.3542V15.9688H7.32812V12.5H10.375V9.85625C10.375 6.84875 12.1666 5.1875 14.9076 5.1875C16.2201 5.1875 17.5938 5.42188 17.5938 5.42188V8.375H16.0806C14.59 8.375 14.125 9.30008 14.125 10.25V12.5H17.4531L16.9211 15.9688H14.125V24.3542C19.8618 23.454 24.25 18.4895 24.25 12.5Z" fill="#1877F2"/> 23624 <path d="M16.9211 15.9688L17.4531 12.5H14.125V10.25C14.125 9.30102 14.59 8.375 16.0806 8.375H17.5938V5.42188C17.5938 5.42188 16.2205 5.1875 14.9076 5.1875C12.1666 5.1875 10.375 6.84875 10.375 9.85625V12.5H7.32812V15.9688H10.375V24.3542C11.6174 24.5486 12.8826 24.5486 14.125 24.3542V15.9688H16.9211Z" fill="white"/> 23625 </g> 23626 <defs> 23627 <clipPath id="clip0_637_9019"> 23628 <rect width="24" height="24" fill="white" transform="translate(0.25 0.5)"/> 23629 </clipPath> 23630 </defs> 23631</svg> 23632 </a> 23633 </div> 23634 </div> 23635 </div> 23636 </div> 23637
23637<script> 23638 function AmSocialLogin() { 23639 return { 23640 socialErrorMessage: '', 23641 isPopupEnabled: '1', 23642 23643 initializeSocialLogin() { 23644 this.initContentUpdaters(); 23645 }, 23646 23647 socialLoginClick(event) { 23648 if (this.messageEventListener) { 23649 window.removeEventListener('message', this.messageEventListener); 23650 } 23651 this.messageEventListener = this.onMessageEvent.bind(this); 23652 window.addEventListener('message', this.messageEventListener); 23653 if (this.isPopupEnabled) { 23654 window.open( 23655 event.currentTarget.href + '&isAjax=true', 23656 event.currentTarget.title, 23657 this.getPopupParams() 23658 ); 23659 } else { 23660 window.location.assign(event.currentTarget.href); 23661 } 23662 event.stopPropagation(); 23663 event.preventDefault(); 23664 23665 return false; 23666 }, 23667 23668 onSocialResponse(data) { 23669 const isSuccessfulResult = data.result === 1; 23670 23671 if (isSuccessfulResult) { 23672 window.dispatchEvent( 23673 new CustomEvent( 23674 'amsl-popup-show-notification', 23675 { 23676 detail: data.messages 23677 } 23678 ) 23679 ); 23680 this.processRedirect(); 23681 } else { 23682 const redirectData = data?.redirect_data; 23683 23684 this.socialErrorMessage = data.messages.pop(); 23685 setTimeout(() => { 23686 this.socialErrorMessage = ''; 23687 }, 5000); 23688 23689 if (this.shouldCustomUrlRedirectWithError(redirectData)) { 23690 return this.processRedirect(redirectData?.url); 23691 } 23692 23693 if (redirectData.redirectWithError) { 23694 this.processRedirect(); 23695 } 23696 } 23697 }, 23698 23699 shouldCustomUrlRedirectWithError(redirectData) { 23700 return ( 23701 redirectData && 23702 redirectData.redirect && 23703 redirectData.redirectWithError && 23704 redirectData.url 23705 ); 23706 }, 23707 23708 onMessageEvent(event) { 23709 if (event.data['redirect_data']) { 23710 this.onSocialResponse(event.data); 23711 } 23712 }, 23713 23714 getPopupParams(w, h, l, t) { 23715 let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, 23716 screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, 23717 outerWidth = typeof window.outerWidth !== 'undefined' 23718 ? window.outerWidth 23719 : document.body.clientWidth, 23720 outerHeight = typeof window.outerHeight !== 'undefined' 23721 ? window.outerHeight 23722 : (document.body.clientHeight - 22), 23723 width = w ? w : 500, 23724 height = h ? h : 420, 23725 left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), 23726 top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); 23727 23728 return ( 23729 'width=' + width + 23730 ',height=' + height + 23731 ',left=' + left + 23732 ',top=' + top 23733 ); 23734 }, 23735 23736 ...AmAuthPopupRedirect(), 23737 ...AmAuthPopupReloadContent() 23738 } 23739 } 23740</script>
23740 23741 <div class="flex flex-col items-center gap-4 mt-6 pt-6 border-t border-secondary-lighter"> 23742 <span>Nie masz jeszcze konta?</span> 23743 <button class="btn btn-secondary w-full" 23744 x-on:click.prevent="activeTab = 'amsl-register'"> 23745 Zarejestruj siÄ </button> 23746 </div> 23747
23748<script> 23749 function initCustomerLoginForm() { 23750 return { 23751 errors: 0, 23752 hasCaptchaToken: 0, 23753 customer_form_login_popup_showPassword: false, 23754 displayErrorMessage: false, 23755 errorMessages: [], 23756 setErrorMessages(messages) { 23757 this.errorMessages = [messages] 23758 this.displayErrorMessage = this.errorMessages.length 23759 }, 23760 submitForm() { 23761 this.validate() 23762 .then(() => { 23763 // Do not rename $form, the variable is expected to be declared in the recaptcha output 23764 const $form = document.querySelector('#customer-login-form'); 23765 23766 if (this.errors === 0) { 23767 $form.submit(); 23768 } 23769 }) 23770 .catch((invalid) => { 23771 if (invalid.length > 0) { 23772 invalid[0].focus(); 23773 } 23774 }); 23775 }, 23776 } 23777 } 23778</script>
23778 23779 </div> 23780 </template> 23781 </div> 23782 <div class="hidden self-stretch xl:flex"> 23783 <img class="object-cover" src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Tooks_AmastySocialLogin/images/amsl-login.webp" alt="" width="792" height="688" loading="lazy"/> 23784 </div> 23785 </div> 23786 </div> 23787 <div id="amsl-register-content" 23788 x-show="activeTab === 'amsl-register'" 23789 x-cloak 23790 role="tabpanel" 23791 > 23792 <div class="amsl-content amsl-register-content p-8 max-h-screen overflow-y-auto md:max-h-[calc(100vh-48px)]"> 23793 <template x-if="!isLogged"> 23794 <div class="amsl-form"> 23795 23796 23797 23798<template x-if="formMessages.has('amsl-register')"> 23799 <template 23800 x-for="message in formMessages.get('amsl-register')" 23801 :key="message" 23802 > 23803 <div class="message error"> 23804 <span x-html="message"></span> 23805 </div> 23806 </template> 23807</template> 23808<form class="form create account form-create-account " 23809 action="https://fera.pl/customer/account/createpost/" 23810 x-data="Object.assign(hyva.formValidation($el), initForm())" 23811 id="accountcreate" 23812 @submit.prevent="submitForm()" 23813 method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off" 23814> 23815 <input name="form_key" type="hidden" value="6aqf5MmWWJaNsQwZ" /> <input type="hidden" name="success_url" value=""> 23816 <input type="hidden" name="error_url" value=""> 23817 23818 <legend class="block text-brandSecondary-900 text-2xl font-extrabold title-font font-heading mb-0 "> 23819 Rejestracja </legend> 23820 <div class="grid grid-cols-1 md:grid-cols-2 md:items-start gap-y-6 md:gap-x-6"> 23821 <div class="contents md:flex md:flex-col md:col-start-1 md:gap-y-6"> 23822 <div class="order-1"> 23823 <fieldset class="flex flex-col md:flex-row gap-x-3"> 23824 <div class="field field-reserved w-full field-name-firstname required"> 23825 <label class="label" for="firstname"> 23826 <span> 23827 ImiÄ </span> 23828 </label> 23829 <div class="control"> 23830 <input type="text" id="firstname" 23831 name="firstname" 23832 value="" 23833 required 23834 title="Imię" 23835 class="form-input w-full required-entry" 23836 @input.debounce="onChange" 23837 required > 23838 </div> 23839 </div> 23840 <div class="field field-reserved w-full field-name-lastname required"> 23841 <label class="label" for="lastname"> 23842 <span> 23843 Nazwisko </span> 23844 </label> 23845 <div class="control"> 23846 <input type="text" id="lastname" 23847 name="lastname" 23848 required 23849 value="" 23850 title="Nazwisko" 23851 class="form-input w-full required-entry" 23852 @input.debounce="onChange" 23853 required > 23854 </div> 23855 </div> 23856 </fieldset> 23857 23858 23859 23860 <div class="field field-reserved required"> 23861 <label for="am-email-address" class="label"> 23862 <span>E-mail</span> 23863 </label> 23864 <div class="control"> 23865 <input 23866 type="email" 23867 name="email" 23868 autocomplete="email" 23869 id="am-email-address" 23870 required 23871 value="" 23872 title="E-mail" 23873 class="form-input w-full" 23874 @input.debounce="onChange" 23875 > 23876 </div> 23877 </div> 23878 <div class="field field-reserved required"> 23879 <label for="phone_number" class="label"> 23880 <span>Numer telefonu</span> 23881 </label> 23882 <div class="control"> 23883 <input 23884 type="tel" 23885 name="phone_number" 23886 autocomplete="tel" 23887 id="phone_number" 23888 required 23889 value="" 23890 title="Numer telefonu" 23891 class="form-input w-full" 23892 data-validate='{"international-telephone": true}' 23893 @input.debounce="onChange" 23894 > 23895 </div> 23896 </div> 23897 <div class="field field-reserved required"> 23898 <label for="password" class="label">
23899 <span>HasÅo</span> 23900 </label> 23901 <div class="control relative flex items-center"> 23902 <div class="sr-only" aria-live="polite"> 23903 <template x-if="!customer_form_register_popup_showPassword"> 23904 <span> 23905 HasÅo ukryte </span> 23906 </template> 23907 <template x-if="customer_form_register_popup_showPassword"> 23908 <span> 23909 HasÅo widoczne </span> 23910 </template> 23911 </div> 23912 <input 23913 :type="customer_form_register_popup_showPassword ? 'text' : 'password'" 23914 type="password" 23915 id="password" 23916 name="password" 23917 title="Hasło" 23918 minlength="8" 23919 class="form-input w-full pr-11" 23920 required 23921 data-validate='{"password-strength": {"minCharacterSets": 3}}' 23922 @input.debounce="onChange" 23923 autocomplete="off" 23924 > 23925 <button 23926 type="button" 23927 :aria-pressed="customer_form_register_popup_showPassword ? true : false" 23928 x-on:click="customer_form_register_popup_showPassword = !customer_form_register_popup_showPassword" 23929 class="absolute top-0 right-px p-3" 23930 :aria-label="customer_form_register_popup_showPassword ? 'Ukryj\u0020has\u0142o' : 'Poka\u017C\u0020has\u0142o'" 23931 > 23932 <template x-if="!customer_form_register_popup_showPassword"> 23933 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 23934 <path d="M10 12a2 2 0 100-4 2 2 0 000 4z"/> 23935 <path fill-rule="evenodd" d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z" clip-rule="evenodd"/> 23936</svg> 23937 </template> 23938 <template x-if="customer_form_register_popup_showPassword"> 23939 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 23940 <path fill-rule="evenodd" d="M3.707 2.293a1 1 0 00-1.414 1.414l14 14a1 1 0 001.414-1.414l-1.473-1.473A10.014 10.014 0 0019.542 10C18.268 5.943 14.478 3 10 3a9.958 9.958 0 00-4.512 1.074l-1.78-1.781zm4.261 4.26l1.514 1.515a2.003 2.003 0 012.45 2.45l1.514 1.514a4 4 0 00-5.478-5.478z" clip-rule="evenodd"/> 23941 <path d="M12.454 16.697L9.75 13.992a4 4 0 01-3.742-3.741L2.335 6.578A9.98 9.98 0 00.458 10c1.274 4.057 5.065 7 9.542 7 .847 0 1.669-.105 2.454-.303z"/> 23942</svg> 23943 </template> 23944 </button> 23945 </div> 23946 </div> 23947 <div class="field field-reserved required"> 23948 <label for="password-confirmation" class="label"> 23949 <span>Powtórz hasÅo</span> 23950 </label> 23951 <div class="control relative flex items-center"> 23952 <div class="sr-only" aria-live="polite"> 23953 <template x-if="!customer_form_register_popup_showPasswordConfirm"> 23954 <span> 23955 Repeat Password Hidden </span> 23956 </template> 23957 <template x-if="customer_form_register_popup_showPasswordConfirm"> 23958 <span> 23959 Repeat Password Shown </span> 23960 </template> 23961 </div> 23962 <input 23963 :type="customer_form_register_popup_showPasswordConfirm ? 'text' : 'password'" 23964 type="password" 23965 name="password_confirmation" 23966 title="Potwierdź hasło" 23967 id="password-confirmation" 23968 data-validate='{"equalTo": "password"}' 23969 @input.debounce="onChange" 23970 required 23971 class="form-input w-full pr-11" 23972 autocomplete="off" 23973 > 23974 <button 23975 type="button" 23976 x-on:click="customer_form_register_popup_showPasswordConfirm = !customer_form_register_popup_showPasswordConfirm" 23977 :aria-pressed="customer_form_register_popup_showPasswordConfirm ? true : false" 23978 class="absolute top-0 right-px p-3" 23979 :aria-label=" 23980 customer_form_register_popup_showPasswordConfirm ? 'Ukryj\u0020has\u0142o' : 'Poka\u017C\u0020has\u0142o' 23981 " 23982 > 23983 <template x-if="!customer_form_register_popup_showPasswordConfirm"> 23984 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 23985 <path d="M10 12a2 2 0 100-4 2 2 0 000 4z"/> 23986 <path fill-rule="evenodd" d="M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z" clip-rule="evenodd"/> 23987</svg> 23988 </template> 23989 <template x-if="customer_form_register_popup_showPasswordConfirm"> 23990 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 23991 <path fill-rule="evenodd" d="M3.707 2.293a1 1 0 00-1.414 1.414l14 14a1 1 0 001.414-1.414l-1.473-1.473A10.014 10.014 0 0019.542 10C18.268 5.943 14.478 3 10 3a9.958 9.958 0 00-4.512 1.074l-1.78-1.781zm4.261 4.26l1.514 1.515a2.003 2.003 0 012.45 2.45l1.514 1.514a4 4 0 00-5.478-5.478z" clip-rule="evenodd"/> 23992 <path d="M12.454 16.697L9.75 13.992a4 4 0 01-3.742-3.741L2.335 6.578A9.98 9.98 0 00.458 10c1.274 4.057 5.065 7 9.542 7 .847 0 1.669-.105 2.454-.303z"/> 23993</svg> 23994 </template> 23995 </button> 23996 </div> 23997 </div> 23998 23999 </div> 24000 <div class="order-4"> 24001 <div class="amsl-separator text-center py-6">
24002 <span>lub zaloguj siÄ za poÅrednictwem</span> 24003 </div> 24004 <div class="amsl-social-wrapper" 24005 x-data="AmSocialLogin()" 24006 x-init="initializeSocialLogin()" 24007 > 24008 <div class="amsl-social-login"> 24009 <template x-if="socialErrorMessage"> 24010 <p class="amsl-error -social message error mb-4" x-text="socialErrorMessage"></p> 24011 </template> 24012 <div class="amsl-buttons flex flex-wrap justify-center gap-2" 24013 > 24014 <div class="flex-grow"> 24015 <a class="btn btn-social" 24016 x-on:click="socialLoginClick($event)" 24017 href="https://fera.pl/amsociallogin/social/login/?type=google" 24018 title="Zaloguj siÄ za pomocÄ Google" 24019 role="link" 24020 > 24021 <svg xmlns="http://www.w3.org/2000/svg" xmlns:v="https://vecta.io/nano" viewBox="0 0 31 33" fill="none" width="24" height="24" aria-hidden="true"><path d="M1.125 10.662c-.726 1.85-1.1 3.841-1.023 5.869-.061 3.005.825 5.947 2.383 8.465l4.781-3.654c-.261-.501-.478-1.03-.643-1.586-.625-1.678-.712-3.469-.371-5.174l-5.127-3.92z" fill="#fbbc05"/><path d="M15.832.502l-.775.045c-6.14.075-11.7 4.435-13.93 10.115l5.125 3.918c.711-3.552 3.289-6.733 6.809-7.75 3.23-1.155 6.557.145 9.322 1.85 1.399-1.331 2.71-2.751 3.998-4.189C23.437 1.989 19.706.395 15.832.502zm.016 13.736v.041l.047-.041c-.016 0-.031 0-.047 0z" fill="#ea4335"/><path d="M23.387 14.219c-2.298-.001-4.595.006-6.891.01l-.648.496.008 4.953 9.035.107c-.76 2.645-2.493 5.106-5.121 6.061-4.56 2.039-10.247-.148-12.514-4.533l-4.777 3.662c1.906 3.086 4.822 5.537 8.256 6.682 5.873 2.003 13.093.505 17.002-4.602 2.853-3.577 3.502-8.348 3.193-12.805l-7.543-.031z" fill="#34a853"/><path d="M23.385 14.219c-2.514-.001-5.026.006-7.537.01l.008 5.449 9.035.107c-.69 2.401-2.185 4.647-4.42 5.756l4.959 3.84c.852-.669 1.63-1.442 2.307-2.326 2.853-3.577 3.502-8.348 3.193-12.805l-7.545-.031z" fill="#4285f4"/></svg> 24022 </a> 24023 </div> 24024 <div class="flex-grow"> 24025 <a class="btn btn-social" 24026 x-on:click="socialLoginClick($event)" 24027 href="https://fera.pl/amsociallogin/social/login/?type=facebook" 24028 title="Zaloguj siÄ za pomocÄ Facebook" 24029 role="link" 24030 > 24031 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 25 25" fill="none" aria-hidden="true"> 24032 <g clip-path="url(#clip0_637_9019)"> 24033 <path d="M24.25 12.5C24.25 5.87258 18.8774 0.5 12.25 0.5C5.62258 0.5 0.25 5.87258 0.25 12.5C0.25 18.4895 4.6382 23.454 10.375 24.3542V15.9688H7.32812V12.5H10.375V9.85625C10.375 6.84875 12.1666 5.1875 14.9076 5.1875C16.2201 5.1875 17.5938 5.42188 17.5938 5.42188V8.375H16.0806C14.59 8.375 14.125 9.30008 14.125 10.25V12.5H17.4531L16.9211 15.9688H14.125V24.3542C19.8618 23.454 24.25 18.4895 24.25 12.5Z" fill="#1877F2"/> 24034 <path d="M16.9211 15.9688L17.4531 12.5H14.125V10.25C14.125 9.30102 14.59 8.375 16.0806 8.375H17.5938V5.42188C17.5938 5.42188 16.2205 5.1875 14.9076 5.1875C12.1666 5.1875 10.375 6.84875 10.375 9.85625V12.5H7.32812V15.9688H10.375V24.3542C11.6174 24.5486 12.8826 24.5486 14.125 24.3542V15.9688H16.9211Z" fill="white"/> 24035 </g> 24036 <defs> 24037 <clipPath id="clip0_637_9019"> 24038 <rect width="24" height="24" fill="white" transform="translate(0.25 0.5)"/> 24039 </clipPath> 24040 </defs> 24041</svg> 24042 </a> 24043 </div> 24044 </div> 24045 </div> 24046 </div> 24047
24047<script> 24048 function AmSocialLogin() { 24049 return { 24050 socialErrorMessage: '', 24051 isPopupEnabled: '1', 24052 24053 initializeSocialLogin() { 24054 this.initContentUpdaters(); 24055 }, 24056 24057 socialLoginClick(event) { 24058 if (this.messageEventListener) { 24059 window.removeEventListener('message', this.messageEventListener); 24060 } 24061 this.messageEventListener = this.onMessageEvent.bind(this); 24062 window.addEventListener('message', this.messageEventListener); 24063 if (this.isPopupEnabled) { 24064 window.open( 24065 event.currentTarget.href + '&isAjax=true', 24066 event.currentTarget.title, 24067 this.getPopupParams() 24068 ); 24069 } else { 24070 window.location.assign(event.currentTarget.href); 24071 } 24072 event.stopPropagation(); 24073 event.preventDefault(); 24074 24075 return false; 24076 }, 24077 24078 onSocialResponse(data) { 24079 const isSuccessfulResult = data.result === 1; 24080 24081 if (isSuccessfulResult) { 24082 window.dispatchEvent( 24083 new CustomEvent( 24084 'amsl-popup-show-notification', 24085 { 24086 detail: data.messages 24087 } 24088 ) 24089 ); 24090 this.processRedirect(); 24091 } else { 24092 const redirectData = data?.redirect_data; 24093 24094 this.socialErrorMessage = data.messages.pop(); 24095 setTimeout(() => { 24096 this.socialErrorMessage = ''; 24097 }, 5000); 24098 24099 if (this.shouldCustomUrlRedirectWithError(redirectData)) { 24100 return this.processRedirect(redirectData?.url); 24101 } 24102 24103 if (redirectData.redirectWithError) { 24104 this.processRedirect(); 24105 } 24106 } 24107 }, 24108 24109 shouldCustomUrlRedirectWithError(redirectData) { 24110 return ( 24111 redirectData && 24112 redirectData.redirect && 24113 redirectData.redirectWithError && 24114 redirectData.url 24115 ); 24116 }, 24117 24118 onMessageEvent(event) { 24119 if (event.data['redirect_data']) { 24120 this.onSocialResponse(event.data); 24121 } 24122 }, 24123 24124 getPopupParams(w, h, l, t) { 24125 let screenX = typeof window.screenX !== 'undefined' ? window.screenX : window.screenLeft, 24126 screenY = typeof window.screenY !== 'undefined' ? window.screenY : window.screenTop, 24127 outerWidth = typeof window.outerWidth !== 'undefined' 24128 ? window.outerWidth 24129 : document.body.clientWidth, 24130 outerHeight = typeof window.outerHeight !== 'undefined' 24131 ? window.outerHeight 24132 : (document.body.clientHeight - 22), 24133 width = w ? w : 500, 24134 height = h ? h : 420, 24135 left = l ? l : parseInt(screenX + ((outerWidth - width) / 2), 10), 24136 top = t ? t : parseInt(screenY + ((outerHeight - height) / 2.5), 10); 24137 24138 return ( 24139 'width=' + width + 24140 ',height=' + height + 24141 ',left=' + left + 24142 ',top=' + top 24143 ); 24144 }, 24145 24146 ...AmAuthPopupRedirect(), 24147 ...AmAuthPopupReloadContent() 24148 } 24149 } 24150</script>
24150 24151 24152<div class="flex items-center justify-center gap-4 pt-4"> 24153 <span>Masz już konto?</span> 24154 <button 24155 class="flex items-center gap-2" 24156 x-on:click.prevent="activeTab = 'amsl-login'"> 24157 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" aria-hidden="true"> 24158 <path fill-rule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clip-rule="evenodd"/> 24159</svg> 24160 Zaloguj siÄ </button> 24161</div> 24162 </div> 24163 <div class="order-5"> 24164 <div class="actions-toolbar"> 24165 <button type="submit" class="btn btn-primary w-full disabled:opacity-75" 24166 title="Zarejestruj się" 24167 > 24168 <span>Zarejestruj siÄ</span> 24169 </button> 24170 </div> 24171 </div> 24172 <div class="order-6"> 24173 </div> 24174 </div> 24175 <div class="contents md:flex md:flex-col md:col-start-2 md:gap-y-6"> 24176 <div class="order-3"> 24177 24178<div id="snr-ma-registration-page"></div> 24179<div class="amasty-gdpr-checkboxes bg-brandPrimary-50 border border-brandPrimary-400 rounded-xl w-full flex flex-col" 24180 x-data="initAmGdprCheckbox"> 24181 <fieldset class="fieldset"> 24182 <div class="relative border-b border-brandPrimary-400 px-6 py-4 flex gap-4 items-start w-full"> 24183 <div class="flex flex-col gap-1 items-start flex-1"> 24184 <div class="flex items-start gap-2.5 w-full"> 24185 <input type="checkbox" 24186 id="allCheckboxesCheck" 24187 name="allCheckboxesCheck" 24188 class="form-checkbox rounded w-5 h-5 border-brandPrimary-500 text-brandPrimary-500" 24189 @change="toggleAllConsents" 24190 x-ref="allCheckboxesCheck" 24191 data-validation-container="#amgdpr-selectall-validation" 24192 > 24193 <label for="allCheckboxesCheck" class="label font-bold text-sm text-brandSecondary-700 mb-0"> 24194 Zaznacz wszystkie </label> 24195 <span class="absolute top-4 right-6 flex justify-center items-center gap-2.5 bg-brandPrimary-500 text-brandPrimary-950 font-bold text-sm rounded-sm px-1.5 py-0.5"> 24196 NAJPROÅCIEJ </span> 24197 <div id="amgdpr-selectall-validation" class="sr-only"></div> 24198 </div> 24199 <span class="font-medium text-sm text-brandSecondary-700"> 24200 Zgadzam siÄ na wszystkie poniższe zgody. </span> 24201 </div> 24202 </div> 24203 <div class="flex flex-col w-full"> 24204 <div> 24205 <div class="field field-wrapper field-reserved border-brandPrimary-100 px-6 py-2 flex gap-3 items-start w-full border-b"> 24206 <div> 24207 <input type="hidden" 24208 name="amgdpr_agreement[regulations]" 24209 value="0" 24210 /> 24211 <input type="checkbox" 24212 name="amgdpr_agreement[regulations]" 24213 title="Regulamin" 24214 value="1" 24215 id="amprivacy-checkbox-2" 24216 class="amgdpr-consent-checkbox form-checkbox rounded w-5 h-5 border-brandPrimary-500 text-brandPrimary-500" 24217 @amgdpr-consent-accepted.window="consentAcceptedHandler" 24218 x-model="checkbox.regulations.checked" 24219 data-validation-container="#amgdpr-validation-2" 24220 required 24221 /> 24222 </div> 24223 <div class="flex flex-col gap-1 flex-1 field field-wrapper required"> 24224 <label for="amprivacy-checkbox-2" class="label font-bold text-sm text-brandSecondary-700 mb-0 self-stretch">
24225 <span class="amgdpr-consent-span [&_a]:underline [&_a]:text-brandSecondary-700 [&_a]:font-bold" 24226 @click.prevent="openLink" 24227 data-consent-id="2"> 24228 AkceptujÄ warunki <a href="#">Regulaminu</a> </span> 24229 </label> 24230 <div id="amgdpr-validation-2" class="field field-wrapper mb-1"></div> 24231 </div> 24232 </div> 24233 24234 <input type="hidden" 24235 name="am-gdpr-checkboxes-from" 24236 value="amsociallogin_popup_form" 24237 /> 24238 <div class="field field-wrapper field-reserved border-brandPrimary-100 px-6 py-2 flex gap-3 items-start w-full border-b"> 24239 <div> 24240 <input type="hidden" 24241 name="amgdpr_agreement[sms_marketing_information]" 24242 value="0" 24243 /> 24244 <input type="checkbox" 24245 name="amgdpr_agreement[sms_marketing_information]" 24246 title="Informacje SMS" 24247 value="1" 24248 id="amprivacy-checkbox-6" 24249 class="amgdpr-consent-checkbox form-checkbox rounded w-5 h-5 border-brandPrimary-500 text-brandPrimary-500" 24250 @amgdpr-consent-accepted.window="consentAcceptedHandler" 24251 x-model="checkbox.sms_marketing_information.checked" 24252 data-validation-container="#amgdpr-validation-6" 24253 /> 24254 <div id="amgdpr-validation-6" class="sr-only"></div> 24255 </div> 24256 <div class="flex flex-col gap-1 flex-1"> 24257 <label for="amprivacy-checkbox-6" class="label font-bold text-sm text-brandSecondary-700 mb-0 self-stretch"> 24258 <span class="amgdpr-consent-span [&_a]:underline [&_a]:text-brandSecondary-700 [&_a]:font-bold" 24259 @click.prevent="openLink" 24260 data-consent-id="6"> 24261 ChcÄ otrzymywaÄ informacje SMS o promocjach i ofertach specjalnych. </span> 24262 </label> 24263 </div> 24264 </div> 24265 24266 <input type="hidden" 24267 name="am-gdpr-checkboxes-from" 24268 value="amsociallogin_popup_form" 24269 /> 24270 <div class="field field-wrapper field-reserved border-brandPrimary-100 px-6 py-2 flex gap-3 items-start w-full border-b"> 24271 <div> 24272 <input type="hidden" 24273 name="amgdpr_agreement[commercial_information_email]" 24274 value="0" 24275 /> 24276 <input type="checkbox" 24277 name="amgdpr_agreement[commercial_information_email]" 24278 title="Informacje handlowe" 24279 value="1" 24280 id="amprivacy-checkbox-7" 24281 class="amgdpr-consent-checkbox form-checkbox rounded w-5 h-5 border-brandPrimary-500 text-brandPrimary-500" 24282 @amgdpr-consent-accepted.window="consentAcceptedHandler" 24283 x-model="checkbox.commercial_information_email.checked" 24284 data-validation-container="#amgdpr-validation-
242847" 24285 /> 24286 <div id="amgdpr-validation-7" class="sr-only"></div> 24287 </div> 24288 <div class="flex flex-col gap-1 flex-1"> 24289 <label for="amprivacy-checkbox-7" class="label font-bold text-sm text-brandSecondary-700 mb-0 self-stretch"> 24290 <span class="amgdpr-consent-span [&_a]:underline [&_a]:text-brandSecondary-700 [&_a]:font-bold" 24291 @click.prevent="openLink" 24292 data-consent-id="7"> 24293 ChcÄ otrzymywaÄ informacje handlowe o rabatach, produktach, promocjach i usÅugach, w tym newsletter od Fera sp. z o.o. i wyrażam zgodÄ na przekazanie ich na wskazany adres e-mail. </span> 24294 </label> 24295 </div> 24296 </div> 24297 24298 <input type="hidden" 24299 name="am-gdpr-checkboxes-from" 24300 value="amsociallogin_popup_form" 24301 /> 24302 <div class="field field-wrapper field-reserved border-brandPrimary-100 px-6 py-2 flex gap-3 items-start w-full border-b"> 24303 <div> 24304 <input type="hidden" 24305 name="amgdpr_agreement[commercial_information_partners]" 24306 value="0" 24307 /> 24308 <input type="checkbox" 24309 name="amgdpr_agreement[commercial_information_partners]" 24310 title="Informacje handlowe podmiotów trzecich" 24311 value="1" 24312 id="amprivacy-checkbox-4" 24313 class="amgdpr-consent-checkbox form-checkbox rounded w-5 h-5 border-brandPrimary-500 text-brandPrimary-500" 24314 @amgdpr-consent-accepted.window="consentAcceptedHandler" 24315 x-model="checkbox.commercial_information_partners.checked" 24316 data-validation-container="#amgdpr-validation-4" 24317 /> 24318 <div id="amgdpr-validation-4" class="sr-only"></div> 24319 </div> 24320 <div class="flex flex-col gap-1 flex-1"> 24321 <label for="amprivacy-checkbox-4" class="label font-bold text-sm text-brandSecondary-700 mb-0 self-stretch"> 24322 <span class="amgdpr-consent-span [&_a]:underline [&_a]:text-brandSecondary-700 [&_a]:font-bold" 24323 @click.prevent="openLink" 24324 data-consent-id="4"> 24325 ChcÄ też otrzymywaÄ informacje handlowe o produktach, ofertach i usÅugach podmiotów trzecich i wyrażam zgodÄ na przekazanie ich na wskazany adres e-mail. </span> 24326 </label> 24327 </div> 24328 </div> 24329 24330 <input type="hidden" 24331 name="am-gdpr-checkboxes-from" 24332 value="amsociallogin_popup_form" 24333 /> 24334 <div class="field field-wrapper field-reserved border-brandPrimary-100 px-6 py-2 flex gap-3 items-start w-full "> 24335 <div> 24336 <input type="hidden" 24337 name="amgdpr_agreement[commercial_information_sms]"
24338 value="0" 24339 /> 24340 <input type="checkbox" 24341 name="amgdpr_agreement[commercial_information_sms]" 24342 title="Informacje handlowe: SMS" 24343 value="1" 24344 id="amprivacy-checkbox-5" 24345 class="amgdpr-consent-checkbox form-checkbox rounded w-5 h-5 border-brandPrimary-500 text-brandPrimary-500" 24346 @amgdpr-consent-accepted.window="consentAcceptedHandler" 24347 x-model="checkbox.commercial_information_sms.checked" 24348 data-validation-container="#amgdpr-validation-5" 24349 /> 24350 <div id="amgdpr-validation-5" class="sr-only"></div> 24351 </div> 24352 <div class="flex flex-col gap-1 flex-1"> 24353 <label for="amprivacy-checkbox-5" class="label font-bold text-sm text-brandSecondary-700 mb-0 self-stretch"> 24354 <span class="amgdpr-consent-span [&_a]:underline [&_a]:text-brandSecondary-700 [&_a]:font-bold" 24355 @click.prevent="openLink" 24356 data-consent-id="5"> 24357 ChcÄ otrzymywaÄ informacje handlowe o rabatach, produktach, promocjach i usÅugach od Fera sp. z o.o. i wyrażam zgodÄ na przekazanie ich na mój numer telefonu. </span> 24358 </label> 24359 </div> 24360 </div> 24361 24362 <input type="hidden" 24363 name="am-gdpr-checkboxes-from" 24364 value="amsociallogin_popup_form" 24365 /> 24366 </div> 24367 </div> 24368 </fieldset> 24369</div> 24370 24371 <div class="font-medium text-sm text-brandSecondary-700 [&_a]:underline mt-4"> 24372 <p>PowyższÄ zgodÄ można wycofaÄ w każdej chwili, korzystajÄ c z linku w wiadomoÅci lub piszÄ c na <a href="/cdn-cgi/l/email-protection#90f9fff4d0f6f5e2f1bee0fc"><span class="__cf_email__" data-cfemail="dab3b5be9abcbfa8bbf4aab6">[email protected]</span></a><br>Administratorem danych osobowych jest Fera Sp. z o.o. Pola oznaczone gwiazdkÄ sÄ wymagane. WiÄcej informacji o przetwarzaniu danych osobowych znajduje siÄ w polityce prywatnoÅci i plików cookies.</p> </div>
vendor: 110 bytes, lines 24372-24374
24372 24373 24374<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
24374<script data-cfasync="false"> 24375 'use strict'; 24376 24377 function initAmGdprCheckbox() { 24378 return { 24379 checkbox: {"regulations":{"required":true,"checked":false,"consent_code":"regulations","consent_id":2,"expanded":false,"overflows":false},"sms_marketing_information":{"required":false,"checked":false,"consent_code":"sms_marketing_information","consent_id":6,"expanded":false,"overflows":false},"commercial_information_email":{"required":false,"checked":false,"consent_code":"commercial_information_email","consent_id":7,"expanded":false,"overflows":false},"commercial_information_partners":{"required":false,"checked":false,"consent_code":"commercial_information_partners","consent_id":4,"expanded":false,"overflows":false},"commercial_information_sms":{"required":false,"checked":false,"consent_code":"commercial_information_sms","consent_id":5,"expanded":false,"overflows":false}}, 24380 24381 /** 24382 * @returns {void} 24383 */ 24384 init: function () { 24385 this.$watch('checkbox', () => { 24386 this.$refs.allCheckboxesCheck.checked = Object.values(this.checkbox).every(checkbox => checkbox.checked); 24387 }); 24388 // ResizeObserver, not a one-off $nextTick/rAF measurement: this card can be 24389 // initialized while still hidden (display:none) - e.g. inside the AmastySocialLogin 24390 // popup's inactive "register" tab - where scrollHeight/clientHeight both read 0, 24391 // making any one-time overflow check always false. ResizeObserver re-fires when the 24392 // element's box actually changes size, including the 0x0 -> real-size transition 24393 // that happens when a hidden tab/modal becomes visible, so it self-corrects instead 24394 // of getting stuck on a measurement taken while nothing was rendered yet. 24395 Object.keys(this.checkbox).forEach((consentCode) => { 24396 const el = this.$refs['moreInfo-' + consentCode]; 24397 if (!el) { 24398 return; 24399 } 24400 const measureOverflow = () => { 24401 this.checkbox[consentCode].overflows = el.scrollHeight > el.clientHeight; 24402 }; 24403 measureOverflow(); 24404 new ResizeObserver(measureOverflow).observe(el); 24405 }); 24406 }, 24407 24408 /** 24409 * @param {HTMLElement} target 24410 * @returns {void} 24411 */ 24412 openLink({ target }) { 24413 if (target.tagName !== 'A') { 24414 return; 24415 } 24416 24417 const linkHref = target.getAttribute('href'); 24418 const consentId = target.parentElement.dataset.consentId; 24419 linkHref === '#' 24420 ? this.$dispatch('amgdpr-show-policy', consentId) 24421 : location.href = linkHref; 24422 }, 24423 24424 /** 24425 * @param {string} consentId 24426 * @returns {void} 24427 */ 24428 consentAcceptedHandler: function ({ detail: consentId }) { 24429 this.getAcceptedConsentCodes(parseInt(consentId)).forEach((consentCode) => { 24430 this.checkbox[consentCode].checked = true; 24431 }); 24432 }, 24433 24434 /** 24435 * @param {Number} consentId 24436 * @returns {Array} 24437 */ 24438 getAcceptedConsentCodes: function (consentId) { 24439 return Object.values(this.checkbox) 24440 .filter(consent => consent.consent_id === consentId) 24441 .map(consent => consent.consent_code); 24442 }, 24443 24444 toggleAllConsents(event) { 24445 Object.keys(this.checkbox).forEach(consentCode => { 24446 if (this.checkbox[consentCode].required && !event.target.checked) { 24447 return; 24448 } 24449 this.checkbox[consentCode].checked = event.target.checked; 24450 }); 24451 }, 24452 24453 /** 24454 * @param {string} consentCode 24455 * @returns {void} 24456 */ 24457 toggleExpand: function (consentCode) { 24458 this.checkbox[consentCode].expanded = !this.checkbox[consentCode].expanded; 24459 } 24460 } 24461 } 24462 24463 window.addEventListener( 24464 'alpine:init', 24465 () => Alpine.data('initAmGdprCheckbox', initAmGdprCheckbox), 24466 { once: true } 24467 ); 24468</script>
24468 24469 </div> 24470 </div> 24471 </div> 24472 </form> 24473
24474<script> 24475 function initForm() { 24476 return { 24477 errors: 0, 24478 hasCaptchaToken: 0, 24479 customer_form_register_popup_showPassword: false, 24480 customer_form_register_popup_showPasswordConfirm: false, 24481 submitForm() { 24482 this.validate() 24483 .then(() => { 24484 // Do not rename $form, the variable is expected to be declared in the recaptcha output 24485 const $form = document.querySelector('#accountcreate'); 24486 24487 if (this.errors === 0) { 24488 $form.submit(); 24489 } 24490 }) 24491 .catch((invalid) => { 24492 if (invalid.length > 0) { 24493 invalid[0].focus(); 24494 } 24495 }); 24496 }, 24497 } 24498 } 24499 24500 window.addEventListener('DOMContentLoaded', () => { 24501 24502 const postCodeSpecs = {"AD":{"pattern_1":{"example":"AD100","pattern":"^AD\\d{3}$"}},"AM":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"AR":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"},"pattern_2":{"example":"A1234BCD","pattern":"^[a-zA-z]{1}[0-9]{4}[a-zA-z]{3}$"}},"AS":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"AT":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"AU":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"AX":{"pattern_1":{"example":"22123","pattern":"^22\\d{3}$"}},"AZ":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"},"pattern_2":{"example":"123456","pattern":"^[0-9]{6}$"}},"BA":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"BB":{"pattern_1":{"example":"BB12345","pattern":"^(BB\\d{5})?$"}},"BD":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"BE":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"BG":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"BH":{"pattern_1":{"example":"323","pattern":"^((1[0-2]|[1-9])\\d{2})?$"}},"BM":{"pattern_1":{"example":"MA 02","pattern":"^[A-Z]{2}[ ]?[A-Z0-9]{2}$"}},"BN":{"pattern_1":{"example":"AB1234","pattern":"^[a-zA-z]{2}[0-9]{4}$"}},"BR":{"pattern_1":{"example":"12345678","pattern":"^[0-9]{8}$"},"pattern_2":{"example":"12345-678","pattern":"^[0-9]{5}\\-[0-9]{3}$"}},"BY":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"CA":{"pattern_1":{"example":"A1B 2C3","pattern":"^[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}\\s[0-9]{1}[a-zA-z]{1}[0-9]{1}$"},"pattern_2":{"example":"A1B2C3","pattern":"^[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}[0-9]{1}$"},"pattern_3":{"example":"A1B","pattern":"^[a-zA-z]{1}[0-9]{1}[a-zA-z]{1}$"}},"CC":{"pattern_1":{"example":"6799","pattern":"^6799$"}},"CH":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"CK":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"CL":{"pattern_1":{"example":"1234567","pattern":"^\\d{7}$"}},"CN":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"CR":{"pattern_1":{"example":"12345 or 123-1234","pattern":"^\\d{4,5}|\\d{3}-\\d{4}$"}},"CS":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"CU":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"CV":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"CX":{"pattern_1":{"example":"6798","pattern":"^6798$"}},"CY":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"CZ":{"pattern_1":{"example":"123 45","pattern":"^[0-9]{3}\\s[0-9]{2}$"}},"DE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"DK":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"DO":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"DZ":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"EC":{"pattern_1":{"example":"A1234B or AB123456 or 123456","pattern":"^([A-Z]\\d{4}[A-Z]|(?:[A-Z]{2})?\\d{6})?$"}},"EE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"EG":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"ES":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"ET":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"FI":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"FK":{"pattern_1":{"example":"FIQQ 1ZZ","pattern":"^FIQQ 1ZZ$"}},"FM":{"pattern_1":{"example":"96941","pattern":"^(9694[1-4])([ \\-]\\d{4})?$"}},"FO":{"pattern_1":{"example":"123","pattern":"^\\d{3}$"}},"FR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GB":{"pattern_1":{"example":"AB12 3CD","pattern":"^[a-zA-Z]{2}[0-9]{2}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_2":{"example":"A1B 2CD","pattern":"^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_3":{"example":"AB1 2CD","pattern":"^[a-zA-Z]{2}[0-9]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_4":{"example":"AB1C 2DF","pattern":"^[a-zA-Z]{2}[0-9]{1}[a-zA-Z]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_5":{"example":"A12 3BC","pattern":"^[a-zA-Z]{1}[0-9]{2}\\s?[0-9]{1}[a-zA-Z]{2}$"},"pattern_6":{"example":"A1 2BC","pattern":"^[a-zA-Z]{1}[0-9]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"}},"GE":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"GF":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GG":{"pattern_1":{"example":"GY10 2AB","pattern":"^[gG][yY]([1-9]|10)\\s?[0-9]{1}[a-zA-Z]{2}$"}},"GH":{"pattern_1":{"example":"GA18400","pattern":"^[A-Z][A-Z0-9]\\d{3,5}$"}},"GL":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"GN":{"pattern_1":{"example":"123","pattern":"^\\d{3}$"}},"GP":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GS":{"pattern_1":{"example":"SIQQ 1ZZ","pattern":"^SIQQ 1ZZ$"}},"GT":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"GU":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"GW":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"HM":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"HN":{"pattern_1":{"example":"12345","pattern":"^(?:\\d{5})?$"}},"HR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"HT":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"HU":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"IC":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"ID":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"IL":{"pattern_1":{"example":"6687865","pattern":"^[0-9]{7}$"}},"IM":{"pattern_1":{"example":"IM1 1AD","pattern":"^IM\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$"}},"IN":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"IO":{"pattern_1":{"example":"BBND 1ZZ","pattern":"^BBND 1ZZ$"}},"IS":{"pattern_1":{"example":"123","pattern":"^[0-9]{3}$"}},"IQ":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"IT":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}}
24502,"JE":{"pattern_1":{"example":"JE2 4PJ","pattern":"^[jJ][eE][1-5]{1}\\s?[0-9]{1}[a-zA-Z]{2}$"}},"JO":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"JP":{"pattern_1":{"example":"123-4567","pattern":"^[0-9]{3}-[0-9]{4}$"},"pattern_2":{"example":"1234567","pattern":"^[0-9]{7}$"}},"KE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"KG":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"KR":{"pattern_1":{"example":"123-456","pattern":"^[0-9]{3}-[0-9]{3}$"},"pattern_2":{"example":"12345","pattern":"^[0-9]{5}$"}},"KH":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"KW":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"KZ":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"LA":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"LB":{"pattern_1":{"example":"1234 5678","pattern":"^(\\d{4}([ ]?\\d{4})?)?$"}},"LI":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"LK":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"LT":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"LU":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"LV":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"MA":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MC":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MD":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"ME":{"pattern_1":{"example":"81101","pattern":"^8\\d{4}$"}},"MG":{"pattern_1":{"example":"123","pattern":"^[0-9]{3}$"}},"MH":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MK":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"MN":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"MP":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MS":{"pattern_1":{"example":"MSR1250","pattern":"^MSR\\s?\\d{4}$"}},"MQ":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MT":{"pattern_1":{"example":"ABC 1234","pattern":"^[a-zA-Z]{3}\\s[0-9]{4}$"},"pattern_2":{"example":"ABC 123","pattern":"^[a-zA-Z]{3}\\s[0-9]{3}$"},"pattern_3":{"example":"ABC 12","pattern":"^[a-zA-Z]{3}\\s[0-9]{2}$"}},"MU":{"pattern_1":{"example":"A1201 or 80110","pattern":"^([AR]|[0-9])\\d{4,5}$"}},"MV":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"},"pattern_2":{"example":"1234","pattern":"^[0-9]{4}$"}},"MX":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"MY":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"NC":{"pattern_1":{"example":"98800","pattern":"^988\\d{2}$"}},"NE":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"NF":{"pattern_1":{"example":"2899","pattern":"^2899$"}},"NG":{"pattern_1":{"example":"123456","pattern":"^(\\d{6})?$"}},"NI":{"pattern_1":{"example":"22500","pattern":"^\\d{5}$"}},"NL":{"pattern_1":{"example":"1234 AB\/1234AB","pattern":"^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$"},"pattern_2":{"example":"1234","pattern":"^[1-9][0-9]{3}$"}},"NO":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"NP":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"NZ":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"OM":{"pattern_1":{"example":"PC 123 or 123","pattern":"^(PC )?\\d{3}$"}},"PA":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"PF":{"pattern_1":{"example":"98701","pattern":"^987\\d{2}$"}},"PG":{"pattern_1":{"example":"123","pattern":"^\\d{3}$"}},"PH":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"PK":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"PL":{"pattern_1":{"example":"12-345","pattern":"^[0-9]{2}-[0-9]{3}$"}},"PM":{"pattern_1":{"example":"97500","pattern":"^9[78]5\\d{2}$"}},"PN":{"pattern_1":{"example":"PCRN 1ZZ","pattern":"^PCRN 1ZZ$"}},"PR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"PT":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"},"pattern_2":{"example":"1234-567","pattern":"^[0-9]{4}-[0-9]{3}$"}},"PW":{"pattern_1":{"example":"96939 or 96940","pattern":"^(?:96939|96940)$"}}
24502,"PY":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"RE":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"RO":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"RS":{"pattern_1":{"example":"123456","pattern":"^\\d{6}$"}},"RU":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"SA":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"SE":{"pattern_1":{"example":"123 45","pattern":"^[0-9]{3}\\s[0-9]{2}$"}},"SG":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"SI":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"SK":{"pattern_1":{"example":"123 45","pattern":"^[0-9]{3}\\s[0-9]{2}$"}},"SH":{"pattern_1":{"example":"ASCN 1ZZ","pattern":"^(ASCN|STHL) 1ZZ$"}},"SJ":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"SM":{"pattern_1":{"example":"47890","pattern":"^4789\\d$"}},"SN":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"SO":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"SZ":{"pattern_1":{"example":"A123","pattern":"^[a-zA-Z]{1}[0-9]{3}$"}},"TC":{"pattern_1":{"example":"TKCA 1ZZ","pattern":"^TKCA 1ZZ$"}},"TH":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"TJ":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"TM":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"TN":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"TR":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"TT":{"pattern_1":{"example":"120110","pattern":"^\\d{6}$"}},"TW":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"},"pattern_2":{"example":"123","pattern":"^[0-9]{3}$"}},"UA":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"US":{"pattern_1":{"example":"12345-6789","pattern":"^[0-9]{5}\\-[0-9]{4}$"},"pattern_2":{"example":"12345","pattern":"^[0-9]{5}$"}},"UY":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"UZ":{"pattern_1":{"example":"123456","pattern":"^[0-9]{6}$"}},"VA":{"pattern_1":{"example":"00120","pattern":"^00120$"}},"VE":{"pattern_1":{"example":"1234","pattern":"^\\d{4}$"}},"VI":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"WF":{"pattern_1":{"example":"98601","pattern":"^986\\d{2}$"}},"XK":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}},"XY":{"pattern_1":{"example":"12345","pattern":"^[0-9]{5}$"}},"YT":{"pattern_1":{"example":"97601","pattern":"^976\\d{2}$"}},"ZA":{"pattern_1":{"example":"1234","pattern":"^[0-9]{4}$"}},"ZM":{"pattern_1":{"example":"12345","pattern":"^\\d{5}$"}}}; 24503 24504 hyva.formValidation.addRule('postcode', (postCode, options, field, context) => { 24505 context.removeMessages(field, 'postcode-warning') 24506 const countryId = (context.fields['country_id'] && context.fields['country_id'].element.value), 24507 validatedPostCodeExamples = [], 24508 countryPostCodeSpecs = countryId && postCodeSpecs ? postCodeSpecs[countryId] : false; 24509 24510 if (! postCode || ! countryPostCodeSpecs) return true; 24511 24512 for (const postCodeSpec of Object.values(countryPostCodeSpecs)) { 24513 if (new RegExp(postCodeSpec.pattern).test(postCode)) return true; 24514 validatedPostCodeExamples.push(postCodeSpec.example); 24515 } 24516 if (validatedPostCodeExamples) { 24517 context.addMessages(field, 'postcode-warning', [ 24518 'Provided\u0020Zip\u002FPostal\u0020Code\u0020seems\u0020to\u0020be\u0020invalid.', 24519 '\u0020Example\u003A\u0020' + validatedPostCodeExamples.join('; ') + '. ', 24520 'If\u0020you\u0020believe\u0020it\u0020is\u0020the\u0020right\u0020one\u0020you\u0020can\u0020ignore\u0020this\u0020notice.' 24521 ]); 24522 } 24523 24524 return true; 24525 }); 24526 }) 24527</script>
24527 24528 24529 </div> 24530 </template> 24531 </div> 24532 </div> 24533 <div id="amsl-forgot-content" 24534 x-show="activeTab === 'amsl-forgot'" 24535 title="Formularz przypomnienia hasÅa" 24536 x-cloak 24537 role="tabpanel" 24538 > 24539 <div class="grid grid-cols-1 xl:grid-cols-2 items-center"> 24540 <div class="amsl-content amsl-forgot-content 24541 p-8 max-h-screen overflow-y-auto md:max-h-[calc(100vh-48px)] " 24542 > 24543 <template x-if="!isLogged"> 24544 <div class="amsl-form"> 24545 24546 24547 24548<template x-if="formMessages.has('amsl-forgot')"> 24549 <template 24550 x-for="message in formMessages.get('amsl-forgot')" 24551 :key="message" 24552 > 24553 <div class="message error"> 24554 <span x-html="message"></span> 24555 </div> 24556 </template> 24557</template> 24558<form class="form form-forgotpassword" 24559 action="https://fera.pl/customer/account/forgotpasswordpost/" 24560 method="post" 24561 x-data="Object.assign(hyva.formValidation($el), initPasswordForm())" 24562 @submit.prevent="submitForm();" 24563 id="user_forgotpassword"> 24564 <input name="form_key" type="hidden" value="6aqf5MmWWJaNsQwZ" /> <input type="hidden" name="formId" value="user_forgotpassword"/> 24565 <legend class="block text-brandSecondary-900 text-2xl font-extrabold title-font font-heading mb-6"> 24566 Odzyskiwanie hasÅa </legend> 24567 <div class="text-secondary-darker mb-6"> 24568 W celu zresetowania hasÅa podaj adres e-mail, na który wyÅlemy dalsze instrukcje: </div> 24569 <div class="field field-reserved w-full email required"> 24570 <label for="email_address" class="label"> 24571 <span>E-mail</span> 24572 </label> 24573 <div class="control"> 24574 <input name="email" 24575 class="form-input w-full" 24576 required 24577 value="" 24578 autocomplete="off" 24579 id="email_address" 24580 type="email" 24581 title="E-mail" 24582 @input.debounce="onChange" 24583 > 24584 </div> 24585 </div> 24586 <div class="actions-toolbar"> 24587 <button type="submit" class="btn btn-primary w-full disabled:opacity-75" 24588 > 24589 <span>Odzyskaj hasÅo</span> 24590 </button> 24591 </div> 24592 <div> 24593 <template x-if="displayErrorMessage"> 24594 <p class="text-red flex items-center"> 24595 <span class="inline-block w-8 h-8 mr-3"> 24596 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 24597 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/> 24598</svg> 24599 </span> 24600 <template x-for="errorMessage in errorMessages"> 24601 <span x-html="errorMessage"></span> 24602 </template> 24603 </p> 24604 </template> 24605 </div> 24606</form> 24607 24608 24609<button class="btn w-full mt-4" 24610 x-on:click.prevent="activeTab = 'amsl-login'"> 24611 WróÄ</button> 24612
24613<script> 24614 function initPasswordForm() { 24615 return { 24616 errors: 0, 24617 hasCaptchaToken: 0, 24618 displayErrorMessage: false, 24619 errorMessages: [], 24620 setErrorMessages(messages) { 24621 this.errorMessages = [messages] 24622 this.displayErrorMessage = this.errorMessages.length 24623 }, 24624 submitForm() { 24625 this.validate() 24626 .then(() => { 24627 // Do not rename $form, the variable is expected to be declared in the recaptcha output 24628 const $form = document.querySelector('#user_forgotpassword'); 24629 24630 if (this.errors === 0) { 24631 $form.submit(); 24632 } 24633 }) 24634 .catch((invalid) => { 24635 if (invalid.length > 0) { 24636 invalid[0].focus(); 24637 } 24638 }); 24639 } 24640 } 24641 } 24642</script>
24642 24643 </div> 24644 </template> 24645 </div> 24646 <div class="hidden self-stretch xl:flex"> 24647 <img class="object-cover" src="https://static.fera.pl/version1790219430/frontend/Tooks/default/pl_PL/Tooks_AmastySocialLogin/images/amsl-login.webp" alt="" width="792" height="688" loading="lazy"/> 24648 </div> 24649 </div> 24650 </div> 24651 </div> 24652 </div> 24653 24654 </div> 24655 </div> 24656 </div> 24657 </div> 24658
24658<script> 24659 const AmAuthPopup = function () { 24660 const TAB_ID_LOGIN = 'amsl\u002Dlogin'; 24661 const TAB_ID_REGISTER = 'amsl\u002Dregister'; 24662 const TAB_ID_FORGOT = 'amsl\u002Dforgot'; 24663 const IS_KNOWN_CUSTOMER = false; 24664 const modalName = 'social\u002Dlogin\u002Dpopup'; 24665 let componentInitialized = false; 24666 24667 const reCaptchaStatusBySection = { 24668 login: '', 24669 register: '', 24670 forgotPassword: '', 24671 } 24672 24673 const reCaptchaStatusFor = section => reCaptchaStatusBySection[section]; 24674 24675 return { 24676 isGuestCheckoutAllowed: true, 24677 isAccountForgotPasswordPage: false, 24678 activeTab: TAB_ID_LOGIN, 24679 tabs: [TAB_ID_LOGIN, TAB_ID_REGISTER], 24680 socialIconsExpansionState: { 24681 [TAB_ID_LOGIN]: false, 24682 [TAB_ID_REGISTER]: false 24683 }, 24684 isLoading: false, 24685 modalName, 24686 isLogged: false, 24687 socialIconsExpanded: false, 24688 24689 initializeAuthPopup(privateData) { 24690 if (privateData?.data?.customer?.firstname && !IS_KNOWN_CUSTOMER) { 24691 componentInitialized = false; 24692 this.reloadExpiredCustomerData(); 24693 return; 24694 } 24695 24696 if (componentInitialized) { 24697 return; 24698 } 24699 24700 componentInitialized = true; 24701 24702 const origShow = this.show; 24703 const origHide = this.hide; 24704 this.show = (name, event, activeTabName) => { 24705 origShow.call(this, name, event); 24706 this.activeTab = activeTabName || TAB_ID_LOGIN; 24707 } 24708 this.hide = (...args) => { 24709 origHide.call(this, args); 24710 setTimeout(() => { 24711 this.clearForms(); 24712 this.clearFormMessages(); 24713 }, this.animationDuration + 1) 24714 } 24715 24716 this.initModalSettings(); 24717 this.bindLinksEvents(privateData); 24718 this.initContentUpdaters(); 24719 if (!this.isGuestCheckoutAllowed) { 24720 this.bindAuthenticationEvent(privateData); 24721 } 24722 }, 24723 24724 bindAuthenticationEvent(privateData) { 24725 window.addEventListener('toggle-authentication', (event) => { 24726 event.stopPropagation(); 24727 24728 if (!this.isLoggedIn(privateData)) { 24729 this.show( 24730 this.modalName, 24731 event 24732 ); 24733 } else { 24734 window.location.assign(event.detail.url) 24735 } 24736 }, true) 24737 }, 24738 24739 bindLinksEvents(privateData) { 24740 if (!this.isLoggedIn(privateData)) { 24741 this.bindOpeningEvents(); 24742 this.bindForgotLinkEvent(); 24743 requestAnimationFrame(() => { 24744 this.processForms(); 24745 }) 24746 } else { 24747 this.initLogout(); 24748 } 24749 }, 24750 24751 bindOpeningEvents() { 24752 const accountLinks = document.querySelectorAll(`#header a[href^="${BASE_URL}customer/account"], .columns a[href^="${BASE_URL}customer/account"], #mobile-bottom-nav a[href^="${BASE_URL}customer/account"]`) || []; 24753 24754 accountLinks.forEach(elem => { 24755 const isRegisterLink = /\/create\/?(\?.+)?(\#.+)*/.test(elem.href); 24756 elem.removeAttribute('onclick'); 24757 elem.setAttribute('aria-haspopup', 'dialog'); 24758 elem.addEventListener('click', (event) => { 24759 event.preventDefault(); 24760 event.stopPropagation(); 24761 this.show( 24762 this.modalName, 24763 event, 24764 isRegisterLink ? TAB_ID_REGISTER : TAB_ID_LOGIN 24765 ); 24766 }) 24767 }); 24768 24769 if (reCaptchaStatusFor('register')) {
24770 this.moveRecaptchaElement('.recaptcha-create-wrapper'); 24771 } 24772 24773 if (reCaptchaStatusFor('login')) { 24774 this.moveRecaptchaElement('.recaptcha-login-wrapper'); 24775 } 24776 }, 24777 24778 bindForgotLinkEvent() { 24779 const modalContainer = this.$el || this.$root; 24780 const forgotLinks = modalContainer.querySelectorAll( 24781 `a[href^="${BASE_URL}customer/account/forgotpassword"]` 24782 ) || []; 24783 24784 forgotLinks.forEach((element) => { 24785 element.addEventListener('click', (event) => { 24786 event.preventDefault(); 24787 element.setAttribute('aria-haspopup', 'dialog'); 24788 this.activeTab = TAB_ID_FORGOT; 24789 }) 24790 }) 24791 24792 if (reCaptchaStatusFor('forgotPassword') && !this.isAccountForgotPasswordPage) { 24793 this.moveRecaptchaElement('.recaptcha-forgot-wrapper'); 24794 } 24795 }, 24796 24797 isLoggedIn(privateData) { 24798 try { 24799 privateData = privateData?.data ?? JSON.parse(hyva.getBrowserStorage()?.['mage-cache-storage'] || '{}'); 24800 this.isLogged = !!(privateData.customer && privateData.customer.firstname); 24801 } catch (error) { 24802 console.error('Error parsing privateData:', error); 24803 this.isLogged = false; 24804 } 24805 return this.isLogged; 24806 }, 24807 24808 showOnExternalEvent(event) { 24809 const eventData = event.detail || {}; 24810 const message = eventData?.message; 24811 const tabName = eventData?.tabName || TAB_ID_LOGIN; 24812 24813 this.show(this.modalName, event, tabName); 24814 if (message) { 24815 this.setFormMessages(tabName, [message]); 24816 } 24817 }, 24818 24819 canShowAllSocialIcons() { 24820 return this.socialIconsExpansionState[this.activeTab]; 24821 }, 24822 24823 showAllSocialIcons() { 24824 this.socialIconsExpanded = true; 24825 this.socialIconsExpansionState[this.activeTab] = true; 24826 }, 24827 24828 setLoading(isLoading) { 24829 const formButtons = this.$refs[this.modalName].querySelectorAll('[type="submit"]'); 24830 formButtons.forEach(button => { 24831 if (isLoading) { 24832 button.setAttribute('disabled', 'disabled') 24833 } else { 24834 button.removeAttribute('disabled'); 24835 } 24836 }) 24837 this.isLoading = isLoading; 24838 }, 24839 24840 reloadExpiredCustomerData() { 24841 const sections = ['mage-cache-storage', 'private_content_version', 'mage-cache-timeout']; 24842 sections.forEach(section => localStorage.removeItem(section)); 24843 24844 hyva.setCookie('mage-cache-sessid', '', -1); 24845 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 24846 }, 24847 24848 moveRecaptchaElement(element) { 24849 const captchaElement = document.querySelector(element); 24850 if (!captchaElement) { 24851 return; 24852 } 24853 24854 const container = captchaElement.closest('.amsl-form').querySelector('.actions-toolbar'); 24855 container.prepend(captchaElement); 24856 }, 24857 24858 onKeypress(event) { 24859 const activeTabIndex = this.tabs.indexOf(this.activeTab); 24860 24861 if (activeTabIndex < 0 || event.code === 'Tab') { 24862 return; 24863 } 24864 24865 switch (event.code) { 24866 case 'Enter': 24867 case 'Space': 24868 this.activeTab = event.target.id.replace('tab-', ''); 24869 break; 24870 24871 case 'ArrowRight': 24872 this.activeTab = this.tabs[(activeTabIndex + 1) % this.tabs.length] 24873 break; 24874 24875 case 'ArrowLeft': 24876 this.activeTab = this.tabs[(activeTabIndex + this.tabs.length - 1) % this.tabs.length] 24877 break; 24878 24879 case 'End': 24880 this.activeTab = this.tabs[this.tabs.length - 1] 24881 break; 24882 24883 case 'Home': 24884 this.activeTab = this.tabs[0] 24885 break; 24886 } 24887 24888 document.getElementById('tab-' + this.activeTab).focus(); 24889 }, 24890 24891 ...AmAuthPopupModal(modalName), 24892 ...AmAuthPopupForms(), 24893 ...AmAuthPopupRedirect(), 24894 ...AmAuthPopupReloadContent(), 24895 ...AmAuthPopupLogout(), 24896 ...(typeof AmSocialLogin === 'function' ? AmSocialLogin() : {}) 24897 } 24898 } 24899</script>
vendor: 1 bytes, line 24899
24899
24900<script> 24901 (function () { 24902 const resetPasswordForms = document.querySelectorAll('form[action*="/forgotpasswordpost"]'); 24903 resetPasswordForms.forEach(form => { 24904 // add selector which is used for Amasty_InvisibleCaptcha 24905 form.classList.add('form','password', 'forget'); 24906 }); 24907 })(); 24908 24909 // Part of an authentication popup component, which is responsible for form actions 24910 const AmAuthPopupForms = function () { 24911 const TAB_ID_LOGIN = 'amsl\u002Dlogin'; 24912 const TAB_ID_REGISTER = 'amsl\u002Dregister'; 24913 const TAB_ID_FORGOT = 'amsl\u002Dforgot'; 24914 const formsConfig = JSON.parse(`\u007B\u0022amsl\u002Dlogin\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dlogin\u0022,\u0022formId\u0022\u003A\u0022customer\u002Dlogin\u002Dform\u0022,\u0022successMessage\u0022\u003A\u0022Zalogowano\u0020pomy\u005Cu015blnie.\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dregister\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dregister\u0022,\u0022formId\u0022\u003A\u0022accountcreate\u0022,\u0022successMessage\u0022\u003A\u0022Thank\u0020you\u0020for\u0020registering\u0020with\u0020us.\u0022,\u0022submitUrlReplacement\u0022\u003A\u0022amsociallogin\u005C\u002Faccount\u0022\u007D,\u0022amsl\u002Dforgot\u0022\u003A\u007B\u0022formType\u0022\u003A\u0022amsl\u002Dforgot\u0022,\u0022formId\u0022\u003A\u0022user_forgotpassword\u0022,\u0022customSubmitUrl\u0022\u003A\u0022customer\u005C\u002Faccount\u005C\u002Fforgotpasswordpost\u0022\u007D\u007D`); 24915 24916 // Tooks (FERA-2065): hard ceiling after which a still-loading button is force-enabled. 24917 const AMSL_SUBMIT_SAFETY_TIMEOUT = 20000; 24918 24919 return { 24920 formMessages: new Map(), 24921 24922 processForms() { 24923 Object.values(formsConfig).forEach((formOptions) => { 24924 this.processForm(formOptions); 24925 }) 24926 }, 24927 24928 processForm(formOptions) { 24929 const { formId } = formOptions; 24930 const formElement = document.querySelector(`#social-login-popup #${formId}`); 24931 24932 if (formElement) { 24933 this.bindFormSubmit(formElement, formOptions); 24934 } 24935 }, 24936 24937 // Tooks (FERA-2065): $refs-independent re-enable. Resolves the modal root from 24938 // whatever is still attached to the DOM and clears the disabled state set by 24939 // setLoading(true). Never throws, so it is safe to call from catch/finally. 24940 forceEnableSubmit() { 24941 try { 24942 const root = (this.$refs && this.$refs[this.modalName]) 24943 || (typeof this.$root !== 'undefined' && this.$root) 24944 || document.getElementById(this.modalName) 24945 || document.querySelector('#social-login-popup'); 24946 24947 if (root) { 24948 root.querySelectorAll('[type="submit"]').forEach((button) => { 24949 button.removeAttribute('disabled'); 24950 }); 24951 } 24952 } catch (error) { 24953 console.error(error); 24954 } finally { 24955 this.isLoading = false; 24956 } 24957 }, 24958 24959 bindFormSubmit(formElement, formOptions) { 24960 const { formType, successMessage, submitUrlReplacement, customSubmitUrl } = formOptions; 24961 24962 let submitUrl = formElement.action; 24963 if (submitUrlReplacement) { 24964 submitUrl = submitUrl.replace('customer/account', submitUrlReplacement); 24965 } 24966 24967 if (customSubmitUrl) { 24968 let baseUrl = 'https://fera.pl/'; 24969 submitUrl = baseUrl + customSubmitUrl; 24970 } 24971 24972 // Hyva calls $form.submit() after successful validation. 24973 // Tooks (FERA-2065): guarantee the button is always re-enabled - 24974 // - safety timeout covers a hung/never-settling fetch, 24975 // - the whole flow is wrapped so a synchronous throw cannot skip re-enable, 24976 // - both catch and finally restore the button defensively. 24977 formElement.submit = () => { 24978 let safetyTimer = setTimeout(() => this.forceEnableSubmit(), AMSL_SUBMIT_SAFETY_TIMEOUT); 24979 24980 const restore = () => { 24981 clearTimeout(safetyTimer); 24982 try { 24983 this.setLoading(false); 24984 } catch (error) { 24985 console.error(error); 24986 } 24987 this.forceEnableSubmit(); 24988 }; 24989 24990 try { 24991 this.clearFormMessages(); 24992 this.setLoading(true); 24993 24994 this.formAjaxSubmit( 24995 formElement, 24996 submitUrl 24997 ).then((result) => { 24998 if (!result.errors.length) { 24999 this.hide(this.modalName); 25000 const notification = result.success || successMessage; 25001 if (notification) { 25002 window.dispatchEvent( 25003 new CustomEvent( 25004 'amsl-popup-show-notification', 25005 { 25006 detail: notification 25007 } 25008 ) 25009 ); 25010 } 25011 } 25012 if (result.errors.length) { 25013 this.setFormMessages(formType, result.errors); 25014 return; 25015 } 25016 this.processRedirect(); 25017 }).catch((error) => { 25018 console.error(error); 25019 }).finally(restore); 25020 } catch (error) { 25021 console.error(error);
25022 restore(); 25023 } 25024 } 25025 }, 25026 25027 async formAjaxSubmit(form, url) { 25028 let errors = []; 25029 let success = ''; 25030 25031 try { 25032 await fetch(url, { 25033 method: 'POST', 25034 body: new FormData(form) 25035 }); 25036 25037 const messages = this.extractMageMessages(); 25038 const errorMessages = messages.filter(({ type }) => type === 'error'); 25039 const successMessages = messages.filter(({ type }) => type === 'success'); 25040 25041 errors = errorMessages.map(({ text }) => text); 25042 if (successMessages.length) { 25043 success = successMessages.pop().text || ''; 25044 } 25045 } catch (error) { 25046 console.error(error); 25047 errors.push('Przepraszamy\u0020co\u015B\u0020posz\u0142o\u0020nie\u0020tak.\u0020Prosimy\u0020spr\u00F3bowa\u0107\u0020ponownie\u0020p\u00F3\u017Aniej.'); 25048 } 25049 25050 return { errors, success }; 25051 }, 25052 25053 extractMageMessages() { 25054 const messagesCookie = hyva.getCookie('mage-messages'); 25055 const messages = messagesCookie 25056 ? JSON.parse(decodeURIComponent(messagesCookie).replace(/\+/g, ' ')) 25057 : []; 25058 hyva.setCookie('mage-messages','', -1, true); 25059 25060 return messages; 25061 }, 25062 25063 clearFormMessages() { 25064 this.formMessages = new Map(); 25065 }, 25066 25067 setFormMessages(formType, messages) { 25068 const formMessages = new Map(this.formMessages); 25069 25070 formMessages.set(formType, messages); 25071 this.formMessages = formMessages; 25072 }, 25073 25074 clearForms() { 25075 const forms = this.$refs[this.modalName].querySelectorAll('form') || []; 25076 forms.forEach((form) => form.reset()); 25077 } 25078 } 25079 } 25080</script>
vendor: 1 bytes, line 25080
25080
25081<script> 25082 const AmAuthPopupLogout = function () { 25083 return { 25084 initLogout() { 25085 const logoutLinks = document.querySelectorAll(`a[href*="customer/account/logout"]`) || []; 25086 25087 logoutLinks.forEach(elem => { 25088 elem.addEventListener('click', (event) => { 25089 event.preventDefault(); 25090 this.sendLogOut() 25091 }) 25092 }) 25093 }, 25094 25095 sendLogOut() { 25096 fetch(BASE_URL + "customer/account/logout", { 25097 method: 'GET', 25098 credentials: "include" 25099 }).then(response => { 25100 window.dispatchEvent( 25101 new CustomEvent( 25102 'amsl-popup-show-notification', 25103 { 25104 detail: 'Zosta\u0142e\u015B\u0020wylogowany.' 25105 } 25106 ) 25107 ); 25108 this.processRedirect(this.isInAccountSection() ? BASE_URL : ''); 25109 }) 25110 .catch(error => { 25111 console.error(error); 25112 this.processRedirect(); 25113 }) 25114 }, 25115 25116 isInAccountSection() { 25117 return document.querySelector('body').classList.contains('account'); 25118 } 25119 } 25120 } 25121</script>
25121 25122 <div x-data="AmAuthPopupNotification()" 25123 x-init="initialize()" 25124 x-on:amsl-popup-show-notification.window="showNotification($event.detail)" 25125 > 25126 <div x-cloak data-dialog-ref-name="amsl-popup-notification" 25127 x-bind="overlay" 25128 class="fixed inset-0 bg-black bg-opacity-50 z-50"> 25129 <div class="fixed flex justify-center items-center text-left z-40 amsl-popup-notification text-green-600 px-2 min-w-[300px] inset-0"> 25130 <div x-ref="amsl-popup-notification" role="dialog" aria-modal="true" 25131 class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain"> 25132 <div class="relative"> 25133 <button 25134 type="button" 25135 class="amsl-close absolute left-full bottom-full transform translate-x-2 25136 -translate-y-2 text-gray-400 hover:text-blue-800" 25137 x-on:click="hide()" 25138 title="Zamknij" 25139 aria-label="Zamknij" 25140 role="button" 25141 > 25142 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 25143 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 25144<title>x</title></svg> 25145 </button> 25146 <template x-if="notification"> 25147 <div x-html="notification"></div> 25148 </template> 25149</div> 25150 </div> 25151 </div> 25152 </div> 25153 </div> 25154 25155
25156<script> 25157 (() => { 25158 const promotionsObject = { 25159 options: { 25160 observerConfig: { 25161 root: null, 25162 threshold: 1 25163 }, 25164 trackFlagAttribute: 'promo-tracked', 25165 selectPromoEvent: 'select_promotion', 25166 viewPromoEvent: 'view_promotion' 25167 }, 25168 selectors: { 25169 container: '[data-promotion-event]', 25170 }, 25171 dataAttributes: { 25172 creativeName: 'promotionCreativeName', 25173 creativeSlot: 'promotionCreativeSlot', 25174 promotionId: 'promotionId', 25175 promotionName: 'promotionName', 25176 promotionItems: 'promotionItems' 25177 }, 25178 25179 trackPromoNodes() { 25180 const untrackedPromoNodes = this.getUntrackedPromoNodes(); 25181 untrackedPromoNodes.forEach((node) => { 25182 node.addEventListener('click', (event) => { 25183 this.trackSelectPromoEvent(event); 25184 }); 25185 this.createIntersectionObserver(node); 25186 }); 25187 this.markPromoNodesAsTracked(untrackedPromoNodes); 25188 }, 25189 25190 handleViewPromotion(event) { 25191 const element = event.detail?.element; 25192 if (element) { 25193 this.pushEventInDataLayer(element, this.options.viewPromoEvent); 25194 } 25195 }, 25196 25197 trackSelectPromoEvent(event) { 25198 const target = event.target.closest(this.selectors.container); 25199 if (!target) { 25200 return; 25201 } 25202 this.pushEventInDataLayer(target, this.options.selectPromoEvent); 25203 }, 25204 25205 getUntrackedPromoNodes() { 25206 return Array.from(document.querySelectorAll(`${this.selectors.container}:not([${this.options.trackFlagAttribute}])`)); 25207 }, 25208 25209 markPromoNodesAsTracked(nodes) { 25210 nodes.forEach((node) => { 25211 node.setAttribute(this.options.trackFlagAttribute, 'true'); 25212 }); 25213 }, 25214 25215 createIntersectionObserver(target) { 25216 const observer = new IntersectionObserver((entries) => { 25217 entries.forEach((entry) => { 25218 if (!entry.isIntersecting) return; 25219 25220 this.pushEventInDataLayer(entry.target, this.options.viewPromoEvent); 25221 observer.disconnect(); 25222 }); 25223 }, this.options.observerConfig); 25224 observer.observe(target); 25225 }, 25226 25227 pushEventInDataLayer(element, eventName) { 25228 const container = element.closest(this.selectors.container); 25229 if (!container) return; 25230 const promotionData = { 25231 creative_name: container.dataset[this.dataAttributes.creativeName], 25232 creative_slot: container.dataset[this.dataAttributes.creativeSlot], 25233 promotion_id: container.dataset[this.dataAttributes.promotionId], 25234 promotion_name: container.dataset[this.dataAttributes.promotionName], 25235 }; 25236 const promotionItems = container.dataset[this.dataAttributes.promotionItems]; 25237 if (promotionItems) { 25238 promotionData.items = JSON.parse(promotionItems); 25239 } 25240 window.dataLayer = window.dataLayer || []; 25241 window.dataLayer.push({ ecommerce: null }); 25242 window.dataLayer.push(this.getPromotionObject(promotionData, eventName)); 25243 }, 25244 25245 getPromotionObject(promotionData, eventName) { 25246 return { 25247 event: eventName, 25248 ecommerce: { ...promotionData }, 25249 }; 25250 } 25251 } 25252 25253 window.addEventListener('init-external-scripts', () => { 25254 promotionsObject.trackPromoNodes(); 25255 }, { once: true, passive: true }); 25256 })(); 25257</script>
25257 25258</div>
25258<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"4b47da4b9f5048d99f777cb2417b0db8","spa":2}' crossorigin="anonymous"></script>
25258 25259</body> 25260</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.