{"id":111672,"date":"2026-06-16T13:45:26","date_gmt":"2026-06-16T11:45:26","guid":{"rendered":"https:\/\/wentilo.rotenso.com\/?page_id=111672"},"modified":"2026-07-17T11:42:13","modified_gmt":"2026-07-17T09:42:13","slug":"dobierz-swoj-rekuperator","status":"publish","type":"page","link":"https:\/\/wentilo.rotenso.com\/pl\/dobierz-swoj-rekuperator\/","title":{"rendered":"Dobierz sw\u00f3j rekuperator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"111672\" class=\"elementor elementor-111672\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7f9e558 e-flex e-con-boxed e-con e-parent\" data-id=\"7f9e558\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f0bb12c elementor-widget elementor-widget-html\" data-id=\"f0bb12c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"rcc-widget\" id=\"rcc-main\">\r\n  <!-- Header -->\r\n  <div class=\"rcc-header\">\r\n    <h1>Asystent doboru rekuperacji<\/h1>\r\n    <p>W 4 krokach dobierzemy odpowiedni\u0105 wydajno\u015b\u0107 i model rekuperatora Rotenso Wentilo Icon dla Twojego domu.<\/p>\r\n  <\/div>\r\n  \r\n  <!-- Final Results Banner -->\r\n  <div class=\"rcc-final-banner\" id=\"rcc-final-banner\">\r\n    <div class=\"rcc-final-power\" style=\"font-size: 32px; margin-bottom: 8px;\">Gotowe!<\/div>\r\n    <div class=\"rcc-final-desc\" style=\"font-size: 15px; font-weight: normal; color: var(--rcc-gray-700); margin-bottom: 0px;\">Oto urz\u0105dzenie, kt\u00f3re najlepiej odpowiada wybranym przez Ciebie parametrom.<\/div>\r\n    <div class=\"rcc-final-desc\" id=\"rcc-final-specs\" style=\"font-size: 12px; color: var(--rcc-gray-500); padding-top: 5px;\"><\/div>\r\n    <button class=\"rcc-restart-btn\" onclick=\"rcc.restart()\" style=\"margin-top: 16px;\">\u21ba Zmie\u0144 parametry<\/button>\r\n  <\/div>\r\n\r\n  <!-- Toolbar with counts -->\r\n  <div class=\"rcc-results-toolbar\">\r\n    <div class=\"rcc-results-header\" id=\"rcc-results-count\">\u0141adowanie rekuperator\u00f3w...<\/div>\r\n  <\/div>\r\n\r\n  <!-- Products Grid -->\r\n  <div class=\"rcc-bg-grid\" id=\"rcc-bg-grid\"><\/div>\r\n\r\n  <!-- Contact Form Section -->\r\n  <div class=\"rcc-contact-section\" id=\"rcc-contact-section\" style=\"display: none;\">\r\n    <div class=\"rcc-contact-container\">\r\n      <h2>Zapytaj o szczeg\u00f3\u0142y oferty<\/h2>\r\n      <p class=\"rcc-contact-desc\">Wype\u0142nij poni\u017cszy formularz. Nasz doradca skontaktuje si\u0119 z Tob\u0105 i przygotuje bezp\u0142atn\u0105 wycen\u0119.<\/p>\r\n      \r\n      <!-- Selected Model Badge -->\r\n      <div class=\"rcc-selected-badge\">\r\n        Wybrane urz\u0105dzenie: <span id=\"rcc-selected-model-name\">\u2014<\/span>\r\n      <\/div>\r\n      \r\n      <form id=\"rcc-contact-form\" novalidate onsubmit=\"rcc.submitContactForm(event)\">\r\n        <div class=\"rcc-form-grid\">\r\n          <div class=\"rcc-form-group\">\r\n            <label for=\"rcc-form-name\">Imi\u0119 i nazwisko<\/label>\r\n            <input type=\"text\" id=\"rcc-form-name\" required placeholder=\"np. Jan Kowalski\" oninput=\"rcc.clearFieldError('name')\">\r\n            <div class=\"rcc-field-error\" id=\"rcc-error-name\"><\/div>\r\n          <\/div>\r\n          <div class=\"rcc-form-group\">\r\n            <label for=\"rcc-form-phone\">Telefon kontaktowy<\/label>\r\n            <input type=\"tel\" id=\"rcc-form-phone\" required placeholder=\"np. +48 500 600 700\" oninput=\"rcc.clearFieldError('phone')\">\r\n            <div class=\"rcc-field-error\" id=\"rcc-error-phone\"><\/div>\r\n          <\/div>\r\n          <div class=\"rcc-form-group\">\r\n            <label for=\"rcc-form-email\">Adres e-mail<\/label>\r\n            <input type=\"email\" id=\"rcc-form-email\" required placeholder=\"np. jan.kowalski@email.pl\" oninput=\"rcc.clearFieldError('email')\">\r\n            <div class=\"rcc-field-error\" id=\"rcc-error-email\"><\/div>\r\n          <\/div>\r\n          <div class=\"rcc-form-group\">\r\n            <label for=\"rcc-form-location\">Kod pocztowy<\/label>\r\n            <input type=\"text\" id=\"rcc-form-location\" required placeholder=\"np. 00-001\" oninput=\"rcc.clearFieldError('location')\">\r\n            <div class=\"rcc-field-error\" id=\"rcc-error-location\"><\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"rcc-form-group\" style=\"margin-top: 16px;\">\r\n          <label for=\"rcc-form-message\">Wiadomo\u015b\u0107<\/label>\r\n          <textarea id=\"rcc-form-message\" rows=\"4\" required placeholder=\"Twoja wiadomo\u015b\u0107...\" oninput=\"rcc.clearFieldError('message')\"><\/textarea>\r\n          <div class=\"rcc-field-error\" id=\"rcc-error-message\"><\/div>\r\n        <\/div>\r\n\r\n        <!-- RODO Consents -->\r\n        <div class=\"rcc-consents\">\r\n          <label class=\"rcc-consent-label\">\r\n            <input type=\"checkbox\" required onchange=\"rcc.clearFieldError('consent')\">\r\n            <span>Wyra\u017cam zgod\u0119 na przetwarzanie moich danych osobowych w celu kontaktu handlowego. <a href=\"https:\/\/rotenso.com\/pl\/polityka-prywatnosci\/\" target=\"_blank\">Polityka prywatno\u015bci<\/a>.<\/span>\r\n          <\/label>\r\n          <div class=\"rcc-field-error\" id=\"rcc-error-consent\"><\/div>\r\n        <\/div>\r\n\r\n        <button type=\"submit\" class=\"rcc-submit-btn\">Wy\u015blij zapytanie<\/button>\r\n      <\/form>\r\n      <div class=\"rcc-form-success\" id=\"rcc-form-success\" style=\"display: none;\">\r\n        <h3>Dzi\u0119kujemy za kontakt!<\/h3>\r\n        <p>Twoje zapytanie zosta\u0142o wys\u0142ane. Skontaktujemy si\u0119 z Tob\u0105 najszybciej, jak to mo\u017cliwe.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- Wizard Dialog -->\r\n  <div class=\"rcc-wizard-overlay\" id=\"rcc-wizard\" style=\"display: flex; flex-direction: column; max-height: 80vh;\">\r\n  <div class=\"rcc-wizard-header\">\r\n    <div class=\"rcc-wizard-step-info\" id=\"rcc-step-indicator\">1 \/ 4 Powierzchnia i wysoko\u015b\u0107<\/div>\r\n  <\/div>\r\n\r\n  <div style=\"overflow-y: auto; flex: 1;\">\r\n    \r\n    <!-- Progress Indicator Circles -->\r\n    <div class=\"rcc-wizard-progress\">\r\n      <div class=\"rcc-progress-step active\" data-step=\"0\" onclick=\"rcc.goToStep(0)\">1<\/div>\r\n      <div class=\"rcc-progress-line\"><\/div>\r\n      <div class=\"rcc-progress-step\" data-step=\"1\" onclick=\"rcc.goToStep(1)\">2<\/div>\r\n      <div class=\"rcc-progress-line\"><\/div>\r\n      <div class=\"rcc-progress-step\" data-step=\"2\" onclick=\"rcc.goToStep(2)\">3<\/div>\r\n      <div class=\"rcc-progress-line\"><\/div>\r\n      <div class=\"rcc-progress-step\" data-step=\"3\" onclick=\"rcc.goToStep(3)\">4<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"rcc-active-filters\" id=\"rcc-filters\"><\/div>\r\n    <div class=\"rcc-live-calc\" id=\"rcc-live-calc\">\r\n      Projektowa wymiana: <span id=\"rcc-live-kw\">\u2014<\/span> m\u00b3\/h\r\n    <\/div>\r\n\r\n    <!-- Krok 1: Powierzchnia i Wysoko\u015b\u0107 -->\r\n    <div class=\"rcc-step active\" data-step=\"0\">\r\n      <div class=\"rcc-step-title\">Podaj powierzchni\u0119 u\u017cytkow\u0105:<\/div>\r\n      <div class=\"rcc-step-desc\" style=\"margin-bottom: 16px;\">(z wy\u0142\u0105czeniem gara\u017cu i piwnicy)<\/div>\r\n      <div class=\"rcc-field-wrap\">\r\n        <input type=\"number\" id=\"rcc-area\" min=\"5\" max=\"200\" maxlength=\"3\" placeholder=\"Wpisz powierzchni\u0119, np. 125\" oninput=\"rcc.onInput()\">\r\n        <span class=\"rcc-field-unit\">m\u00b2<\/span>\r\n      <\/div>\r\n      <div class=\"rcc-area-warning\" id=\"rcc-area-warning\">\r\n        <strong>Imponuj\u0105cy metra\u017c!<\/strong> Nasze systemy rekuperacji projektujemy tak, aby osi\u0105ga\u0142y swoj\u0105 szczytow\u0105 sprawno\u015b\u0107 i 100% efektywno\u015bci na powierzchniach do 200 m\u00b2.\r\n        <br><br>\r\n        Przy Twoim metra\u017cu standardowy automatyczny dob\u00f3r mo\u017ce nie odda\u0107 pe\u0142ni mo\u017cliwo\u015bci sprz\u0119tu. Doko\u0144cz formularz, a nasz zesp\u00f3\u0142 bezp\u0142atnie zweryfikuje parametry i dobierze rozwi\u0105zanie (np. uk\u0142ad kaskadowy), kt\u00f3re idealnie obs\u0142u\u017cy Tw\u00f3j dom.\r\n      <\/div>\r\n      <div class=\"rcc-step-title\" style=\"margin-top: 24px;\">Wybierz wysoko\u015b\u0107 kondygnacji:<\/div>\r\n      <div class=\"rcc-cards\" id=\"rcc-height-cards\" style=\"margin-top: 12px;\">\r\n        <div class=\"rcc-card\" data-val=\"standard\" data-h=\"2.6\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectCard('height', 'standard', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">Standardowa (2,4 - 2,8 m)<\/div>\r\n          <div class=\"rcc-card-sub\">Do wi\u0119kszo\u015bci standardowych mieszka\u0144 i dom\u00f3w jednorodzinnych.<\/div>\r\n        <\/div>\r\n        <div class=\"rcc-card\" data-val=\"high\" data-h=\"3.0\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectCard('height', 'high', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">Wysoka (powy\u017cej 2,9 m)<\/div>\r\n          <div class=\"rcc-card-sub\">Do loft\u00f3w, antresoli, kamienic o wysokim suficie.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Krok 2: Wymiennik -->\r\n    <div class=\"rcc-step\" data-step=\"1\" id=\"step-exchanger\">\r\n      <div class=\"rcc-step-title\">Wybierz wymiennik<br><span style=\"font-size: 18px\">z odzyskiem ciep\u0142a lub ciep\u0142a i wilgoci:<\/span><\/div>\r\n      <div class=\"rcc-cards\" style=\"margin-top: 16px;\">\r\n        <div class=\"rcc-card\" data-val=\"standard\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectCard('exchanger', 'standard', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">Maksymalny odzysk ciep\u0142a<\/div>\r\n          <div class=\"rcc-card-sub\">Odzyskuje ciep\u0142o z powietrza usuwanego do nawiewanego. Wysoka efektywno\u015b\u0107 energetyczna.<\/div>\r\n        <\/div>\r\n        <div class=\"rcc-card\" data-val=\"entalpic\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectCard('exchanger', 'entalpic', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">Odzysk ciep\u0142a i wilgoci<\/div>\r\n          <div class=\"rcc-card-sub\">Odzyskuje ciep\u0142o oraz wilgo\u0107, zapobiegaj\u0105c przesuszeniu powietrza w zimie.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"rcc-info-link\" onclick=\"rcc.toggleInfoBox('info-exchanger')\">\r\n        <span class=\"rcc-info-icon\">\u24d8<\/span> Co to s\u0105 wymienniki?\r\n      <\/div>\r\n      <div class=\"rcc-info-box\" id=\"info-exchanger\">\r\n        Wymiennik przeciwpr\u0105dowy (Odzysk ciep\u0142a) przekazuje ciep\u0142o z wywiewanego powietrza do nawiewanego. Wymiennik entalpiczny (Odzysk ciep\u0142a i wilgoci) posiada specjaln\u0105 membran\u0119, kt\u00f3ra odzyskuje r\u00f3wnie\u017c wilgo\u0107 z powietrza. Dzi\u0119ki temu powietrze w domu nie wysusza si\u0119 nadmiernie zim\u0105, a samo urz\u0105dzenie nie potrzebuje odp\u0142ywu skroplin.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Krok 3: System sterowania -->\r\n    <div class=\"rcc-step\" data-step=\"2\" id=\"step-systems\">\r\n      <div class=\"rcc-step-title\">Wybierz system sterowania:<\/div>\r\n      <div class=\"rcc-cards\" style=\"margin-top: 16px;\">\r\n        <div class=\"rcc-card\" data-val=\"1\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectCard('version', '1', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">System standardowy<\/div>\r\n          <div class=\"rcc-card-sub\">Wszystko, czego potrzeba do codziennej wentylacji.<\/div>\r\n        <\/div>\r\n        <div class=\"rcc-card\" data-val=\"4\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectCard('version', '4', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">System inteligentny<\/div>\r\n          <div class=\"rcc-card-sub\">Wi\u0119cej mocy i inteligentna kontrola jako\u015bci powietrza.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"rcc-step-title\" style=\"margin-top: 24px;\">Wybierz panel steruj\u0105cy:<\/div>\r\n      <div class=\"rcc-cards\" id=\"rcc-panel-cards\" style=\"margin-top: 12px; grid-template-columns: repeat(2, 1fr);\">\r\n        <div class=\"rcc-card\" data-val=\"iswitch\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectPanel('iswitch', 0, this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\" style=\"display: flex; flex-direction: column; min-height: 120px; padding: 12px;\">\r\n          <div style=\"display: flex; flex-direction: row; align-items: center; margin-bottom: 8px;\">\r\n            <img decoding=\"async\" src=\"https:\/\/wentilo.rotenso.com\/wp-content\/uploads\/2026\/06\/iSWITCH-Ti.png\" alt=\"iSWITCH Ti\" style=\"height: 60px; object-fit: contain; margin-right: 12px; flex-shrink: 0;\" data-no-retina=\"\">\r\n            <div style=\"display: flex; flex-direction: column; justify-content: center;\">\r\n              <div class=\"rcc-card-title\" style=\"margin-bottom: 0; line-height: normal;\">iSWITCH Ti<\/div>\r\n              <div class=\"rcc-card-sub\" style=\"margin-bottom: 0;\">+0 z\u0142<\/div>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"rcc-card-desc\" style=\"font-size: 12px; color: var(--rcc-gray-500); line-height: 1.3;\">Dotykowy, minimalistyczny szklany panel z czujnikiem temperatury i wilgotno\u015bci oraz wbudowanym Wi-Fi.<\/div>\r\n        <\/div>\r\n        <div class=\"rcc-card\" data-val=\"isense\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectPanel('isense', 470, this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\" style=\"display: flex; flex-direction: column; min-height: 120px; padding: 12px;\">\r\n          <div style=\"display: flex; flex-direction: row; align-items: center; margin-bottom: 8px;\">\r\n            <img decoding=\"async\" src=\"https:\/\/wentilo.rotenso.com\/wp-content\/uploads\/2026\/06\/iSENSE-5i.png\" alt=\"iSENSE 5i\" style=\"height: 60px; object-fit: contain; margin-right: 12px; flex-shrink: 0;\">\r\n            <div style=\"display: flex; flex-direction: column; justify-content: center;\">\r\n              <div class=\"rcc-card-title\" style=\"margin-bottom: 0; line-height: normal;\">iSENSE 5i<\/div>\r\n              <div class=\"rcc-card-sub\" style=\"margin-bottom: 0;\">+470 z\u0142<\/div>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"rcc-card-desc\" style=\"font-size: 12px; color: var(--rcc-gray-500); line-height: 1.3;\">Zaawansowany panel z kolorowym dotykowym wy\u015bwietlaczem, czujnikiem temperatury, harmonogramem i wbudowanym Wi-Fi.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"rcc-info-link\" onclick=\"rcc.toggleInfoBox('info-systems')\" style=\"margin-top: 24px;\">\r\n        <span class=\"rcc-info-icon\">\u24d8<\/span> Jakie s\u0105 r\u00f3\u017cnice w systemach?\r\n      <\/div>\r\n      <div class=\"rcc-info-box\" id=\"info-systems\">\r\n        System standardowy (E1\/S1) oferuje wszystko, co niezb\u0119dne do codziennego sterowania wentylacj\u0105. System inteligentny (E4\/S4) to ulepszona linia urz\u0105dze\u0144, wyposa\u017cona w mocniejsze wentylatory o wy\u017cszym spr\u0119\u017cu (250-300 Pa - wa\u017cne przy d\u0142ugich kana\u0142ach) oraz zaawansowane algorytmy dynamicznej pracy na podstawie jako\u015bci powietrza.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Krok 4: Monta\u017c -->\r\n    <div class=\"rcc-step\" data-step=\"3\" id=\"step-montaz\">\r\n      <div class=\"rcc-step-title\">Spos\u00f3b monta\u017cu:<\/div>\r\n      <div class=\"rcc-cards\" style=\"grid-template-columns: repeat(3, 1fr); margin-top: 12px; margin-bottom: 24px;\">\r\n        <div class=\"rcc-card\" data-val=\"stoj\u0105cy\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectMontaz('stoj\u0105cy', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">Na pod\u0142odze<\/div>\r\n          <div class=\"rcc-card-sub\">Prosta instalacja i \u0142atwy serwis - bez wiercenia w \u015bcianie.<\/div>\r\n        <\/div>\r\n        <div class=\"rcc-card\" data-val=\"wisz\u0105cy\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectMontaz('wisz\u0105cy', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">Na \u015bcianie<\/div>\r\n          <div class=\"rcc-card-sub\">Wygodny tam, gdzie liczy si\u0119 ka\u017cdy metr pod\u0142ogi.<\/div>\r\n        <\/div>\r\n        <div class=\"rcc-card\" data-val=\"podwieszany\" role=\"button\" tabindex=\"0\" onclick=\"rcc.selectMontaz('podwieszany', this)\" onkeydown=\"if(event.key==='Enter'||event.key===' '){event.preventDefault(); this.click();}\">\r\n          <div class=\"rcc-card-title\">Na suficie<\/div>\r\n          <div class=\"rcc-card-sub\">Monta\u017c tam, gdzie przestrze\u0144 i tak jest nieu\u017cywana.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"rcc-info-link\" onclick=\"rcc.toggleInfoBox('info-montaz')\">\r\n        <span class=\"rcc-info-icon\">\u24d8<\/span> Dowiedz si\u0119 wi\u0119cej na temat monta\u017cu\r\n      <\/div>\r\n      <div class=\"rcc-info-box\" id=\"info-montaz\">\r\n        Centrale Wentilo Icon IT przeznaczone s\u0105 do monta\u017cu stoj\u0105cego (na pod\u0142odze) lub wisz\u0105cego (na \u015bcianie). Wersje p\u0142askie (IC i IS) mo\u017cna montowa\u0107 we wszystkich trzech pozycjach, w tym pod sufitem.\r\n      <\/div>\r\n\r\n      <button class=\"rcc-btn-full\" id=\"rcc-btn-finish\" onclick=\"rcc.finish()\" style=\"margin-top: 24px;\" disabled>Poka\u017c dopasowane modele<\/button>\r\n    <\/div>\r\n\r\n    <!-- Krok 5: Gotowe! \/ Podsumowanie -->\r\n    <div class=\"rcc-step\" data-step=\"4\" id=\"step-summary\" style=\"text-align: center;\">\r\n      <div class=\"rcc-step-title\" style=\"font-size: 32px; color: var(--rcc-red); margin-bottom: 12px;\">Gotowe!<\/div>\r\n      <div class=\"rcc-step-desc\" style=\"font-size: 15px; color: var(--rcc-gray-700); margin-bottom: 0px; line-height: 1.4;\">\r\n        Oto urz\u0105dzenie, kt\u00f3re najlepiej odpowiada wybranym przez Ciebie parametrom.\r\n      <\/div>\r\n\r\n      <hr style=\"border: none; border-top: 1px solid var(--rcc-gray-200); margin: 20px 0;\">\r\n\r\n      <div style=\"font-size: 12px; color: var(--rcc-gray-500); line-height: 1.4; text-align: center;\">\r\n        <div style=\"font-weight: 600; margin-bottom: 4px; color: var(--rcc-gray-700);\">Wybrane parametry:<\/div>\r\n        <div id=\"rcc-summary-specs\" style=\"color: var(--rcc-gray-500);\"><\/div>\r\n      <\/div>\r\n\r\n      <button class=\"rcc-btn-full\" onclick=\"rcc.restart()\" style=\"margin-top: 24px;\">\u21ba Dobierz ponownie<\/button>\r\n    <\/div>\r\n\r\n  <\/div><!-- koniec scrollowalnego diva -->\r\n\r\n  <div class=\"rcc-wizard-footer\">\r\n    <button class=\"rcc-collapse-btn\" id=\"rcc-btn-collapse\" onclick=\"rcc.toggleCollapse()\">Zwi\u0144 &#709;<\/button>\r\n    <div class=\"rcc-wizard-nav-arrows\">\r\n      <button class=\"rcc-nav-arrow\" id=\"rcc-btn-prev\" onclick=\"rcc.prevStep()\" disabled>Wstecz<\/button>\r\n      <button class=\"rcc-nav-arrow\" id=\"rcc-btn-next\" onclick=\"rcc.nextStep()\" disabled>Dalej &raquo;<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n    \r\n    <!-- Wydruk raportu doboru PDF (niewidoczny na ekranie, widoczny w druku) -->\r\n    <div class=\"rcc-print-report\" id=\"rcc-print-report\" style=\"display: none;\"><\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function() {\r\n  'use strict';\r\n\r\n  \/* Baza Produkt\u00f3w Rotenso Wentilo Icon pobrana z pliku CSV *\/\r\n  var PRODUCTS = [{\"version\":\"1\",\"model\":\"IC120 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IC120 E1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IC120 E1 AA\",\"series\":\"IC\",\"price_num\":9224,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/81e3ebbd-15d4-453d-9f8e-e7979876d4d1.jpg\",\"price_str\":\"9\u00a0224,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IC120 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IC120 E1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IC120 E1 AB\",\"series\":\"IC\",\"price_num\":9224,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/ca37f935-87cf-40e9-a715-c8ee4f879868.jpg\",\"price_str\":\"9\u00a0224,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC120 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC120 E4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC120 E4 AA\",\"series\":\"IC\",\"price_num\":10823,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/96f823cf-e0f9-4820-aeb9-ccd62434c431.jpg\",\"price_str\":\"10\u00a0823,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC120 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC120 E4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC120 E4 AB\",\"series\":\"IC\",\"price_num\":10823,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/8ad0872f-e5c4-42e6-8ce4-43e90e4c9de0.jpg\",\"price_str\":\"10\u00a0823,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IC120 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IC120 S1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IC120 S1 AA\",\"series\":\"IC\",\"price_num\":7994,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-s1\",\"exchanger\":\"standard\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/4b856101-15a7-4eb5-ae35-c2727c7262b3.jpg\",\"price_str\":\"7\u00a0994,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IC120 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IC120 S1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IC120 S1 AB\",\"series\":\"IC\",\"price_num\":7994,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-s1\",\"exchanger\":\"standard\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/cc1f63ba-0ca7-4b73-9e34-0e9cb960a0b9.jpg\",\"price_str\":\"7\u00a0994,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC120 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC120 S4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC120 S4 AA\",\"series\":\"IC\",\"price_num\":9593,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-s4\",\"exchanger\":\"standard\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/01f15b5a-6580-4d72-9ae8-6236ff8d699b.jpg\",\"price_str\":\"9\u00a0593,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC120 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC120 S4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC120 S4 AB\",\"series\":\"IC\",\"price_num\":9593,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic120-s4\",\"exchanger\":\"standard\",\"max_airflow\":120,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/586bd096-8270-4d43-83cd-f3239274f3ef.jpg\",\"price_str\":\"9\u00a0593,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IC180 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IC180 E1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IC180 E1 AA\",\"series\":\"IC\",\"price_num\":9839,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/30e9f47e-4aab-40b2-86a1-0164ae98b94c.jpg\",\"price_str\":\"9\u00a0839,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IC180 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IC180 E1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IC180 E1 AB\",\"series\":\"IC\",\"price_num\":9839,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/67ddd36a-440c-4196-8b97-368635cfa7ce.jpg\",\"price_str\":\"9\u00a0839,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC180 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC180 E4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC180 E4 AA\",\"series\":\"IC\",\"price_num\":11438,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/4e4c4beb-73d9-4918-88a3-65765f9c7eab.jpg\",\"price_str\":\"11\u00a0438,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC180 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC180 E4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC180 E4 AB\",\"series\":\"IC\",\"price_num\":11438,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/0cd1c54a-f6e9-41c2-ab2c-7c9b99daf932.jpg\",\"price_str\":\"11\u00a0438,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IC180 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IC180 S1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IC180 S1 AA\",\"series\":\"IC\",\"price_num\":8609,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-s1\",\"exchanger\":\"standard\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/377e5aad-d37d-4009-9e26-5d37db3fef21.jpg\",\"price_str\":\"8\u00a0609,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IC180 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IC180 S1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IC180 S1 AB\",\"series\":\"IC\",\"price_num\":8609,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-s1\",\"exchanger\":\"standard\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/320aae23-4ae5-4e0d-8eaa-bd7e4b6cc096.jpg\",\"price_str\":\"8\u00a0609,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC180 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC180 S4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC180 S4 AA\",\"series\":\"IC\",\"price_num\":10208,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-s4\",\"exchanger\":\"standard\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/52c914ef-0408-4431-846c-9561b578e8ae.jpg\",\"price_str\":\"10\u00a0208,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IC180 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IC180 S4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IC180 S4 AB\",\"series\":\"IC\",\"price_num\":10208,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-ic180-s4\",\"exchanger\":\"standard\",\"max_airflow\":180,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/cf239fe0-10e6-45a5-8e40-36bc4f33e259.jpg\",\"price_str\":\"10\u00a0208,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS250 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IS250 E1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IS250 E1 AA\",\"series\":\"IS\",\"price_num\":13529,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/8bc1f18e-d78b-4cb4-a498-427371698ebb.jpg\",\"price_str\":\"13\u00a0529,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS250 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IS250 E1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IS250 E1 AB\",\"series\":\"IS\",\"price_num\":13529,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/4a782a91-d2d8-4d2f-85ba-1f5111b04451.jpg\",\"price_str\":\"13\u00a0529,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS250 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS250 E4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS250 E4 AA\",\"series\":\"IS\",\"price_num\":15005,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/8ca174aa-4357-47fe-8963-a97a3cf440ac.jpg\",\"price_str\":\"15\u00a0005,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS250 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS250 E4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS250 E4 AB\",\"series\":\"IS\",\"price_num\":15005,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/53be90c1-a34b-46de-9a3e-2c4d4f93d3c0.jpg\",\"price_str\":\"15\u00a0005,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS250 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IS250 S1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IS250 S1 AA\",\"series\":\"IS\",\"price_num\":10454,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-s1\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/d4458942-fa34-43b7-9e29-82a1c786b760.jpg\",\"price_str\":\"10\u00a0454,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS250 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IS250 S1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IS250 S1 AB\",\"series\":\"IS\",\"price_num\":10454,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-s1\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/3ab50509-91e5-466d-bfd6-d3c400d3ce1e.jpg\",\"price_str\":\"10\u00a0454,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS250 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS250 S4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS250 S4 AA\",\"series\":\"IS\",\"price_num\":11930,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-s4\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/74641ad3-0823-48b8-9a7e-25db5248c377.jpg\",\"price_str\":\"11\u00a0930,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS250 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS250 S4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS250 S4 AB\",\"series\":\"IS\",\"price_num\":11930,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is250-s4\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/7a16158b-fcc1-4504-b704-49983b2b64f4.jpg\",\"price_str\":\"11\u00a0930,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS330 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IS330 E1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IS330 E1 AA\",\"series\":\"IS\",\"price_num\":14144,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/8e3a9db0-b1b0-43da-a2cb-f037328947bb.jpg\",\"price_str\":\"14\u00a0144,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS330 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\"],\"name\":\"Rotenso Wentilo Icon IS330 E1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY)\",\"symbol\":\"IS330 E1 AB\",\"series\":\"IS\",\"price_num\":14144,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/d2753245-3c0c-4e87-afce-e5e839823628.jpg\",\"price_str\":\"14\u00a0144,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS330 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS330 E4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS330 E4 AA\",\"series\":\"IS\",\"price_num\":15620,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/a04c84ce-966d-4d1f-a6ff-3da274d8e632.jpg\",\"price_str\":\"15\u00a0620,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS330 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"moisture_recovery\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS330 E4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS330 E4 AB\",\"series\":\"IS\",\"price_num\":15620,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/9d78781e-655a-442d-ac43-30bff2e680cb.jpg\",\"price_str\":\"15\u00a0620,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS330 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IS330 S1 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IS330 S1 AA\",\"series\":\"IS\",\"price_num\":11069,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-s1\",\"exchanger\":\"standard\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/a6c45d3b-c20c-42db-b722-70ab431fd156.jpg\",\"price_str\":\"11\u00a0069,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IS330 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\"],\"name\":\"Rotenso Wentilo Icon IS330 S1 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY)\",\"symbol\":\"IS330 S1 AB\",\"series\":\"IS\",\"price_num\":11069,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-s1\",\"exchanger\":\"standard\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/54950f06-4328-4ef8-9571-c78987d21854.jpg\",\"price_str\":\"11\u00a0069,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS330 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS330 S4 AA\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS330 S4 AA\",\"series\":\"IS\",\"price_num\":12545,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-s4\",\"exchanger\":\"standard\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/c1bd5bfb-498e-436c-9379-7d79283c05c2.jpg\",\"price_str\":\"12\u00a0545,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IS330 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\",\"podwieszany\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"compact\",\"high_pressure\"],\"name\":\"Rotenso Wentilo Icon IS330 S4 AB\",\"tagDesc\":\"P\u0142aska obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c\",\"symbol\":\"IS330 S4 AB\",\"series\":\"IS\",\"price_num\":12545,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-is330-s4\",\"exchanger\":\"standard\",\"max_airflow\":330,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/5b6d01a7-b802-4296-abfd-0b26c202c7de.jpg\",\"price_str\":\"12\u00a0545,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT250 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 E1 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 E1 AA\",\"series\":\"IT\",\"price_num\":13529,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/8a8e362e-4aed-4a20-b9a6-434c81f98197.jpg\",\"price_str\":\"13\u00a0529,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT250 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 E1 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 E1 AB\",\"series\":\"IT\",\"price_num\":13529,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/e0050103-cb6a-4b1c-b133-fd412ba66751.jpg\",\"price_str\":\"13\u00a0529,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT250 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 E4 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 E4 AA\",\"series\":\"IT\",\"price_num\":15005,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/2978c264-a8f6-4571-ba88-1953c630f4dc.jpg\",\"price_str\":\"15\u00a0005,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT250 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 E4 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 E4 AB\",\"series\":\"IT\",\"price_num\":15005,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/bbbec73f-652e-4bc8-afd8-40ddf8aaa405.jpg\",\"price_str\":\"15\u00a0005,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT250 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 S1 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 S1 AA\",\"series\":\"IT\",\"price_num\":10454,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-s1\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/b940351e-a1b7-4a5f-891a-8c388d6838c7.jpg\",\"price_str\":\"10\u00a0454,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT250 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 S1 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 S1 AB\",\"series\":\"IT\",\"price_num\":10454,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-s1\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/8d4073d3-1fdc-417b-a097-dae4b26dc96a.jpg\",\"price_str\":\"10\u00a0454,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT250 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 S4 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 S4 AA\",\"series\":\"IT\",\"price_num\":11930,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-s4\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/4d033610-326d-4b80-9f89-b4032ddef438.jpg\",\"price_str\":\"11\u00a0930,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT250 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT250 S4 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT250 S4 AB\",\"series\":\"IT\",\"price_num\":11930,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it250-s4\",\"exchanger\":\"standard\",\"max_airflow\":250,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/90fb7524-21b1-43a3-9e9c-6262f7169dad.jpg\",\"price_str\":\"11\u00a0930,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT350 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 E1 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 E1 AA\",\"series\":\"IT\",\"price_num\":14144,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/fb41416b-7e35-494a-87cd-7137eb64d3b0.jpg\",\"price_str\":\"14\u00a0144,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT350 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 E1 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 E1 AB\",\"series\":\"IT\",\"price_num\":14144,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/0461507b-a2a1-4408-a85e-f8516e5dc015.jpg\",\"price_str\":\"14\u00a0144,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT350 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 E4 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 E4 AA\",\"series\":\"IT\",\"price_num\":15620,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/0eff3acf-bb85-46ee-90a3-0fecf01186e6.jpg\",\"price_str\":\"15\u00a0620,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT350 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 E4 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 E4 AB\",\"series\":\"IT\",\"price_num\":15620,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/01c5f4cd-94f6-4171-8c9e-af356282b08b.jpg\",\"price_str\":\"15\u00a0620,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT350 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 S1 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 S1 AA\",\"series\":\"IT\",\"price_num\":11069,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-s1\",\"exchanger\":\"standard\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/cfab76ff-698c-409b-8c89-b0e25de9487f.jpg\",\"price_str\":\"11\u00a0069,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT350 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 S1 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 S1 AB\",\"series\":\"IT\",\"price_num\":11069,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-s1\",\"exchanger\":\"standard\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/8c1f4be3-c9af-4d37-9737-1fbda1d2c618.jpg\",\"price_str\":\"11\u00a0069,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT350 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 S4 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 S4 AA\",\"series\":\"IT\",\"price_num\":12545,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-s4\",\"exchanger\":\"standard\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/1bd1731e-7dc5-4a61-88bd-7ba2cae99068.jpg\",\"price_str\":\"12\u00a0545,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT350 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT350 S4 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT350 S4 AB\",\"series\":\"IT\",\"price_num\":12545,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it350-s4\",\"exchanger\":\"standard\",\"max_airflow\":350,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/78266eee-e48b-48b7-8887-09e155a89a4e.jpg\",\"price_str\":\"12\u00a0545,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT450 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 E1 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 E1 AA\",\"series\":\"IT\",\"price_num\":14636,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/eee199cf-bdc8-44d6-b657-03a31887e59d.jpg\",\"price_str\":\"14\u00a0636,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT450 E1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 E1 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 E1 AB\",\"series\":\"IT\",\"price_num\":14636,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-e1\",\"exchanger\":\"entalpic\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/5404d14b-0667-4cef-b0ee-4363bbb5eca9.jpg\",\"price_str\":\"14\u00a0636,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT450 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 E4 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 E4 AA\",\"series\":\"IT\",\"price_num\":16112,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/85cd753b-b04a-4cf6-95d7-441223af3ef4.jpg\",\"price_str\":\"16\u00a0112,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT450 E4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"moisture_recovery\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 E4 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Odzysk wilgoci (airENTHALPY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 E4 AB\",\"series\":\"IT\",\"price_num\":16112,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-e4\",\"exchanger\":\"entalpic\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/2ee8231e-71a3-4ae5-9fde-4f82082031fe.jpg\",\"price_str\":\"16\u00a0112,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT450 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 S1 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 S1 AA\",\"series\":\"IT\",\"price_num\":11561,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-s1\",\"exchanger\":\"standard\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/99964d24-caa9-4533-9a99-baeebd4df1f9.jpg\",\"price_str\":\"11\u00a0561,00 z\u0142\"},{\"version\":\"1\",\"model\":\"IT450 S1\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 S1 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 S1 AB\",\"series\":\"IT\",\"price_num\":11561,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-s1\",\"exchanger\":\"standard\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/e2f8b4e5-1fe7-4c83-b967-7c1c0618f1db.jpg\",\"price_str\":\"11\u00a0561,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT450 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AA\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 S4 AA\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 S4 AA\",\"series\":\"IT\",\"price_num\":13037,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-s4\",\"exchanger\":\"standard\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/38fdf6f2-a598-4d7e-bce3-b63bbf79746b.jpg\",\"price_str\":\"13\u00a0037,00 z\u0142\"},{\"version\":\"4\",\"model\":\"IT450 S4\",\"montaz\":[\"stoj\u0105cy\",\"wisz\u0105cy\"],\"side\":\"AB\",\"tags\":[\"air_quality\",\"smart\",\"quiet\",\"high_pressure\",\"passive_house\"],\"name\":\"Rotenso Wentilo Icon IT450 S4 AB\",\"tagDesc\":\"Pionowa obudowa EPP \u00b7 Wymiennik przeciwpr\u0105dowy (airENERGY) \u00b7 Wysoki spr\u0119\u017c \u00b7 Certyfikat PHI\",\"symbol\":\"IT450 S4 AB\",\"series\":\"IT\",\"price_num\":13037,\"url\":\"https:\/\/wentilo.rotenso.com\/pl\/produkt\/rekuperator-rotenso-wentilo-icon-it450-s4\",\"exchanger\":\"standard\",\"max_airflow\":450,\"image\":\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/fbadd6d9-830d-4877-97eb-2aba5f29c82c.jpg\",\"price_str\":\"13\u00a0037,00 z\u0142\"}];\r\n\r\n  \/* S\u0142ownik nazw dla tag\u00f3w i filtr\u00f3w *\/\r\n  var LABELS = {\r\n    height: { \r\n      'standard': 'Wysoko\u015b\u0107: 2,4-2,8m', \r\n      'high': 'Wysoko\u015b\u0107: Powy\u017cej 2,9m' \r\n    },\r\n    exchanger: { \r\n      'standard': 'Odzysk ciep\u0142a', \r\n      'entalpic': 'Odzysk ciep\u0142a i wilgoci' \r\n    },\r\n    version: {\r\n      '1': 'System standardowy',\r\n      '4': 'System inteligentny'\r\n    },\r\n    montaz: {\r\n      'stoj\u0105cy': 'Na pod\u0142odze',\r\n      'wisz\u0105cy': 'Na \u015bcianie',\r\n      'podwieszany': 'Na suficie'\r\n    }\r\n  };\r\n\r\n  \/* State *\/\r\n  var st = {\r\n    step: 0,\r\n    isFinished: false,\r\n    isCollapsed: false,\r\n    area: null, \r\n    heightVal: null, heightKey: null,\r\n    exchangerKey: null,\r\n    versionKey: null,\r\n    panelKey: null,\r\n    panelPriceIncrease: 0,\r\n    montazKey: null,\r\n    qNeeded: 0,\r\n    sortBy: 'recommended'\r\n  };\r\n\r\n  function handleScroll() {\r\n    var wizard = document.getElementById('rcc-wizard');\r\n    var widget = document.getElementById('rcc-main');\r\n    if (!wizard || !widget) return;\r\n    \r\n    var rect = widget.getBoundingClientRect();\r\n    if (rect.bottom < window.innerHeight) {\r\n      wizard.style.position = 'absolute';\r\n      wizard.style.bottom = '40px';\r\n    } else {\r\n      wizard.style.position = 'fixed';\r\n      wizard.style.bottom = '40px';\r\n    }\r\n  }\r\n\r\n  window.addEventListener('scroll', handleScroll);\r\n  window.addEventListener('resize', handleScroll);\r\n\r\n  var stepNames = ['Powierzchnia i wysoko\u015b\u0107', 'Wymiennik', 'Automatyka', 'Spos\u00f3b monta\u017cu', 'Gotowe!'];\r\n\r\n  \/* Czy dane urz\u0105dzenie posiada wymagan\u0105 wydajno\u015b\u0107 maksymaln\u0105 *\/\r\n  \/* Minimalna wydajno\u015b\u0107 wg arkusza \"zakres pracy rekuperator\u00f3w\" - zale\u017cy tylko od wielko\u015bci\r\n     fizycznej jednostki (seria + max_airflow), nie od wymiennika ani systemu sterowania. *\/\r\n  var WORK_RANGE_MIN = {\r\n    'IC120': 65,\r\n    'IC180': 70,\r\n    'IS250': 80,\r\n    'IS330': 80,\r\n    'IT250': 75,\r\n    'IT350': 75,\r\n    'IT450': 90\r\n  };\r\n\r\n  \/* Wydajno\u015b\u0107 znamionowa wg arkusza \"wydajnosc-rekuperatory\" - to jest w\u0142a\u015bciwa, realna\r\n     wydajno\u015b\u0107 urz\u0105dzenia do por\u00f3wnania z zapotrzebowaniem (qNeeded), NIE liczba z nazwy\r\n     modelu (max_airflow), kt\u00f3ra oznacza tylko g\u00f3rny\/szczytowy parametr nazewniczy. *\/\r\n  var NOMINAL_AIRFLOW = {\r\n    'IC120': 84,\r\n    'IC180': 126,\r\n    'IS250': 175,\r\n    'IS330': 231,\r\n    'IT250': 175,\r\n    'IT350': 245,\r\n    'IT450': 315\r\n  };\r\n\r\n  \/* Roczne oszcz\u0119dno\u015bci w ogrzewaniu w klimacie umiarkowanym (kWh energii pierwotnej\/rok)\r\n     wg Rozporz\u0105dzenia Delegowanego Komisji (UE) nr 1254\/2014, wg identyfikatora modelu *\/\r\n  var HEATING_SAVINGS_KWH = {\r\n    'IC120 E1': 4379, 'IC120 E4': 4544, 'IC120 S1': 4603, 'IC120 S4': 4697,\r\n    'IC180 E1': 4325, 'IC180 E4': 4507, 'IC180 S1': 4585, 'IC180 S4': 4685,\r\n    'IS250 E1': 4364, 'IS250 E4': 4533, 'IS250 S1': 4643, 'IS250 S4': 4724,\r\n    'IS330 E1': 4295, 'IS330 E4': 4486, 'IS330 S1': 4573, 'IS330 S4': 4676,\r\n    'IT250 E1': 4531, 'IT250 E4': 4647, 'IT250 S1': 4691, 'IT250 S4': 4757,\r\n    'IT350 E1': 4364, 'IT350 E4': 4534, 'IT350 S1': 4528, 'IT350 S4': 4645,\r\n    'IT450 E1': 4271, 'IT450 E4': 4469, 'IT450 S1': 4504, 'IT450 S4': 4629\r\n  };\r\n\r\n  \/* Wymiary jednostki (d\u0142. | szer. | wys. w cm) wg identyfikatora modelu *\/\r\n  var DIMENSIONS_CM = {\r\n    'IC120 E1': '111 | 58,2 | 23 cm', 'IC120 E4': '111 | 58,2 | 23 cm',\r\n    'IC120 S1': '111 | 58,2 | 23 cm', 'IC120 S4': '111 | 58,2 | 23 cm',\r\n    'IC180 E1': '111 | 58,2 | 23 cm', 'IC180 E4': '111 | 58,2 | 23 cm',\r\n    'IC180 S1': '111 | 58,2 | 23 cm', 'IC180 S4': '111 | 58,2 | 23 cm',\r\n    'IS250 E1': '126 | 69 | 32 cm', 'IS250 E4': '126 | 69 | 32 cm',\r\n    'IS250 S1': '126 | 69 | 32 cm', 'IS250 S4': '126 | 69 | 32 cm',\r\n    'IS330 E1': '126 | 69 | 32 cm', 'IS330 E4': '126 | 69 | 32 cm',\r\n    'IS330 S1': '126 | 69 | 32 cm', 'IS330 S4': '126 | 69 | 32 cm',\r\n    'IT250 E1': '94 | 59,1 | 75,4 cm', 'IT250 E4': '94 | 59,1 | 75,4 cm',\r\n    'IT250 S1': '94 | 59,1 | 75,4 cm', 'IT250 S4': '94 | 59,1 | 75,4 cm',\r\n    'IT350 E1': '94 | 59,1 | 75,4 cm', 'IT350 E4': '94 | 59,1 | 75,4 cm',\r\n    'IT350 S1': '94 | 59,1 | 75,4 cm', 'IT350 S4': '94 | 59,1 | 75,4 cm',\r\n    'IT450 E1': '94 | 59,1 | 75,4 cm', 'IT450 E4': '94 | 59,1 | 75,4 cm',\r\n    'IT450 S1': '94 | 59,1 | 75,4 cm', 'IT450 S4': '94 | 59,1 | 75,4 cm'\r\n  };\r\n\r\n  function getMinAirflow(product) {\r\n    return WORK_RANGE_MIN[product.series + product.max_airflow] || 0;\r\n  }\r\n\r\n  function getNominalAirflow(product) {\r\n    return NOMINAL_AIRFLOW[product.series + product.max_airflow] || product.max_airflow;\r\n  }\r\n\r\n  \/* Jedyne miejsce z formu\u0142\u0105 zapotrzebowania na powietrze - u\u017cywane zar\u00f3wno w bie\u017c\u0105cym\r\n     stanie (st.qNeeded), jak i w raporcie do druku, \u017ceby zmiana wsp\u00f3\u0142czynnika wymaga\u0142a\r\n     edycji tylko tutaj. *\/\r\n  function computeAirflowNeeded(area, height) {\r\n    return area * height * 0.8;\r\n  }\r\n\r\n  \/* Najwi\u0119ksza wydajno\u015b\u0107 znamionowa w ca\u0142ym katalogu - je\u015bli zapotrzebowanie j\u0105 przekracza,\r\n     \u017cadna pojedyncza centrala (niezale\u017cnie od wymiennika\/systemu\/monta\u017cu) nie wystarczy. *\/\r\n  function getGlobalMaxNominalAirflow() {\r\n    var maxVal = 0;\r\n    for (var i = 0; i < PRODUCTS.length; i++) {\r\n      var n = getNominalAirflow(PRODUCTS[i]);\r\n      if (n > maxVal) maxVal = n;\r\n    }\r\n    return maxVal;\r\n  }\r\n\r\n  function hasMaxCapacity(product, targetAirflow) {\r\n    if(targetAirflow === 0) return true;\r\n    return getNominalAirflow(product) >= targetAirflow;\r\n  }\r\n\r\n  function hasMinCapacity(product, targetAirflow) {\r\n    if(targetAirflow === 0) return true;\r\n    return targetAirflow >= getMinAirflow(product) * 0.95;\r\n  }\r\n\r\n  \/* Wy\u0142\u0105czenie kart monta\u017cu (krok 4), kt\u00f3re przy obecnym wymienniku\/systemie\/wydajno\u015bci\r\n     nie daj\u0105 \u017cadnego pasuj\u0105cego urz\u0105dzenia (np. sufit dla serii IT przy du\u017cym metra\u017cu) *\/\r\n  function renderMontazCards() {\r\n    var montazOptions = ['stoj\u0105cy', 'wisz\u0105cy', 'podwieszany'];\r\n    montazOptions.forEach(function(m) {\r\n      var card = document.querySelector('#step-montaz .rcc-card[data-val=\"' + m + '\"]');\r\n      if (!card) return;\r\n\r\n      var hasMatch = false;\r\n      for (var i = 0; i < PRODUCTS.length; i++) {\r\n        var p = PRODUCTS[i];\r\n        if (st.exchangerKey && p.exchanger !== st.exchangerKey) continue;\r\n        if (st.versionKey && p.version !== st.versionKey) continue;\r\n        if (p.montaz.indexOf(m) === -1) continue;\r\n        if (!hasMaxCapacity(p, st.qNeeded)) continue;\r\n        hasMatch = true;\r\n        break;\r\n      }\r\n\r\n      if (hasMatch) {\r\n        card.classList.remove('disabled');\r\n        card.setAttribute('tabindex', '0');\r\n      } else {\r\n        card.classList.add('disabled');\r\n        card.setAttribute('tabindex', '-1');\r\n        if (st.montazKey === m) {\r\n          st.montazKey = null;\r\n          card.classList.remove('selected');\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  \/* Core Logic *\/\r\n  function updateState() {\r\n    var area = parseFloat(document.getElementById('rcc-area').value) || 0;\r\n    st.area = area > 0 ? area : null;\r\n\r\n    var areaWarningEl = document.getElementById('rcc-area-warning');\r\n    if (areaWarningEl) {\r\n      areaWarningEl.classList.toggle('active', !!(st.area && st.area > 200));\r\n    }\r\n\r\n    if(st.area && st.heightVal) {\r\n      st.qNeeded = computeAirflowNeeded(st.area, st.heightVal);\r\n\r\n      var liveCalcEl = document.getElementById('rcc-live-calc');\r\n      if (liveCalcEl) {\r\n        document.getElementById('rcc-live-kw').textContent = Math.round(st.qNeeded) + '';\r\n        liveCalcEl.style.display = 'block';\r\n      }\r\n    } else {\r\n      st.qNeeded = 0;\r\n      var liveCalcEl = document.getElementById('rcc-live-calc');\r\n      if (liveCalcEl) {\r\n        liveCalcEl.style.display = 'none';\r\n      }\r\n    }\r\n\r\n    renderTags();\r\n    renderGrid();\r\n    renderMontazCards();\r\n    validateStep();\r\n    handleScroll();\r\n  }\r\n\r\n  \/* Aktualizacja ukrytego dokumentu do druku A4 *\/\r\n  function updatePrintReport(matchedList) {\r\n    var container = document.getElementById('rcc-print-report');\r\n    if (!container) return;\r\n    \r\n    if (!st.area || !st.heightVal || matchedList.length === 0) {\r\n      container.innerHTML = '';\r\n      return;\r\n    }\r\n    \r\n    var volume = Math.round(st.area * st.heightVal);\r\n    var qNeeded = Math.round(computeAirflowNeeded(st.area, st.heightVal));\r\n    \r\n    var dateStr = new Date().toLocaleDateString('pl-PL', {\r\n      year: 'numeric', month: 'long', day: 'numeric'\r\n    });\r\n    \r\n    var exchangerLabel = LABELS.exchanger[st.exchangerKey] || 'Dowolny';\r\n    var versionLabel = LABELS.version[st.versionKey] || 'Dowolny';\r\n    var panelLabel = st.panelKey === 'iswitch' ? 'iSWITCH Ti' : 'iSENSE 5i';\r\n    var montazLabel = LABELS.montaz[st.montazKey] || 'Dowolny';\r\n    \r\n    var html = '';\r\n    \r\n    \/\/ Header\r\n    html += '<div class=\"rcc-print-header\">';\r\n    html += '  <div class=\"rcc-print-logo\"><img decoding=\"async\" src=\"https:\/\/rotenso.com\/wp-content\/uploads\/2020\/03\/logo_standard.png.webp\" alt=\"Rotenso Logo\"><\/div>';\r\n    html += '  <div class=\"rcc-print-title-block\">';\r\n    html += '    <h1 class=\"rcc-print-title\">Raport doboru rekuperacji<\/h1>';\r\n    html += '    <div class=\"rcc-print-date\">Wygenerowano: ' + dateStr + '<\/div>';\r\n    html += '  <\/div>';\r\n    html += '<\/div>';\r\n    \r\n    \/\/ Grid sections\r\n    html += '<div class=\"rcc-print-grid-2\">';\r\n    \r\n    \/\/ Parametry budynku\r\n    html += '  <div>';\r\n    html += '    <h2 class=\"rcc-print-section-title\">Parametry budynku<\/h2>';\r\n    html += '    <table class=\"rcc-print-data-table\">';\r\n    html += '      <tr><td class=\"rcc-label\">Powierzchnia domu<\/td><td class=\"rcc-val\">' + st.area + ' m\u00b2<\/td><\/tr>';\r\n    html += '      <tr><td class=\"rcc-label\">Wysoko\u015b\u0107 kondygnacji<\/td><td class=\"rcc-val\">' + st.heightVal + ' m<\/td><\/tr>';\r\n    html += '      <tr><td class=\"rcc-label\">Kubatura wentylowana<\/td><td class=\"rcc-val\">' + volume + ' m\u00b3<\/td><\/tr>';\r\n    html += '      <tr><td class=\"rcc-label\">Wymagane zapotrzebowanie na powietrze<\/td><td class=\"rcc-val\">min. ' + qNeeded + ' m\u00b3\/h<\/td><\/tr>';\r\n    html += '    <\/table>';\r\n    html += '  <\/div>';\r\n    \r\n    \/\/ Wybrane preferencje\r\n    html += '  <div>';\r\n    html += '    <h2 class=\"rcc-print-section-title\">Wybrane preferencje<\/h2>';\r\n    html += '    <table class=\"rcc-print-data-table\">';\r\n    html += '      <tr><td class=\"rcc-label\">Wymiennik ciep\u0142a<\/td><td class=\"rcc-val\">' + exchangerLabel + '<\/td><\/tr>';\r\n    html += '      <tr><td class=\"rcc-label\">System automatyki<\/td><td class=\"rcc-val\">' + versionLabel + '<\/td><\/tr>';\r\n    html += '      <tr><td class=\"rcc-label\">Panel steruj\u0105cy<\/td><td class=\"rcc-val\">' + panelLabel + '<\/td><\/tr>';\r\n    html += '      <tr><td class=\"rcc-label\">Spos\u00f3b monta\u017cu<\/td><td class=\"rcc-val\">' + montazLabel + '<\/td><\/tr>';\r\n    html += '    <\/table>';\r\n    html += '  <\/div>';\r\n    \r\n    html += '<\/div>';\r\n    \r\n    \/\/ Rekomendowane urz\u0105dzenia\r\n    html += '<h2 class=\"rcc-print-section-title\">Rekomendowane urz\u0105dzenia Rotenso Wentilo Icon<\/h2>';\r\n    html += '<div class=\"rcc-print-products-list\">';\r\n    \r\n    var seenModels = {};\r\n    for (var i = 0; i < matchedList.length; i++) {\r\n      var p = matchedList[i];\r\n      var cleanPriceNum = p.price_num + st.panelPriceIncrease;\r\n      var cleanPrice = cleanPriceNum.toLocaleString('pl-PL') + ' z\u0142';\r\n      var displayName = \"Wentilo Icon \" + p.model;\r\n      if (seenModels[displayName]) continue;\r\n      seenModels[displayName] = true;\r\n      \r\n      var imageSrc = p.image || 'https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/d4458942-fa34-43b7-9e29-82a1c786b760.jpg';\r\n      \r\n      html += '  <div class=\"rcc-print-product-card\">';\r\n      html += '    <img decoding=\"async\" class=\"rcc-print-prod-img\" src=\"' + imageSrc + '\" alt=\"' + displayName + '\">';\r\n      html += '    <div class=\"rcc-print-prod-details\">';\r\n      html += '      <h3 class=\"rcc-print-prod-name\">' + displayName + '<\/h3>';\r\n      html += '      <p class=\"rcc-print-prod-desc\">' + p.tagDesc + ' \u00b7 Wydajno\u015b\u0107 maksymalna: ' + p.max_airflow + ' m\u00b3\/h<\/p>';\r\n      html += '      <div class=\"rcc-print-prod-price\">Cena katalogowa urz\u0105dzenia z panelem: ' + cleanPrice + ' (cena brutto z 23% VAT)<\/div>';\r\n      html += '    <\/div>';\r\n      html += '  <\/div>';\r\n    }\r\n    \r\n    html += '<\/div>';\r\n    \r\n    \/\/ Footer\r\n    html += '<div class=\"rcc-print-footer\">';\r\n    html += '  Raport wygenerowany automatycznie na stronie wentilo.rotenso.com.<br>';\r\n    html += '  Skontaktuj si\u0119 ze swoim instalatorem lub autoryzowanym partnerem Rotenso w celu przygotowania szczeg\u00f3\u0142owego projektu i instalacji systemu rekuperacji.';\r\n    html += '<\/div>';\r\n    \r\n    container.innerHTML = html;\r\n  }\r\n\r\n  \/* Budowa chips\u00f3w filtr\u00f3w *\/\r\n  function renderTags() {\r\n    var container = document.getElementById('rcc-filters');\r\n    var html = '';\r\n    \r\n    if (st.area) {\r\n      html += '<div class=\"rcc-filter-chip\">Powierzchnia: '+st.area+'m\u00b2 <button onclick=\"rcc.removeFilter(\\'area\\')\">&times;<\/button><\/div>';\r\n    }\r\n    if (st.heightKey) {\r\n      html += '<div class=\"rcc-filter-chip\">'+LABELS.height[st.heightKey]+' <button onclick=\"rcc.removeFilter(\\'height\\')\">&times;<\/button><\/div>';\r\n    }\r\n    if (st.exchangerKey) {\r\n      html += '<div class=\"rcc-filter-chip\">'+LABELS.exchanger[st.exchangerKey]+' <button onclick=\"rcc.removeFilter(\\'exchanger\\')\">&times;<\/button><\/div>';\r\n    }\r\n    if (st.versionKey) {\r\n      html += '<div class=\"rcc-filter-chip\">'+LABELS.version[st.versionKey]+' <button onclick=\"rcc.removeFilter(\\'version\\')\">&times;<\/button><\/div>';\r\n    }\r\n    if (st.panelKey) {\r\n      var panelLabel = st.panelKey === 'iswitch' ? 'Panel: iSWITCH Ti' : 'Panel: iSENSE 5i (+470 z\u0142)';\r\n      html += '<div class=\"rcc-filter-chip\">'+panelLabel+' <button onclick=\"rcc.removeFilter(\\'panel\\')\">&times;<\/button><\/div>';\r\n    }\r\n    if (st.montazKey) {\r\n      html += '<div class=\"rcc-filter-chip\">Monta\u017c: '+LABELS.montaz[st.montazKey]+' <button onclick=\"rcc.removeFilter(\\'montaz\\')\">&times;<\/button><\/div>';\r\n    }\r\n    \r\n    container.innerHTML = html;\r\n  }\r\n\r\n  \/* Dynamiczne renderowanie siatki produkt\u00f3w lub serii na starcie *\/\r\n  function renderGrid() {\r\n    var grid = document.getElementById('rcc-bg-grid');\r\n    var html = '';\r\n    \r\n    var isSmall = !st.isFinished;\r\n    if (isSmall) {\r\n      grid.classList.add('rcc-grid-small');\r\n    } else {\r\n      grid.classList.remove('rcc-grid-small');\r\n    }\r\n    var cardClass = isSmall ? 'rcc-prod-card rcc-card-small' : 'rcc-prod-card';\r\n    \r\n    \/\/ NA STARCIE: Pokazujemy 3 g\u0142\u00f3wne serie urz\u0105dze\u0144\r\n    if (!st.area) {\r\n      \/\/ 1. Seria ICON IT\r\n      html += '<div class=\"' + cardClass + '\">';\r\n      html += '<img decoding=\"async\" class=\"rcc-prod-card-img\" src=\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/b940351e-a1b7-4a5f-891a-8c388d6838c7.jpg\">';\r\n      html += '<div class=\"rcc-prod-card-name\">Seria ICON IT<\/div>';\r\n      html += '<div class=\"rcc-prod-card-surface\">Wydajno\u015b\u0107: 250 \/ 350 \/ 450 m\u00b3\/h<\/div>';\r\n      html += '<div class=\"rcc-prod-card-mounting\">Monta\u017c: \u015bcienny \/ stoj\u0105cy<\/div>';\r\n      html += '<div class=\"rcc-prod-card-price-row\">';\r\n      html += '  <div class=\"rcc-prod-card-price-val-panel\">';\r\n      html += '    <span class=\"rcc-prod-card-price-val\">od 10 454 z\u0142<\/span>';\r\n      html += '  <\/div>';\r\n      html += '  <div class=\"rcc-prod-card-price-vat\">Wydajne centrale \u015bcienno-stoj\u0105ce \u00b7 PHI \u00b7 Obudowa EPP<\/div>';\r\n      html += '<\/div>';\r\n      html += '<div class=\"rcc-prod-card-footer-links\" style=\"visibility:hidden\">';\r\n      html += '  <a>&nbsp;<\/a>';\r\n      html += '<\/div>';\r\n      html += '<\/div>';\r\n\r\n      \/\/ 2. Seria ICON IC\r\n      html += '<div class=\"' + cardClass + '\">';\r\n      html += '<img decoding=\"async\" class=\"rcc-prod-card-img\" src=\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/4b856101-15a7-4eb5-ae35-c2727c7262b3.jpg\">';\r\n      html += '<div class=\"rcc-prod-card-name\">Seria ICON IC<\/div>';\r\n      html += '<div class=\"rcc-prod-card-surface\">Wydajno\u015b\u0107: 120 \/ 180 m\u00b3\/h<\/div>';\r\n      html += '<div class=\"rcc-prod-card-mounting\">Monta\u017c: sufitowy \/ \u015bcienny \/ stoj\u0105cy<\/div>';\r\n      html += '<div class=\"rcc-prod-card-price-row\">';\r\n      html += '  <div class=\"rcc-prod-card-price-val-panel\">';\r\n      html += '    <span class=\"rcc-prod-card-price-val\">od 7 994 z\u0142<\/span>';\r\n      html += '  <\/div>';\r\n      html += '  <div class=\"rcc-prod-card-price-vat\">Kompaktowe centrale sufitowo-\u015bcienne \u00b7 Obudowa EPP \u00b7 Do mieszka\u0144<\/div>';\r\n      html += '<\/div>';\r\n      html += '<div class=\"rcc-prod-card-footer-links\" style=\"visibility:hidden\">';\r\n      html += '  <a>&nbsp;<\/a>';\r\n      html += '<\/div>';\r\n      html += '<\/div>';\r\n\r\n      \/\/ 3. Seria ICON IS\r\n      html += '<div class=\"' + cardClass + '\">';\r\n      html += '<img decoding=\"async\" class=\"rcc-prod-card-img\" src=\"https:\/\/thermosilesia.pl\/assets\/default\/photos\/2\/d4458942-fa34-43b7-9e29-82a1c786b760.jpg\">';\r\n      html += '<div class=\"rcc-prod-card-name\">Seria ICON IS<\/div>';\r\n      html += '<div class=\"rcc-prod-card-surface\">Wydajno\u015b\u0107: 250 \/ 330 m\u00b3\/h<\/div>';\r\n      html += '<div class=\"rcc-prod-card-mounting\">Monta\u017c: podwieszany sufitowy<\/div>';\r\n      html += '<div class=\"rcc-prod-card-price-row\">';\r\n      html += '  <div class=\"rcc-prod-card-price-val-panel\">';\r\n      html += '    <span class=\"rcc-prod-card-price-val\">od 10 454 z\u0142<\/span>';\r\n      html += '  <\/div>';\r\n      html += '  <div class=\"rcc-prod-card-price-vat\">P\u0142askie centrale podwieszane sufitowe \u00b7 Obudowa EPP \u00b7 Wysoki spr\u0119\u017c<\/div>';\r\n      html += '<\/div>';\r\n      html += '<div class=\"rcc-prod-card-footer-links\" style=\"visibility:hidden\">';\r\n      html += '  <a>&nbsp;<\/a>';\r\n      html += '<\/div>';\r\n      html += '<\/div>';\r\n      \r\n      grid.innerHTML = html;\r\n      document.getElementById('rcc-results-count').textContent = 'Trzy g\u0142\u00f3wne serie';\r\n      return;\r\n    }\r\n\r\n    \/\/ PO PIERWSZYM KROKU: Wy\u015bwietlamy konkretne warianty symbolowe\r\n    var candidatesFull = [];\r\n    var candidatesMaxOnly = [];\r\n\r\n    for (var i = 0; i < PRODUCTS.length; i++) {\r\n      var p = PRODUCTS[i];\r\n\r\n      \/\/ 1. Filtr wymiennika\r\n      if (st.exchangerKey && p.exchanger !== st.exchangerKey) continue;\r\n\r\n      \/\/ 2. Filtr sterowania\r\n      if (st.versionKey && p.version !== st.versionKey) continue;\r\n\r\n      \/\/ 3. Filtr sposobu monta\u017cu\r\n      if (st.montazKey && p.montaz.indexOf(st.montazKey) === -1) continue;\r\n\r\n      \/\/ 4. Filtr wydajno\u015bci maksymalnej - urz\u0105dzenie musi ud\u017awign\u0105\u0107 zapotrzebowanie (warunek twardy)\r\n      if (!hasMaxCapacity(p, st.qNeeded)) continue;\r\n      candidatesMaxOnly.push(p);\r\n\r\n      \/\/ 5. Filtr wydajno\u015bci minimalnej wg zakresu pracy z arkusza doborowego\r\n      if (hasMinCapacity(p, st.qNeeded)) {\r\n        candidatesFull.push(p);\r\n      }\r\n    }\r\n\r\n    \/\/ Preferujemy urz\u0105dzenia, w kt\u00f3rych zapotrzebowanie mie\u015bci si\u0119 w ca\u0142ym zakresie pracy (min-max).\r\n    \/\/ Je\u015bli przy bardzo ma\u0142ym metra\u017cu \u017cadne urz\u0105dzenie nie spe\u0142nia dolnej granicy, nie blokujemy\r\n    \/\/ doboru - pokazujemy najmniejsze dost\u0119pne urz\u0105dzenie spe\u0142niaj\u0105ce wy\u0142\u0105cznie g\u00f3rn\u0105 granic\u0119.\r\n    var candidates = candidatesFull.length > 0 ? candidatesFull : candidatesMaxOnly;\r\n\r\n    \/\/ Rekomendacja: znajd\u017a najmniejsz\u0105 wystarczaj\u0105c\u0105 wydajno\u015b\u0107 (max_airflow) w\u015br\u00f3d pasuj\u0105cych kandydat\u00f3w\r\n    var distinctCapacities = [];\r\n    for (var k = 0; k < candidates.length; k++) {\r\n      if (distinctCapacities.indexOf(candidates[k].max_airflow) === -1) {\r\n        distinctCapacities.push(candidates[k].max_airflow);\r\n      }\r\n    }\r\n    distinctCapacities.sort(function(a, b) { return a - b; });\r\n\r\n    \/\/ Pokazujemy urz\u0105dzenie w normie (najmniejsza wystarczaj\u0105ca wydajno\u015b\u0107), a kolejne,\r\n    \/\/ coraz wi\u0119ksze poziomy dok\u0142adamy tak d\u0142ugo, a\u017c klient ma do wyboru co najmniej 3\r\n    \/\/ modele (lub sko\u0144cz\u0105 si\u0119 dost\u0119pne poziomy) - daj\u0105c realny wyb\u00f3r, ale bez pokazywania\r\n    \/\/ wi\u0119cej ni\u017c 3 poziom\u00f3w wydajno\u015bci naraz.\r\n    var allowedCapacities = [];\r\n    var totalModelsShown = 0;\r\n    for (var t = 0; t < distinctCapacities.length && allowedCapacities.length < 3; t++) {\r\n      var cap = distinctCapacities[t];\r\n      allowedCapacities.push(cap);\r\n      \/\/ Liczymy odr\u0119bne modele (np. \"IS330 E4\"), a nie surowe wpisy - ka\u017cdy model\r\n      \/\/ istnieje w danych dwukrotnie (strona AA\/AB), wi\u0119c liczenie wpis\u00f3w wprost\r\n      \/\/ zawsze dawa\u0142oby min. 2, nawet gdy na danym poziomie jest tylko jeden realny model.\r\n      var modelsAtCap = {};\r\n      for (var c = 0; c < candidates.length; c++) {\r\n        if (candidates[c].max_airflow === cap) {\r\n          modelsAtCap[candidates[c].model] = true;\r\n        }\r\n      }\r\n      totalModelsShown += Object.keys(modelsAtCap).length;\r\n      if (totalModelsShown >= 3) break;\r\n    }\r\n\r\n    var matched = [];\r\n    for (var j = 0; j < candidates.length; j++) {\r\n      if (allowedCapacities.indexOf(candidates[j].max_airflow) !== -1) {\r\n        matched.push(candidates[j]);\r\n      }\r\n    }\r\n\r\n    \/\/ Fallback gdy brak wynik\u00f3w (np. za du\u017cy metra\u017c)\r\n    if (matched.length === 0 && PRODUCTS.length > 0) {\r\n      html = '<div style=\"grid-column: 1\/-1; text-align: center; padding: 40px; color: var(--rcc-gray-500); font-weight: 500;\">';\r\n      html += 'Wybrana powierzchnia wymaga wi\u0119kszej wydajno\u015bci,<br>ni\u017c oferowana przez pojedyncze urz\u0105dzenie Wentilo Icon (max 450 m\u00b3\/h).<br>Skontaktuj si\u0119 z nami w celu doboru system\u00f3w kaskadowych.';\r\n      html += '<br><br><button type=\"button\" class=\"rcc-btn-red\" style=\"width:auto; padding:0 24px;\" onclick=\"rcc.requestLargeAreaHelp()\">Skontaktuj si\u0119 z nami<\/button>';\r\n      html += '<\/div>';\r\n      grid.innerHTML = html;\r\n      document.getElementById('rcc-results-count').textContent = 'Brak wynik\u00f3w';\r\n      return;\r\n    }\r\n\r\n    \/\/ Sortowanie\r\n    matched.sort(function(a, b) {\r\n      if (st.sortBy === 'recommended') {\r\n        var order = [\"IC\", \"IS\", \"IT\"];\r\n        var idxA = order.indexOf(a.series);\r\n        var idxB = order.indexOf(b.series);\r\n        if (idxA !== idxB) return idxA - idxB;\r\n        return a.price_num - b.price_num;\r\n      }\r\n      \r\n      if (st.sortBy === 'price_asc') {\r\n        return a.price_num - b.price_num;\r\n      }\r\n      \r\n      if (st.sortBy === 'price_desc') {\r\n        return b.price_num - a.price_num;\r\n      }\r\n      \r\n      if (st.sortBy === 'name_asc') {\r\n        return a.symbol.localeCompare(b.symbol);\r\n      }\r\n\r\n      return 0;\r\n    });\r\n\r\n    \/\/ Generowanie HTML kart\r\n    var seenModels = {};\r\n    var renderedCount = 0;\r\n    for (var m = 0; m < matched.length; m++) {\r\n      var p = matched[m];\r\n\r\n      \/\/ Clean name: e.g. \"Rotenso Wentilo Icon IT250 S4 AA\" -> \"Wentilo ICON IT250 S4\"\r\n      var displayName = p.name.replace('Rotenso ', '').replace(' Icon', ' ICON').replace(' AA', '').replace(' AB', '');\r\n\r\n      \/\/ Avoid rendering duplicates since side execution is removed\r\n      if (seenModels[displayName]) continue;\r\n      seenModels[displayName] = true;\r\n      renderedCount++;\r\n\r\n      \/\/ Determine mounting text dynamically (e.g. Wisz\u0105cy -> \u015bciana, Stoj\u0105cy -> pod\u0142oga, Podwieszany -> sufit)\r\n      var mountingText = p.montaz.map(function(mt) {\r\n        if (mt === 'stoj\u0105cy') return 'pod\u0142oga';\r\n        if (mt === 'wisz\u0105cy') return '\u015bciana';\r\n        if (mt === 'podwieszany') return 'sufit';\r\n        return mt;\r\n      }).join(' \/ ');\r\n\r\n      \/\/ Calculate maximum surface area dynamically based on max_airflow\r\n      \/\/ with the 80% demand formula (and 0.95 matching tolerance)\r\n      var height = st.heightVal || 2.6;\r\n      var maxArea = Math.round(getNominalAirflow(p) \/ (height * 0.8 * 0.95));\r\n      \r\n      \/\/ Clean price: format base + panel increase as currency\r\n      var finalPriceNum = p.price_num + (st.panelPriceIncrease || 0);\r\n      var cleanPrice = finalPriceNum.toLocaleString('pl-PL', { maximumFractionDigits: 0 }) + ' z\u0142';\r\n\r\n      html += '<div class=\"' + cardClass + '\">';\r\n      html += '<img decoding=\"async\" class=\"rcc-prod-card-img\" src=\"' + p.image + '\">';\r\n      html += '<div class=\"rcc-prod-card-name\">' + displayName + '<\/div>';\r\n      \r\n      \/\/ Show area capacity based on user selection if finished, or calculated max\r\n      var areaLabel = st.area ? st.area : maxArea;\r\n      html += '<div class=\"rcc-prod-card-surface\">Do powierzchni: ' + areaLabel + ' m\u00b2<\/div>';\r\n\r\n      \/\/ Roczne oszcz\u0119dno\u015bci w ogrzewaniu (dane wg identyfikatora modelu, niezale\u017cne od wariantu AA\/AB)\r\n      var savingsKwh = HEATING_SAVINGS_KWH[p.model];\r\n      if (savingsKwh) {\r\n        html += '<div class=\"rcc-prod-card-savings\">Roczne oszcz\u0119dno\u015bci w ogrzewaniu<br>w wysoko\u015bci ' + savingsKwh.toLocaleString('pl-PL') + ' kWh\/rok*<\/div>';\r\n      }\r\n\r\n      \/\/ Wymiary jednostki (dane wg identyfikatora modelu, niezale\u017cne od wariantu AA\/AB)\r\n      var dimensionsCm = DIMENSIONS_CM[p.model];\r\n      if (dimensionsCm) {\r\n        html += '<div class=\"rcc-prod-card-dimensions\">Wymiary jednostki: ' + dimensionsCm + '<\/div>';\r\n      }\r\n\r\n      html += '<div class=\"rcc-prod-card-mounting\">Monta\u017c: ' + mountingText + '<\/div>';\r\n\r\n      \/\/ Price row\r\n      html += '<div class=\"rcc-prod-card-price-row\">';\r\n      html += '  <div class=\"rcc-prod-card-price-val-panel\">';\r\n      html += '    <span class=\"rcc-prod-card-price-val\">' + cleanPrice + '<\/span>';\r\n      html += '  <\/div>';\r\n      html += '  <div class=\"rcc-prod-card-price-vat\">Cena brutto (23% VAT), bez systemu monta\u017cowego i monta\u017cu.<\/div>';\r\n      html += '  <div class=\"rcc-prod-card-savings-note\">*Zgodnie z Rozporz\u0105dzeniem Delegowanym Komisji (UE) nr 1254\/2014<\/div>';\r\n      html += '<\/div>';\r\n\r\n      \/\/ Buttons\r\n      html += '<div class=\"rcc-prod-card-buttons\">';\r\n      html += '  <a href=\"' + p.url + '\" target=\"_blank\" class=\"rcc-btn-red\">Poznaj model<\/a>';\r\n      html += '  <button onclick=\"rcc.openContactForm(\\'' + displayName + '\\', \\'' + p.model + '\\', \\'' + cleanPrice + '\\')\" class=\"rcc-btn-grey\">Zapytaj o szczeg\u00f3\u0142y<\/button>';\r\n      html += '<\/div>';\r\n\r\n      \/\/ Footer links (karta katalogowa - kotwica #Pobranie kieruje do sekcji pobierania na stronie produktu)\r\n      html += '<div class=\"rcc-prod-card-footer-links\">';\r\n      html += '  <a href=\"#\" onclick=\"window.print(); return false;\">Pobierz raport<\/a>';\r\n      html += '  <span class=\"rcc-divider-line\"><\/span>';\r\n      html += '  <a href=\"' + p.url + '#Pobranie\" target=\"_blank\">Karta katalogowa<\/a>';\r\n      html += '<\/div>';\r\n\r\n      html += '<\/div>';\r\n    }\r\n    \r\n    grid.innerHTML = html;\r\n    \r\n    var countText = '';\r\n    if (renderedCount === 1) {\r\n      countText = '1 pasuj\u0105cy model';\r\n    } else if (renderedCount % 10 >= 2 && renderedCount % 10 <= 4 && (renderedCount % 100 < 10 || renderedCount % 100 >= 20)) {\r\n      countText = renderedCount + ' pasuj\u0105ce modele';\r\n    } else {\r\n      countText = renderedCount + ' pasuj\u0105cych modeli';\r\n    }\r\n    document.getElementById('rcc-results-count').textContent = renderedCount > 0 ? countText : 'Brak wynik\u00f3w';\r\n    updatePrintReport(matched);\r\n  }\r\n\r\n  function validateStep() {\r\n    var nextBtn = document.getElementById('rcc-btn-next');\r\n    var finishBtn = document.getElementById('rcc-btn-finish');\r\n    \r\n    if (st.step === 3) {\r\n      nextBtn.style.display = 'none';\r\n      if (finishBtn) {\r\n        finishBtn.style.display = 'block';\r\n        finishBtn.disabled = !st.montazKey;\r\n      }\r\n    } else if (st.step === 4) {\r\n      nextBtn.style.display = 'none';\r\n      if (finishBtn) finishBtn.style.display = 'none';\r\n    } else {\r\n      nextBtn.style.display = 'flex';\r\n      if (finishBtn) finishBtn.style.display = 'none';\r\n      \r\n      if (st.step === 0) {\r\n        nextBtn.disabled = !(st.area && st.heightKey);\r\n      } else if (st.step === 1) {\r\n        nextBtn.disabled = !st.exchangerKey;\r\n      } else if (st.step === 2) {\r\n        nextBtn.disabled = !(st.versionKey && st.panelKey);\r\n      } else {\r\n        nextBtn.disabled = false;\r\n      }\r\n    }\r\n    document.getElementById('rcc-btn-prev').disabled = (st.step === 0);\r\n  }\r\n\r\n  function showStep(idx) {\r\n    st.step = idx;\r\n    var steps = document.querySelectorAll('.rcc-step');\r\n    for(var i=0; i<steps.length; i++) steps[i].classList.remove('active');\r\n    \r\n    var stepEl = document.querySelector('.rcc-step[data-step=\"'+idx+'\"]');\r\n    if (stepEl) {\r\n      stepEl.classList.add('active');\r\n    }\r\n    \r\n    \/\/ Update step indicator text: show \"idx+1 \/ 4\" for selection steps, show \"Gotowe!\" for the final summary screen\r\n    var indicatorEl = document.getElementById('rcc-step-indicator');\r\n    if (indicatorEl) {\r\n      if (idx < 4) {\r\n        indicatorEl.textContent = (idx+1) + ' \/ 4 ' + stepNames[idx];\r\n      } else {\r\n        indicatorEl.textContent = 'Gotowe!';\r\n      }\r\n    }\r\n    \r\n    \/\/ Hide progress indicators container completely on final step\r\n    var progressContainer = document.querySelector('.rcc-wizard-progress');\r\n    if (progressContainer) {\r\n      progressContainer.style.display = (idx === 4) ? 'none' : 'flex';\r\n    }\r\n    \r\n    \/\/ Update progress steps\r\n    var progressSteps = document.querySelectorAll('.rcc-progress-step');\r\n    for(var j=0; j<progressSteps.length; j++) {\r\n      if(parseInt(progressSteps[j].getAttribute('data-step')) === idx) {\r\n        progressSteps[j].classList.add('active');\r\n      } else {\r\n        progressSteps[j].classList.remove('active');\r\n      }\r\n    }\r\n    \r\n    \/\/ Close info boxes\r\n    var infoBoxes = document.querySelectorAll('.rcc-info-box');\r\n    for(var k=0; k<infoBoxes.length; k++) infoBoxes[k].classList.remove('active');\r\n\r\n    if (st.isCollapsed) {\r\n      rcc.toggleCollapse();\r\n    }\r\n    \r\n    validateStep();\r\n    handleScroll();\r\n  }\r\n\r\n  \/* Walidacja formularza kontaktowego - komunikaty pod konkretnym polem zamiast\r\n     natywnego dymka przegl\u0105darki (st\u0105d te\u017c novalidate na formularzu w HTML). *\/\r\n  var CONTACT_FIELD_VALIDATORS = {\r\n    name: function(v) { return v.trim().length > 0; },\r\n    phone: function(v) {\r\n      var s = v.replace(\/\\s+\/g, '');\r\n      if (s.charAt(0) === '+') { return \/^\\+\\d+$\/.test(s) && s.length >= 10 && s.length <= 12; }\r\n      return \/^\\d{9}$\/.test(s);\r\n    },\r\n    email: function(v) { return \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(v.trim()); },\r\n    location: function(v) { return \/^\\d{2}-\\d{3}$\/.test(v.trim()); },\r\n    message: function(v) { return v.trim().length > 0; }\r\n  };\r\n\r\n  var CONTACT_FIELD_ERRORS = {\r\n    name: 'Podaj imi\u0119 i nazwisko.',\r\n    phone: 'Podaj prawid\u0142owy numer (9 cyfr, lub z prefiksem, np. +48 500600700).',\r\n    email: 'Podaj prawid\u0142owy adres e-mail.',\r\n    location: 'Kod pocztowy w formacie 11-111.',\r\n    message: 'Wiadomo\u015b\u0107 nie mo\u017ce by\u0107 pusta.'\r\n  };\r\n\r\n  function clearContactFieldError(field) {\r\n    var input = document.getElementById('rcc-form-' + field);\r\n    var err = document.getElementById('rcc-error-' + field);\r\n    if (input) input.classList.remove('invalid');\r\n    if (err) err.classList.remove('active');\r\n  }\r\n\r\n  function showContactFieldError(field, message) {\r\n    var input = document.getElementById('rcc-form-' + field);\r\n    var err = document.getElementById('rcc-error-' + field);\r\n    if (input) input.classList.add('invalid');\r\n    if (err) { err.textContent = message; err.classList.add('active'); }\r\n  }\r\n\r\n  \/* Zwraca pierwsze nieprawid\u0142owe pole (do focusu\/scrolla) albo null, gdy wszystko poprawne *\/\r\n  function validateContactForm() {\r\n    var firstInvalid = null;\r\n    Object.keys(CONTACT_FIELD_VALIDATORS).forEach(function(field) {\r\n      var input = document.getElementById('rcc-form-' + field);\r\n      var value = input ? input.value : '';\r\n      if (CONTACT_FIELD_VALIDATORS[field](value)) {\r\n        clearContactFieldError(field);\r\n      } else {\r\n        showContactFieldError(field, CONTACT_FIELD_ERRORS[field]);\r\n        if (!firstInvalid) firstInvalid = input;\r\n      }\r\n    });\r\n\r\n    var consentInput = document.querySelector('.rcc-consent-label input[type=\"checkbox\"]');\r\n    var consentErr = document.getElementById('rcc-error-consent');\r\n    if (consentInput && !consentInput.checked) {\r\n      if (consentErr) { consentErr.textContent = 'Zgoda jest wymagana, aby wys\u0142a\u0107 zapytanie.'; consentErr.classList.add('active'); }\r\n      if (!firstInvalid) firstInvalid = consentInput;\r\n    } else if (consentErr) {\r\n      consentErr.classList.remove('active');\r\n    }\r\n\r\n    return firstInvalid;\r\n  }\r\n\r\n  \/* Public API *\/\r\n  window.rcc = {\r\n    onInput: function() {\r\n      var input = document.getElementById('rcc-area');\r\n      var digitsOnly = input.value.replace(\/[^\\d]\/g, '').slice(0, 3);\r\n      if (input.value !== digitsOnly) input.value = digitsOnly;\r\n      updateState();\r\n    },\r\n    \r\n    selectCard: function(field, val, el) {\r\n      var cards = el.parentNode.querySelectorAll('.rcc-card');\r\n      for(var i=0; i<cards.length; i++) cards[i].classList.remove('selected');\r\n      el.classList.add('selected');\r\n      \r\n      if(field === 'height') { st.heightVal = parseFloat(el.getAttribute('data-h')); st.heightKey = val; }\r\n      if(field === 'exchanger') { st.exchangerKey = val; }\r\n      if(field === 'version') { st.versionKey = val; }\r\n      \r\n      updateState();\r\n      \r\n      if(field === 'height') {\r\n        if (st.area) {\r\n          setTimeout(rcc.nextStep, 350);\r\n        }\r\n      } else if(st.step > 0 && st.step < 3) {\r\n        if (st.step === 1 || (st.step === 2 && st.versionKey && st.panelKey)) {\r\n          setTimeout(rcc.nextStep, 350);\r\n        }\r\n      }\r\n    },\r\n    \r\n    selectPanel: function(val, priceIncrease, el) {\r\n      var cards = el.parentNode.querySelectorAll('.rcc-card');\r\n      for(var i=0; i<cards.length; i++) cards[i].classList.remove('selected');\r\n      el.classList.add('selected');\r\n      st.panelKey = val;\r\n      st.panelPriceIncrease = priceIncrease;\r\n      \r\n      updateState();\r\n      \r\n      if(st.step === 2 && st.versionKey && st.panelKey) {\r\n        setTimeout(rcc.nextStep, 350);\r\n      }\r\n    },\r\n    \r\n    selectMontaz: function(val, el) {\r\n      var cards = el.parentNode.querySelectorAll('.rcc-card');\r\n      for(var i=0; i<cards.length; i++) cards[i].classList.remove('selected');\r\n      el.classList.add('selected');\r\n      st.montazKey = val;\r\n      updateState();\r\n    },\r\n    \r\n    toggleInfoBox: function(id) {\r\n      var box = document.getElementById(id);\r\n      if (box) box.classList.toggle('active');\r\n    },\r\n\r\n    clearFieldError: function(field) {\r\n      clearContactFieldError(field);\r\n    },\r\n\r\n    removeFilter: function(field) {\r\n      if(field === 'area') {\r\n        document.getElementById('rcc-area').value = '';\r\n        st.area = null;\r\n        showStep(0);\r\n      }\r\n      if(field === 'height') {\r\n        st.heightVal = null; st.heightKey = null;\r\n        var hCards = document.querySelectorAll('#rcc-height-cards .rcc-card');\r\n        for(var i=0; i<hCards.length; i++) hCards[i].classList.remove('selected');\r\n        showStep(0);\r\n      }\r\n      if(field === 'exchanger') {\r\n        st.exchangerKey = null;\r\n        var eCards = document.querySelectorAll('#step-exchanger .rcc-card');\r\n        for(var j=0; j<eCards.length; j++) eCards[j].classList.remove('selected');\r\n        showStep(1);\r\n      }\r\n      if(field === 'version') {\r\n        st.versionKey = null;\r\n        var vCards = document.querySelectorAll('#step-systems .rcc-card');\r\n        for(var k=0; k<vCards.length; k++) vCards[k].classList.remove('selected');\r\n        showStep(2);\r\n      }\r\n      if(field === 'panel') {\r\n        st.panelKey = null;\r\n        st.panelPriceIncrease = 0;\r\n        var pCards = document.querySelectorAll('#rcc-panel-cards .rcc-card');\r\n        for(var k=0; k<pCards.length; k++) pCards[k].classList.remove('selected');\r\n        showStep(2);\r\n      }\r\n      if(field === 'montaz') {\r\n        st.montazKey = null;\r\n        var mCards = document.querySelectorAll('#step-montaz .rcc-card');\r\n        for(var l=0; l<mCards.length; l++) mCards[l].classList.remove('selected');\r\n        showStep(3);\r\n      }\r\n      updateState();\r\n    },\r\n    \r\n    nextStep: function() {\r\n      \/\/ Zapotrzebowanie ju\u017c przekracza wydajno\u015b\u0107 znamionow\u0105 najwi\u0119kszej dost\u0119pnej centrali -\r\n      \/\/ \u017caden wyb\u00f3r wymiennika\/systemu\/monta\u017cu tego nie zmieni, wi\u0119c zamiast prowadzi\u0107 przez\r\n      \/\/ kolejne (i tak \u015blepe) kroki, zwijamy kreator, \u017ceby by\u0142 widoczny komunikat w tle z CTA.\r\n      if (st.step === 0 && st.qNeeded > getGlobalMaxNominalAirflow()) {\r\n        if (!st.isCollapsed) rcc.toggleCollapse();\r\n        return;\r\n      }\r\n      if(st.step < 3) showStep(st.step + 1);\r\n    },\r\n    prevStep: function() { if(st.step > 0) showStep(st.step - 1); },\r\n    \r\n    goToStep: function(idx) {\r\n      if (idx > st.step) {\r\n        for (var i = st.step; i < idx; i++) {\r\n          if (i === 0 && !(st.area && st.heightKey)) return;\r\n          if (i === 1 && !st.exchangerKey) return;\r\n          if (i === 2 && !(st.versionKey && st.panelKey)) return;\r\n          if (i === 3 && !st.montazKey) return;\r\n        }\r\n      }\r\n      showStep(idx);\r\n    },\r\n    \r\n    toggleCollapse: function() {\r\n      var wizard = document.getElementById('rcc-wizard');\r\n      var btn = document.getElementById('rcc-btn-collapse');\r\n      if (st.isCollapsed) {\r\n        wizard.classList.remove('collapsed');\r\n        btn.textContent = 'Zwi\u0144 \u02c5';\r\n        st.isCollapsed = false;\r\n      } else {\r\n        wizard.classList.add('collapsed');\r\n        btn.textContent = 'Rozwi\u0144';\r\n        st.isCollapsed = true;\r\n      }\r\n      handleScroll();\r\n    },\r\n\r\n    finish: function() {\r\n      st.isFinished = true;\r\n      \r\n      \/\/ Dynamic summary of selected options matching Screen 5\r\n      var specText = '';\r\n      specText += 'Powierzchnia: ' + st.area + ' m\u00b2 | ';\r\n      \r\n      var heightText = st.heightKey === 'standard' ? 'Wysoko\u015b\u0107: 2,4 - 2,8 m' : 'Wysoko\u015b\u0107: Powy\u017cej 2,9 m';\r\n      specText += heightText + ' | ';\r\n      \r\n      var exchangerText = st.exchangerKey === 'standard' ? 'Odzysk ciep\u0142a' : 'Odzysk ciep\u0142a i wilgoci';\r\n      specText += exchangerText + ' | ';\r\n      \r\n      var versionText = st.versionKey === '1' ? 'System standardowy' : 'System inteligentny';\r\n      specText += versionText + ' | ';\r\n      \r\n      var panelText = st.panelKey === 'iswitch' ? 'Panel: iSWITCH Ti' : 'Panel: iSENSE 5i (+470 z\u0142)';\r\n      specText += panelText + ' | ';\r\n      \r\n      var montazLabel = '';\r\n      if (st.montazKey === 'stoj\u0105cy') montazLabel = 'Na pod\u0142odze';\r\n      else if (st.montazKey === 'wisz\u0105cy') montazLabel = 'Na \u015bcianie';\r\n      else montazLabel = 'Na suficie';\r\n      \r\n      specText += 'Monta\u017c: ' + montazLabel + '.';\r\n      \r\n      document.getElementById('rcc-summary-specs').textContent = specText;\r\n      \r\n      \/\/ Update final specs in banner too\r\n      var finalSpecsEl = document.getElementById('rcc-final-specs');\r\n      if (finalSpecsEl) finalSpecsEl.textContent = specText;\r\n      \r\n      \/\/ Show final results banner\r\n      var finalBannerEl = document.getElementById('rcc-final-banner');\r\n      if (finalBannerEl) finalBannerEl.classList.add('active');\r\n      \r\n      showStep(4);\r\n      renderGrid();\r\n      \r\n      \/\/ Auto collapse the wizard on finish so user can see the cards\r\n      if (!st.isCollapsed) {\r\n        rcc.toggleCollapse();\r\n      }\r\n      \r\n      window.scrollTo({top: 0, behavior: 'smooth'});\r\n    },\r\n    \r\n    restart: function() {\r\n      st.isFinished = false;\r\n      \r\n      var wizard = document.getElementById('rcc-wizard');\r\n      wizard.classList.remove('collapsed');\r\n      document.getElementById('rcc-btn-collapse').textContent = 'Zwi\u0144 \u02c5';\r\n      st.isCollapsed = false;\r\n\r\n      \/\/ Hide results banner and contact form section\r\n      var finalBannerEl = document.getElementById('rcc-final-banner');\r\n      if (finalBannerEl) finalBannerEl.classList.remove('active');\r\n      \r\n      var contactSecEl = document.getElementById('rcc-contact-section');\r\n      if (contactSecEl) contactSecEl.style.display = 'none';\r\n\r\n      \/\/ Reset state\r\n      st.area = null;\r\n      document.getElementById('rcc-area').value = '';\r\n      var areaWarningEl = document.getElementById('rcc-area-warning');\r\n      if (areaWarningEl) areaWarningEl.classList.remove('active');\r\n      st.heightKey = null; st.heightVal = null;\r\n      st.exchangerKey = null;\r\n      st.versionKey = null;\r\n      st.panelKey = null;\r\n      st.panelPriceIncrease = 0;\r\n      st.montazKey = null;\r\n      \r\n      var allCards = document.querySelectorAll('.rcc-card');\r\n      for(var i=0; i<allCards.length; i++) { allCards[i].classList.remove('selected'); allCards[i].classList.remove('disabled'); }\r\n\r\n      showStep(0);\r\n      renderGrid();\r\n      handleScroll();\r\n    },\r\n    \r\n    openContactForm: function(displayName, model, priceStr) {\r\n      var section = document.getElementById('rcc-contact-section');\r\n      if (!section) return;\r\n      \r\n      section.style.display = 'block';\r\n      document.getElementById('rcc-selected-model-name').textContent = displayName;\r\n      \r\n      \/\/ Reset form view\r\n      document.getElementById('rcc-contact-form').style.display = 'block';\r\n      document.getElementById('rcc-form-success').style.display = 'none';\r\n      \r\n      \/\/ Prefill message\r\n      var specInfo = '';\r\n      if (st.area) {\r\n        var heightText = st.heightKey === 'standard' ? 'Standardowa (2,4-2,8 m)' : 'Wysoka (powy\u017cej 2,9 m)';\r\n        var exchangerText = st.exchangerKey === 'standard' ? 'Maksymalny odzysk ciep\u0142a' : 'Odzysk ciep\u0142a i wilgoci';\r\n        var systemText = st.versionKey === '1' ? 'System standardowy (E1\/S1)' : 'System inteligentny (E4\/S4)';\r\n        var panelText = st.panelKey === 'iswitch' ? 'iSWITCH Ti' : 'iSENSE 5i';\r\n        var montazText = '';\r\n        if (st.montazKey === 'stoj\u0105cy') montazText = 'Na pod\u0142odze';\r\n        else if (st.montazKey === 'wisz\u0105cy') montazText = 'Na \u015bcianie';\r\n        else if (st.montazKey === 'podwieszany') montazText = 'Na suficie';\r\n\r\n        specInfo = 'Wybrane parametry doboru:\\n' +\r\n                   '- Powierzchnia: ' + st.area + ' m\u00b2\\n' +\r\n                   '- Wysoko\u015b\u0107 kondygnacji: ' + heightText + '\\n' +\r\n                   '- Rodzaj wymiennika: ' + exchangerText + '\\n' +\r\n                   '- System sterowania: ' + systemText + '\\n' +\r\n                   '- Panel steruj\u0105cy: ' + panelText + '\\n' +\r\n                   '- Spos\u00f3b monta\u017cu: ' + montazText + '\\n\\n';\r\n      }\r\n      var messageText = 'Dzie\u0144 dobry,\\n\\nInteresuje mnie rekuperator ' + displayName + ' (' + model + ').\\n\\n' + specInfo + 'Prosz\u0119 o przygotowanie szczeg\u00f3\u0142owej oferty wraz z monta\u017cem.';\r\n      document.getElementById('rcc-form-message').value = messageText;\r\n\r\n      \/\/ Scroll to contact section smoothly\r\n      setTimeout(function() {\r\n        section.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n      }, 100);\r\n    },\r\n\r\n    \/* Wywo\u0142ywane z komunikatu \"brak wynik\u00f3w\" (metra\u017c przekraczaj\u0105cy pojedyncz\u0105 central\u0119) *\/\r\n    requestLargeAreaHelp: function() {\r\n      var section = document.getElementById('rcc-contact-section');\r\n      if (!section) return;\r\n\r\n      section.style.display = 'block';\r\n      document.getElementById('rcc-selected-model-name').textContent = 'Konsultacja - du\u017ca powierzchnia';\r\n\r\n      document.getElementById('rcc-contact-form').style.display = 'block';\r\n      document.getElementById('rcc-form-success').style.display = 'none';\r\n\r\n      var heightText = st.heightKey === 'standard' ? 'Standardowa (2,4-2,8 m)' : 'Wysoka (powy\u017cej 2,9 m)';\r\n      var specInfo = 'Parametry:\\n' +\r\n                     '- Powierzchnia: ' + st.area + ' m\u00b2\\n' +\r\n                     '- Wysoko\u015b\u0107 kondygnacji: ' + heightText + '\\n' +\r\n                     '- Wymagane zapotrzebowanie na powietrze: ' + Math.round(st.qNeeded) + ' m\u00b3\/h\\n\\n';\r\n      var messageText = 'Dzie\u0144 dobry,\\n\\nPowierzchnia mojego domu (' + st.area + ' m\u00b2) przekracza wydajno\u015b\u0107 pojedynczej centrali Wentilo Icon (max 450 m\u00b3\/h). Prosz\u0119 o kontakt w celu doboru rozwi\u0105zania - np. uk\u0142adu kaskadowego lub wi\u0119kszej centrali.\\n\\n' + specInfo;\r\n      document.getElementById('rcc-form-message').value = messageText;\r\n\r\n      setTimeout(function() {\r\n        section.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n      }, 100);\r\n    },\r\n\r\n   submitContactForm: function(event) {\r\n    event.preventDefault();\r\n\r\n    var firstInvalid = validateContactForm();\r\n    if (firstInvalid) {\r\n      firstInvalid.focus();\r\n      firstInvalid.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      return;\r\n    }\r\n\r\n    var ajaxUrl  = (window.rotensoAjax && window.rotensoAjax.ajaxurl) || '\/wp-admin\/admin-ajax.php';\r\n    var nonce    = (window.rotensoAjax && window.rotensoAjax.nonce)    || '';\r\n\r\n    var selectedModel = document.getElementById('rcc-selected-model-name').textContent || '';\r\n\r\n    var specInfo = '';\r\n    if (st.area) {\r\n        var heightText   = st.heightKey === 'standard' ? 'Standardowa (2,4-2,8 m)' : 'Wysoka (powy\u017cej 2,9 m)';\r\n        var exchangerText= st.exchangerKey === 'standard' ? 'Maksymalny odzysk ciep\u0142a' : 'Odzysk ciep\u0142a i wilgoci';\r\n        var systemText   = st.versionKey === '1' ? 'System standardowy (E1\/S1)' : 'System inteligentny (E4\/S4)';\r\n        var panelText    = st.panelKey === 'iswitch' ? 'iSWITCH Ti' : 'iSENSE 5i';\r\n        var montazText   = st.montazKey === 'stoj\u0105cy' ? 'Na pod\u0142odze' : (st.montazKey === 'wisz\u0105cy' ? 'Na \u015bcianie' : 'Na suficie');\r\n\r\n        specInfo =\r\n            'Powierzchnia: ' + st.area + ' m\u00b2\\n' +\r\n            'Wysoko\u015b\u0107 kondygnacji: ' + heightText + '\\n' +\r\n            'Wymiennik: ' + exchangerText + '\\n' +\r\n            'System sterowania: ' + systemText + '\\n' +\r\n            'Panel steruj\u0105cy: ' + panelText + '\\n' +\r\n            'Spos\u00f3b monta\u017cu: ' + montazText + '\\n' +\r\n            'Wymagane zapotrzebowanie na powietrze: ' + Math.round(st.qNeeded) + ' m\u00b3\/h';\r\n    }\r\n\r\n    var body = new URLSearchParams({\r\n        action:          'rotenso_send_contact',\r\n        nonce:           nonce,\r\n        name:            document.getElementById('rcc-form-name').value,\r\n        email:           document.getElementById('rcc-form-email').value,\r\n        phone:           document.getElementById('rcc-form-phone').value,\r\n        postal_code:     document.getElementById('rcc-form-location').value,\r\n        message:         document.getElementById('rcc-form-message').value,\r\n        selected_model:  selectedModel,\r\n        specs:           specInfo\r\n    });\r\n\r\n    var submitBtn = document.querySelector('#rcc-contact-form .rcc-submit-btn');\r\n    if (submitBtn) { submitBtn.disabled = true; submitBtn.textContent = 'Wysy\u0142anie...'; }\r\n\r\n    fetch(ajaxUrl, {\r\n        method:  'POST',\r\n        headers: { 'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8' },\r\n        body:    body.toString()\r\n    })\r\n    .then(function(res) { return res.json(); })\r\n    .then(function(data) {\r\n        if (data.success) {\r\n            document.getElementById('rcc-contact-form').style.display = 'none';\r\n            document.getElementById('rcc-form-success').style.display  = 'block';\r\n        } else {\r\n            alert('B\u0142\u0105d wysy\u0142ki: ' + (data.data && data.data.message ? data.data.message : 'Nieznany b\u0142\u0105d.'));\r\n            if (submitBtn) { submitBtn.disabled = false; submitBtn.textContent = 'Wy\u015blij zapytanie'; }\r\n        }\r\n    })\r\n    .catch(function(err) {\r\n        alert('B\u0142\u0105d po\u0142\u0105czenia. Spr\u00f3buj ponownie lub skontaktuj si\u0119 bezpo\u015brednio mailowo.');\r\n        if (submitBtn) { submitBtn.disabled = false; submitBtn.textContent = 'Wy\u015blij zapytanie'; }\r\n        console.error('rotenso_contact error:', err);\r\n    });\r\n    }\r\n  };\r\n\r\n  updateState();\r\n\r\n  \/\/ Autofill for testing and rendering\r\n  var urlParams = new URLSearchParams(window.location.search);\r\n  if (urlParams.has('autofill')) {\r\n    document.getElementById('rcc-area').value = '150';\r\n    st.heightVal = 2.6;\r\n    st.heightKey = 'standard';\r\n    st.exchangerKey = 'standard';\r\n    st.versionKey = '1';\r\n    st.montazKey = 'wisz\u0105cy';\r\n    updateState();\r\n    rcc.finish();\r\n  } else if (urlParams.has('autofill_step3')) {\r\n    document.getElementById('rcc-area').value = '150';\r\n    st.heightVal = 2.6;\r\n    st.heightKey = 'standard';\r\n    st.exchangerKey = 'standard';\r\n    st.versionKey = '1';\r\n    updateState();\r\n    rcc.goToStep(2);\r\n  }\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Asystent doboru rekuperacji W 4 krokach dobierzemy odpowiedni\u0105 wydajno\u015b\u0107 i model rekuperatora Rotenso Wentilo Icon dla Twojego domu. Gotowe! Oto urz\u0105dzenie, kt\u00f3re najlepiej odpowiada wybranym przez Ciebie parametrom. \u21ba Zmie\u0144 parametry \u0141adowanie rekuperator\u00f3w&#8230; Zapytaj o szczeg\u00f3\u0142y oferty Wype\u0142nij poni\u017cszy formularz. Nasz doradca skontaktuje si\u0119 z Tob\u0105 i przygotuje bezp\u0142atn\u0105 wycen\u0119. Wybrane urz\u0105dzenie: \u2014 Imi\u0119 i [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-111672","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/pages\/111672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/comments?post=111672"}],"version-history":[{"count":136,"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/pages\/111672\/revisions"}],"predecessor-version":[{"id":111831,"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/pages\/111672\/revisions\/111831"}],"wp:attachment":[{"href":"https:\/\/wentilo.rotenso.com\/pl\/wp-json\/wp\/v2\/media?parent=111672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}