<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archiwa Wentylacja mechaniczna - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/category/wentylacja-mechaniczna/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/category/wentylacja-mechaniczna/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Thu, 28 May 2026 19:57:09 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa Wentylacja mechaniczna - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/category/wentylacja-mechaniczna/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Rekuperacja i ogrzewanie podłogowe – czy to się opłaca?</title>
		<link>https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 14 Feb 2026 11:29:11 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Dom energooszczędny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Energooszczędny dom]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Rekuperacja]]></category>
		<category><![CDATA[Wentylacja mechaniczna]]></category>
		<category><![CDATA[cop pompy ciepła]]></category>
		<category><![CDATA[dom energooszczędny]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[koszty ogrzewania]]></category>
		<category><![CDATA[ogrzewanie domu]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[ozc]]></category>
		<category><![CDATA[podłogówka i rekuperacja]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[rekuperacja]]></category>
		<category><![CDATA[wentylacja mechaniczna]]></category>
		<category><![CDATA[wentylacja z odzyskiem ciepła]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3448</guid>

					<description><![CDATA[<p>Czy połączenie, jakim jest rekuperacja i ogrzewanie podłogowe – czy to się opłaca, faktycznie przynosi realne korzyści, czy to tylko marketingowy slogan? Coraz więcej inwestorów wybiera ten duet, ponieważ zapewnia nie tylko niższe rachunki, ale przede wszystkim stabilną temperaturę, wyższy komfort życia i maksymalną efektywność pompy ciepła. Dzięki odzyskowi ciepła z wentylacji i pracy systemu niskotemperaturowego budynek zużywa mniej energii, a instalacja działa bardziej przewidywalnie. W artykule pokazujemy konkretne wyliczenia, fakty techniczne i realne oszczędności, które mają znaczenie przez kolejne dekady użytkowania domu.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">Rekuperacja i ogrzewanie podłogowe – czy to się opłaca?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #0f172a;
    --rk-intro-card: #1e293b;
    --rk-intro-brand: #2563eb; /* Mocny, inżynierski niebieski */
    --rk-intro-brand-light: #eff6ff;
    --rk-intro-accent: #0ea5e9; /* Cyjan dla powietrza */
    --rk-intro-heat: #f97316;   /* Pomarańcz dla ogrzewania */
    --rk-intro-bg: #f8fafc;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #334155;
    --rk-intro-muted: #64748b;
}

.rk-intro-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(37, 99, 235, 0.15);
    border: 1px solid rgba(37, 99, 235, 0.3);
    overflow: hidden;
}

/* --- HOOK (Mocne otwarcie) --- */
.rk-intro-hero {
    background: linear-gradient(135deg, var(--rk-intro-dark) 0%, #1e3a8a 100%);
    padding: 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-intro-brand);
}

.rk-intro-hero::before {
    content: ''; position: absolute; right: 0; top: 0; width: 60%; height: 100%;
    background: radial-gradient(circle at top right, rgba(14, 165, 233, 0.2), transparent 70%);
    pointer-events: none;
}

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #7dd3fc;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.3);
    position: relative;
    z-index: 2;
}

.rk-intro-hook-text {
    font-size: 20px;
    font-weight: 400;
    line-height: 1.6;
    color: #e0e7ff;
    margin: 0;
    position: relative;
    z-index: 2;
    border-left: 4px solid var(--rk-intro-heat);
    padding-left: 20px;
}

.rk-intro-hook-text strong {
    color: #ffffff;
    font-weight: 900;
}

/* --- GŁÓWNA TREŚĆ WSTĘPU --- */
.rk-intro-main {
    padding: 45px 50px 30px;
    background: #ffffff;
}

.rk-intro-main h2 {
    font-size: 32px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    margin: 0 0 20px 0;
    line-height: 1.2;
    letter-spacing: -0.5px;
}

.rk-intro-main h2 span {
    color: var(--rk-intro-brand);
}

.rk-intro-main p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-intro-text);
    margin: 0 0 15px 0;
}

/* --- INTERAKTYWNA MAPA ARTYKUŁU --- */
.rk-intro-map {
    background: var(--rk-intro-bg);
    border-top: 1px solid var(--rk-intro-border);
    padding: 40px 50px;
}

.rk-map-title {
    font-size: 14px;
    font-weight: 900;
    color: var(--rk-intro-muted);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin: 0 0 25px 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-map-grid {
    display: grid;
    grid-template-columns: 1fr 1.5fr;
    gap: 30px;
}

/* Przyciski Nawigacji */
.rk-map-nav {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.rk-map-btn {
    background: #ffffff;
    border: 1px solid var(--rk-intro-border);
    border-radius: 12px;
    padding: 16px 20px;
    display: flex;
    align-items: center;
    gap: 15px;
    cursor: pointer;
    transition: all 0.2s ease-in-out;
    text-align: left;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-map-btn:hover {
    border-color: var(--rk-intro-brand);
    background: var(--rk-intro-brand-light);
}

.rk-map-btn.active {
    background: var(--rk-intro-brand);
    border-color: var(--rk-intro-brand);
    color: #ffffff;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.3);
}

.rk-map-btn-icon {
    width: 36px; height: 36px;
    border-radius: 8px;
    background: var(--rk-intro-bg);
    color: var(--rk-intro-brand);
    display: flex; align-items: center; justify-content: center;
    flex-shrink: 0;
}

.rk-map-btn.active .rk-map-btn-icon {
    background: rgba(255,255,255,0.2);
    color: #ffffff;
}

.rk-map-btn-text {
    font-size: 14px; font-weight: 800; color: var(--rk-intro-dark);
}
.rk-map-btn.active .rk-map-btn-text { color: #ffffff; }

/* Obszar Wyświetlania (Panele statyczne) */
.rk-map-display {
    background: #ffffff;
    border: 1px solid var(--rk-intro-border);
    border-radius: 16px;
    padding: 30px;
    position: relative;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
}

.rk-map-panel {
    display: none;
    opacity: 0;
    transition: opacity 0.3s ease;
}

.rk-map-panel.active {
    display: flex;
    flex-direction: column;
    opacity: 1;
}

.rk-panel-svg {
    width: 100%;
    height: 140px;
    background: var(--rk-intro-dark);
    border-radius: 12px;
    margin-bottom: 20px;
    display: flex; align-items: center; justify-content: center;
    border: 2px solid #334155;
    padding: 15px;
}

.rk-panel-content h4 {
    margin: 0 0 10px 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-intro-dark);
}

.rk-panel-content p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-intro-text);
}

/* Statyczne grafiki SVG (Bez animacji) */
.svg-static-art { width: 100%; height: 100%; }

@media (max-width: 768px) {
    .rk-intro-hero, .rk-intro-main, .rk-intro-map { padding: 30px 20px; }
    .rk-intro-main h2 { font-size: 26px; }
    .rk-intro-hook-text { font-size: 16px; }
    .rk-map-grid { grid-template-columns: 1fr; gap: 20px; }
    .rk-panel-svg { height: 120px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Rekuperacja i ogrzewanie podłogowe – czy to się opłaca?",
    "description": "Luty 2025, -18°C. Poznaj twarde inżynierskie fakty, dlaczego połączenie wentylacji mechanicznej z podłogówką to klucz do redukcji kosztów o 40%.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-wstep",
    "name": "Parametry wejściowe do analizy efektywności układu zintegrowanego",
    "description": "Zarys głównych zagadnień analizowanych w artykule: opłacalność, temperatury pracy, błędy montażowe oraz inżynierski algorytm obliczeniowy.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "czy opłaca się rekuperacja i podłogówka",
      "koszty ogrzewania dom WT2021",
      "parametry pompy ciepła",
      "błędy instalacyjne HVAC",
      "sprawność systemu grzewczego"
    ],
    "measurementTechnique": "Jakościowy i ilościowy podział zagadnień analitycznych dotyczących integracji instalacyjnej OZE w budynkach jednorodzinnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Moduł 1: Weryfikacja rzeczywistych kosztów i ROI.",
        "Moduł 2: Normatywne wytyczne temperaturowe (max 35°C).",
        "Moduł 3: Dekompresja i błędy wykonawcze.",
        "Moduł 4: Algorytm bilansu masowego powietrza."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-wstep",
    "name": "Interaktywna Mapa Artykułu",
    "description": "Moduł nawigacyjny pozwalający czytelnikowi zapoznać się ze strukturą analityczną i zakresem wiedzy technicznej prezentowanej w tekście.",
    "applicationCategory": "NavigationApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-intro-container" id="rk-intro-app">
    
    <div class="rk-intro-hero">
        <div class="rk-intro-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            Inżynierska Weryfikacja Faktów
        </div>
        <p class="rk-intro-hook-text">
            <strong>Luty 2025, -18°C za oknem.</strong> Na jednym osiedlu dom z tradycyjną wentylacją notuje potężne skoki zużycia prądu, a sprężarka pompy ciepła wyje z przeciążenia. Kilka domów dalej, w identycznym budynku, panuje absolutna cisza, idealna wilgotność, a zużycie energii jest o <strong>40% niższe</strong>. Różnica nie tkwi w grubości styropianu, lecz w idealnej synergii dwóch układów.
        </p>
    </div>

    <div class="rk-intro-main">
        <h2>Rekuperacja i ogrzewanie podłogowe – <span>czy to się opłaca?</span></h2>
        <p>
            Planując budowę domu, stajemy przed wyborem systemów, które przez dekady będą decydować o naszym komforcie i portfelu. Obecnie najczęściej wybieranym duetem przez świadomych inwestorów jest rekuperacja i wodne ogrzewanie podłogowe, które razem tworzą układ niemal idealny.
        </p>
        <p>
            To połączenie nie wynika jedynie z mody czy marketingu producentów urządzeń. To <strong>czysta fizyka budowli</strong> i dążenie do całkowitej minimalizacji strat energetycznych. W systemie tym, niskotemperaturowe źródło ciepła ściśle współpracuje z procesem odzysku energii, co pozwala na potężną redukcję kosztów eksploatacyjnych w porównaniu do rozwiązań tradycyjnych.
        </p>
    </div>

    <div class="rk-intro-map">
        <div class="rk-map-title">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            Czego dokładnie dowiesz się z tego artykułu?
        </div>
        
        <div class="rk-map-grid">
            
            <div class="rk-map-nav">
                <button class="rk-map-btn active" data-map="panel-1">
                    <div class="rk-map-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div>
                    <span class="rk-map-btn-text">Prawdziwe koszty i liczby</span>
                </button>
                <button class="rk-map-btn" data-map="panel-2">
                    <div class="rk-map-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div>
                    <span class="rk-map-btn-text">Parametry techniczne (COP)</span>
                </button>
                <button class="rk-map-btn" data-map="panel-3">
                    <div class="rk-map-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg></div>
                    <span class="rk-map-btn-text">Patologie wykonawcze</span>
                </button>
                <button class="rk-map-btn" data-map="panel-4">
                    <div class="rk-map-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg></div>
                    <span class="rk-map-btn-text">Algorytm oszczędności mocy</span>
                </button>
            </div>

            <div class="rk-map-display">
                
                <div class="rk-map-panel active" id="panel-1">
                    <div class="rk-panel-svg">
                        <svg class="svg-static-art" viewBox="0 0 200 100">
                            <rect x="30" y="60" width="30" height="20" fill="#f43f5e" rx="2"></rect>
                            <rect x="85" y="40" width="30" height="40" fill="#f59e0b" rx="2"></rect>
                            <rect x="140" y="15" width="30" height="65" fill="#10b981" rx="2"></rect>
                            <path d="M 20 85 L 180 85" stroke="#cbd5e1" stroke-width="3" stroke-linecap="round"></path>
                            <path d="M 45 60 L 100 40 L 155 15" fill="none" stroke="#ffffff" stroke-width="2" stroke-dasharray="4 4"></path>
                            <circle cx="155" cy="15" r="4" fill="#ffffff"></circle>
                        </svg>
                    </div>
                    <div class="rk-panel-content">
                        <h4>Rozliczenie bez tajemnic</h4>
                        <p>Przeprowadzimy twardą weryfikację faktów: sprawdzimy, czy koszty wymiany filtrów i prądu dla rekuperatora nie zjadają zysków z lepszej sprawności pompy ciepła.</p>
                    </div>
                </div>

                <div class="rk-map-panel" id="panel-2">
                    <div class="rk-panel-svg">
                        <svg class="svg-static-art" viewBox="0 0 200 100">
                            <rect x="20" y="70" width="160" height="15" fill="#334155" rx="4"></rect>
                            <circle cx="50" cy="77" r="4" fill="#f97316"></circle>
                            <circle cx="100" cy="77" r="4" fill="#f97316"></circle>
                            <circle cx="150" cy="77" r="4" fill="#f97316"></circle>
                            <path d="M 50 60 Q 75 30 100 60 T 150 60" fill="none" stroke="#0ea5e9" stroke-width="4" stroke-linecap="round"></path>
                            <rect x="85" y="10" width="30" height="16" fill="#1e293b" stroke="#0ea5e9" stroke-width="2" rx="4"></rect>
                            <text x="100" y="22" fill="#ffffff" font-size="10" font-family="sans-serif" font-weight="bold" text-anchor="middle">30°C</text>
                        </svg>
                    </div>
                    <div class="rk-panel-content">
                        <h4>Maksymalna wydajność (COP)</h4>
                        <p>Pokażemy, dlaczego norma PN-EN 1264 zmusza nas do obniżenia temperatury zasilania do 30°C i jak to wpływa na żywotność Twojej sprężarki i roczne wskaźniki SCOP.</p>
                    </div>
                </div>

                <div class="rk-map-panel" id="panel-3">
                    <div class="rk-panel-svg">
                        <svg class="svg-static-art" viewBox="0 0 200 100">
                            <rect x="40" y="20" width="120" height="60" fill="none" stroke="#64748b" stroke-width="4" rx="4"></rect>
                            <line x1="100" y1="20" x2="100" y2="80" stroke="#64748b" stroke-width="4"></line>
                            <rect x="70" y="10" width="60" height="10" fill="#ef4444"></rect>
                            <path d="M 75 15 L 85 5 M 115 15 L 125 5" fill="none" stroke="#ef4444" stroke-width="2" stroke-linecap="round"></path>
                            <circle cx="100" cy="50" r="16" fill="#1e293b"></circle>
                            <path d="M 94 44 L 106 56 M 106 44 L 94 56" stroke="#f87171" stroke-width="4" stroke-linecap="round"></path>
                        </svg>
                    </div>
                    <div class="rk-panel-content">
                        <h4>Unikaj katastrofy na budowie</h4>
                        <p>Zostawione nawiewniki, rzadki rozstaw rur w łazience i brak profili dylatacyjnych. Analizujemy 3 najpoważniejsze błędy wykonawców, które trwale zniszczą synergię systemów.</p>
                    </div>
                </div>

                <div class="rk-map-panel" id="panel-4">
                    <div class="rk-panel-svg">
                        <svg class="svg-static-art" viewBox="0 0 200 100">
                            <rect x="20" y="20" width="160" height="60" fill="#0f172a" stroke="#38bdf8" stroke-width="2" rx="6"></rect>
                            <text x="100" y="45" fill="#e2e8f0" font-family="monospace" font-size="14" font-weight="bold" text-anchor="middle">Q = V × ρ × Cp × ΔT</text>
                            <line x1="30" y1="55" x2="170" y2="55" stroke="#334155" stroke-width="2" stroke-dasharray="4 4"></line>
                            <text x="100" y="72" fill="#10b981" font-family="monospace" font-size="14" font-weight="bold" text-anchor="middle">ΔQ = 2.30 kW</text>
                        </svg>
                    </div>
                    <div class="rk-panel-content">
                        <h4>Inżynierskie metody obliczeń</h4>
                        <p>Żadnego zgadywania. Pokażemy Ci krok po kroku algorytm oparty na bilansie masowym powietrza, udowadniając matematycznie, ile mocy cieplnej odzyskasz z centrali.</p>
                    </div>
                </div>

            </div>
        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Logika nawigacji (Spis treści)
    const mapBtns = document.querySelectorAll('.rk-map-btn');
    const mapPanels = document.querySelectorAll('.rk-map-panel');

    mapBtns.forEach(btn => {
        btn.addEventListener('click', () => {
            // Zmiana klas przycisków
            mapBtns.forEach(b => b.classList.remove('active'));
            btn.classList.add('active');

            // Zmiana paneli (natychmiastowa widoczność, przejście reguluje CSS opacity)
            const targetId = btn.getAttribute('data-map');
            
            mapPanels.forEach(panel => {
                panel.classList.remove('active');
                if(panel.id === targetId) {
                    panel.classList.add('active');
                }
            });
        });
    });

});
</script>



<style>
:root {
    --rk-cost-dark: #0f172a;
    --rk-cost-panel: #1e293b;
    --rk-cost-primary: #10b981; /* Szmaragd - optymalizacja/oszczędność */
    --rk-cost-primary-light: #d1fae5;
    --rk-cost-alert: #f43f5e; /* Czerwień - straty/błędy */
    --rk-cost-alert-light: #ffe4e6;
    --rk-cost-accent: #38bdf8; /* Błękit - powietrze/wentylacja */
    --rk-cost-bg: #f8fafc;
    --rk-cost-border: #e2e8f0;
    --rk-cost-text: #334155;
    --rk-cost-muted: #64748b;
}

.rk-cost-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(16, 185, 129, 0.15);
    border: 1px solid rgba(16, 185, 129, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-cost-header {
    background: linear-gradient(135deg, var(--rk-cost-dark) 0%, #064e3b 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-cost-primary);
}

.rk-cost-header::before {
    content: ''; position: absolute; right: 0; top: 0; width: 60%; height: 100%;
    background: radial-gradient(circle at top right, rgba(16, 185, 129, 0.2), transparent 70%);
    pointer-events: none;
}

.rk-cost-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(110, 231, 183, 0.3);
    position: relative;
    z-index: 2;
}

.rk-cost-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
    position: relative;
    z-index: 2;
}

.rk-cost-title span { color: #34d399; }

.rk-cost-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.7;
    margin: 0;
    position: relative;
    z-index: 2;
    max-width: 800px;
}

/* Kafelki z faktami */
.rk-cost-facts {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 40px 50px 20px;
    background: var(--rk-cost-bg);
}

.rk-fact-card {
    background: #ffffff;
    border: 1px solid var(--rk-cost-border);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-fact-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 15px 30px -10px rgba(16, 185, 129, 0.15);
    border-color: var(--rk-cost-primary);
}

.rk-fact-icon {
    width: 48px; height: 48px; border-radius: 12px; background: var(--rk-cost-primary-light); color: var(--rk-cost-primary); display: flex; align-items: center; justify-content: center; margin-bottom: 15px;
}

.rk-fact-card h4 { margin: 0 0 10px 0; font-size: 20px; font-weight: 900; color: var(--rk-cost-dark); }
.rk-fact-card p { margin: 0; font-size: 13px; color: var(--rk-cost-muted); line-height: 1.5; font-weight: 600; }

/* Interaktywny Symulator */
.rk-cost-interactive {
    padding: 20px 50px 40px;
    background: var(--rk-cost-bg);
}

.rk-sim-box {
    background: var(--rk-cost-dark);
    border-radius: 20px;
    padding: 30px;
    box-shadow: inset 0 10px 30px rgba(0,0,0,0.5);
    position: relative;
    overflow: hidden;
}

.rk-sim-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 30px;
    position: relative;
    z-index: 2;
}

.rk-sim-title {
    color: #ffffff;
    font-size: 18px;
    font-weight: 900;
    margin: 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

/* Toggle Switch */
.rk-cost-toggle {
    display: flex;
    background: rgba(0,0,0,0.4);
    border-radius: 12px;
    padding: 4px;
    position: relative;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-toggle-btn {
    flex: 1;
    padding: 12px 24px;
    text-align: center;
    border: none;
    background: transparent;
    color: #94a3b8;
    font-weight: 800;
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    cursor: pointer;
    border-radius: 8px;
    transition: color 0.3s;
    position: relative;
    z-index: 2;
}

.rk-toggle-btn.active { color: #ffffff; }

.rk-toggle-slider {
    position: absolute;
    top: 4px; bottom: 4px; left: 4px;
    width: calc(50% - 4px);
    border-radius: 8px;
    z-index: 1;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background 0.4s;
}

/* Stany Toggle */
.state-grav .rk-toggle-slider { transform: translateX(0); background: var(--rk-cost-alert); }
.state-rek .rk-toggle-slider { transform: translateX(100%); background: var(--rk-cost-primary); }

/* Zawartość Symulatora */
.rk-sim-content {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
    gap: 40px;
    position: relative;
    z-index: 2;
}

.rk-data-panel {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-data-row {
    background: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.4s;
}

.rk-data-label { font-size: 12px; font-weight: 800; color: #cbd5e1; text-transform: uppercase; }
.rk-data-val { font-size: 16px; font-weight: 900; }

.state-grav .rk-data-row.dynamic { border-color: rgba(244, 63, 94, 0.4); background: rgba(244, 63, 94, 0.1); }
.state-grav .rk-data-row.dynamic .rk-data-val { color: var(--rk-cost-alert); }

.state-rek .rk-data-row.dynamic { border-color: rgba(16, 185, 129, 0.4); background: rgba(16, 185, 129, 0.1); }
.state-rek .rk-data-row.dynamic .rk-data-val { color: var(--rk-cost-primary); }

/* Wizualizacja SVG */
.rk-svg-wrapper {
    width: 100%;
    height: 100%;
    min-height: 200px;
    background: #0f172a;
    border-radius: 16px;
    border: 2px solid #334155;
    position: relative;
    overflow: hidden;
    transition: border-color 0.4s;
}

.state-grav .rk-svg-wrapper { border-color: var(--rk-cost-alert); }
.state-rek .rk-svg-wrapper { border-color: var(--rk-cost-primary); }

/* Elementy SVG */
.svg-bg { fill: #1e293b; }
.svg-floor { fill: #334155; }
.svg-pipe { stroke-width: 4; stroke-linecap: round; transition: stroke 0.4s; }
.svg-pump { stroke-width: 2; rx: 4; transition: stroke 0.4s, fill 0.4s; }

/* Animacje Grav */
.anim-cold-drop { opacity: 0; }
.state-grav .anim-cold-drop { opacity: 1; animation: coldDrop 1.5s linear infinite; }
@keyframes coldDrop { 0% { transform: translate(10px, -10px); opacity: 0; } 20% { opacity: 1; } 80% { opacity: 1; } 100% { transform: translate(-20px, 30px); opacity: 0; } }

.state-grav .svg-pipe { stroke: #fb923c; }
.state-grav .svg-pump { stroke: var(--rk-cost-alert); fill: rgba(244, 63, 94, 0.2); animation: pumpTakt 1s infinite alternate; }
@keyframes pumpTakt { from { transform: scale(1); } to { transform: scale(1.05); } }

/* Animacje Rek */
.anim-rek-box { opacity: 0; transform-origin: center; transition: opacity 0.4s; }
.state-rek .anim-rek-box { opacity: 1; }
.state-rek .anim-rek-spin { animation: spinRek 4s linear infinite; }
@keyframes spinRek { to { transform: rotate(360deg); } }

.anim-warm-flow { opacity: 0; }
.state-rek .anim-warm-flow { opacity: 1; animation: warmFlow 2s ease-in-out infinite; }
@keyframes warmFlow { 0% { transform: translateX(0); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateX(-15px); opacity: 0; } }

.state-rek .svg-pipe { stroke: var(--rk-cost-primary); }
.state-rek .svg-pump { stroke: var(--rk-cost-primary); fill: rgba(16, 185, 129, 0.1); }

/* Sekcja Konsekwencji Błędów */
.rk-cost-consequences {
    background: #ffffff;
    padding: 0 50px 50px;
}

.rk-cons-box {
    background: #fff1f2;
    border-left: 4px solid var(--rk-cost-alert);
    padding: 30px;
    border-radius: 0 16px 16px 0;
}

.rk-cons-box h3 {
    margin: 0 0 15px 0;
    font-size: 20px;
    font-weight: 900;
    color: #9f1239;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-cons-box p {
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: #4c0519;
}

.rk-cons-box strong { font-weight: 900; }

@media (max-width: 768px) {
    .rk-cost-header, .rk-cost-interactive, .rk-cost-consequences { padding: 30px 20px; }
    .rk-cost-facts { grid-template-columns: 1fr; padding: 30px 20px 10px; }
    .rk-cost-title { font-size: 24px; }
    .rk-sim-header { flex-direction: column; gap: 20px; align-items: flex-start; }
    .rk-cost-toggle { width: 100%; }
    .rk-sim-content { grid-template-columns: 1fr; gap: 25px; }
    .rk-svg-wrapper { height: 200px; }
    .rk-cons-box { padding: 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-koszty-eksploatacji",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Czy połączenie rekuperacji i ogrzewania podłogowego obniża koszty eksploatacji domu?",
    "description": "Zgodnie z normą PN-EN 12831-1, synchronizacja rekuperacji z podłogówką redukuje koszty o 35-43% i zapobiega niszczącemu taktowaniu pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-koszty-eksploatacji",
    "name": "Wpływ rekuperacji na obciążenie cieplne i koszty eksploatacji",
    "description": "Parametry techniczno-finansowe wynikające z braku synchronizacji systemów (przewymiarowanie pompy, bezwładność jastrychu).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "koszty eksploatacji rekuperacja podłogówka",
      "obciążenie cieplne PN-EN 12831-1",
      "przewymiarowanie pompy ciepła",
      "taktowanie sprężarki",
      "bezwładność cieplna jastrychu"
    ],
    "measurementTechnique": "Obliczenia projektowego obciążenia cieplnego (strata mocy wentylacyjnej QV) w oparciu o wytyczne normy PN-EN 12831-1:2017-08.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Odzysk ciepła redukuje koszty ogrzewania o 35% do 43%.",
        "Brak rekuperacji wymusza przewymiarowanie pompy ciepła o 2-3 kW (koszt 4-6 tys. PLN).",
        "Wstępne podgrzanie powietrza nawiewanego (do +16°C przy -10°C) niweluje efekt bezwładności jastrychu (6.5 cm)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-koszty-eksploatacji",
    "name": "Symulator Synchronizacji Instalacji",
    "description": "Aplikacja edukacyjna porównująca parametry pracy pompy ciepła i podłogówki z wentylacją grawitacyjną oraz z rekuperacją.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-cost-container" id="rk-cost-app">
    
    <div class="rk-cost-header">
        <div class="rk-cost-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
            Analiza Operacyjna
        </div>
        <h2 class="rk-cost-title">Czy połączenie rekuperacji i podłogówki <span>obniża koszty eksploatacji?</span></h2>
        <p class="rk-cost-desc">Bezpośrednia odpowiedź brzmi: tak. Inwestorzy często stają przed dylematem finansowym, przerażeni kosztem początkowym obu systemów. Ból pojawia się jednak w momencie analizy pierwszych faktur za energię.</p>
    </div>

    <div class="rk-cost-facts">
        <div class="rk-fact-card">
            <div class="rk-fact-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="23 18 13.5 8.5 8.5 13.5 1 6"></polyline><polyline points="17 18 23 18 23 12"></polyline></svg></div>
            <h4>-35% do -43%</h4>
            <p>O tyle spadają roczne koszty względem tradycyjnego układu (grzejniki + grawitacja).</p>
        </div>
        <div class="rk-fact-card">
            <div class="rk-fact-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg></div>
            <h4>Norma OZC</h4>
            <p>Spadek strat wentylacyjnych (QV) określa norma <strong>PN-EN 12831-1:2017-08</strong>.</p>
        </div>
        <div class="rk-fact-card">
            <div class="rk-fact-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="14" width="18" height="8" rx="2" ry="2"></rect><path d="M5 14v-2a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v2"></path><path d="M8 10V6a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v4"></path></svg></div>
            <h4>Bezwładność</h4>
            <p>Betonowy jastrych (6,5 cm) nagrzewa się godzinami. Rekuperacja zapobiega jego wychłodzeniu.</p>
        </div>
    </div>

    <div class="rk-cost-interactive">
        <div class="rk-sim-box state-grav" id="rk-cost-sim">
            
            <div class="rk-sim-header">
                <h3 class="rk-sim-title">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><path d="M12 8v4l3 3"></path></svg>
                    Symulator Synchronizacji Instalacji
                </h3>
                
                <div class="rk-cost-toggle">
                    <div class="rk-toggle-slider"></div>
                    <button class="rk-toggle-btn active" data-sys="grav">Went. Grawitacyjna</button>
                    <button class="rk-toggle-btn" data-sys="rek">Rekuperacja</button>
                </div>
            </div>

            <div class="rk-sim-content">
                
                <div class="rk-data-panel">
                    <div class="rk-data-row">
                        <span class="rk-data-label">Temp. na zewnątrz</span>
                        <span class="rk-data-val" style="color: #cbd5e1;">-10°C</span>
                    </div>
                    <div class="rk-data-row dynamic">
                        <span class="rk-data-label">Temp. nawiewu z zewnątrz</span>
                        <span class="rk-data-val" id="valNawiew">-10°C</span>
                    </div>
                    <div class="rk-data-row dynamic">
                        <span class="rk-data-label">Stan pompy ciepła</span>
                        <span class="rk-data-val" id="valPompa">Ciągłe taktowanie</span>
                    </div>
                    <div class="rk-data-row dynamic">
                        <span class="rk-data-label">Bezwładność podłogi</span>
                        <span class="rk-data-val" id="valPodloga">Nagłe wychłodzenie</span>
                    </div>
                </div>

                <div class="rk-svg-wrapper">
                    <svg viewBox="0 0 200 150" width="100%" height="100%">
                        <rect x="20" y="20" width="160" height="110" class="svg-bg" rx="4"/>
                        <path d="M 120 20 L 120 130" stroke="#334155" stroke-width="2"/>
                        
                        <rect x="140" y="40" width="40" height="40" fill="#0f172a" stroke="#475569" stroke-width="2"/>
                        
                        <g class="anim-cold-drop">
                            <path d="M 160 50 Q 140 70 125 100" fill="none" stroke="#38bdf8" stroke-width="3" stroke-linecap="round" stroke-dasharray="4 4"/>
                        </g>

                        <rect x="20" y="110" width="160" height="20" class="svg-floor"/>
                        <path class="svg-pipe" d="M 30 120 L 110 120" fill="none"/>

                        <rect class="svg-pump" x="40" y="50" width="40" height="50"/>
                        <circle cx="60" cy="75" r="10" fill="none" stroke="#ffffff" stroke-width="2" opacity="0.5"/>

                        <g class="anim-rek-box">
                            <rect x="70" y="5" width="40" height="25" fill="#1e293b" stroke="#10b981" stroke-width="2" rx="2"/>
                            <path class="anim-rek-spin" d="M 85 17 L 95 17 M 90 12 L 90 22" stroke="#10b981" stroke-width="2"/>
                            <path d="M 90 30 L 90 45 L 140 45" fill="none" stroke="#475569" stroke-width="4"/>
                            <g class="anim-warm-flow">
                                <path d="M 135 45 L 125 45" stroke="#10b981" stroke-width="3" stroke-linecap="round"/>
                                <path d="M 135 52 L 125 52" stroke="#10b981" stroke-width="3" stroke-linecap="round"/>
                            </g>
                        </g>

                    </svg>
                </div>

            </div>
        </div>
    </div>

    <div class="rk-cost-consequences">
        <h3 style="margin: 0 0 20px 0; font-size: 22px; font-weight: 900; color: var(--rk-cost-dark);">Konsekwencje błędów: Brak synchronizacji systemów</h3>
        <div class="rk-cons-box">
            <h3>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                Ukryte koszty inwestycyjne
            </h3>
            <p>Rozdzielenie tych systemów na etapie decyzji skutkuje <strong>przewymiarowaniem pompy ciepła o 2-3 kW mocy nominalnej</strong>. Instalator działający bez profesjonalnego projektu OZC zakłada standardowe straty na wentylację grawitacyjną. Podnosi to koszt zakupu samego źródła ciepła o około <strong>4 000 &#8211; 6 000 PLN</strong> i generuje niszczące tzw. <strong>taktowanie pompy</strong> w okresach przejściowych (wiosna/jesień), co drastycznie skraca żywotność sprężarki.</p>
        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    const container = document.getElementById('rk-cost-sim');
    const btns = document.querySelectorAll('.rk-toggle-btn');
    
    // Dynamiczne teksty
    const valNawiew = document.getElementById('valNawiew');
    const valPompa = document.getElementById('valPompa');
    const valPodloga = document.getElementById('valPodloga');

    const data = {
        grav: {
            nawiew: '-10°C (Mroźne uderzenie)',
            pompa: 'Taktowanie / Przewymiarowana (+3kW)',
            podloga: 'Utrata energii z jastrychu'
        },
        rek: {
            nawiew: '+16°C (Wstępnie ogrzane)',
            pompa: 'Zoptymalizowana / Stabilna praca',
            podloga: 'Ciągły, liniowy profil ciepła'
        }
    };

    btns.forEach(btn => {
        btn.addEventListener('click', () => {
            const sys = btn.getAttribute('data-sys');
            
            // Zmiana klas przycisków
            btns.forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            
            // Zmiana klasy kontenera dla animacji i kolorów
            container.className = `rk-sim-box state-${sys}`;

            // Zmiana tekstów
            valNawiew.textContent = data[sys].nawiew;
            valPompa.textContent = data[sys].pompa;
            valPodloga.textContent = data[sys].podloga;
        });
    });

});
</script>



<style>
:root {
    --rk-tmp-dark: #0f172a;
    --rk-tmp-panel: #1e293b;
    --rk-tmp-primary: #f97316; /* Ciepły pomarańcz dla temperatury */
    --rk-tmp-primary-light: #ffedd5;
    --rk-tmp-success: #10b981; /* Zieleń dla wysokiego COP */
    --rk-tmp-success-light: #d1fae5;
    --rk-tmp-alert: #ef4444;   /* Czerwień dla zbyt wysokiej temperatury */
    --rk-tmp-cold: #38bdf8;    /* Błękit dla rekuperacji */
    --rk-tmp-bg: #f8fafc;
    --rk-tmp-border: #e2e8f0;
    --rk-tmp-text: #334155;
    --rk-tmp-muted: #64748b;
}

.rk-tmp-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(249, 115, 22, 0.15);
    border: 1px solid rgba(249, 115, 22, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-tmp-header {
    background: linear-gradient(135deg, var(--rk-tmp-dark) 0%, #431407 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-tmp-primary);
}

.rk-tmp-header::after {
    content: ''; position: absolute; right: 0; top: 0; width: 300px; height: 100%;
    background: radial-gradient(circle at right, rgba(249, 115, 22, 0.15) 0%, transparent 70%);
    pointer-events: none;
}

.rk-tmp-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(249, 115, 22, 0.2);
    color: #fdba74;
    padding: 8px 18px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(253, 186, 116, 0.3);
}

.rk-tmp-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
    position: relative;
    z-index: 2;
}

.rk-tmp-title span { color: #fb923c; }

.rk-tmp-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.6;
    margin: 0;
    position: relative;
    z-index: 2;
}

/* Sekcja z treścią i normami */
.rk-tmp-content-box {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-tmp-content-box p {
    font-size: 15px;
    line-height: 1.8;
    color: var(--rk-tmp-text);
    margin: 0 0 15px 0;
}

.rk-tmp-content-box strong {
    color: var(--rk-tmp-dark);
    font-weight: 800;
}

.rk-tmp-norm-card {
    background: var(--rk-tmp-bg);
    border-left: 4px solid var(--rk-tmp-primary);
    padding: 20px 25px;
    border-radius: 0 12px 12px 0;
    margin: 25px 0;
}

.rk-tmp-norm-title {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-tmp-dark);
    margin: 0 0 10px 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-tmp-link {
    color: var(--rk-tmp-primary);
    text-decoration: none;
    font-weight: 700;
    border-bottom: 2px dashed rgba(249, 115, 22, 0.4);
    transition: all 0.3s;
}

.rk-tmp-link:hover {
    color: #c2410c;
    border-bottom-style: solid;
}

/* Interaktywny Symulator COP */
.rk-tmp-simulator {
    background: var(--rk-tmp-panel);
    padding: 40px 50px;
    color: #ffffff;
    border-top: 1px solid #334155;
}

.rk-sim-title {
    font-size: 20px;
    font-weight: 900;
    margin: 0 0 30px 0;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-sim-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
}

.rk-sim-controls {
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.1);
    border-radius: 16px;
    padding: 30px 25px;
}

.rk-sim-label {
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    margin-bottom: 20px;
}

.rk-sim-label span:first-child {
    font-size: 13px;
    font-weight: 800;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-sim-label span:last-child {
    font-size: 32px;
    font-weight: 900;
    color: var(--rk-tmp-primary);
    line-height: 1;
}

.rk-tmp-slider {
    -webkit-appearance: none; width: 100%; height: 8px; border-radius: 4px; background: #334155; outline: none; margin-bottom: 20px;
}
.rk-tmp-slider::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 28px; height: 28px; border-radius: 50%;
    background: #ffffff; cursor: pointer; border: 5px solid var(--rk-tmp-primary); transition: 0.2s; box-shadow: 0 0 15px rgba(249, 115, 22, 0.5);
}
.rk-tmp-slider::-webkit-slider-thumb:active { transform: scale(1.15); }

.rk-sim-info {
    font-size: 12px;
    color: #94a3b8;
    line-height: 1.6;
    padding-top: 15px;
    border-top: 1px dashed rgba(255,255,255,0.1);
}

/* Wizualizacja COP (Prawa strona) */
.rk-sim-visual {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.rk-gauge-container {
    position: relative;
    width: 220px;
    height: 140px;
    overflow: hidden;
}

.rk-gauge-svg {
    width: 100%;
    height: 200%;
    transform: rotate(180deg);
}

.rk-gauge-bg { fill: none; stroke: #334155; stroke-width: 15; }
.rk-gauge-val { 
    fill: none; stroke: var(--rk-tmp-success); stroke-width: 15; 
    stroke-dasharray: 314; /* 2 * PI * R (50) = 314 */
    stroke-dashoffset: 314; 
    transition: stroke-dashoffset 0.6s cubic-bezier(0.4, 0, 0.2, 1), stroke 0.6s;
}

.rk-gauge-content {
    position: absolute;
    bottom: 0; left: 0; width: 100%;
    text-align: center;
}

.rk-cop-val {
    font-size: 48px;
    font-weight: 900;
    line-height: 1;
    color: var(--rk-tmp-success);
    transition: color 0.6s;
    text-shadow: 0 0 20px rgba(16, 185, 129, 0.4);
}

.rk-cop-lbl {
    font-size: 14px;
    font-weight: 800;
    color: #cbd5e1;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-top: 5px;
}

.rk-sim-status {
    margin-top: 20px;
    padding: 10px 20px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    border: 1px solid rgba(16, 185, 129, 0.3);
    transition: all 0.6s;
}

/* Animacje Promieniowania Ciepła */
.rk-floor-anim {
    width: 100%;
    height: 80px;
    margin-top: 30px;
}
.anim-pipe { transition: fill 0.6s; }
.anim-wave { opacity: 0; animation: heatWave 2s linear infinite; }

@keyframes heatWave {
    0% { transform: translateY(0); opacity: 0; }
    50% { opacity: 0.6; }
    100% { transform: translateY(-20px); opacity: 0; }
}

@media (max-width: 768px) {
    .rk-tmp-header, .rk-tmp-content-box, .rk-tmp-simulator { padding: 30px 20px; }
    .rk-tmp-title { font-size: 24px; }
    .rk-sim-grid { grid-template-columns: 1fr; gap: 40px; }
    .rk-gauge-container { width: 180px; height: 110px; }
    .rk-cop-val { font-size: 40px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-temperatura-zasilania",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Jaka jest maksymalna temperatura zasilania ogrzewania podłogowego przy rekuperacji?",
    "description": "Analiza normy PN-EN 1264-2:2021-05. Sprawdź, jak obniżenie temperatury zasilania do 30°C wpływa na sprawność pompy ciepła (COP) i obniża koszty.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-temperatura-cop",
    "name": "Wpływ temperatury zasilania na SCOP pompy ciepła 2026",
    "description": "Zależności między temperaturą zasilania układu płaszczyznowego a współczynnikiem sprawności pomp ciepła typu powietrze-woda.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "maksymalna temperatura ogrzewania podłogowego",
      "norma PN-EN 1264-2:2021-05",
      "temperatura zasilania pompy ciepła",
      "współczynnik COP ogrzewanie podłogowe",
      "zależność SCOP od temperatury"
    ],
    "measurementTechnique": "Szacowanie oparte na danych termodynamicznych wskazujących spadek SCOP o 2,5-3% przy wzroście temperatury zasilania o 1 stopień Celsjusza.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Maksymalna temperatura wg PN-EN 1264-2: 35°C (strefy stałe), 45°C (strefy brzegowe i łazienki).",
        "Zasilanie 30°C: Średnioroczny SCOP na poziomie 4.8 - 5.2.",
        "Zasilanie 40°C (brak rekuperacji): Spadek SCOP do poziomu 3.8 - 4.1."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-temperatura",
    "name": "Symulator Efektywności Temperaturowej COP",
    "description": "Interaktywny panel ilustrujący bezpośredni wpływ zmiany temperatury zasilania ogrzewania podłogowego na średni współczynnik COP pompy ciepła.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tmp-container" id="rk-tmp-app">
    
    <div class="rk-tmp-header">
        <div class="rk-tmp-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Parametry i Normy
        </div>
        <h2 class="rk-tmp-title">Jaka jest maksymalna temperatura zasilania podłogówki <span>przy rekuperacji?</span></h2>
        <p class="rk-tmp-desc">Decyzja o rezygnacji z wentylacji mechanicznej bezpośrednio uderza w serce instalacji grzewczej – pompę ciepła, wymuszając pracę na podwyższonych, nieekonomicznych parametrach zasilania.</p>
    </div>

    <div class="rk-tmp-content-box">
        <p>
            Maksymalna temperatura zasilania wodnego ogrzewania podłogowego wynosi <strong>35°C</strong> dla stref stałego pobytu ludzi oraz <strong>45°C</strong> dla stref brzegowych i łazienek. Są to twarde, restrykcyjne wytyczne normy <strong>PN-EN 1264-2:2021-05</strong>, których każdy inżynier musi przestrzegać. W budynkach wyposażonych w rekuperację, standardem projektowym dla temperatury obliczeniowej (np. -20°C dla III strefy klimatycznej) jest optymalny parametr rzędu <strong>30/25°C</strong> lub <strong>32/27°C</strong>.
        </p>
        
        <div class="rk-tmp-norm-card">
            <div class="rk-tmp-norm-title">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
                Analiza wpływu na COP pompy ciepła
            </div>
            <p style="margin:0; font-size:14px;">
                Niska temperatura zasilania to absolutny priorytet dla sprawności. Każdy stopień obniżenia temperatury wody podnosi współczynnik efektywności COP <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-tmp-link">pompy ciepła</a> o około <strong>2,5% &#8211; 3%</strong>. Gdy rekuperator przejmuje obowiązek ogrzania wymrożonego powietrza wentylacyjnego, zapotrzebowanie na moc z posadzki drastycznie spada. Zamiast projektować instalację na 45°C, projektujemy układ ultraniskotemperaturowy.
            </p>
        </div>
    </div>

    <div class="rk-tmp-simulator">
        <h3 class="rk-sim-title">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
            Symulator Efektywności Temperaturowej
        </h3>

        <div class="rk-sim-grid">
            
            <div class="rk-sim-controls">
                <div class="rk-sim-label">
                    <span>Temp. zasilania pętli</span>
                    <span id="rkTempVal">30°C</span>
                </div>
                <input type="range" id="rkTempSlider" class="rk-tmp-slider" min="28" max="45" step="1" value="30">
                <div class="rk-sim-info">
                    Przesuwając suwak, symulujesz sytuację, w której brak rekuperacji zmusza Cię do podniesienia temperatury podłogi w celu pokrycia strat wentylacyjnych. Zobacz, jak drastycznie spada sprawność pompy ciepła.
                </div>
            </div>

            <div class="rk-sim-visual">
                <div class="rk-gauge-container">
                    <svg class="rk-gauge-svg" viewBox="0 0 100 100">
                        <circle class="rk-gauge-bg" cx="50" cy="50" r="40"></circle>
                        <circle class="rk-gauge-val" id="rkGaugeArc" cx="50" cy="50" r="40"></circle>
                    </svg>
                    <div class="rk-gauge-content">
                        <div class="rk-cop-val" id="rkCopVal">5.0</div>
                        <div class="rk-cop-lbl">Szacowany SCOP</div>
                    </div>
                </div>

                <div class="rk-sim-status" id="rkStatusLabel">
                    IDEALNA WYDAJNOŚĆ (REKUPERACJA)
                </div>

                <svg class="rk-floor-anim" viewBox="0 0 200 50">
                    <rect x="0" y="30" width="200" height="20" fill="#334155" rx="4"></rect>
                    <circle class="anim-pipe" id="pipe1" cx="40" cy="40" r="6" fill="#10b981"></circle>
                    <circle class="anim-pipe" id="pipe2" cx="100" cy="40" r="6" fill="#10b981"></circle>
                    <circle class="anim-pipe" id="pipe3" cx="160" cy="40" r="6" fill="#10b981"></circle>
                    <path class="anim-wave" d="M 30 20 Q 40 5 50 20" fill="none" stroke="#f97316" stroke-width="2" style="animation-delay: 0s;"></path>
                    <path class="anim-wave" d="M 90 20 Q 100 5 110 20" fill="none" stroke="#f97316" stroke-width="2" style="animation-delay: 0.5s;"></path>
                    <path class="anim-wave" d="M 150 20 Q 160 5 170 20" fill="none" stroke="#f97316" stroke-width="2" style="animation-delay: 1s;"></path>
                </svg>

            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const tempSlider = document.getElementById('rkTempSlider');
    const tempValLabel = document.getElementById('rkTempVal');
    const copValLabel = document.getElementById('rkCopVal');
    const gaugeArc = document.getElementById('rkGaugeArc');
    const statusLabel = document.getElementById('rkStatusLabel');
    
    const pipes = [
        document.getElementById('pipe1'),
        document.getElementById('pipe2'),
        document.getElementById('pipe3')
    ];

    // Funkcja obliczająca i aktualizująca widok
    function updateSimulation() {
        const temp = parseInt(tempSlider.value);
        tempValLabel.textContent = temp + '°C';

        // Obliczenie przybliżonego SCOP (30C -> 5.0, 40C -> 4.0)
        // Liniowa zależność na potrzeby symulacji: utrata 0.1 COP na 1 stopień
        let calcCop = 5.0 - ((temp - 30) * 0.1);
        
        // Zabezpieczenie przed dziwnymi wartościami poniżej 28C
        if(temp < 30) calcCop = 5.0 + ((30 - temp) * 0.05);

        copValLabel.textContent = calcCop.toFixed(1);

        // Obliczenie wypełnienia łuku dla SVG (Długość łuku = 251.2 dla promienia 40)
        // Max COP = 5.1 (dla 28C), Min = 3.5 (dla 45C). Skala: 3.0 do 5.5
        const maxCopRange = 5.5;
        const minCopRange = 3.0;
        const range = maxCopRange - minCopRange;
        const currentPercentage = (calcCop - minCopRange) / range;
        
        // C - dashoffset
        const C = 2 * Math.PI * 40; // ~251.2
        const offset = C - (C * currentPercentage);
        
        // Ustawienie łuku z podziałem przez 2, bo interesuje nas tylko półkole (widoczne na górze przez obrót)
        gaugeArc.style.strokeDasharray = C;
        // Pokazujemy połowę obwodu
        const visibleOffset = (C / 2) + ((C / 2) * (1 - currentPercentage));
        gaugeArc.style.strokeDashoffset = visibleOffset;

        // Logika kolorów i statusów
        let color = '#10b981'; // Zielony
        let pipeColor = '#10b981';
        let statusText = 'IDEALNA WYDAJNOŚĆ (REKUPERACJA)';
        let statusBg = 'rgba(16, 185, 129, 0.2)';
        let statusBorder = 'rgba(16, 185, 129, 0.3)';

        if (temp > 35 && temp <= 40) {
            color = '#f59e0b'; // Żółty/Bursztynowy
            pipeColor = '#f97316';
            statusText = 'SPADEK WYDAJNOŚCI (WYŻSZE KOSZTY)';
            statusBg = 'rgba(245, 158, 11, 0.2)';
            statusBorder = 'rgba(245, 158, 11, 0.3)';
        } else if (temp > 40) {
            color = '#ef4444'; // Czerwony
            pipeColor = '#ef4444';
            statusText = 'KRYTYCZNE ZUŻYCIE PRĄDU (BRAK REKU)';
            statusBg = 'rgba(239, 68, 68, 0.2)';
            statusBorder = 'rgba(239, 68, 68, 0.3)';
        }

        // Aplikowanie stylów
        gaugeArc.style.stroke = color;
        copValLabel.style.color = color;
        copValLabel.style.textShadow = `0 0 20px ${statusBg}`;
        
        statusLabel.textContent = statusText;
        statusLabel.style.color = color;
        statusLabel.style.background = statusBg;
        statusLabel.style.borderColor = statusBorder;

        tempSlider.style.borderColor = pipeColor;

        pipes.forEach(pipe => {
            pipe.style.fill = pipeColor;
        });
    }

    if(tempSlider) {
        tempSlider.addEventListener('input', updateSimulation);
        updateSimulation(); // Init
    }
});
</script>



<style>
:root {
    --rk-fin-dark: #0f172a;
    --rk-fin-panel: #1e293b;
    --rk-fin-primary: #10b981; /* Szmaragdowy (Zysk/Finanse) */
    --rk-fin-primary-light: #d1fae5;
    --rk-fin-alert: #f43f5e; /* Czerwień (Koszty) */
    --rk-fin-alert-light: #ffe4e6;
    --rk-fin-accent: #38bdf8; /* Błękit (Energia) */
    --rk-fin-bg: #f8fafc;
    --rk-fin-border: #e2e8f0;
    --rk-fin-text: #334155;
    --rk-fin-muted: #64748b;
}

.rk-fin-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(16, 185, 129, 0.15);
    border: 1px solid rgba(16, 185, 129, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-fin-header {
    background: linear-gradient(135deg, var(--rk-fin-dark) 0%, #064e3b 100%);
    padding: 45px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-fin-primary);
}

.rk-fin-header::before {
    content: ''; position: absolute; right: 0; top: 0; width: 50%; height: 100%;
    background: radial-gradient(circle at top right, rgba(16, 185, 129, 0.2), transparent 70%);
    pointer-events: none;
}

.rk-fin-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(110, 231, 183, 0.3);
    position: relative;
    z-index: 2;
}

.rk-fin-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
    position: relative;
    z-index: 2;
}

.rk-fin-title span { color: #34d399; }

.rk-fin-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.6;
    margin: 0;
    position: relative;
    z-index: 2;
    max-width: 750px;
}

/* Interaktywny Kalkulator Rentowności */
.rk-fin-calculator {
    padding: 40px 50px;
    background: var(--rk-fin-bg);
    border-bottom: 1px solid var(--rk-fin-border);
}

/* NOWY UKŁAD: Suwaki u góry, wyniki na dole */
.rk-calc-controls-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    margin-bottom: 30px;
}

.rk-control-box {
    background: #ffffff;
    border: 1px solid var(--rk-fin-border);
    padding: 20px 25px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-control-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
}

.rk-control-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-fin-muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-control-val {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-fin-dark);
}

.rk-fin-slider {
    -webkit-appearance: none; width: 100%; height: 6px; border-radius: 3px; background: #e2e8f0; outline: none;
}
.rk-fin-slider::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 24px; height: 24px; border-radius: 50%;
    background: var(--rk-fin-primary); cursor: pointer; border: 4px solid #ffffff; transition: 0.2s; box-shadow: 0 0 10px rgba(16, 185, 129, 0.4);
}
.rk-fin-slider::-webkit-slider-thumb:active { transform: scale(1.15); }

/* Panel Wyników SVG (Pełna szerokość) */
.rk-calc-visual {
    background: var(--rk-fin-dark);
    border-radius: 20px;
    padding: 40px 50px;
    position: relative;
    overflow: hidden;
    box-shadow: inset 0 10px 30px rgba(0,0,0,0.5);
    display: flex;
    flex-direction: row;
    justify-content: space-around;
    align-items: center;
}

.rk-visual-bg {
    position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; opacity: 0.05;
}

.rk-balance-header {
    text-align: center;
    position: relative;
    z-index: 2;
}
.rk-balance-title { font-size: 14px; font-weight: 800; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 10px; }
.rk-balance-val { font-size: 48px; font-weight: 900; color: var(--rk-fin-primary); transition: color 0.3s; line-height: 1; }
.rk-balance-val.negative { color: var(--rk-fin-alert); }

.rk-bars-container {
    display: flex;
    align-items: flex-end;
    justify-content: center;
    gap: 60px;
    height: 160px;
    position: relative;
    z-index: 2;
}

.rk-bar-wrap {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    width: 120px; 
}

.rk-bar {
    width: 60px; 
    border-radius: 8px 8px 0 0;
    transition: height 0.5s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    display: flex;
    justify-content: center;
}

.rk-bar-cost { background: var(--rk-fin-alert); height: 50%; }
.rk-bar-save { background: var(--rk-fin-primary); height: 80%; }

.rk-bar-icon {
    position: absolute; top: -35px; color: #ffffff; opacity: 0.8;
}

.rk-bar-label { 
    font-size: 13px; 
    font-weight: 800; 
    color: #cbd5e1; 
    text-align: center; 
    text-transform: uppercase; 
    line-height: 1.4;
    letter-spacing: 0.5px;
}
.rk-bar-value { 
    font-size: 20px; 
    font-weight: 900; 
    color: #ffffff; 
}

/* Twarde Fakty - Karty Informacyjne */
.rk-fin-facts {
    padding: 40px 50px;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    background: #ffffff;
}

.rk-fact-card {
    border: 1px solid var(--rk-fin-border);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    transition: all 0.3s;
}

.rk-fact-card:hover {
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
    border-color: var(--rk-fin-accent);
    transform: translateY(-3px);
}

.rk-fact-icon {
    width: 40px; height: 40px; border-radius: 10px; background: var(--rk-fin-bg); display: flex; align-items: center; justify-content: center; margin-bottom: 15px;
}

.rk-fact-card.cost .rk-fact-icon { color: var(--rk-fin-alert); background: var(--rk-fin-alert-light); }
.rk-fact-card.save .rk-fact-icon { color: var(--rk-fin-accent); background: #e0f2fe; }
.rk-fact-card.bal .rk-fact-icon { color: var(--rk-fin-primary); background: var(--rk-fin-primary-light); }

.rk-fact-title { font-size: 15px; font-weight: 900; color: var(--rk-fin-dark); margin: 0 0 10px 0; }
.rk-fact-list { list-style: none; padding: 0; margin: 0; }
.rk-fact-list li { font-size: 13px; color: var(--rk-fin-text); padding: 5px 0; border-bottom: 1px dashed var(--rk-fin-border); display: flex; justify-content: space-between; align-items: center; }
.rk-fact-list li:last-child { border: none; padding-bottom: 0; }
.rk-fact-list li span { font-weight: 800; color: var(--rk-fin-dark); }

/* Animacje SVG */
.anim-fan-spin { transform-origin: center; animation: spinFan 2s linear infinite; }
@keyframes spinFan { to { transform: rotate(360deg); } }

.anim-coin-pulse { transform-origin: center; animation: pulseCoin 2s infinite alternate; }
@keyframes pulseCoin { from { transform: translateY(0) scale(1); } to { transform: translateY(-3px) scale(1.1); } }

@media (max-width: 768px) {
    .rk-fin-header, .rk-fin-calculator, .rk-fin-facts { padding: 30px 20px; }
    .rk-fin-title { font-size: 24px; }
    
    .rk-calc-controls-row { grid-template-columns: 1fr; gap: 20px; margin-bottom: 20px; }
    .rk-calc-visual { flex-direction: column; padding: 30px 20px; gap: 40px; }
    
    .rk-fin-facts { grid-template-columns: 1fr; }
    .rk-balance-val { font-size: 40px; }
    
    .rk-bars-container { height: 140px; gap: 20px; width: 100%; justify-content: space-around; margin-top: 10px; }
    .rk-bar-wrap { width: 100px; gap: 8px; }
    .rk-bar { width: 45px; }
    .rk-bar-label { font-size: 11px; }
    .rk-bar-value { font-size: 16px; }
    .rk-bar-icon { top: -25px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-koszty",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Ile wynosi rzeczywisty koszt eksploatacji systemu dla domu 150 m² w 2026 roku?",
    "description": "Twarda weryfikacja faktów: koszty energii rekuperatora, wymiany filtrów a zysk energetyczny dla pompy ciepła z ogrzewaniem podłogowym.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-koszty",
    "name": "Bilans finansowy utrzymania rekuperacji 2026",
    "description": "Zestawienie kosztów eksploatacji rekuperatora (prąd + filtry) i oszczędności na pracy pompy ciepła (zysk energetyczny).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "koszt eksploatacji rekuperacji",
      "zużycie prądu przez rekuperator",
      "cena filtrów do rekuperatora",
      "zysk energetyczny rekuperacja",
      "COP pompy ciepła a rekuperacja"
    ],
    "measurementTechnique": "Kalkulacja uwzględniająca pobór mocy wentylatorów (60W), wymianę filtrów oraz odzysk energii cieplnej (4500 kWh) pomniejszony o SCOP (4.5) pompy ciepła.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Koszt prądu rekuperatora: 60 W * 24 h * 365 dni = 525,6 kWh rocznie.",
        "Koszty stałe (Filtry): 180 - 240 PLN rocznie.",
        "Oszczędność (Pompa Ciepła): Odzysk 4500 kWh ciepła = mniejsze zużycie prądu o 1000 kWh przy SCOP 4.5."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-koszty",
    "name": "Kalkulator Rentowności Rekuperacji",
    "description": "Narzędzie interaktywne symulujące roczne koszty i oszczędności z wentylacji mechanicznej na podstawie metrażu i taryfy prądu G11/G12w.",
    "applicationCategory": "FinancialApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-fin-container" id="rk-fin-app">
    
    <div class="rk-fin-header">
        <div class="rk-fin-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Analiza Ekonomiczna 2026
        </div>
        <h2 class="rk-fin-title">Ile wynosi rzeczywisty koszt eksploatacji systemu dla domu <span>150 m²?</span></h2>
        <p class="rk-fin-desc">Rzeczywisty, całkowity koszt energii elektrycznej potrzebnej do ogrzania domu (w standardzie WT2021) za pomocą pompy ciepła i podłogówki przy działającej rekuperacji wynosi <strong>średnio 2 100 &#8211; 2 600 PLN na cały sezon grzewczy</strong>.</p>
    </div>

    <div class="rk-fin-calculator">
        
        <div class="rk-calc-controls-row">
            <div class="rk-control-box">
                <div class="rk-control-header">
                    <span class="rk-control-label">Powierzchnia domu</span>
                    <span class="rk-control-val" id="rkAreaVal">150 m²</span>
                </div>
                <input type="range" id="rkAreaSlider" class="rk-fin-slider" min="100" max="250" step="10" value="150">
            </div>

            <div class="rk-control-box">
                <div class="rk-control-header">
                    <span class="rk-control-label">Średnia cena prądu</span>
                    <span class="rk-control-val"><span id="rkPriceVal">0.75</span> PLN/kWh</span>
                </div>
                <input type="range" id="rkPriceSlider" class="rk-fin-slider" min="0.50" max="1.50" step="0.05" value="0.75">
                <div style="font-size: 11px; color: #94a3b8; margin-top: 10px;">(Z opłatami dystrybucyjnymi taryfy G11/G12w)</div>
            </div>
        </div>

        <div class="rk-calc-visual">
            <svg class="rk-visual-bg" viewBox="0 0 100 100" preserveAspectRatio="none">
                <path d="M0,100 L10,80 L30,90 L50,40 L70,60 L100,10 L100,100 Z" fill="currentColor"/>
            </svg>

            <div class="rk-balance-header">
                <div class="rk-balance-title">Czysty zysk finansowy (Rocznie)</div>
                <div class="rk-balance-val" id="rkNetBalance">+150 PLN</div>
            </div>

            <div class="rk-bars-container">
                <div class="rk-bar-wrap">
                    <div class="rk-bar rk-bar-cost" id="rkBarCost">
                        <svg class="rk-bar-icon anim-fan-spin" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    </div>
                    <div class="rk-bar-label">Koszty<br>Utrzym.</div>
                    <div class="rk-bar-value" id="rkCostTxt">600 zł</div>
                </div>

                <div class="rk-bar-wrap">
                    <div class="rk-bar rk-bar-save" id="rkBarSave">
                        <svg class="rk-bar-icon anim-coin-pulse" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><path d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8"></path><line x1="12" y1="18" x2="12" y2="22"></line><line x1="12" y1="2" x2="12" y2="6"></line></svg>
                    </div>
                    <div class="rk-bar-label">Odzysk<br>Energii</div>
                    <div class="rk-bar-value" id="rkSaveTxt">750 zł</div>
                </div>
            </div>
        </div>

    </div>

    <div class="rk-fin-facts">
        
        <div class="rk-fact-card cost">
            <div class="rk-fact-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline><polyline points="17 6 23 6 23 12"></polyline></svg></div>
            <h4 class="rk-fact-title">Koszty Utrzymania</h4>
            <ul class="rk-fact-list">
                <li>Zużycie prądu (60W): <span id="txtRecupKwh">526 kWh</span></li>
                <li>Koszt energii: <span id="txtRecupCost">394 PLN</span></li>
                <li>Wymiana filtrów: <span id="txtFilters">206 PLN</span></li>
            </ul>
        </div>

        <div class="rk-fact-card save">
            <div class="rk-fact-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div>
            <h4 class="rk-fact-title">Zysk Energetyczny</h4>
            <ul class="rk-fact-list">
                <li>Odzysk ciepła: <span id="txtThermGain">4500 kWh</span></li>
                <li>SCOP Pompy: <span>4,5</span></li>
                <li>Mniejsze z. prądu: <span id="txtElecSave">1000 kWh</span></li>
            </ul>
        </div>

        <div class="rk-fact-card bal">
            <div class="rk-fact-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg></div>
            <h4 class="rk-fact-title">Bilans Finansowy</h4>
            <ul class="rk-fact-list">
                <li>Suma kosztów: <span id="txtTotalCost">600 PLN</span></li>
                <li>Wartość odzysku: <span id="txtTotalSave">750 PLN</span></li>
                <li style="border:none; margin-top:5px;"><strong>Zysk netto:</strong> <span id="txtNetResult" style="color:var(--rk-fin-primary);">+150 PLN</span></li>
            </ul>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Domain Check
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const wrap = document.getElementById('rk-fin-app');
        if(wrap) {
            wrap.innerHTML = `<div style="padding:40px; background:#0f172a; color:#ef4444; text-align:center; font-family:sans-serif; border-radius:24px; border:2px solid #ef4444;">
                <div style="font-size: 18px; font-weight: 900; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                <div style="font-size: 14px; margin-top:5px; color: #cbd5e1;">Skrypt przypisany do Projekt-Ogrzewania.pl</div>
            </div>`;
            return;
        }
    }

    // Elements
    const areaSlider = document.getElementById('rkAreaSlider');
    const priceSlider = document.getElementById('rkPriceSlider');
    const areaVal = document.getElementById('rkAreaVal');
    const priceVal = document.getElementById('rkPriceVal');
    
    // SVG Bars
    const barCost = document.getElementById('rkBarCost');
    const barSave = document.getElementById('rkBarSave');
    const costTxt = document.getElementById('rkCostTxt');
    const saveTxt = document.getElementById('rkSaveTxt');
    const netBalance = document.getElementById('rkNetBalance');

    // Texts in cards
    const txtRecupKwh = document.getElementById('txtRecupKwh');
    const txtRecupCost = document.getElementById('txtRecupCost');
    const txtFilters = document.getElementById('txtFilters');
    const txtThermGain = document.getElementById('txtThermGain');
    const txtElecSave = document.getElementById('txtElecSave');
    const txtTotalCost = document.getElementById('txtTotalCost');
    const txtTotalSave = document.getElementById('txtTotalSave');
    const txtNetResult = document.getElementById('txtNetResult');

    // Base constants for 150m2
    const BASE_AREA = 150;
    const RECUP_POWER_W = 60; 
    const RECUP_HOURS = 24 * 365; // 8760
    const BASE_KWH = (RECUP_POWER_W * RECUP_HOURS) / 1000; // 525.6
    const BASE_FILTERS = 205.8; 
    const BASE_THERMAL_GAIN = 4500;
    const SCOP = 4.5;

    function calculate() {
        const area = parseFloat(areaSlider.value);
        const price = parseFloat(priceSlider.value);
        const multiplier = area / BASE_AREA;

        // Updates Labels
        areaVal.textContent = area + ' m²';
        priceVal.textContent = price.toFixed(2);

        // Math
        const currentKwh = BASE_KWH * multiplier;
        const currentRecupCost = currentKwh * price;
        const currentFilters = BASE_FILTERS * multiplier; 
        const totalCost = currentRecupCost + currentFilters;

        const currentThermGain = BASE_THERMAL_GAIN * multiplier;
        const currentElecSave = currentThermGain / SCOP;
        const totalSave = currentElecSave * price;

        const net = totalSave - totalCost;

        // Update SVG & Big Numbers
        costTxt.textContent = Math.round(totalCost) + ' zł';
        saveTxt.textContent = Math.round(totalSave) + ' zł';
        
        let netStr = (Math.sign(net) === 1 ? '+' : '') + Math.round(net) + ' PLN';
        netBalance.textContent = netStr;
        
        if(Math.sign(net) === -1) {
            netBalance.classList.add('negative');
        } else {
            netBalance.classList.remove('negative');
        }

        // Height logic for bars (max 100%)
        let maxVal = Math.max(totalCost, totalSave, 1);
        let costHeight = (totalCost / maxVal) * 80; 
        let saveHeight = (totalSave / maxVal) * 80;

        barCost.style.height = `${costHeight}%`;
        barSave.style.height = `${saveHeight}%`;

        // Update text cards
        txtRecupKwh.textContent = Math.round(currentKwh) + ' kWh';
        txtRecupCost.textContent = Math.round(currentRecupCost) + ' PLN';
        txtFilters.textContent = Math.round(currentFilters) + ' PLN';
        
        txtThermGain.textContent = Math.round(currentThermGain) + ' kWh';
        txtElecSave.textContent = Math.round(currentElecSave) + ' kWh';

        txtTotalCost.textContent = Math.round(totalCost) + ' PLN';
        txtTotalSave.textContent = Math.round(totalSave) + ' PLN';
        
        txtNetResult.textContent = netStr;
        txtNetResult.style.color = Math.sign(net) === -1 ? 'var(--rk-fin-alert)' : 'var(--rk-fin-primary)';
    }

    if(areaSlider) {
        if(priceSlider) {
            areaSlider.addEventListener('input', calculate);
            priceSlider.addEventListener('input', calculate);
            calculate(); // Initialize
        }
    }
});
</script>



<style>
:root {
    --rk-alg-dark: #0f172a;
    --rk-alg-panel: #1e293b;
    --rk-alg-cyan: #06b6d4;   /* Cyjan dla inżynierii / powietrza */
    --rk-alg-cyan-light: #cffafe;
    --rk-alg-emerald: #10b981; /* Szmaragd dla oszczędności */
    --rk-alg-purple: #8b5cf6;  /* Fiolet dla matematyki/wzorów */
    --rk-alg-bg: #f8fafc;
    --rk-alg-border: #e2e8f0;
    --rk-alg-text: #334155;
    --rk-alg-muted: #64748b;
    --rk-alg-math-bg: #0f172a;
}

.rk-alg-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(6, 182, 212, 0.15);
    border: 1px solid rgba(6, 182, 212, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-alg-header {
    background: linear-gradient(135deg, var(--rk-alg-dark) 0%, #164e63 100%);
    padding: 45px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-alg-cyan);
}

.rk-alg-header::before {
    content: ''; position: absolute; left: 0; top: 0; width: 100%; height: 100%;
    background: radial-gradient(circle at top left, rgba(6, 182, 212, 0.2), transparent 70%);
    pointer-events: none;
}

.rk-alg-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(6, 182, 212, 0.2);
    color: #67e8f9;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(103, 232, 249, 0.3);
    position: relative;
    z-index: 2;
}

.rk-alg-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 10px 0;
    position: relative;
    z-index: 2;
}

.rk-alg-title span { color: #22d3ee; }

.rk-alg-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.6;
    margin: 0;
    position: relative;
    z-index: 2;
}

/* Metodologia - Kroki Obliczeniowe */
.rk-alg-steps {
    padding: 40px 50px;
    background: #ffffff;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
}

.rk-alg-step-card {
    background: var(--rk-alg-bg);
    border: 1px solid var(--rk-alg-border);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    transition: all 0.3s;
}

.rk-alg-step-card:hover {
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
    border-color: var(--rk-alg-cyan);
    transform: translateY(-3px);
}

.rk-alg-step-number {
    position: absolute;
    top: -15px;
    left: 25px;
    background: var(--rk-alg-cyan);
    color: #ffffff;
    font-size: 12px;
    font-weight: 900;
    padding: 6px 14px;
    border-radius: 8px;
    box-shadow: 0 4px 10px rgba(6, 182, 212, 0.3);
    text-transform: uppercase;
    letter-spacing: 1px;
}

.rk-alg-step-card h3 {
    margin: 15px 0 10px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-alg-dark);
}

.rk-alg-step-card p {
    margin: 0 0 15px 0;
    font-size: 13px;
    color: var(--rk-alg-text);
    line-height: 1.6;
}

/* Blok Matematyczny (Bez znaków zakazanych) */
.rk-math-block {
    background: var(--rk-alg-math-bg);
    color: #38bdf8;
    padding: 15px;
    border-radius: 8px;
    font-family: 'Courier New', Courier, monospace;
    font-size: 13px;
    font-weight: 700;
    line-height: 1.5;
    border-left: 3px solid var(--rk-alg-purple);
    overflow-x: auto;
}

.rk-math-block .rk-math-res { color: #f472b6; font-size: 14px; }
.rk-math-block .rk-math-var { color: #a78bfa; }

/* Legenda Zmiennych */
.rk-math-legend {
    margin-top: 15px;
    background: #ffffff;
    padding: 10px 15px;
    border-radius: 8px;
    border: 1px dashed var(--rk-alg-border);
    font-size: 12px;
    color: var(--rk-alg-muted);
}
.rk-math-legend b { color: var(--rk-alg-dark); }

/* Kalkulator Interaktywny */
.rk-alg-calc {
    background: var(--rk-alg-panel);
    padding: 40px 50px;
    border-top: 1px solid #334155;
    color: #ffffff;
}

.rk-calc-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 30px;
}

.rk-calc-header h3 {
    margin: 0; font-size: 20px; font-weight: 900; color: #ffffff;
    display: flex; align-items: center; gap: 12px;
}

.rk-calc-grid {
    display: grid;
    grid-template-columns: 1fr 1.5fr;
    gap: 40px;
    align-items: center;
}

.rk-calc-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
    background: rgba(255,255,255,0.03);
    padding: 25px;
    border-radius: 16px;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-calc-label { font-size: 13px; font-weight: 800; color: #94a3b8; display: flex; justify-content: space-between; text-transform: uppercase; }
.rk-calc-label span { color: var(--rk-alg-cyan); font-size: 20px; font-weight: 900; text-transform: none; }

.rk-slider {
    -webkit-appearance: none; width: 100%; height: 6px; border-radius: 3px; background: #334155; outline: none;
}
.rk-slider::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 24px; height: 24px; border-radius: 50%;
    background: var(--rk-alg-cyan); cursor: pointer; border: 4px solid #ffffff; transition: 0.2s; box-shadow: 0 0 10px rgba(6, 182, 212, 0.5);
}
.rk-slider::-webkit-slider-thumb:active { transform: scale(1.15); }

/* SVG Wyniki i Animacja */
.rk-calc-visual {
    position: relative;
    background: #0f172a;
    border-radius: 16px;
    padding: 20px;
    box-shadow: inset 0 10px 30px rgba(0,0,0,0.5);
    border: 2px solid #334155;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

.rk-calc-stats {
    display: flex;
    justify-content: space-between;
    margin-bottom: 20px;
}

.rk-stat-box { text-align: center; }
.rk-stat-box span { display: block; }
.rk-stat-val { font-size: 24px; font-weight: 900; color: #ffffff; }
.rk-stat-lbl { font-size: 11px; font-weight: 800; color: #94a3b8; text-transform: uppercase; margin-top: 5px; }

.rk-stat-box.grav .rk-stat-val { color: #f43f5e; }
.rk-stat-box.rek .rk-stat-val { color: #38bdf8; }
.rk-stat-box.zysk .rk-stat-val { color: var(--rk-alg-emerald); }

.rk-svg-flow { width: 100%; height: 100px; }

/* Animacje SVG */
.anim-flow-line { stroke-dasharray: 8 16; animation: flowDash 1.5s linear infinite; }
@keyframes flowDash { to { stroke-dashoffset: -24; } }

.anim-heat-exchange { transform-origin: center; animation: pulseExchange 2s infinite alternate; }
@keyframes pulseExchange { from { transform: scale(0.9); opacity: 0.6; } to { transform: scale(1.1); opacity: 1; } }

@media (max-width: 768px) {
    .rk-alg-header, .rk-alg-steps, .rk-alg-calc { padding: 35px 25px; }
    .rk-alg-title { font-size: 24px; }
    .rk-alg-steps { grid-template-columns: 1fr; gap: 40px; }
    .rk-calc-grid { grid-template-columns: 1fr; gap: 30px; }
    .rk-calc-stats { flex-direction: column; gap: 15px; }
    .rk-stat-box { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #334155; padding-bottom: 10px; }
    .rk-stat-lbl { margin-top: 0; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Jak obliczyć oszczędności z rekuperacji? Algorytm inżynierski krok po kroku",
    "description": "Profesjonalna procedura matematyczna oparta na bilansie masowym powietrza pozwalająca obliczyć rzeczywiste oszczędności na wentylacji.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-algorytm",
    "name": "Algorytm Bilansu Masowego Powietrza",
    "description": "Zestawienie wzorów i stałych fizycznych dla obliczania strat wentylacyjnych budynku, w tym ciepła właściwego powietrza i gęstości.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczenia rekuperacja wzory",
      "strata ciepła na wentylację grawitacyjną",
      "strumień objętościowy powietrza obliczenia",
      "zysk mocy pompy ciepła rekuperacja",
      "bilans masowy powietrza dom jednorodzinny"
    ],
    "measurementTechnique": "Algorytm bazujący na kubaturze, współczynniku wymiany powietrza (0.5 h-1), różnicy temperatur (40K) i sprawności odzysku (85%).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Strumień powietrza V (m3/s) = Kubatura * 0.5 / 3600",
        "Moc wentylacji Q = V * gęstość (1.2) * Ciepło właściwe (1005) * różnica temperatur",
        "Sprawność wymiennika podnosi temperaturę nawiewu i drastycznie zmniejsza Q (zysk ok. 2.3 kW dla 150m2)"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-algorytm",
    "name": "Symulator Inżynierski: Bilans Wentylacji",
    "description": "Kalkulator interaktywny symulujący zmiany obciążenia cieplnego budynku w zależności od zadanego metrażu, porównujący wentylację grawitacyjną z odzyskiem ciepła.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-alg-container" id="rk-alg-app">
    
    <div class="rk-alg-header">
        <div class="rk-alg-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Procedura Obliczeniowa
        </div>
        <h2 class="rk-alg-title">Jak obliczyć oszczędności z rekuperacji? <span>Algorytm inżynierski krok po kroku</span></h2>
        <p class="rk-alg-desc">Obliczenie zysków z zastosowania rekuperacji wymaga przejścia przez procedurę matematyczną opartą na bilansie masowym powietrza i pojemności cieplnej mediów. Poniższy algorytm odzwierciedla profesjonalną metodologię inżynierską.</p>
    </div>

    <div class="rk-alg-steps">
        
        <div class="rk-alg-step-card">
            <div class="rk-alg-step-number">Krok 1</div>
            <h3>Strumień objętościowy powietrza (V)</h3>
            <p>Strumień obliczamy na podstawie kubatury budynku (dla domu 150 m² o wysokości pomieszeń 2,7 m kubatura wynosi 405 m³). Przyjmując współczynnik wymiany n = 0,5 h⁻¹:</p>
            <div class="rk-math-block">
                <span class="rk-math-var">V</span> = 405 m³ &times; 0,5 = 202,5 m³/h<br>
                <span class="rk-math-var">V</span> = <span class="rk-math-res">0,05625 m³/s</span>
            </div>
        </div>

        <div class="rk-alg-step-card">
            <div class="rk-alg-step-number">Krok 2</div>
            <h3>Strata przy went. grawitacyjnej (Q_grav)</h3>
            <p>Moc potrzebna do ogrzania wymrożonego powietrza bez odzysku. Wzór podstawowy to Q = V &times; &rho; &times; Cp &times; &Delta;T.</p>
            <div class="rk-math-block">
                <span class="rk-math-var">Q_grav</span> = 0,05625 &times; 1,2 &times; 1005 &times; 40<br>
                <span class="rk-math-var">Q_grav</span> = 2713,5 W &approx; <span class="rk-math-res">2,71 kW</span>
            </div>
            <div class="rk-math-legend">
                <b>&rho;</b> (gęstość): 1,2 kg/m³ | <b>Cp</b> (ciepło wł.): 1005 J/(kg&middot;K)<br>
                <b>&Delta;T</b> (20°C &#8211; (-20°C)): 40 K
            </div>
        </div>

        <div class="rk-alg-step-card">
            <div class="rk-alg-step-number">Krok 3</div>
            <h3>Strata z rekuperacją (Q_rek) przy &eta;=85%</h3>
            <p>Sprawność redukuje różnicę temperatur. Temperatura nawiewana rośnie do 14°C, więc nowa &Delta;T do dogrzania wynosi zaledwie 6 K.</p>
            <div class="rk-math-block">
                <span class="rk-math-var">T_naw</span> = -20 + 0,85 &times; (20 &#8211; (-20)) = 14°C<br>
                <span class="rk-math-var">Q_rek</span> = 0,05625 &times; 1,2 &times; 1005 &times; 6<br>
                <span class="rk-math-var">Q_rek</span> = 407,02 W &approx; <span class="rk-math-res">0,41 kW</span>
            </div>
        </div>

        <div class="rk-alg-step-card">
            <div class="rk-alg-step-number">Krok 4</div>
            <h3>Czysty zysk mocy instalacji (&Delta;Q)</h3>
            <p>Porównanie obu strat wykazuje bezwzględny zysk energetyczny. To bezpośrednio pozwala na montaż mniejszego agregatu pompy ciepła.</p>
            <div class="rk-math-block" style="border-left-color: var(--rk-alg-emerald);">
                <span class="rk-math-var">&Delta;Q</span> = Q_grav &#8211; Q_rek<br>
                <span class="rk-math-var">&Delta;Q</span> = 2,71 kW &#8211; 0,41 kW = <span class="rk-math-res" style="color:var(--rk-alg-emerald); font-size:16px;">2,30 kW</span>
            </div>
        </div>

    </div>

    <div class="rk-alg-calc">
        <div class="rk-calc-header">
            <h3>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--rk-alg-cyan)" stroke-width="2.5"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="8" y1="6" x2="16" y2="6"></line><line x1="16" y1="14" x2="16.01" y2="14"></line><line x1="12" y1="14" x2="12.01" y2="14"></line><line x1="8" y1="14" x2="8.01" y2="14"></line></svg>
                Symulator Inżynierski: Bilans Wentylacji
            </h3>
        </div>

        <div class="rk-calc-grid">
            
            <div class="rk-calc-controls">
                <div class="rk-calc-label">
                    Powierzchnia domu
                    <span id="algAreaOut">150 m²</span>
                </div>
                <input type="range" class="rk-slider" id="algAreaSlider" min="80" max="300" step="10" value="150">
                <div style="font-size: 11px; color:#64748b; font-weight:600; line-height:1.5;">
                    Kalkulacja dla standardowej wysokości 2,7m, krotności wymiany 0,5 h⁻¹ oraz skrajnej temperatury zewnętrznej -20°C (III strefa).
                </div>
            </div>

            <div class="rk-calc-visual">
                <div class="rk-calc-stats">
                    <div class="rk-stat-box grav">
                        <span class="rk-stat-lbl">Grawitacja (Q_grav)</span>
                        <span class="rk-stat-val" id="outGrav">2.71 kW</span>
                    </div>
                    <div class="rk-stat-box rek">
                        <span class="rk-stat-lbl">Rekuperacja (Q_rek)</span>
                        <span class="rk-stat-val" id="outRek">0.41 kW</span>
                    </div>
                    <div class="rk-stat-box zysk">
                        <span class="rk-stat-lbl">Zysk Mocy (ΔQ)</span>
                        <span class="rk-stat-val" id="outZysk">2.30 kW</span>
                    </div>
                </div>

                <svg class="rk-svg-flow" viewBox="0 0 200 50">
                    <path class="anim-flow-line" d="M 20 15 L 90 15" fill="none" stroke="#f43f5e" stroke-width="4" stroke-linecap="round"/>
                    <path class="anim-flow-line" d="M 180 35 L 110 35" fill="none" stroke="#0ea5e9" stroke-width="4" stroke-linecap="round"/>
                    
                    <rect x="90" y="5" width="20" height="40" fill="none" stroke="#64748b" stroke-width="2" rx="4"/>
                    <path class="anim-heat-exchange" d="M 95 20 L 105 30 M 105 20 L 95 30" stroke="#10b981" stroke-width="2"/>

                    <path class="anim-flow-line" d="M 90 35 L 20 35" fill="none" stroke="#38bdf8" stroke-width="4" stroke-linecap="round"/>
                    <path class="anim-flow-line" d="M 110 15 L 180 15" fill="none" stroke="#64748b" stroke-width="4" stroke-linecap="round"/>
                </svg>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie domeny bez H2/H3 w komunikacie o błędzie
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const wrap = document.getElementById('rk-alg-app');
        if(wrap) {
            wrap.innerHTML = `<div style="padding:40px; background:#0f172a; color:#ef4444; text-align:center; font-family:sans-serif; border-radius:24px; border:2px solid #ef4444;">
                <div style="font-size: 20px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Zabezpieczenie Intelektualne</div>
                <div style="font-size: 14px; color: #cbd5e1;">Skrypt jest chroniony i przeznaczony wyłącznie dla domeny Projekt-Ogrzewania.pl</div>
            </div>`;
            return;
        }
    }

    // Algorytm
    const slider = document.getElementById('algAreaSlider');
    const outArea = document.getElementById('algAreaOut');
    const outGrav = document.getElementById('outGrav');
    const outRek = document.getElementById('outRek');
    const outZysk = document.getElementById('outZysk');

    // Stałe z artykułu
    const h = 2.7; // wysokość
    const n = 0.5; // wymiana h-1
    const rho = 1.2; // gęstość
    const cp = 1005; // ciepło właściwe
    const deltaT_grav = 40; // 20 - (-20)
    const deltaT_rek = 6;   // 20 - 14

    function calculateValues() {
        const area = parseFloat(slider.value);
        outArea.textContent = area + ' m²';

        // Obliczenia
        const volume = area * h;
        const v_m3_h = volume * n;
        const v_m3_s = v_m3_h / 3600;

        const q_grav_w = v_m3_s * rho * cp * deltaT_grav;
        const q_rek_w = v_m3_s * rho * cp * deltaT_rek;

        const q_grav_kw = (q_grav_w / 1000).toFixed(2);
        const q_rek_kw = (q_rek_w / 1000).toFixed(2);
        const zysk_kw = (q_grav_kw - q_rek_kw).toFixed(2);

        outGrav.textContent = q_grav_kw + ' kW';
        outRek.textContent = q_rek_kw + ' kW';
        outZysk.textContent = zysk_kw + ' kW';
    }

    if(slider) {
        slider.addEventListener('input', calculateValues);
        calculateValues(); // init
    }
});
</script>



<style>
:root {
    --rk-mat-dark: #0f172a;
    --rk-mat-card: #1e293b;
    --rk-mat-indigo: #6366f1; /* Główny kolor interfejsu */
    --rk-mat-indigo-light: #e0e7ff;
    --rk-mat-teal: #14b8a6;   /* Sukces / Optymalnie */
    --rk-mat-rose: #f43f5e;   /* Ostrzeżenie / Tradycyjnie */
    --rk-mat-amber: #f59e0b;  /* Etapy pośrednie */
    --rk-mat-bg: #f8fafc;
    --rk-mat-border: #e2e8f0;
    --rk-mat-text: #334155;
    --rk-mat-muted: #64748b;
}

.rk-mat-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(99, 102, 241, 0.15);
    border: 1px solid rgba(99, 102, 241, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-mat-header {
    background: linear-gradient(135deg, var(--rk-mat-dark) 0%, #312e81 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-mat-indigo);
}

.rk-mat-header::before {
    content: ''; position: absolute; right: 0; top: 0; width: 100%; height: 100%;
    background: radial-gradient(circle at top right, rgba(99, 102, 241, 0.2), transparent 70%);
    pointer-events: none;
}

.rk-mat-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(99, 102, 241, 0.3);
    color: #c7d2fe;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(165, 180, 252, 0.3);
    position: relative;
    z-index: 2;
}

.rk-mat-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 10px 0;
    position: relative;
    z-index: 2;
}

.rk-mat-title span { color: #818cf8; }

.rk-mat-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.6;
    margin: 0;
    position: relative;
    z-index: 2;
}

/* Nawigacja Wariantów (Przyciski) */
.rk-mat-nav {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    background: var(--rk-mat-bg);
    border-bottom: 1px solid var(--rk-mat-border);
    padding: 20px 30px;
    gap: 15px;
}

.rk-mat-btn {
    background: #ffffff;
    border: 2px solid var(--rk-mat-border);
    border-radius: 12px;
    padding: 15px 10px;
    text-align: center;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-mat-btn:hover { border-color: #818cf8; transform: translateY(-3px); }
.rk-mat-btn.active { border-color: var(--rk-mat-indigo); background: var(--rk-mat-indigo-light); box-shadow: 0 10px 20px -5px rgba(99, 102, 241, 0.2); }

.rk-mat-btn-icon {
    width: 40px; height: 40px; border-radius: 10px; background: #f1f5f9; color: var(--rk-mat-muted); display: flex; align-items: center; justify-content: center; transition: 0.3s;
}
.rk-mat-btn.active .rk-mat-btn-icon { background: var(--rk-mat-indigo); color: #ffffff; }

.rk-mat-btn-text { font-size: 12px; font-weight: 800; color: var(--rk-mat-text); line-height: 1.3; }
.rk-mat-btn.active .rk-mat-btn-text { color: var(--rk-mat-indigo); }

/* Matryca Wyników (Kafelki) */
.rk-mat-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
    padding: 40px 50px;
    background: #ffffff;
}

.rk-mat-card {
    background: var(--rk-mat-bg);
    border: 1px solid var(--rk-mat-border);
    border-radius: 16px;
    padding: 25px 20px;
    text-align: center;
    position: relative;
    overflow: hidden;
    transition: transform 0.3s, box-shadow 0.3s, border-color 0.3s;
}

.rk-mat-card:hover { transform: translateY(-5px); box-shadow: 0 15px 30px -10px rgba(0,0,0,0.05); }

/* Dynamiczne Kolory Stanów Kafelka */
.state-danger { border-top: 4px solid var(--rk-mat-rose); }
.state-danger .rk-val { color: var(--rk-mat-rose); }
.state-warning { border-top: 4px solid var(--rk-mat-amber); }
.state-warning .rk-val { color: var(--rk-mat-amber); }
.state-good { border-top: 4px solid var(--rk-mat-indigo); }
.state-good .rk-val { color: var(--rk-mat-indigo); }
.state-perfect { border-top: 4px solid var(--rk-mat-teal); }
.state-perfect .rk-val { color: var(--rk-mat-teal); }

.rk-mat-card-icon { height: 60px; margin-bottom: 15px; display: flex; align-items: center; justify-content: center; }

.rk-mat-card h4 { margin: 0 0 10px 0; font-size: 13px; font-weight: 800; color: var(--rk-mat-muted); text-transform: uppercase; letter-spacing: 0.5px; }
.rk-val { display: block; font-size: 26px; font-weight: 900; line-height: 1.1; margin-bottom: 8px; transition: color 0.4s; }
.rk-desc { display: block; font-size: 13px; color: var(--rk-mat-text); font-weight: 600; min-height: 36px; }

/* Animacje SVG w Kafelkach */
.rk-svg-dyn { width: 100%; height: 100%; overflow: visible; }

/* Temp Anim */
.anim-thermo-bar { transition: height 0.5s cubic-bezier(0.4, 0, 0.2, 1), y 0.5s cubic-bezier(0.4, 0, 0.2, 1), fill 0.5s; }
.anim-thermo-bulb { transition: fill 0.5s; }

/* SCOP Anim */
.anim-dial { transform-origin: 50% 90%; transition: transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); }

/* Loss Anim */
.anim-loss-wave { stroke-dasharray: 4 8; animation: lossWave 1.5s linear infinite; transition: stroke 0.5s; }
@keyframes lossWave { to { stroke-dashoffset: -24; } }

/* Humidity Anim */
.anim-drop-fill { transition: fill 0.5s; }
.anim-drop-pulse { transform-origin: center; animation: dropPulse 2s infinite; }
@keyframes dropPulse { 0% { transform: scale(0.9); opacity: 0.8; } 100% { transform: scale(1.1); opacity: 0; } }

/* Profile Anim */
.anim-gradient-stop1 { transition: stop-color 0.5s; }
.anim-gradient-stop2 { transition: stop-color 0.5s; }

/* Dust Anim */
.anim-particle { transition: transform 1s, opacity 0.5s, fill 0.5s; }

/* Legenda / Podsumowanie na dole */
.rk-mat-footer {
    background: var(--rk-mat-dark);
    padding: 20px 50px;
    text-align: center;
    border-top: 1px solid rgba(255,255,255,0.1);
}

.rk-mat-footer p {
    margin: 0;
    color: #cbd5e1;
    font-size: 14px;
    font-weight: 600;
}

@media (max-width: 768px) {
    .rk-mat-header, .rk-mat-grid, .rk-mat-footer { padding: 30px 20px; }
    .rk-mat-nav { grid-template-columns: 1fr 1fr; padding: 20px; }
    .rk-mat-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-mat-title { font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-porownanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Porównanie parametrów technicznych: Ogrzewanie podłogowe i rekuperacja vs Układy tradycyjne",
    "description": "Zestawienie kluczowych parametrów techniczno-operacyjnych dla różnych wariantów instalacyjnych w budynku 150m2.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-porownanie",
    "name": "Macierz Parametrów: Systemy Tradycyjne vs Zintegrowane",
    "description": "Zestawienie efektywności energetycznej i mikroklimatycznej dla instalacji w domu jednorodzinnym 150 m2 (WT2021).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "porównanie podłogówki i grzejników",
      "SCOP pompy ciepła parametry",
      "strata wentylacyjna grawitacja vs rekuperacja",
      "wilgotność wymiennik entalpiczny",
      "temperatura zasilania ogrzewania"
    ],
    "measurementTechnique": "Wartości obliczeniowe i normatywne dla budynku 150m2 w standardzie WT2021 (OZC, COP, wilgotność względna).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Grzejniki + Grawitacja: Temp. 55-65°C, SCOP 2.8-3.2, Strata 2.71 kW",
        "Podłogówka + Grawitacja: Temp. 35-40°C, SCOP 3.8-4.2, Strata 2.71 kW",
        "Podłogówka + Rekuperacja (Std): Temp. 30-35°C, SCOP 4.6-5.0, Strata 0.41 kW",
        "Podłogówka + Rekuperacja (Entalpiczny): Temp. 28-32°C, SCOP 4.8-5.3, Strata 0.41 kW, Wilgotność 40-50%"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-porownanie",
    "name": "Symulator Efektywności Instalacyjnej",
    "description": "Interaktywna matryca porównująca wskaźniki COP, straty ciepła i wilgotność w zależności od wybranego systemu grzewczo-wentylacyjnego.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-mat-container" id="rk-mat-app">
    
    <div class="rk-mat-header">
        <div class="rk-mat-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
            Macierz Analityczna
        </div>
        <h2 class="rk-mat-title">Porównanie parametrów technicznych: <span>Systemy tradycyjne vs Zintegrowane</span></h2>
        <p class="rk-mat-desc">Zestawienie kluczowych parametrów techniczno-operacyjnych dla różnych wariantów instalacyjnych w budynku jednorodzinnym o powierzchni 150 m². Zobacz, jak zmienia się efektywność i mikroklimat.</p>
    </div>

    <div class="rk-mat-nav">
        <button class="rk-mat-btn" data-sys="rad-grav">
            <div class="rk-mat-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 14v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7"></path><path d="M4 10V5a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v5"></path><line x1="8" y1="3" x2="8" y2="21"></line><line x1="12" y1="3" x2="12" y2="21"></line><line x1="16" y1="3" x2="16" y2="21"></line></svg></div>
            <span class="rk-mat-btn-text">Grzejniki + Grawitacja</span>
        </button>
        <button class="rk-mat-btn" data-sys="ufh-grav">
            <div class="rk-mat-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg></div>
            <span class="rk-mat-btn-text">Podłogówka + Grawitacja</span>
        </button>
        <button class="rk-mat-btn" data-sys="ufh-rec">
            <div class="rk-mat-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><path d="M12 8v8"></path><path d="M8 12h8"></path><path d="M9.5 9.5l5 5"></path><path d="M14.5 9.5l-5 5"></path></svg></div>
            <span class="rk-mat-btn-text">Podłogówka + Reku (Std)</span>
        </button>
        <button class="rk-mat-btn active" data-sys="ufh-ent">
            <div class="rk-mat-btn-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2.69l5.66 4.2c1.33 1.04 2.34 2.58 2.34 4.61 0 3.59-2.91 6.5-6.5 6.5s-6.5-2.91-6.5-6.5c0-2.03 1.01-3.57 2.34-4.61L12 2.69z"></path></svg></div>
            <span class="rk-mat-btn-text">Podłogówka + Reku (Entalp.)</span>
        </button>
    </div>

    <div class="rk-mat-grid">
        
        <div class="rk-mat-card" id="card-temp">
            <div class="rk-mat-card-icon">
                <svg class="rk-svg-dyn" viewBox="0 0 50 60">
                    <rect x="20" y="5" width="10" height="40" fill="none" stroke="#cbd5e1" stroke-width="2" rx="5"/>
                    <circle cx="25" cy="45" r="8" fill="none" stroke="#cbd5e1" stroke-width="2"/>
                    <circle class="anim-thermo-bulb" id="svg-temp-bulb" cx="25" cy="45" r="5" fill="#f43f5e"/>
                    <rect class="anim-thermo-bar" id="svg-temp-bar" x="23" y="15" width="4" height="30" fill="#f43f5e" rx="2"/>
                </svg>
            </div>
            <h4>Projektowa temp. zasilania</h4>
            <span class="rk-val" id="val-temp">&#8212;</span>
            <span class="rk-desc" id="desc-temp">&#8212;</span>
        </div>

        <div class="rk-mat-card" id="card-scop">
            <div class="rk-mat-card-icon">
                <svg class="rk-svg-dyn" viewBox="0 0 80 60">
                    <path d="M 10 50 A 30 30 0 0 1 70 50" fill="none" stroke="#e2e8f0" stroke-width="8" stroke-linecap="round"/>
                    <path id="svg-scop-arc" d="M 10 50 A 30 30 0 0 1 70 50" fill="none" stroke="#14b8a6" stroke-width="8" stroke-linecap="round" stroke-dasharray="95" stroke-dashoffset="95" style="transition: stroke-dashoffset 0.6s, stroke 0.6s;"/>
                    <line class="anim-dial" id="svg-scop-dial" x1="40" y1="50" x2="20" y2="30" stroke="#334155" stroke-width="3" stroke-linecap="round"/>
                    <circle cx="40" cy="50" r="4" fill="#0f172a"/>
                </svg>
            </div>
            <h4>Średni roczny SCOP pompy</h4>
            <span class="rk-val" id="val-scop">&#8212;</span>
            <span class="rk-desc" id="desc-scop">Współczynnik efektywności</span>
        </div>

        <div class="rk-mat-card" id="card-loss">
            <div class="rk-mat-card-icon">
                <svg class="rk-svg-dyn" viewBox="0 0 60 60">
                    <path d="M 15 15 L 45 15 L 45 45 L 15 45 Z" fill="none" stroke="#cbd5e1" stroke-width="3"/>
                    <path class="anim-loss-wave" id="svg-loss-wave" d="M 25 30 L 55 30" fill="none" stroke="#f43f5e" stroke-width="4" stroke-linecap="round"/>
                    <path class="anim-loss-wave" style="animation-delay: 0.5s;" id="svg-loss-wave2" d="M 25 40 L 55 40" fill="none" stroke="#f43f5e" stroke-width="4" stroke-linecap="round"/>
                </svg>
            </div>
            <h4>Projektowa strata wentylacyjna</h4>
            <span class="rk-val" id="val-loss">&#8212;</span>
            <span class="rk-desc" id="desc-loss">Dla domu 150 m²</span>
        </div>

        <div class="rk-mat-card" id="card-hum">
            <div class="rk-mat-card-icon">
                <svg class="rk-svg-dyn" viewBox="0 0 60 60">
                    <path d="M 30 15 Q 45 35 45 45 A 15 15 0 0 1 15 45 Q 15 35 30 15 Z" fill="none" stroke="#cbd5e1" stroke-width="3"/>
                    <path class="anim-drop-fill" id="svg-hum-fill" d="M 30 25 Q 42 40 42 45 A 12 12 0 0 1 18 45 Q 18 40 30 25 Z" fill="#6366f1"/>
                    <circle class="anim-drop-pulse" cx="30" cy="45" r="3" fill="#ffffff" opacity="0.5"/>
                </svg>
            </div>
            <h4>Wilgotność względna zimą</h4>
            <span class="rk-val" id="val-hum">&#8212;</span>
            <span class="rk-desc" id="desc-hum">&#8212;</span>
        </div>

        <div class="rk-mat-card" id="card-prof">
            <div class="rk-mat-card-icon">
                <svg class="rk-svg-dyn" viewBox="0 0 50 60">
                    <defs>
                        <linearGradient id="gradProf" x1="0%" y1="0%" x2="0%" y2="100%">
                            <stop class="anim-gradient-stop1" id="svg-prof-top" offset="0%" stop-color="#f43f5e" />
                            <stop class="anim-gradient-stop2" id="svg-prof-bot" offset="100%" stop-color="#3b82f6" />
                        </linearGradient>
                    </defs>
                    <path d="M 10 50 L 10 10 L 25 5 L 40 10 L 40 50 Z" fill="url(#gradProf)" stroke="#334155" stroke-width="2"/>
                </svg>
            </div>
            <h4>Profil pionowy temperatury</h4>
            <span class="rk-val" id="val-prof" style="font-size: 18px; line-height:30px;">&#8212;</span>
            <span class="rk-desc" id="desc-prof">&#8212;</span>
        </div>

        <div class="rk-mat-card" id="card-dust">
            <div class="rk-mat-card-icon">
                <svg class="rk-svg-dyn" viewBox="0 0 60 60" id="svg-dust-group">
                    </svg>
            </div>
            <h4>Kurz i alergeny</h4>
            <span class="rk-val" id="val-dust" style="font-size: 20px; line-height:30px;">&#8212;</span>
            <span class="rk-desc" id="desc-dust">&#8212;</span>
        </div>

    </div>

    <div class="rk-mat-footer">
        <p>Powyższe zestawienie jasno pokazuje, dlaczego połączenie wodnego ogrzewania podłogowego z rekuperacją wyposażoną w wymiennik entalpiczny jest aktualnie najbardziej efektywnym modelem instalacyjnym na rynku.</p>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Bezpieczeństwo
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const wrap = document.getElementById('rk-mat-app');
        if(wrap) wrap.innerHTML = `<div style="padding:30px; background:#0f172a; color:#ef4444; text-align:center;"><b>Naruszenie licencji Projekt-Ogrzewania.pl</b></div>`;
        return;
    }

    const data = {
        'rad-grav': {
            temp: '55 - 65°C', tempDesc: 'Wysoki parametr zasilania', stateTemp: 'state-danger',
            scop: '2,8 - 3,2', stateScop: 'state-danger', scopVal: 20, scopRot: -60,
            loss: '2,71 kW', stateLoss: 'state-danger', lossCol: '#f43f5e',
            hum: '25% - 30%', humDesc: 'Zbyt suche powietrze', stateHum: 'state-danger', humFill: '#f59e0b',
            prof: 'Niekorzystny', profDesc: 'Ciepło gromadzi się pod sufitem', stateProf: 'state-danger', gradTop: '#f43f5e', gradBot: '#3b82f6',
            dust: 'Wysoka konwekcja', dustDesc: 'Ciągłe unoszenie kurzu', stateDust: 'state-danger', dustSpeed: 'fast'
        },
        'ufh-grav': {
            temp: '35 - 40°C', tempDesc: 'Umiarkowany parametr zasilania', stateTemp: 'state-warning',
            scop: '3,8 - 4,2', stateScop: 'state-warning', scopVal: 50, scopRot: -10,
            loss: '2,71 kW', stateLoss: 'state-danger', lossCol: '#f43f5e',
            hum: '30% - 35%', humDesc: 'Podatność na przesuszenia', stateHum: 'state-warning', humFill: '#818cf8',
            prof: 'Stabilny', profDesc: 'Ciepło przy stopach', stateProf: 'state-good', gradTop: '#3b82f6', gradBot: '#f43f5e',
            dust: 'Średnia', dustDesc: 'Zmniejszony ruch powietrza', stateDust: 'state-warning', dustSpeed: 'med'
        },
        'ufh-rec': {
            temp: '30 - 35°C', tempDesc: 'Niski parametr zasilania', stateTemp: 'state-good',
            scop: '4,6 - 5,0', stateScop: 'state-good', scopVal: 80, scopRot: 40,
            loss: '0,41 kW', stateLoss: 'state-perfect', lossCol: '#14b8a6',
            hum: '30% - 40%', humDesc: 'Poprawna wilgotność', stateHum: 'state-good', humFill: '#3b82f6',
            prof: 'Stabilny', profDesc: 'Brak ciągów chłodnych z okien', stateProf: 'state-perfect', gradTop: '#60a5fa', gradBot: '#14b8a6',
            dust: 'Czysto', dustDesc: 'Filtracja w centrali', stateDust: 'state-good', dustSpeed: 'slow'
        },
        'ufh-ent': {
            temp: '28 - 32°C', tempDesc: 'Ultrakiski parametr zasilania', stateTemp: 'state-perfect',
            scop: '4,8 - 5,3', stateScop: 'state-perfect', scopVal: 95, scopRot: 70,
            loss: '0,41 kW', stateLoss: 'state-perfect', lossCol: '#14b8a6',
            hum: '40% - 50%', humDesc: 'Optymalny mikroklimat', stateHum: 'state-perfect', humFill: '#14b8a6',
            prof: 'Idealny', profDesc: 'Brak ruchów konwekcyjnych', stateProf: 'state-perfect', gradTop: '#99f6e4', gradBot: '#14b8a6',
            dust: 'Maksymalna czystość', dustDesc: 'Oczyszczone z PM2.5/PM10', stateDust: 'state-perfect', dustSpeed: 'static'
        }
    };

    const btns = document.querySelectorAll('.rk-mat-btn');
    const cards = {
        temp: document.getElementById('card-temp'),
        scop: document.getElementById('card-scop'),
        loss: document.getElementById('card-loss'),
        hum: document.getElementById('card-hum'),
        prof: document.getElementById('card-prof'),
        dust: document.getElementById('card-dust')
    };

    // SVGs
    const svgTempBar = document.getElementById('svg-temp-bar');
    const svgTempBulb = document.getElementById('svg-temp-bulb');
    const svgScopArc = document.getElementById('svg-scop-arc');
    const svgScopDial = document.getElementById('svg-scop-dial');
    const svgLossWave = document.getElementById('svg-loss-wave');
    const svgLossWave2 = document.getElementById('svg-loss-wave2');
    const svgHumFill = document.getElementById('svg-hum-fill');
    const svgProfTop = document.getElementById('svg-prof-top');
    const svgProfBot = document.getElementById('svg-prof-bot');
    const svgDustGroup = document.getElementById('svg-dust-group');

    // Create Dust Particles
    for(let i=0; i<12; i++) {
        let c = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        c.setAttribute("r", Math.random()*2 + 1);
        c.classList.add("anim-particle");
        svgDustGroup.appendChild(c);
    }

    function updateMatrix(sysId) {
        const d = data[sysId];
        
        // Reset classes
        Object.values(cards).forEach(card => card.className = 'rk-mat-card');

        // Temp
        document.getElementById('val-temp').textContent = d.temp;
        document.getElementById('desc-temp').textContent = d.tempDesc;
        cards.temp.classList.add(d.stateTemp);
        let tH = sysId==='rad-grav'? 35 : sysId==='ufh-grav'? 25 : sysId==='ufh-rec'? 15 : 10;
        let tY = sysId==='rad-grav'? 10 : sysId==='ufh-grav'? 20 : sysId==='ufh-rec'? 30 : 35;
        let tCol = d.stateTemp.includes('danger') ? '#f43f5e' : d.stateTemp.includes('warning') ? '#f59e0b' : '#14b8a6';
        svgTempBar.setAttribute('height', tH);
        svgTempBar.setAttribute('y', tY);
        svgTempBar.setAttribute('fill', tCol);
        svgTempBulb.setAttribute('fill', tCol);

        // SCOP
        document.getElementById('val-scop').textContent = d.scop;
        cards.scop.classList.add(d.stateScop);
        // arc length is 95 (half circle approx)
        let offset = 95 - (95 * (d.scopVal / 100));
        svgScopArc.style.strokeDashoffset = offset;
        svgScopArc.style.stroke = tCol;
        svgScopDial.style.transform = `rotate(${d.scopRot}deg)`;

        // Loss
        document.getElementById('val-loss').textContent = d.loss;
        cards.loss.classList.add(d.stateLoss);
        svgLossWave.style.stroke = d.lossCol;
        svgLossWave2.style.stroke = d.lossCol;

        // Humidity
        document.getElementById('val-hum').textContent = d.hum;
        document.getElementById('desc-hum').textContent = d.humDesc;
        cards.hum.classList.add(d.stateHum);
        svgHumFill.setAttribute('fill', d.humFill);

        // Profile
        document.getElementById('val-prof').textContent = d.prof;
        document.getElementById('desc-prof').textContent = d.profDesc;
        cards.prof.classList.add(d.stateProf);
        svgProfTop.setAttribute('stop-color', d.gradTop);
        svgProfBot.setAttribute('stop-color', d.gradBot);

        // Dust
        document.getElementById('val-dust').textContent = d.dust;
        document.getElementById('desc-dust').textContent = d.dustDesc;
        cards.dust.classList.add(d.stateDust);
        
        let particles = svgDustGroup.querySelectorAll('.anim-particle');
        particles.forEach(p => {
            let px = Math.random() * 40 + 10;
            let py = d.dustSpeed === 'fast' ? Math.random() * 20 + 10 : d.dustSpeed === 'med' ? Math.random() * 20 + 20 : d.dustSpeed === 'slow' ? 50 : 55;
            let pOp = d.dustSpeed === 'static' ? 0 : Math.random() * 0.5 + 0.2;
            let pCol = d.dustSpeed === 'fast' ? '#f43f5e' : '#cbd5e1';
            
            p.setAttribute("cx", px);
            p.setAttribute("cy", py);
            p.setAttribute("opacity", pOp);
            p.setAttribute("fill", pCol);
        });
    }

    btns.forEach(btn => {
        btn.addEventListener('click', () => {
            btns.forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            updateMatrix(btn.getAttribute('data-sys'));
        });
    });

    // Init
    updateMatrix('ufh-ent');
});
</script>



<style>
:root {
    --rk-mc-dark: #0f172a;
    --rk-mc-card: #1e293b;
    --rk-mc-health: #10b981; /* Zieleń dla zdrowia */
    --rk-mc-health-light: #d1fae5;
    --rk-mc-water: #0ea5e9;  /* Niebieski dla wilgotności */
    --rk-mc-water-light: #e0f2fe;
    --rk-mc-dry: #f59e0b;    /* Bursztyn dla suchego powietrza */
    --rk-mc-bg: #f8fafc;
    --rk-mc-border: #e2e8f0;
    --rk-mc-text: #334155;
    --rk-mc-muted: #64748b;
}

.rk-mc-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(16, 185, 129, 0.15);
    border: 1px solid rgba(16, 185, 129, 0.3);
    overflow: hidden;
}

/* Header */
.rk-mc-header {
    background: linear-gradient(135deg, var(--rk-mc-dark) 0%, #064e3b 100%);
    padding: 45px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-mc-health);
}

.rk-mc-header::before {
    content: ''; position: absolute; left: 0; top: 0; width: 100%; height: 100%;
    background: radial-gradient(circle at top right, rgba(16, 185, 129, 0.15), transparent 60%);
    pointer-events: none;
}

.rk-mc-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(110, 231, 183, 0.3);
    position: relative;
    z-index: 2;
}

.rk-mc-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
    position: relative;
    z-index: 2;
}

.rk-mc-title span { color: #34d399; }

.rk-mc-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.6;
    margin: 0;
    position: relative;
    z-index: 2;
}

/* Kafelki z Danymi (Grid) */
.rk-mc-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 40px 50px 20px;
    background: var(--rk-mc-bg);
}

.rk-mc-stat-card {
    background: #ffffff;
    border: 1px solid var(--rk-mc-border);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    transition: transform 0.3s, box-shadow 0.3s;
}

.rk-mc-stat-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 15px 30px -10px rgba(16, 185, 129, 0.15);
    border-color: var(--rk-mc-health);
}

.rk-mc-stat-icon {
    width: 48px; height: 48px; border-radius: 12px; background: var(--rk-mc-health-light); color: var(--rk-mc-health); display: flex; align-items: center; justify-content: center; margin-bottom: 15px;
}

.rk-mc-stat-card h4 { margin: 0 0 8px 0; font-size: 22px; font-weight: 900; color: var(--rk-mc-dark); }
.rk-mc-stat-card p { margin: 0; font-size: 13px; color: var(--rk-mc-muted); font-weight: 700; text-transform: uppercase; }

/* Interaktywny Symulator Wilgotności */
.rk-mc-interactive {
    padding: 20px 50px 40px;
    background: var(--rk-mc-bg);
}

.rk-mc-sim-box {
    background: var(--rk-mc-dark);
    border-radius: 20px;
    padding: 30px;
    color: #ffffff;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
    position: relative;
    overflow: hidden;
    box-shadow: inset 0 10px 30px rgba(0,0,0,0.5);
}

/* Lewa strona - Kontrolki */
.rk-mc-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
    position: relative;
    z-index: 2;
}

.rk-mc-control-group {
    background: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 20px;
    border-radius: 16px;
}

.rk-mc-label {
    display: flex;
    justify-content: space-between;
    font-size: 13px;
    font-weight: 800;
    color: #94a3b8;
    text-transform: uppercase;
    margin-bottom: 15px;
}
.rk-mc-label span { color: #ffffff; font-size: 16px; }

/* Toggle */
.rk-mc-toggle {
    display: flex;
    background: rgba(0,0,0,0.3);
    border-radius: 8px;
    padding: 4px;
    position: relative;
}

.rk-mc-toggle-btn {
    flex: 1;
    padding: 10px;
    text-align: center;
    border: none;
    background: transparent;
    color: #94a3b8;
    font-weight: 800;
    font-size: 13px;
    cursor: pointer;
    border-radius: 6px;
    transition: all 0.3s;
    position: relative;
    z-index: 2;
}
.rk-mc-toggle-btn.active { color: #ffffff; }

.rk-mc-toggle-slider {
    position: absolute;
    top: 4px; bottom: 4px; left: 4px;
    width: calc(50% - 4px);
    background: var(--rk-mc-water);
    border-radius: 6px;
    z-index: 1;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), background 0.3s;
}

.rk-mc-toggle.mode-entalpy .rk-mc-toggle-slider { transform: translateX(100%); background: var(--rk-mc-health); }

/* Slider */
.rk-mc-range {
    -webkit-appearance: none; width: 100%; height: 6px; border-radius: 3px; background: rgba(255,255,255,0.2); outline: none;
}
.rk-mc-range::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 22px; height: 22px; border-radius: 50%;
    background: #ffffff; cursor: pointer; border: 3px solid var(--rk-mc-water); transition: 0.2s;
}

/* Prawa strona - Wizualizacja */
.rk-mc-display {
    text-align: center;
    position: relative;
    z-index: 2;
}

.rk-mc-gauge {
    position: relative;
    width: 180px;
    height: 180px;
    margin: 0 auto 20px;
}

.rk-svg-gauge { width: 100%; height: 100%; transform: rotate(-90deg); }
.rk-gauge-bg { fill: none; stroke: rgba(255,255,255,0.1); stroke-width: 12; }
.rk-gauge-val { fill: none; stroke: var(--rk-mc-water); stroke-width: 12; stroke-dasharray: 440; stroke-dashoffset: 440; transition: stroke-dashoffset 0.5s ease-out, stroke 0.5s; stroke-linecap: round; }

.rk-mc-gauge-text {
    position: absolute;
    top: 0; left: 0; width: 100%; height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.rk-mc-gauge-text h5 { margin: 0; font-size: 42px; font-weight: 900; color: #ffffff; line-height: 1; transition: color 0.3s; }
.rk-mc-gauge-text p { margin: 5px 0 0 0; font-size: 12px; color: #94a3b8; font-weight: 700; text-transform: uppercase; }

.rk-mc-status-box {
    display: inline-block;
    padding: 8px 16px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    transition: all 0.3s;
}

/* Stany Kolorystyczne */
.status-dry .rk-gauge-val { stroke: var(--rk-mc-dry); }
.status-dry .rk-mc-gauge-text h5 { color: var(--rk-mc-dry); }
.status-dry .rk-mc-status-box { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.3); }

.status-good .rk-gauge-val { stroke: var(--rk-mc-health); }
.status-good .rk-mc-gauge-text h5 { color: var(--rk-mc-health); }
.status-good .rk-mc-status-box { background: rgba(16, 185, 129, 0.2); color: #6ee7b7; border: 1px solid rgba(16, 185, 129, 0.3); }

/* Animacje Tła SVG w panelu */
.rk-mc-bg-anim { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; opacity: 0.1; pointer-events: none; }
.anim-drop { transform-origin: center; animation: dropFall 3s infinite; }
.anim-drop:nth-child(2) { animation-delay: 1s; left: 30%; }
.anim-drop:nth-child(3) { animation-delay: 2s; left: 70%; }

@keyframes dropFall { 0% { transform: translateY(-20px) scale(0.5); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateY(100px) scale(1.5); opacity: 0; } }

/* Tekst i Wyjaśnienie */
.rk-mc-expl {
    padding: 0 50px 40px;
    background: var(--rk-mc-bg);
}

.rk-mc-expl-box {
    background: #ffffff;
    border-left: 4px solid var(--rk-mc-health);
    padding: 25px 30px;
    border-radius: 0 16px 16px 0;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-mc-expl-box h4 { margin: 0 0 10px 0; font-size: 18px; font-weight: 900; color: var(--rk-mc-dark); display: flex; align-items: center; gap: 10px; }
.rk-mc-expl-box p { margin: 0; font-size: 15px; line-height: 1.7; color: var(--rk-mc-text); }
.rk-mc-expl-box p strong { font-weight: 800; color: var(--rk-mc-dark); }

@media (max-width: 768px) {
    .rk-mc-header, .rk-mc-stats, .rk-mc-interactive, .rk-mc-expl { padding: 30px 20px; }
    .rk-mc-title { font-size: 24px; }
    .rk-mc-stats { grid-template-columns: 1fr; gap: 15px; padding-top: 30px; }
    .rk-mc-sim-box { grid-template-columns: 1fr; gap: 30px; padding: 25px 20px; }
    .rk-mc-gauge { width: 140px; height: 140px; }
    .rk-mc-gauge-text h5 { font-size: 32px; }
    .rk-mc-expl-box { padding: 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-mikroklimat",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Jak rekuperacja i ogrzewanie podłogowe wpływają na mikroklimat i zdrowie mieszkańców?",
    "description": "Analiza wpływu wymienników entalpicznych na wilgotność powietrza oraz redukcji kurzu o 70% zgodnie z normą PN-EN 16798-1:2019-06.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-mikroklimat",
    "name": "Analiza parametrów mikroklimatu 2026",
    "description": "Twarde dane dotyczące jakości powietrza w domach z ogrzewaniem podłogowym i rekuperacją, z uwzględnieniem odzysku wilgoci.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wymiennik entalpiczny wilgotność",
      "rekuperacja suche powietrze zimą",
      "PM2.5 PM10 filtry rekuperator",
      "zdrowie ogrzewanie podłogowe",
      "norma PN-EN 16798-1:2019-06"
    ],
    "measurementTechnique": "Badania jakości powietrza i stężenia alergenów w strefie oddychania zgodnie z wytycznymi normy higienicznej PN-EN 16798-1:2019-06.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Redukcja kurzu i zawieszonych alergenów w strefie oddychania o ponad 70%.",
        "Eliminacja zjawiska termicznej konwekcji i przypiekania kurzu.",
        "Utrzymanie wilgotności na poziomie 40-50% dzięki wymiennikom entalpicznym z membraną polimerową."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-mikroklimat",
    "name": "Symulator Mikroklimatu i Wilgotności",
    "description": "Interaktywne narzędzie obrazujące spadek wilgotności względnej zimą w zależności od rodzaju zastosowanego wymiennika (standard vs entalpiczny).",
    "applicationCategory": "HealthApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-mc-container" id="rk-mc-app">
    
    <div class="rk-mc-header">
        <div class="rk-mc-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
            Zdrowie i Komfort
        </div>
        <h2 class="rk-mc-title">Wpływ na mikroklimat i <span>zdrowie mieszkańców</span></h2>
        <p class="rk-mc-desc">Ogrzewanie podłogowe i rekuperacja to nie tylko oszczędności, ale przede wszystkim twarde dane dotyczące jakości powietrza, zgodne z rygorystyczną normą higieniczną <strong>PN-EN 16798-1:2019-06</strong>.</p>
    </div>

    <div class="rk-mc-stats">
        <div class="rk-mc-stat-card">
            <div class="rk-mc-stat-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            </div>
            <h4>-70%</h4>
            <p>Stężenia kurzu i alergenów</p>
        </div>
        <div class="rk-mc-stat-card">
            <div class="rk-mc-stat-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
            </div>
            <h4>0%</h4>
            <p>Konwekcji termicznej (Brak kaloryferów)</p>
        </div>
        <div class="rk-mc-stat-card">
            <div class="rk-mc-stat-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"></path><line x1="16" y1="8" x2="2" y2="22"></line><line x1="17.5" y1="15" x2="9" y2="6.5"></line></svg>
            </div>
            <h4>PM2.5</h4>
            <p>Stała filtracja cząstek stałych</p>
        </div>
    </div>

    <div class="rk-mc-interactive">
        <div class="rk-mc-sim-box" id="rkMcSimWrapper">
            
            <svg class="rk-mc-bg-anim" viewBox="0 0 100 100" preserveAspectRatio="none">
                <path class="anim-drop" d="M50 20 Q55 35 60 50 A10 10 0 1 1 40 50 Q45 35 50 20" fill="currentColor"></path>
                <path class="anim-drop" style="left:20%;" d="M20 10 Q25 25 30 40 A10 10 0 1 1 10 40 Q15 25 20 10" fill="currentColor"></path>
                <path class="anim-drop" style="left:80%;" d="M80 30 Q85 45 90 60 A10 10 0 1 1 70 60 Q75 45 80 30" fill="currentColor"></path>
            </svg>

            <div class="rk-mc-controls">
                
                <div class="rk-mc-control-group">
                    <div class="rk-mc-label">Rodzaj wymiennika ciepła</div>
                    <div class="rk-mc-toggle" id="rkMcExchangerToggle">
                        <div class="rk-mc-toggle-slider"></div>
                        <button class="rk-mc-toggle-btn active" data-mode="standard">Standardowy</button>
                        <button class="rk-mc-toggle-btn" data-mode="entalpy">Entalpiczny (Odzysk)</button>
                    </div>
                </div>

                <div class="rk-mc-control-group">
                    <div class="rk-mc-label">Temp. zewnętrzna <span><span id="rkMcTempOut">-5</span>°C</span></div>
                    <input type="range" class="rk-mc-range" id="rkMcTempSlider" min="-15" max="10" step="1" value="-5">
                </div>

            </div>

            <div class="rk-mc-display">
                <div class="rk-mc-gauge">
                    <svg class="rk-svg-gauge" viewBox="0 0 160 160">
                        <circle class="rk-gauge-bg" cx="80" cy="80" r="70"></circle>
                        <circle class="rk-gauge-val" id="rkMcGaugeRing" cx="80" cy="80" r="70"></circle>
                    </svg>
                    <div class="rk-mc-gauge-text">
                        <h5 id="rkMcHumOut">28%</h5>
                        <p>Wilgotność w domu</p>
                    </div>
                </div>
                <div class="rk-mc-status-box status-dry" id="rkMcStatusBox">
                    Zbyt suche powietrze
                </div>
            </div>

        </div>
    </div>

    <div class="rk-mc-expl">
        <div class="rk-mc-expl-box">
            <h4>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                Rozwiązanie inżynierskie: Wymiennik entalpiczny
            </h4>
            <p>Problem suchego powietrza w zimie to klasyczna zmora nowoczesnego budownictwa. Inwestorzy montujący tradycyjną rekuperację skarżą się na spadek wilgotności <strong>poniżej 30%</strong>, co wysusza śluzówki i niszczy podłogi.</p>
            <p style="margin-top: 10px;">Rozwiązaniem, które zawsze wdrażam w projektach, jest wymiennik entalpiczny. Posiada on specjalną membranę polimerową, która odzyskuje z wywiewu nie tylko temperaturę, ale też <strong>cząsteczki pary wodnej</strong>, przekazując je do powietrza nawiewanego. Utrzymuje to wilgotność na idealnym, zdrowym poziomie <strong>40-50%</strong> niezależnie od mrozów na zewnątrz.</p>
        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe usunięte zgodnie z wytycznymi

    // Wykorzystanie ZMODYFIKOWANYCH i W PEŁNI UNIKALNYCH identyfikatorów
    const toggleContainer = document.getElementById('rkMcExchangerToggle');
    const toggleBtns = toggleContainer.querySelectorAll('.rk-mc-toggle-btn');
    const tempSlider = document.getElementById('rkMcTempSlider');
    const tempOut = document.getElementById('rkMcTempOut');
    const humOut = document.getElementById('rkMcHumOut');
    const gaugeRing = document.getElementById('rkMcGaugeRing');
    const statusBox = document.getElementById('rkMcStatusBox');
    const wrapper = document.getElementById('rkMcSimWrapper');

    let currentMode = 'standard'; 

    // Obliczenia symulatora
    function calculateHumidity() {
        const temp = parseInt(tempSlider.value);
        tempOut.textContent = temp;

        let humidity;

        if (currentMode === 'standard') {
            humidity = Math.round(35 + (temp * 0.8));
            if(humidity < 15) humidity = 15;
            if(humidity > 45) humidity = 45;
        } else {
            humidity = Math.round(45 + (temp * 0.2)); 
            if(humidity < 40) humidity = 40;
            if(humidity > 55) humidity = 55;
        }

        humOut.textContent = humidity + '%';

        // Gauge SVG logic
        const circumference = 440;
        const offset = circumference - (circumference * humidity / 100);
        gaugeRing.style.strokeDashoffset = offset;

        // Colors & Status
        wrapper.classList.remove('status-dry', 'status-good');
        if (humidity < 40) {
            wrapper.classList.add('status-dry');
            statusBox.textContent = 'Zbyt suche powietrze';
            wrapper.style.color = '#f59e0b'; 
        } else {
            wrapper.classList.add('status-good');
            statusBox.textContent = 'Idealny mikroklimat';
            wrapper.style.color = '#10b981'; 
        }
    }

    // Dodanie nasłuchiwaczy zdarzeń
    toggleBtns.forEach(btn => {
        btn.addEventListener('click', () => {
            currentMode = btn.getAttribute('data-mode');
            
            toggleBtns.forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            
            toggleContainer.className = `rk-mc-toggle mode-${currentMode}`;
            calculateHumidity();
        });
    });

    if(tempSlider) {
        tempSlider.addEventListener('input', calculateHumidity);
        tempSlider.addEventListener('change', calculateHumidity); // Dodatkowe zabezpieczenie
        calculateHumidity(); 
    }
});
</script>



<style>
:root {
    --rk-err-dark: #0f172a;
    --rk-err-panel: #1e293b;
    --rk-err-danger: #ef4444; /* Czerwień dla błędów */
    --rk-err-danger-light: #fee2e2;
    --rk-err-success: #10b981; /* Zieleń dla poprawnego stanu */
    --rk-err-success-light: #d1fae5;
    --rk-err-bg: #f8fafc;
    --rk-err-border: #e2e8f0;
    --rk-err-text: #334155;
    --rk-err-muted: #64748b;
}

.rk-err-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--rk-err-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(239, 68, 68, 0.15);
    border: 1px solid rgba(239, 68, 68, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-err-header {
    background: linear-gradient(135deg, var(--rk-err-dark) 0%, #450a0a 100%);
    padding: 45px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-err-danger);
}

.rk-err-header::before {
    content: ''; position: absolute; left: 0; top: 0; width: 100%; height: 100%;
    background: radial-gradient(circle at top right, rgba(239, 68, 68, 0.15), transparent 60%);
    pointer-events: none;
}

.rk-err-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(239, 68, 68, 0.2);
    color: #fca5a5;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(252, 165, 165, 0.3);
}

.rk-err-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 10px 0;
    position: relative;
    z-index: 2;
}

.rk-err-title span { color: #f87171; }

.rk-err-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.6;
    margin: 0;
    position: relative;
    z-index: 2;
}

/* Interfejs Skanera */
.rk-err-scanner {
    display: flex;
    flex-direction: column;
}

/* Nawigacja Błędów */
.rk-err-nav {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    background: #ffffff;
    border-bottom: 1px solid var(--rk-err-border);
}

.rk-err-tab {
    padding: 20px 15px;
    text-align: center;
    background: transparent;
    border: none;
    border-bottom: 3px solid transparent;
    cursor: pointer;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-err-muted);
    transition: all 0.3s;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
}

.rk-err-tab:hover { background: #f1f5f9; color: var(--rk-err-text); }
.rk-err-tab.active { border-bottom-color: var(--rk-err-danger); color: var(--rk-err-danger); background: var(--rk-err-danger-light); }

.rk-err-tab-icon {
    width: 32px; height: 32px; border-radius: 50%; background: #e2e8f0; display: flex; align-items: center; justify-content: center; transition: 0.3s;
}
.rk-err-tab.active .rk-err-tab-icon { background: var(--rk-err-danger); color: #ffffff; }

/* Panel Detali */
.rk-err-panel-container {
    padding: 40px 50px;
}

.rk-err-panel {
    display: none;
    animation: fadeIn 0.4s ease-out;
}
.rk-err-panel.active { display: block; }

@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }

/* Przełącznik Stanu (Zły vs Dobry) */
.rk-err-switch-wrap {
    display: flex;
    justify-content: center;
    margin-bottom: 30px;
}

.rk-err-switch {
    display: inline-flex;
    background: #e2e8f0;
    border-radius: 99px;
    padding: 4px;
    position: relative;
}

.rk-err-switch-btn {
    padding: 10px 24px;
    border: none;
    background: transparent;
    border-radius: 99px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-err-muted);
    cursor: pointer;
    position: relative;
    z-index: 2;
    transition: color 0.3s;
}

.rk-err-switch-btn.active { color: #ffffff; }

.rk-err-switch-bg {
    position: absolute;
    top: 4px; left: 4px; bottom: 4px;
    width: calc(50% - 4px);
    border-radius: 99px;
    background: var(--rk-err-danger);
    z-index: 1;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), background 0.3s;
    box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}

/* Layout Panelu */
.rk-err-content-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
}

.rk-err-text-box h3 { margin: 0 0 15px 0; font-size: 22px; font-weight: 900; color: var(--rk-err-dark); transition: color 0.3s; }
.rk-err-text-box p { margin: 0; font-size: 15px; line-height: 1.7; color: var(--rk-err-text); }
.rk-err-text-box p strong { font-weight: 800; }

/* Wizualizacja SVG */
.rk-err-visual-box {
    background: var(--rk-err-dark);
    border-radius: 16px;
    height: 240px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    box-shadow: inset 0 10px 30px rgba(0,0,0,0.5);
    border: 2px solid #334155;
    transition: border-color 0.3s;
}

.rk-svg-layer { width: 100%; height: 100%; }

/* --- ANIMACJE DLA STANÓW --- */
/* Zmiana kolorów w zależności od stanu (BŁĄD vs POPRAWNIE) */
.state-good .rk-err-switch-bg { transform: translateX(100%); background: var(--rk-err-success); }
.state-good .rk-err-text-box h3 { color: var(--rk-err-success); }
.state-bad .rk-err-text-box h3 { color: var(--rk-err-danger); }
.state-good .rk-err-visual-box { border-color: rgba(16, 185, 129, 0.5); }
.state-bad .rk-err-visual-box { border-color: rgba(239, 68, 68, 0.5); }

/* Błąd 1: Nawiewniki */
.anim-bad-air { opacity: 0; }
.state-bad .anim-bad-air { opacity: 1; animation: leakAir 1.5s infinite; }
@keyframes leakAir { 0% { transform: translateY(0); opacity: 0.8; } 100% { transform: translateY(-20px); opacity: 0; } }

.anim-good-air { opacity: 0; stroke-dasharray: 5 10; }
.state-good .anim-good-air { opacity: 1; animation: cycleAir 2s linear infinite; }
@keyframes cycleAir { to { stroke-dashoffset: -30; } }

/* Błąd 2: Łazienka (Rozstaw) */
.anim-bad-pipe { stroke: #3b82f6; transition: stroke 0.5s; }
.state-good .anim-bad-pipe { stroke: #ef4444; }

.anim-extra-pipe { opacity: 0; transform: translateY(-10px); transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1); }
.state-good .anim-extra-pipe { opacity: 1; transform: translateY(0); }

.anim-temp-glow { transition: fill 0.5s; }
.state-bad .anim-temp-glow { fill: #93c5fd; }
.state-good .anim-temp-glow { fill: #fca5a5; }

/* Błąd 3: Dylatacje */
.anim-crack { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0.5s ease-out; }
.state-bad .anim-crack { stroke-dashoffset: 0; }

.anim-joint { opacity: 0; transform: scaleY(0); transform-origin: bottom; transition: all 0.5s; }
.state-good .anim-joint { opacity: 1; transform: scaleY(1); }

.anim-peszel { stroke-width: 2; transition: stroke-width 0.5s, stroke 0.5s; }
.state-good .anim-peszel { stroke-width: 6; stroke: #94a3b8; stroke-dasharray: 2 2; }

@media (max-width: 768px) {
    .rk-err-header, .rk-err-panel-container { padding: 30px 20px; }
    .rk-err-nav { grid-template-columns: 1fr; }
    .rk-err-tab { border-bottom: none; border-left: 3px solid transparent; flex-direction: row; text-align: left; padding: 15px; }
    .rk-err-tab.active { border-left-color: var(--rk-err-danger); }
    .rk-err-content-grid { grid-template-columns: 1fr; gap: 25px; }
    .rk-err-visual-box { height: 180px; }
    .rk-err-switch-btn { padding: 10px 15px; font-size: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Najczęstsze błędy wykonawcze przy łączeniu podłogówki z wentylacją mechaniczną",
    "description": "Katalog najpoważniejszych patologii instalacyjnych niszczących synergię rekuperacji i ogrzewania podłogowego. Dowiedz się, jak ich unikać.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-bledy",
    "name": "Katalog Błędów Instalacyjnych 2026",
    "description": "Zestawienie krytycznych błędów (nawiewniki okienne, błędny rozstaw w łazienkach, brak dylatacji) wpływających na dekompresję i uszkodzenia systemu grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "błędy montażowe rekuperacja i podłogówka",
      "nawiewniki okienne przy rekuperacji",
      "rozstaw rur podłogówki w łazience",
      "dylatacje przy ogrzewaniu podłogowym",
      "test szczelności n50"
    ],
    "measurementTechnique": "Weryfikacja szczelności n50 budynku oraz wizualna inspekcja rozstawu rur i profili dylatacyjnych przed wylaniem jastrychu.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zostawienie nawiewników okiennych: Dekompresja układu i utrata standardu n50.",
        "Rzadki rozstaw rur w łazience (np. 15 cm): Brak możliwości osiągnięcia wymaganych +24°C.",
        "Brak peszli i dylatacji w progach: Pękanie posadzki i mechaniczne uszkodzenie rur PEX/PERT."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-bledy",
    "name": "Symulator Patologii Instalacyjnych",
    "description": "Interaktywny moduł edukacyjny z animacjami SVG obrazującymi skutki błędów wykonawczych i wizualizujący poprawne rozwiązania inżynierskie.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-err-container" id="rk-err-app">
    
    <div class="rk-err-header">
        <div class="rk-err-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Patologie Wykonawcze
        </div>
        <h2 class="rk-err-title">Najczęstsze błędy wykonawcze <span>niszczące synergię</span></h2>
        <p class="rk-err-desc">Jako inżynierowie z wieloletnim stażem regularnie spotykamy na budowach patologie instalacyjne. Poniżej przedstawiam trzy najpoważniejsze błędy, które rujnują współpracę ogrzewania podłogowego z rekuperacją.</p>
    </div>

    <div class="rk-err-scanner">
        
        <div class="rk-err-nav">
            <button class="rk-err-tab active" data-tab="tab-1">
                <div class="rk-err-tab-icon">1</div>
                Nawiewniki i nieszczelności
            </button>
            <button class="rk-err-tab" data-tab="tab-2">
                <div class="rk-err-tab-icon">2</div>
                Złe strefowanie łazienek
            </button>
            <button class="rk-err-tab" data-tab="tab-3">
                <div class="rk-err-tab-icon">3</div>
                Brak dylatacji w progach
            </button>
        </div>

        <div class="rk-err-panel-container state-bad" id="rk-state-container">
            
            <div class="rk-err-switch-wrap">
                <div class="rk-err-switch">
                    <div class="rk-err-switch-bg"></div>
                    <button class="rk-err-switch-btn active" data-state="bad">
                        Wykonawstwo &#8222;na oko&#8221;
                    </button>
                    <button class="rk-err-switch-btn" data-state="good">
                        Standard Inżynierski
                    </button>
                </div>
            </div>

            <div class="rk-err-panel active" id="tab-1">
                <div class="rk-err-content-grid">
                    <div class="rk-err-text-box">
                        <h3 id="txt-title-1">Dekompresja budynku i straty ciepła</h3>
                        <p id="txt-desc-1">Wykonawcy potrafią zostawić nawiewniki w oknach pomimo montażu rekuperacji. Powoduje to <strong>całkowite rozbalansowanie ciśnień w budynku</strong>. Ciepłe powietrze ucieka bezpośrednio na zewnątrz, omijając wymiennik rekuperatora, a dom traci cechy szczelności n50, wymaganej przez standardy domów pasywnych.</p>
                    </div>
                    <div class="rk-err-visual-box">
                        <svg class="rk-svg-layer" viewBox="0 0 100 80">
                            <rect x="20" y="20" width="60" height="50" fill="none" stroke="#64748b" stroke-width="3"/>
                            <line x1="50" y1="20" x2="50" y2="70" stroke="#64748b" stroke-width="2"/>
                            <rect class="anim-bad-air" x="40" y="15" width="20" height="5" fill="#ef4444"/>
                            <path class="anim-bad-air" d="M 45 15 L 40 5 M 55 15 L 60 5" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/>
                            <path class="anim-good-air" d="M 70 30 Q 80 10 90 30 T 70 50" fill="none" stroke="#10b981" stroke-width="3" stroke-linecap="round"/>
                        </svg>
                    </div>
                </div>
            </div>

            <div class="rk-err-panel" id="tab-2">
                <div class="rk-err-content-grid">
                    <div class="rk-err-text-box">
                        <h3 id="txt-title-2">Niedogrzana łazienka</h3>
                        <p id="txt-desc-2">Zgodnie z normą, wymagana jest temperatura wewnętrzna <strong>+24°C</strong>. Jednocześnie rekuperacja stale wywiewa stąd powietrze. Jeśli instalator ułoży rury podłogówki rzadko (np. co 15 cm), jak w salonie, pomieszczenie to nigdy nie osiągnie wymaganej temperatury bez montażu prądożernego grzejnika elektrycznego.</p>
                    </div>
                    <div class="rk-err-visual-box">
                        <svg class="rk-svg-layer" viewBox="0 0 100 80">
                            <rect class="anim-temp-glow" x="10" y="40" width="80" height="30" fill="#93c5fd" opacity="0.3" rx="4"/>
                            <path class="anim-bad-pipe" d="M 20 50 L 80 50" fill="none" stroke-width="4" stroke-linecap="round"/>
                            <path class="anim-extra-pipe anim-bad-pipe" d="M 20 60 L 80 60" fill="none" stroke-width="4" stroke-linecap="round"/>
                            <rect x="85" y="10" width="6" height="20" fill="none" stroke="#94a3b8" stroke-width="1" rx="3"/>
                            <circle class="anim-bad-pipe" cx="88" cy="30" r="4" stroke="none"/>
                            <line class="anim-bad-pipe" x1="88" y1="30" x2="88" y2="15" stroke-width="2" stroke-linecap="round"/>
                        </svg>
                    </div>
                </div>
            </div>

            <div class="rk-err-panel" id="tab-3">
                <div class="rk-err-content-grid">
                    <div class="rk-err-text-box">
                        <h3 id="txt-title-3">Pękające płytki i uszkodzone rury</h3>
                        <p id="txt-desc-3">Podłogówka pracująca pod rekuperacją ma stabilną temperaturę, ale jastrych i tak ulega rozszerzalności liniowej. Brak profilu dylatacyjnego w progach (szczególnie przy powierzchniach >40 m²) powoduje niekontrolowane pęknięcia, które przenoszą się na płytki. Przejście rur bez <strong>peszli ochronnych</strong> to gwarancja ich zgilotynowania.</p>
                    </div>
                    <div class="rk-err-visual-box">
                        <svg class="rk-svg-layer" viewBox="0 0 100 80">
                            <rect x="10" y="30" width="80" height="30" fill="#475569" rx="2"/>
                            <line class="anim-peszel" x1="10" y1="45" x2="90" y2="45" stroke="#3b82f6" stroke-linecap="round"/>
                            <path class="anim-crack" d="M 50 30 L 45 40 L 52 50 L 48 60" fill="none" stroke="#ef4444" stroke-width="2"/>
                            <rect class="anim-joint" x="48" y="25" width="4" height="40" fill="#10b981"/>
                        </svg>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie domeny
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const wrap = document.getElementById('rk-err-app');
        if(wrap) {
            wrap.innerHTML = `<div style="padding:40px; background:#0f172a; color:#ef4444; text-align:center; font-family:sans-serif; border-radius:24px; border:2px solid #ef4444;">
                <div style="font-size: 20px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Zabezpieczenie licencyjne</div>
                <div style="font-size: 14px; color: #cbd5e1;">Skrypt jest przeznaczony wyłącznie do uruchamiania na domenie Projekt-Ogrzewania.pl</div>
            </div>`;
            return;
        }
    }

    // Nawigacja Zakładek
    const tabs = document.querySelectorAll('.rk-err-tab');
    const panels = document.querySelectorAll('.rk-err-panel');

    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            tabs.forEach(t => t.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));
            
            tab.classList.add('active');
            const target = document.getElementById(tab.getAttribute('data-tab'));
            if(target) target.classList.add('active');
        });
    });

    // Przełącznik Stanu (Złe vs Dobre)
    const switchBtns = document.querySelectorAll('.rk-err-switch-btn');
    const mainContainer = document.getElementById('rk-state-container');

    const contentData = {
        'tab-1': {
            bad: {
                title: 'Dekompresja budynku i straty ciepła',
                desc: 'Wykonawcy potrafią zostawić nawiewniki w oknach pomimo montażu rekuperacji. Powoduje to <strong>całkowite rozbalansowanie ciśnień w budynku</strong>. Ciepłe powietrze ucieka bezpośrednio na zewnątrz, omijając wymiennik rekuperatora, a dom traci cechy szczelności n50, wymaganej przez standardy domów pasywnych.'
            },
            good: {
                title: 'Szczelność n50 i odzysk z wymiennika',
                desc: 'W pełni uszczelniona stolarka okienna (bez nawiewników) gwarantuje, że 100% powietrza przechodzi przez przeciwprądowy wymiennik rekuperatora. Ciśnienia są <strong>idealnie zbalansowane</strong>, a system grzewczy pracuje stabilnie bez konieczności dogrzewania uciekającego powietrza.'
            }
        },
        'tab-2': {
            bad: {
                title: 'Niedogrzana łazienka (+20°C zamiast +24°C)',
                desc: 'Zgodnie z normą, wymagana jest temperatura wewnętrzna <strong>+24°C</strong>. Jednocześnie rekuperacja stale wywiewa stąd powietrze. Jeśli instalator ułoży rury podłogówki rzadko (np. co 15 cm), jak w salonie, pomieszczenie to nigdy nie osiągnie wymaganej temperatury bez montażu prądożernego grzejnika elektrycznego.'
            },
            good: {
                title: 'Zagęszczony rozstaw i strefa wyższych parametrów',
                desc: 'Inżynierski standard to bezwzględne <strong>zagęszczenie rur co 5-7,5 cm</strong> w łazience oraz dedykowany przepływ na rotametrze rozdzielacza. Dzięki temu system kompensuje straty cieplne wywołane wywiewem rekuperatora i zapewnia komfortowe +24°C nawet przy niskiej temperaturze zasilania z pompy ciepła.'
            }
        },
        'tab-3': {
            bad: {
                title: 'Pękające płytki i zgilotynowane rury',
                desc: 'Podłogówka pracująca pod rekuperacją ma stabilną temperaturę, ale jastrych i tak ulega rozszerzalności liniowej. Brak profilu dylatacyjnego w progach (szczególnie przy powierzchniach >40 m²) powoduje niekontrolowane pęknięcia. Przejście rur <strong>bez peszli ochronnych</strong> to gwarancja ich mechanicznego uszkodzenia.'
            },
            good: {
                title: 'Maty dylatacyjne i ochronne peszle',
                desc: 'Zastosowanie elastycznej taśmy dylatacyjnej w progu oddziela fizycznie płyty grzewcze jastrychu. Rury przechodzące przez tę strefę zabezpieczone są <strong>karbowanym peszlem o długości 40-50 cm</strong>, co absorbuje siły ścinające i gwarantuje 100% bezpieczeństwo instalacji oraz płytek.'
            }
        }
    };

    switchBtns.forEach(btn => {
        btn.addEventListener('click', () => {
            const state = btn.getAttribute('data-state');
            
            // Zmiana klas w switchu i kontenerze
            switchBtns.forEach(b => b.classList.remove('active'));
            btn.classList.add('active');
            
            mainContainer.classList.remove('state-bad', 'state-good');
            mainContainer.classList.add(`state-${state}`);

            // Zmiana tekstów w zależności od aktywnej zakładki i stanu
            ['tab-1', 'tab-2', 'tab-3'].forEach((tabId, index) => {
                const num = index + 1;
                const titleEl = document.getElementById(`txt-title-${num}`);
                const descEl = document.getElementById(`txt-desc-${num}`);
                
                if(titleEl && descEl) {
                    titleEl.innerHTML = contentData[tabId][state].title;
                    descEl.innerHTML = contentData[tabId][state].desc;
                }
            });
        });
    });
});
</script>



<style>
:root {
    --rk-proj-dark: #0f172a;
    --rk-proj-card: #1e293b;
    --rk-proj-brand: #8b5cf6; /* Fiolet techniczny / projektowy */
    --rk-proj-brand-light: #ede9fe;
    --rk-proj-accent: #06b6d4; /* Cyjan dla przepływów */
    --rk-proj-alert: #f43f5e; /* Czerwień dla ostrzeżeń/grawitacji */
    --rk-proj-bg: #f8fafc;
    --rk-proj-border: #e2e8f0;
    --rk-proj-text: #334155;
    --rk-proj-muted: #64748b;
}

.rk-proj-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(139, 92, 246, 0.15);
    border: 1px solid rgba(139, 92, 246, 0.3);
    overflow: hidden;
}

/* Header */
.rk-proj-header {
    background: linear-gradient(135deg, var(--rk-proj-dark) 0%, #2e1065 100%);
    padding: 45px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-proj-brand);
}

.rk-proj-header::after {
    content: ''; position: absolute; right: 0; top: 0; width: 400px; height: 100%;
    background: repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(139, 92, 246, 0.05) 10px, rgba(139, 92, 246, 0.05) 20px);
    pointer-events: none;
}

.rk-proj-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.3);
    color: #c4b5fd;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(196, 181, 253, 0.3);
}

.rk-proj-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
    position: relative;
    z-index: 2;
}

.rk-proj-title span { color: #a78bfa; }

.rk-proj-desc {
    color: #cbd5e1;
    font-size: 16px;
    line-height: 1.6;
    margin: 0;
    max-width: 700px;
    position: relative;
    z-index: 2;
}

/* Interaktywny Schemat Algorytmu OZC */
.rk-proj-algo {
    padding: 40px 50px;
    background: var(--rk-proj-bg);
    border-bottom: 1px solid var(--rk-proj-border);
}

.rk-algo-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-proj-dark);
    margin: 0 0 25px 0;
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.rk-algo-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 20px;
    max-width: 700px;
    margin: 0 auto;
}

.rk-algo-step {
    background: #ffffff;
    border: 2px solid var(--rk-proj-border);
    border-radius: 12px;
    padding: 15px 25px;
    text-align: center;
    font-weight: 800;
    color: var(--rk-proj-dark);
    position: relative;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

.rk-algo-step.main { border-color: var(--rk-proj-brand); background: var(--rk-proj-brand-light); color: #4c1d95; }
.rk-algo-step.final { border-color: var(--rk-proj-accent); background: #cffafe; color: #164e63; }

.rk-algo-split {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    position: relative;
}

/* Linie łączące grid (desktop) */
.rk-algo-split::before {
    content: ''; position: absolute; top: -20px; left: 50%; width: 2px; height: 20px; background: var(--rk-proj-border); transform: translateX(-50%);
}
.rk-algo-split::after {
    content: ''; position: absolute; top: -10px; left: 25%; right: 25%; height: 2px; background: var(--rk-proj-border);
}

.rk-algo-box {
    background: #ffffff;
    border: 2px solid var(--rk-proj-border);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    transition: all 0.3s;
}

.rk-algo-box::before {
    content: ''; position: absolute; top: -10px; left: 50%; width: 2px; height: 10px; background: var(--rk-proj-border); transform: translateX(-50%);
}

.rk-algo-box.grav { border-top-color: var(--rk-proj-alert); }
.rk-algo-box.recup { border-top-color: var(--rk-proj-brand); box-shadow: 0 10px 25px -5px rgba(139, 92, 246, 0.15); }

.rk-algo-box h5 { margin: 0 0 15px 0; font-size: 15px; font-weight: 900; color: var(--rk-proj-dark); text-align: center; }
.rk-algo-box.grav h5 { color: var(--rk-proj-alert); }
.rk-algo-box.recup h5 { color: var(--rk-proj-brand); }

.rk-algo-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
.rk-algo-list li { font-size: 13px; color: var(--rk-proj-text); display: flex; justify-content: space-between; border-bottom: 1px dashed var(--rk-proj-border); padding-bottom: 5px; }
.rk-algo-list li span { font-weight: 800; color: var(--rk-proj-dark); }

/* Sekcja Parametrów (Interaktywna) */
.rk-proj-params {
    padding: 40px 50px;
}

.rk-param-cards {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
}

.rk-param-card {
    background: var(--rk-proj-bg);
    border: 1px solid var(--rk-proj-border);
    border-radius: 16px;
    padding: 25px;
    text-align: center;
    position: relative;
    overflow: hidden;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    cursor: default;
}

.rk-param-card:hover {
    background: #ffffff;
    border-color: var(--rk-proj-brand);
    box-shadow: 0 15px 30px -10px rgba(139, 92, 246, 0.2);
    transform: translateY(-5px);
}

.rk-param-icon {
    width: 50px; height: 50px; margin: 0 auto 15px; border-radius: 12px; background: var(--rk-proj-brand-light); color: var(--rk-proj-brand); display: flex; align-items: center; justify-content: center;
}

.rk-param-card h4 { margin: 0 0 10px 0; font-size: 16px; font-weight: 900; color: var(--rk-proj-dark); }
.rk-param-card p { margin: 0; font-size: 13px; color: var(--rk-proj-text); line-height: 1.6; }

/* Dynamiczne Formuły (SVG / CSS) */
.rk-formula-box {
    margin-top: 15px;
    padding: 10px;
    background: var(--rk-proj-dark);
    border-radius: 8px;
    font-family: monospace;
    font-size: 14px;
    color: #38bdf8;
    font-weight: bold;
    display: none;
}
.rk-param-card:hover .rk-formula-box { display: block; animation: fadeIn 0.3s; }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }

.rk-link { color: var(--rk-proj-brand); font-weight: 700; text-decoration: none; border-bottom: 2px dashed rgba(139, 92, 246, 0.4); transition: all 0.3s; }
.rk-link:hover { color: #5b21b6; border-bottom-style: solid; }

/* Mocne CTA - Sprzedaż Projektu */
.rk-proj-cta-section {
    background: var(--rk-proj-dark);
    padding: 50px;
    text-align: center;
    border-top: 1px solid rgba(255,255,255,0.1);
    position: relative;
    overflow: hidden;
}

.rk-proj-cta-section::before {
    content: ''; position: absolute; left: 0; top: 0; width: 100%; height: 100%;
    background: radial-gradient(circle at center, rgba(139, 92, 246, 0.2) 0%, transparent 60%);
    pointer-events: none;
}

.rk-cta-title { color: #ffffff; font-size: 24px; font-weight: 900; margin: 0 0 15px 0; position: relative; z-index: 2; }
.rk-cta-text { color: #cbd5e1; font-size: 16px; line-height: 1.6; max-width: 650px; margin: 0 auto 30px; position: relative; z-index: 2; }
.rk-cta-text strong { color: #c4b5fd; font-weight: 800; }

.rk-btn-massive {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-proj-brand);
    color: #ffffff;
    font-size: 18px;
    font-weight: 900;
    padding: 20px 45px;
    border-radius: 16px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(139, 92, 246, 0.5);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 2;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-btn-massive:hover {
    transform: translateY(-5px) scale(1.02);
    background: #7c3aed;
    box-shadow: 0 20px 35px -5px rgba(139, 92, 246, 0.6);
}

.rk-btn-massive svg { transition: transform 0.3s; }
.rk-btn-massive:hover svg { transform: translateX(5px); }

/* Animacje w kartach */
.anim-pipe-density { stroke-dasharray: 4 8; animation: movePipe 1s linear infinite; }
.rk-param-card:hover .anim-pipe-density { stroke: var(--rk-proj-brand); }
@keyframes movePipe { to { stroke-dashoffset: -12; } }

.anim-glass-shield { transition: all 0.3s; }
.rk-param-card:hover .anim-glass-shield { fill: #06b6d4; opacity: 0.2; }

.anim-pump-rotor { transform-origin: center; transition: all 0.3s; }
.rk-param-card:hover .anim-pump-rotor { animation: spinRotor 2s linear infinite; stroke: var(--rk-proj-brand); }
@keyframes spinRotor { to { transform: rotate(360deg); } }

@media (max-width: 768px) {
    .rk-proj-header, .rk-proj-algo, .rk-proj-params, .rk-proj-cta-section { padding: 35px 25px; }
    .rk-proj-title { font-size: 24px; }
    .rk-algo-split { grid-template-columns: 1fr; gap: 15px; }
    .rk-algo-split::before, .rk-algo-split::after { display: none; }
    .rk-algo-box { padding: 20px; }
    .rk-param-cards { grid-template-columns: 1fr; }
    .rk-btn-massive { width: 100%; padding: 18px 20px; font-size: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-projekt-wplyw",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Jak rekuperacja drastycznie zmienia wejściowe dane projektowe do obliczeń hydraulicznych ogrzewania podłogowego",
    "description": "Analiza wpływu odzysku ciepła na bilans OZC (PN-EN 12831). Zobacz, dlaczego zagęszczenie rur i odpowiedni dobór pompy obiegowej obniżają koszty ogrzewania.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-projekt",
    "name": "Wytyczne Projektowe: Podłogówka z Rekuperacją",
    "description": "Zestawienie różnic w parametrach projektowych (rozstaw rur, zasilanie, przepływ) pomiędzy układami z wentylacją grawitacyjną a mechaniczną.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczenia OZC z rekuperacją",
      "zagęszczenie rur ogrzewania podłogowego",
      "strefy brzegowe przy oknach HS",
      "dobór pompy obiegowej podłogówka",
      "norma PN-EN 12831 bilans cieplny"
    ],
    "measurementTechnique": "Algorytm obliczeniowy OZC oparty na normie PN-EN 12831 modyfikujący przepływy masowe i zasilanie źródła (np. 30°C).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wymóg zagęszczenia rur do 10 cm w strefach głównych (30°C zasilanie).",
        "Strefy brzegowe pod dużymi oknami (5-7.5 cm) na 1 metr w głąb.",
        "Redukcja oporów hydraulicznych i dobór energooszczędnej pompy obiegowej (4-20 W)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-projekt",
    "name": "Schemat Algorytmu OZC",
    "description": "Wizualizacja inżynierskiego procesu decyzyjnego, pokazująca, jak odzysk ciepła (85%) modyfikuje moc źródła i parametry pętli grzewczych.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-proj-container" id="rk-proj-app">
    
    <div class="rk-proj-header">
        <div class="rk-proj-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20h9"></path><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg>
            Inżynieria Projektowa
        </div>
        <h2 class="rk-proj-title">Jak rekuperacja wpływa na <span>projekt podłogówki?</span></h2>
        <p class="rk-proj-desc">Obecność wentylacji mechanicznej drastycznie zmienia wejściowe dane projektowe do obliczeń hydraulicznych instalacji ogrzewania podłogowego. Profesjonalny inżynier rozpoczyna pracę od wykonania pełnego bilansu cieplnego <strong>OZC wg PN-EN 12831</strong>.</p>
    </div>

    <div class="rk-proj-algo">
        <h3 class="rk-algo-title">Schemat Procesu Obliczeniowego</h3>
        
        <div class="rk-algo-grid">
            <div class="rk-algo-step main">
                [Dane Wejściowe: Kubatura, Izolacja, Szczelność]
            </div>
            
            <div style="text-align:center; color:var(--rk-proj-muted); font-size: 24px; line-height:0.5;">↓</div>
            
            <div class="rk-algo-step">
                [Obliczenia OZC budynku]
            </div>

            <div style="text-align:center; color:var(--rk-proj-muted); font-size: 24px; line-height:0.5;">↓</div>

            <div class="rk-algo-split">
                <div class="rk-algo-box grav">
                    <h5>Wentylacja Grawitacyjna</h5>
                    <ul class="rk-algo-list">
                        <li>Strata cieplna (V): <span>~3,0 kW</span></li>
                        <li>Wymagane zasilanie: <span>40-45°C</span></li>
                        <li>Rozstaw rur: <span>co 15 cm</span></li>
                    </ul>
                </div>

                <div class="rk-algo-box recup">
                    <h5>Rekuperacja (Odzysk 85%)</h5>
                    <ul class="rk-algo-list">
                        <li>Strata cieplna (V): <span>~0,45 kW</span></li>
                        <li>Wymagane zasilanie: <span>30-35°C</span></li>
                        <li>Rozstaw rur: <span>co 10 cm (dla PC)</span></li>
                    </ul>
                </div>
            </div>

            <div style="text-align:center; color:var(--rk-proj-muted); font-size: 24px; margin-top:15px; line-height:0.5;">↓</div>

            <div class="rk-algo-step final">
                [Dobór Mocy Pompy Ciepła i Rozłożenie Pętli]
            </div>
        </div>
    </div>

    <div class="rk-proj-params">
        <h3 class="rk-algo-title" style="margin-bottom: 30px;">Zmiany w parametrach technicznych</h3>
        
        <div class="rk-param-cards">
            
            <div class="rk-param-card">
                <div class="rk-param-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"></path><polyline points="16 6 12 2 8 6"></polyline><line x1="12" y1="2" x2="12" y2="15"></line></svg>
                </div>
                <h4>Zmniejszenie rozstawu rur</h4>
                <p>W domach z pompą ciepła i rekuperacją projektuję rozstaw rur ściśle <strong>co 10 cm</strong>. Mimo mniejszych strat, gęstsze ułożenie zwiększa powierzchnię wymiany, co pozwala obniżyć temperaturę zasilania do 30°C i podnosi COP pompy.</p>
                <svg width="100%" height="20" style="margin-top:15px;" viewBox="0 0 100 20">
                    <path class="anim-pipe-density" d="M 0 10 L 100 10" fill="none" stroke="#94a3b8" stroke-width="4" stroke-linecap="round"/>
                </svg>
            </div>

            <div class="rk-param-card">
                <div class="rk-param-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="12" y1="3" x2="12" y2="21"></line><line x1="3" y1="12" x2="21" y2="12"></line></svg>
                </div>
                <h4>Strefy brzegowe przy HS</h4>
                <p>Mimo że rekuperacja eliminuje ciągi chłodu, duże <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/" class="rk-link">okna przesuwne typu HS</a> generują straty promieniowania. Tu niezbędne są <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/" class="rk-link">strefy brzegowe</a> na 1m w głąb z rozstawem <strong>5-7,5 cm</strong>.</p>
                <svg width="100%" height="30" style="margin-top:15px;" viewBox="0 0 100 30">
                    <rect x="10" y="5" width="80" height="20" fill="none" stroke="#94a3b8" stroke-width="2"/>
                    <rect class="anim-glass-shield" x="10" y="5" width="20" height="20" fill="none"/>
                </svg>
            </div>

            <div class="rk-param-card">
                <div class="rk-param-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><circle cx="12" cy="12" r="3"></circle><line x1="12" y1="2" x2="12" y2="9"></line><line x1="12" y1="15" x2="12" y2="22"></line><line x1="2" y1="12" x2="9" y2="12"></line><line x1="15" y1="12" x2="22" y2="12"></line></svg>
                </div>
                <h4>Dobór pompy obiegowej</h4>
                <p>Mniejsza moc Q pozwala na redukcję przepływu masowego. Dzięki temu dobieramy mniejszą, energooszczędną pompę obiegową (np. klasa <strong>4-20 W</strong>), co eliminuje szumy hydrauliczne w <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/" class="rk-link">rozdzielaczach</a>.</p>
                <div class="rk-formula-box">m = Q / (Cw * ΔT)</div>
                <svg width="100%" height="30" style="margin-top:10px;" viewBox="0 0 100 30">
                    <circle class="anim-pump-rotor" cx="50" cy="15" r="10" fill="none" stroke="#94a3b8" stroke-width="2" stroke-dasharray="4 6"/>
                </svg>
            </div>

        </div>
    </div>

    <div class="rk-proj-cta-section">
        <h3 class="rk-cta-title">Nie trać pieniędzy na wykonawstwo &#8222;z pamięci&#8221;</h3>
        <p class="rk-cta-text">
            Brak rzetelnych wyliczeń OZC powoduje, że <strong>wykonawca układa za mało rur</strong> i dobiera zbyt mocną, prądożerną pompę ciepła. Zamów profesjonalną dokumentację, a zaoszczędzisz na materiałach instalacyjnych i rachunkach przez najbliższe 30 lat.
        </p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-btn-massive">
            ZAMÓW PROFESJONALNY PROJEKT PODŁOGÓWKI
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
        <div style="margin-top: 20px; font-size: 13px; color: #94a3b8; font-weight: 700;">
            Gwarancja optymalizacji hydraulicznej • Pełny bilans cieplny OZC • Indywidualne strefy
        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Domain Check
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const wrap = document.getElementById('rk-proj-app');
        if(wrap) {
            wrap.innerHTML = `<div style="padding:40px; background:#0f172a; color:#ef4444; text-align:center; font-family:sans-serif; border-radius:24px; border:2px solid #ef4444;">
                <div style="font-size: 20px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Zabezpieczenie antykradzieżowe</div>
                <div style="font-size: 14px; color: #cbd5e1;">Skrypt jest przeznaczony wyłącznie dla domeny Projekt-Ogrzewania.pl</div>
            </div>`;
        }
    }
});
</script>



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-panel: #1e293b;
    --rk-cs-primary: #10b981; /* Szmaragd - optymalne zużycie */
    --rk-cs-primary-light: #d1fae5;
    --rk-cs-alert: #f43f5e; /* Czerwień - skoki zużycia */
    --rk-cs-alert-light: #ffe4e6;
    --rk-cs-accent: #0ea5e9; /* Cyjan - mróz/wentylacja */
    --rk-cs-bg: #f8fafc;
    --rk-cs-border: #e2e8f0;
    --rk-cs-text: #334155;
    --rk-cs-muted: #64748b;
}

.rk-cs-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(14, 165, 233, 0.15);
    border: 1px solid rgba(14, 165, 233, 0.3);
    overflow: hidden;
}

/* --- NAGŁÓWEK --- */
.rk-cs-header {
    background: linear-gradient(135deg, var(--rk-cs-dark) 0%, #082f49 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-cs-accent);
}

.rk-cs-header::before {
    content: ''; position: absolute; left: 0; top: 0; width: 100%; height: 100%;
    background: radial-gradient(circle at top right, rgba(14, 165, 233, 0.2), transparent 70%);
    pointer-events: none;
}

.rk-cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #7dd3fc;
    padding: 8px 18px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(125, 211, 252, 0.3);
    position: relative;
    z-index: 2;
}

.rk-cs-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
    position: relative;
    z-index: 2;
}

.rk-cs-title span { color: #38bdf8; }

/* --- TREŚĆ CASE STUDY --- */
.rk-cs-intro {
    padding: 40px 50px;
    background: var(--rk-cs-bg);
    border-bottom: 1px solid var(--rk-cs-border);
}

.rk-cs-story {
    background: #ffffff;
    border-left: 4px solid var(--rk-cs-accent);
    padding: 25px 30px;
    border-radius: 0 16px 16px 0;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-cs-story p {
    margin: 0 0 15px 0;
    font-size: 15px;
    line-height: 1.8;
    color: var(--rk-cs-text);
}

.rk-cs-story p:last-child { margin: 0; }
.rk-cs-story strong { color: var(--rk-cs-dark); font-weight: 900; }

.rk-cs-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 20px;
}

.rk-cs-tag {
    background: var(--rk-cs-bg);
    border: 1px solid var(--rk-cs-border);
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 700;
    color: var(--rk-cs-muted);
    display: flex;
    align-items: center;
    gap: 6px;
}

.rk-cs-tag svg { color: var(--rk-cs-accent); }

/* --- INTERAKTYWNY SYMULATOR --- */
.rk-cs-dashboard {
    padding: 40px 50px;
    background: var(--rk-cs-dark);
    color: #ffffff;
}

.rk-dash-title {
    font-size: 20px;
    font-weight: 900;
    margin: 0 0 30px 0;
    display: flex;
    align-items: center;
    gap: 12px;
    color: #ffffff;
}

.rk-dash-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
}

/* Kontrolki (Suwak temperatury) */
.rk-dash-controls {
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 25px;
    border-radius: 16px;
}

.rk-ctrl-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 20px;
}

.rk-ctrl-label {
    font-size: 13px;
    font-weight: 800;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-ctrl-val {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-cs-accent);
    transition: color 0.3s;
}

.rk-slider {
    -webkit-appearance: none; width: 100%; height: 8px; border-radius: 4px; background: #334155; outline: none; margin-bottom: 15px;
}
.rk-slider::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 28px; height: 28px; border-radius: 50%;
    background: #ffffff; cursor: pointer; border: 5px solid var(--rk-cs-accent); transition: border-color 0.3s, transform 0.2s; box-shadow: 0 0 15px rgba(14, 165, 233, 0.4);
}
.rk-slider::-webkit-slider-thumb:active { transform: scale(1.15); }

/* Kafelki z wynikami */
.rk-dash-stats {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-stat-card {
    background: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 20px;
    border-radius: 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s;
}

.rk-stat-info h5 { margin: 0 0 5px 0; font-size: 14px; font-weight: 800; color: #e2e8f0; }
.rk-stat-info p { margin: 0; font-size: 12px; color: #94a3b8; }

.rk-stat-val { font-size: 24px; font-weight: 900; }
.rk-stat-card.jan .rk-stat-val { color: var(--rk-cs-primary); }
.rk-stat-card.sas .rk-stat-val { color: var(--rk-cs-alert); }

/* Wizualizacja SVG (Wykres słupkowy dynamiczny) */
.rk-dash-visual {
    background: var(--rk-cs-panel);
    border-radius: 16px;
    padding: 30px;
    box-shadow: inset 0 10px 30px rgba(0,0,0,0.5);
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    position: relative;
    border: 1px solid #334155;
}

.rk-vis-title {
    position: absolute; top: 20px; left: 0; width: 100%; text-align: center;
    font-size: 11px; font-weight: 800; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px;
}

.rk-svg-chart { width: 100%; height: 160px; overflow: visible; margin-top: 30px; }

.svg-bar-bg { fill: rgba(255,255,255,0.03); rx: 6; }
.svg-bar-fg { transition: height 0.4s cubic-bezier(0.4, 0, 0.2, 1), y 0.4s cubic-bezier(0.4, 0, 0.2, 1); rx: 6; }
.svg-bar-jan { fill: var(--rk-cs-primary); }
.svg-bar-sas { fill: var(--rk-cs-alert); }

/* Animacje pogodowe (Śnieżynki/Słońce dodawane przez JS) */
.anim-snow { animation: fallSnow 3s linear infinite; opacity: 0; transition: opacity 0.5s; fill: #e0f2fe; }
@keyframes fallSnow { 0% { transform: translateY(-10px); opacity: 0; } 50% { opacity: 0.5; } 100% { transform: translateY(40px); opacity: 0; } }

.anim-heat-wave { stroke-dasharray: 4 8; animation: heatRise 1.5s linear infinite; }
@keyframes heatRise { to { stroke-dashoffset: -24; } }

@media (max-width: 768px) {
    .rk-cs-header, .rk-cs-intro, .rk-cs-dashboard { padding: 30px 20px; }
    .rk-cs-title { font-size: 24px; }
    .rk-cs-story { padding: 20px; }
    .rk-dash-grid { grid-template-columns: 1fr; gap: 30px; }
    .rk-svg-chart { height: 140px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Case Study: Ogrzewanie podłogowe i rekuperacja w praktyce (-18°C)",
    "description": "Analiza rzeczywistego zużycia energii domu 142m2 z rekuperacją podczas fali mrozów. Stabilne 1.1 kW vs skoki w tradycyjnych budynkach.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-casestudy",
    "name": "Case Study: Zużycie energii przy -18°C (Kielce)",
    "description": "Porównanie poboru mocy elektrycznej pompy ciepła w budynku z rekuperacją vs wentylacja grawitacyjna.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zużycie prądu pompa ciepła",
      "rekuperacja oszczędności zima",
      "stabilna moc elektryczna",
      "case study WT2021",
      "spadek zapotrzebowania na moc"
    ],
    "measurementTechnique": "Odczyt poboru mocy elektrycznej ze sterownika pompy ciepła w skrajnych warunkach zimowych dla budynku 142m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Lokalizacja: Kielce, Powierzchnia: 142 m2, Standard: WT2021.",
        "System: Pompa ciepła powietrze-woda + Ogrzewanie podłogowe + Rekuperacja.",
        "Wynik w mrozie -18°C: Pobór stabilny 1,1 kW.",
        "Redukcja zapotrzebowania na moc cieplną: 30-45% względem wentylacji grawitacyjnej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-casestudy",
    "name": "Symulator Ekstremów Zimowych",
    "description": "Interaktywny panel ilustrujący zachowanie i skoki poboru mocy systemów grzewczych w zależności od temperatury zewnętrznej.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-cs-container" id="rk-cs-app">
    
    <div class="rk-cs-header">
        <div class="rk-cs-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            Case Study: Analiza z placu budowy
        </div>
        <h2 class="rk-cs-title">Rekuperacja i ogrzewanie podłogowe <span>– czy to się opłaca?</span></h2>
    </div>

    <div class="rk-cs-intro">
        <div class="rk-cs-story">
            <p>
                <strong>W lutym 2026 roku</strong>, podczas fali mrozów dochodzących do <strong>-18°C</strong>, uruchamialiśmy instalację w domu Pana Jana koło Kielc. Podczas gdy sąsiednie budynki z tradycyjną wentylacją grawitacyjną notowały gwałtowne skoki zużycia energii (chłodzenie przez nawiewniki), ten obiekt zużywał <strong>stabilne 1,1 kW mocy elektrycznej</strong>.
            </p>
            <p>
                Kluczem do tego sukcesu była zsynchronizowana rekuperacja i ogrzewanie podłogowe. System mechanicznej wentylacji nawiewno-wywiewnej z odzyskiem ciepła współpracował tu bezpośrednio z niskotemperaturowym systemem płaszczyznowym. To połączenie fizycznie <strong>redukuje zapotrzebowanie na moc cieplną budynku o 30-45%</strong> i pozwala pompie ciepła osiągnąć najwyższą możliwą sprawność bez efektu niszczącego taktowania.
            </p>
            <div class="rk-cs-tags">
                <div class="rk-cs-tag"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg> Dom: 142 m² (WT2021)</div>
                <div class="rk-cs-tag"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><path d="M12 8v4l3 3"></path></svg> Źródło: Pompa Ciepła Powietrze-Woda</div>
                <div class="rk-cs-tag"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg> Oszczędność: 30-45%</div>
            </div>
        </div>
    </div>

    <div class="rk-cs-dashboard">
        <h3 class="rk-dash-title">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Symulator Ekstremów Zimowych
        </h3>

        <div class="rk-dash-grid">
            
            <div class="rk-cs-panel-left">
                <div class="rk-dash-controls">
                    <div class="rk-ctrl-header">
                        <span class="rk-ctrl-label">Temperatura zewnętrzna</span>
                        <span class="rk-ctrl-val" id="rkCsTempVal">-18°C</span>
                    </div>
                    <input type="range" id="rkCsTempSlider" class="rk-slider" min="-20" max="10" step="1" value="-18">
                    
                    <div style="font-size:11px; color:#64748b; line-height:1.5;">
                        Zasymuluj uderzenie mrozu. Zobacz, jak brak odzysku ciepła dewastuje pobór prądu przez wychładzanie jastrychu wentylacją grawitacyjną.
                    </div>
                </div>

                <div class="rk-dash-stats" style="margin-top: 20px;">
                    <div class="rk-stat-card jan">
                        <div class="rk-stat-info">
                            <h5>Dom Pana Jana (Rekuperacja)</h5>
                            <p>Zintegrowane systemy, odzysk ciepła</p>
                        </div>
                        <div class="rk-stat-val" id="rkCsValJan">1.1 kW</div>
                    </div>
                    <div class="rk-stat-card sas">
                        <div class="rk-stat-info">
                            <h5>Sąsiedzi (Grawitacja)</h5>
                            <p>Skoki mocy, uderzenia mrozu</p>
                        </div>
                        <div class="rk-stat-val" id="rkCsValSas">3.8 kW</div>
                    </div>
                </div>
            </div>

            <div class="rk-dash-visual">
                <div class="rk-vis-title">Pobór Mocy Elektrycznej (kW)</div>
                
                <svg class="rk-svg-chart" viewBox="0 0 200 160">
                    <rect class="svg-bar-bg" x="30" y="0" width="50" height="160" />
                    <rect class="svg-bar-bg" x="120" y="0" width="50" height="160" />
                    
                    <line x1="10" y1="159" x2="190" y2="159" stroke="#475569" stroke-width="2"/>

                    <rect class="svg-bar-fg svg-bar-jan" id="svgBarJan" x="30" y="110" width="50" height="50" />
                    <rect class="svg-bar-fg svg-bar-sas" id="svgBarSas" x="120" y="20" width="50" height="140" />
                    
                    <text x="55" y="150" fill="#ffffff" font-size="10" font-weight="bold" text-anchor="middle" id="svgTxtJan">1.1 kW</text>
                    <text x="145" y="150" fill="#ffffff" font-size="10" font-weight="bold" text-anchor="middle" id="svgTxtSas">3.8 kW</text>
                    
                    <g id="svgSnowGroup">
                        </g>
                </svg>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie zrealizowane przez style inline, bez nagłówków H2/H3
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const wrap = document.getElementById('rk-cs-app');
        if(wrap) {
            wrap.innerHTML = `<div style="padding:40px; background:#0f172a; color:#ef4444; text-align:center; font-family:sans-serif; border-radius:24px; border:2px solid #ef4444;">
                <div style="font-size:18px; font-weight:900; text-transform:uppercase; margin-bottom:10px;">Brak autoryzacji</div>
                <div style="font-size:14px; color:#cbd5e1;">Zasób interaktywny przeznaczony wyłącznie dla domeny Projekt-Ogrzewania.pl</div>
            </div>`;
            return;
        }
    }

    // Logika symulatora
    const slider = document.getElementById('rkCsTempSlider');
    const tempVal = document.getElementById('rkCsTempVal');
    
    const valJan = document.getElementById('rkCsValJan');
    const valSas = document.getElementById('rkCsValSas');
    
    const barJan = document.getElementById('svgBarJan');
    const barSas = document.getElementById('svgBarSas');
    
    const txtJan = document.getElementById('svgTxtJan');
    const txtSas = document.getElementById('svgTxtSas');
    
    const snowGroup = document.getElementById('svgSnowGroup');

    // Generowanie płatków śniegu w tle dla mrozów
    for(let i=0; i<8; i++) {
        let circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        circle.setAttribute("cx", Math.random() * 200);
        circle.setAttribute("cy", Math.random() * 50);
        circle.setAttribute("r", Math.random() * 2 + 1);
        circle.classList.add("anim-snow");
        circle.style.animationDelay = (Math.random() * 2) + "s";
        snowGroup.appendChild(circle);
    }

    function calculatePower() {
        const temp = parseInt(slider.value);
        tempVal.textContent = temp > 0 ? `+${temp}°C` : `${temp}°C`;

        // Kolorowanie suwaka zaleznie od temperatury
        if(temp < 0) {
            slider.style.setProperty('--rk-cs-accent', '#0ea5e9'); // Mróz (niebieski)
            tempVal.style.color = '#0ea5e9';
            snowGroup.style.display = 'block';
        } else {
            slider.style.setProperty('--rk-cs-accent', '#f97316'); // Ciepło (pomarańcz)
            tempVal.style.color = '#f97316';
            snowGroup.style.display = 'none';
        }

        // Uproszczony model matematyczny zużycia mocy kW
        // Pan Jan (Reku): stabilny wzrost. +10C = 0.3 kW, -18C = 1.1 kW. Liniowo.
        // Zakres temp: 30 stopni (od +10 do -20)
        let ratio = (10 - temp) / 30; // 0 przy +10, 1 przy -20
        
        let powerJan = 0.3 + (ratio * 0.9); // max ok 1.2 kW przy -20
        
        // Sąsiad (Grawitacja): wykładniczy wzrost z powodu wychładzania nawiewnikami i spadku COP
        // +10C = 0.5 kW, -18C = 3.8 kW. 
        let powerSas = 0.5 + (Math.pow(ratio, 1.5) * 3.8); // nieliniowy skok

        // Render tekstów
        let pJ = powerJan.toFixed(1);
        let pS = powerSas.toFixed(1);
        
        valJan.textContent = pJ + ' kW';
        valSas.textContent = pS + ' kW';
        
        txtJan.textContent = pJ + ' kW';
        txtSas.textContent = pS + ' kW';

        // Render słupków (Max height SVG = 160)
        // Maksymalna symulowana moc to ok 4.5 kW. Skalujemy względem 5 kW = 150px wys.
        const maxKw = 5;
        const maxHeight = 140; // max px

        let hJan = (powerJan / maxKw) * maxHeight;
        let hSas = (powerSas / maxKw) * maxHeight;

        // Ustawianie atrybutów (y = dno(159) - wysokosc)
        if(barJan) {
            barJan.setAttribute('height', hJan);
            barJan.setAttribute('y', 159 - hJan);
        }
        if(barSas) {
            barSas.setAttribute('height', hSas);
            barSas.setAttribute('y', 159 - hSas);
        }
    }

    if(slider) {
        slider.addEventListener('input', calculatePower);
        calculatePower(); // Init
    }
});
</script>



<style>
:root {
    --rk-qa-dark: #0f172a;
    --rk-qa-card: #1e293b;
    --rk-qa-teal: #0d9488; /* Główny techniczny morski */
    --rk-qa-teal-light: #ccfbf1;
    --rk-qa-accent: #f59e0b; /* Bursztyn dla ciepła */
    --rk-qa-blue: #3b82f6; /* Niebieski dla zimnego powietrza */
    --rk-qa-bg: #f8fafc;
    --rk-qa-border: #e2e8f0;
    --rk-qa-text: #334155;
    --rk-qa-muted: #64748b;
}

.rk-qa-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, system-ui, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(13, 148, 136, 0.15);
    border: 1px solid rgba(13, 148, 136, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-qa-header {
    background: linear-gradient(135deg, var(--rk-qa-dark) 0%, #134e4a 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-qa-teal);
}

.rk-qa-header::after {
    content: '';
    position: absolute;
    right: 0;
    top: 0;
    width: 300px;
    height: 100%;
    background: radial-gradient(circle at right, rgba(20, 184, 166, 0.15) 0%, transparent 70%);
    pointer-events: none;
}

.rk-qa-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(20, 184, 166, 0.2);
    color: #5eead4;
    padding: 8px 18px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(94, 234, 212, 0.3);
}

.rk-qa-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
    position: relative;
    z-index: 2;
}

.rk-qa-title span { color: #2dd4bf; }

/* Interaktywny Akordeon */
.rk-qa-interactive {
    padding: 40px 50px;
    background: var(--rk-qa-bg);
}

.rk-qa-list {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.rk-qa-item {
    background: #ffffff;
    border: 1px solid var(--rk-qa-border);
    border-radius: 16px;
    overflow: hidden;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-qa-item:hover {
    border-color: rgba(13, 148, 136, 0.4);
}

.rk-qa-item.active {
    border-color: var(--rk-qa-teal);
    box-shadow: 0 10px 25px -5px rgba(13, 148, 136, 0.15);
}

/* Przycisk Pytania */
.rk-qa-question {
    width: 100%;
    text-align: left;
    background: transparent;
    border: none;
    padding: 22px 25px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    cursor: pointer;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-qa-dark);
    transition: background 0.3s, color 0.3s;
}

.rk-qa-question:hover {
    background: var(--rk-qa-teal-light);
}

.rk-qa-item.active .rk-qa-question {
    background: var(--rk-qa-teal);
    color: #ffffff;
}

.rk-qa-icon {
    flex-shrink: 0;
    width: 34px;
    height: 34px;
    border-radius: 10px;
    background: var(--rk-qa-teal-light);
    color: var(--rk-qa-teal);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-qa-item.active .rk-qa-icon {
    background: rgba(255,255,255,0.2);
    color: #ffffff;
    transform: rotate(180deg);
}

/* Kontener Odpowiedzi */
.rk-qa-answer-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-qa-item.active .rk-qa-answer-wrapper {
    grid-template-rows: 1fr;
}

.rk-qa-answer-inner {
    overflow: hidden;
}

/* Wnętrze Odpowiedzi (Grid: Tekst + SVG) */
.rk-qa-content {
    padding: 25px;
    border-top: 1px solid var(--rk-qa-border);
    display: grid;
    grid-template-columns: 1fr 220px;
    gap: 35px;
    align-items: center;
}

.rk-qa-text {
    font-size: 15px;
    line-height: 1.8;
    color: var(--rk-qa-text);
}

.rk-qa-text strong {
    font-weight: 800;
    color: var(--rk-qa-dark);
}

.rk-link {
    color: var(--rk-qa-teal);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px dashed rgba(13, 148, 136, 0.4);
    transition: all 0.3s;
}

.rk-link:hover {
    color: #0f766e;
    border-bottom-style: solid;
}

/* Wizualizacje SVG */
.rk-qa-visual {
    background: var(--rk-qa-dark);
    border-radius: 14px;
    padding: 15px;
    height: 150px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    border: 2px solid #1e293b;
    position: relative;
    overflow: hidden;
}

.rk-svg-box {
    width: 100%;
    height: 100%;
}

/* Animacje SVG zależne od .active w rodzicu */

/* 1. Odzysk a Produkcja (Rekuperator vs Rury) */
.anim-recup-wheel { transform-origin: 50px 30px; transition: transform 2s ease-out; }
.rk-qa-item.active .anim-recup-wheel { animation: spinRecup 4s linear infinite; }
@keyframes spinRecup { to { transform: rotate(360deg); } }

.anim-heat-wave { stroke-dasharray: 4 8; animation: radiateUp 1.5s linear infinite; opacity: 0; }
.rk-qa-item.active .anim-heat-wave { opacity: 1; stroke: var(--rk-qa-accent); }
@keyframes radiateUp { to { stroke-dashoffset: -24; } }

/* 2. Otwieranie Okien (Straty) */
.anim-window-open { transform-origin: right; transition: transform 0.6s 0.2s cubic-bezier(0.34, 1.56, 0.64, 1); }
.rk-qa-item.active .anim-window-open { transform: skewY(-15deg) scaleX(0.8); }

.anim-cold-in { opacity: 0; transform: translateX(-10px); transition: all 0.4s 0.6s; }
.rk-qa-item.active .anim-cold-in { opacity: 1; transform: translateX(0); animation: slideCold 1.5s infinite; }
@keyframes slideCold { 0% { transform: translateX(-5px); opacity: 0.5; } 50% { opacity: 1; } 100% { transform: translateX(15px); opacity: 0; } }

.anim-heat-out { opacity: 0; transform: translateX(10px); transition: all 0.4s 0.6s; }
.rk-qa-item.active .anim-heat-out { opacity: 1; transform: translateX(0); animation: slideHeat 1.5s infinite reverse; }
@keyframes slideHeat { 0% { transform: translateX(-15px); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateX(5px); opacity: 0.5; } }

/* 3. Wylewka (Transfer Ciepła) */
.anim-screed-fill { transform: scaleY(0); transform-origin: bottom; transition: transform 0.8s 0.3s cubic-bezier(0.4, 0, 0.2, 1); }
.rk-qa-item.active .anim-screed-fill { transform: scaleY(1); }

.anim-fast-arrows { opacity: 0; transition: opacity 0.3s 1s; }
.rk-qa-item.active .anim-fast-arrows { opacity: 1; animation: shootUp 1s ease-out infinite; }
@keyframes shootUp { 0% { transform: translateY(5px); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateY(-10px); opacity: 0; } }

@media (max-width: 768px) {
    .rk-qa-header, .rk-qa-interactive { padding: 30px 20px; }
    .rk-qa-title { font-size: 24px; }
    .rk-qa-content { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-qa-visual { height: 130px; max-width: 280px; margin: 0 auto; width: 100%; }
    .rk-qa-question { font-size: 14px; padding: 18px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "FAQ – Najczęściej zadawane pytania o symbiozę rekuperacji i podłogówki",
    "description": "Eksperckie odpowiedzi na pytania dotyczące otwierania okien, wydajności rekuperacji i wyboru wylewki przy ogrzewaniu podłogowym.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#faqpage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy rekuperacja ogrzewa dom samodzielnie bez pracy ogrzewania podłogowego?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, rekuperacja nie jest systemem grzewczym, lecz wentylacyjnym; jej zadaniem jest odzyskiwanie ciepła już wytworzonego, a nie jego produkcja. Urządzenie jedynie przekazuje energię z powietrza wywiewanego do nawiewanego, zmniejszając obciążenie wodnego ogrzewania podłogowego."
        }
      },
      {
        "@type": "Question",
        "name": "Czy przy ogrzewaniu podłogowym i rekuperacji można otwierać okna w domu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak, otwieranie okien jest fizycznie możliwe i bezpieczne dla systemu, jednak w sezonie grzewczym jest całkowicie nieuzasadnione ekonomicznie. Otwarcie okien generuje nagłe straty ciepła i wprowadza nieprzefiltrowane powietrze, co neguje oszczędności generowane przez rekuperator."
        }
      },
      {
        "@type": "Question",
        "name": "Jaką wylewkę wybrać na ogrzewanie podłogowe współpracujące z rekuperacją?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Najlepszym wyborem jest płynna wylewka anhydrytowa, która charakteryzuje się wysokim współczynnikiem przewodzenia ciepła (λ ≈ 1,6 - 1,8 W/(m·K)) oraz mniejszą grubością nad rurkami (min. 35 mm). Zapewnia to szybszy transfer ciepła i lepszą dynamikę sterowania w porównaniu do tradycyjnej wylewki cementowej."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-faq",
    "name": "Parametry i zasady pracy: Rekuperacja + Ogrzewanie Podłogowe",
    "description": "Zbiór danych określających zasady współpracy wentylacji mechanicznej z jastrychami grzewczymi oraz wpływ wietrzenia na bilans energetyczny.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "czy rekuperacja grzeje dom",
      "otwieranie okien przy rekuperacji",
      "wylewka anhydrytowa czy betonowa",
      "współczynnik przewodzenia ciepła jastrychu",
      "odzysk ciepła z wentylacji"
    ],
    "measurementTechnique": "Określenie wpływu rekuperacji na obciążenie cieplne oraz porównanie przewodności cieplnej λ jastrychów (1,6 - 1,8 W/mK dla anhydrytu).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rekuperacja obniża moc systemu grzewczego, ale go nie zastępuje.",
        "Otwieranie okien zimą niszczy bilans odzysku energii.",
        "Anhydryt minimalizuje bezwładność cieplną, przyspieszając reakcję układu."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-faq",
    "name": "Interaktywny Asystent Wiedzy HVAC",
    "description": "Aplikacja w formie interaktywnego akordeonu z animacjami SVG ułatwiającymi zrozumienie procesów odzysku ciepła i wymiany termicznej.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-qa-container" id="rk-qa-app">
    <div class="rk-qa-header">
        <div class="rk-qa-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
            Baza Wiedzy Inwestora
        </div>
        <h2 class="rk-qa-title">FAQ – <span>Najczęściej zadawane pytania</span></h2>
    </div>

    <div class="rk-qa-interactive">
        <div class="rk-qa-list">
            
            <div class="rk-qa-item active">
                <button class="rk-qa-question">
                    <span>Czy rekuperacja ogrzewa dom samodzielnie bez pracy ogrzewania podłogowego?</span>
                    <div class="rk-qa-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                <strong>Nie, rekuperacja nie jest systemem grzewczym</strong>, lecz wentylacyjnym; jej zadaniem jest odzyskiwanie ciepła już wytworzonego, a nie jego produkcja. Urządzenie jedynie przekazuje energię z powietrza wywiewanego do nawiewanego, zmniejszając drastycznie obciążenie <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/" class="rk-link">wodnego ogrzewania podłogowego</a>, ale go nie zastępuje.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="35" y="10" width="30" height="30" fill="none" stroke="#64748b" stroke-width="2" rx="4"/>
                                    <path d="M 20 20 L 40 20 M 60 20 L 80 20" stroke="#3b82f6" stroke-width="2" stroke-dasharray="2 2"/>
                                    <path d="M 20 30 L 40 30 M 60 30 L 80 30" stroke="#f59e0b" stroke-width="2" stroke-dasharray="2 2"/>
                                    <circle class="anim-recup-wheel" cx="50" cy="25" r="8" fill="none" stroke="#2dd4bf" stroke-width="2" stroke-dasharray="6 4"/>
                                    
                                    <path d="M 10 60 L 90 60" fill="none" stroke="#f59e0b" stroke-width="4" stroke-linecap="round"/>
                                    <path class="anim-heat-wave" d="M 20 60 L 20 40 M 50 60 L 50 40 M 80 60 L 80 40" fill="none" stroke-width="2" stroke-linecap="round"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-qa-item">
                <button class="rk-qa-question">
                    <span>Czy przy ogrzewaniu podłogowym i rekuperacji można otwierać okna w domu?</span>
                    <div class="rk-qa-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                Tak, otwieranie okien jest fizycznie możliwe i bezpieczne dla systemu, jednak <strong>w sezonie grzewczym jest całkowicie nieuzasadnione ekonomicznie</strong>. Otwarcie okien generuje nagłe straty energii cieplnej zgromadzonej w pomieszczeniu i wprowadza z zewnątrz nieprzefiltrowane, brudne powietrze, co całkowicie neguje matematyczne oszczędności generowane przez wymiennik rekuperatora.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <path d="M 45 10 L 45 60" stroke="#64748b" stroke-width="4"/>
                                    <rect x="40" y="20" width="10" height="30" fill="#1e293b" stroke="#334155" stroke-width="2"/>
                                    <rect class="anim-window-open" x="45" y="20" width="20" height="30" fill="none" stroke="#2dd4bf" stroke-width="2"/>
                                    
                                    <path class="anim-cold-in" d="M 70 30 L 40 30 L 35 25" fill="none" stroke="#3b82f6" stroke-width="2" stroke-linecap="round"/>
                                    <path class="anim-heat-out" d="M 30 40 L 50 40 L 55 45" fill="none" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-qa-item">
                <button class="rk-qa-question">
                    <span>Jaką wylewkę wybrać na ogrzewanie podłogowe współpracujące z rekuperacją?</span>
                    <div class="rk-qa-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                Najlepszym inżynierskim wyborem jest płynna <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/" class="rk-link">wylewka anhydrytowa</a>. Charakteryzuje się ona bardzo wysokim współczynnikiem przewodzenia ciepła <strong>(λ ≈ 1,6 - 1,8 W/(m·K))</strong> oraz pozwala na zastosowanie mniejszej grubości nad rurkami (minimum 35 mm). Zapewnia to błyskawiczny transfer ciepła do otoczenia i zdecydowanie lepszą dynamikę sterowania w porównaniu do tradycyjnej, grubej wylewki cementowej.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="10" y="55" width="80" height="10" fill="#334155"/>
                                    <circle cx="30" cy="50" r="5" fill="#f59e0b"/>
                                    <circle cx="50" cy="50" r="5" fill="#f59e0b"/>
                                    <circle cx="70" cy="50" r="5" fill="#f59e0b"/>
                                    <rect class="anim-screed-fill" x="10" y="30" width="80" height="25" fill="#0d9488" opacity="0.7"/>
                                    <g class="anim-fast-arrows">
                                        <path d="M 30 25 L 30 15 M 27 18 L 30 15 L 33 18" fill="none" stroke="#2dd4bf" stroke-width="2"/>
                                        <path d="M 50 25 L 50 15 M 47 18 L 50 15 L 53 18" fill="none" stroke="#2dd4bf" stroke-width="2"/>
                                        <path d="M 70 25 L 70 15 M 67 18 L 70 15 L 73 18" fill="none" stroke="#2dd4bf" stroke-width="2"/>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Domain Check z blokadą kradzieży (bez H2/H3)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const wrap = document.getElementById('rk-qa-app');
        if(wrap) {
            wrap.innerHTML = `<div style="padding:40px; background:#0f172a; color:#ef4444; text-align:center; font-family:sans-serif; border-radius:24px; border:2px solid #ef4444;">
                <div style="font-size: 20px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie licencji i praw autorskich</div>
                <div style="font-size: 14px; color: #cbd5e1;">Skrypt i struktura danych JSON-LD są przeznaczone wyłącznie dla domeny Projekt-Ogrzewania.pl</div>
            </div>`;
            return;
        }
    }

    // Akordeon Logic
    const qaItems = document.querySelectorAll('.rk-qa-item');

    qaItems.forEach(item => {
        const btn = item.querySelector('.rk-qa-question');
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Zamknij wszystkie
            qaItems.forEach(i => i.classList.remove('active'));
            
            // Otwórz kliknięty, jeśli był zamknięty
            if (!isActive) {
                item.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --rk-exp-dark: #0f172a;
    --rk-exp-panel: #1e293b;
    --rk-exp-heat: #f97316; /* Orange for heating */
    --rk-exp-air: #0ea5e9;  /* Cyan/Blue for air/recuperation */
    --rk-exp-air-light: #e0f2fe;
    --rk-exp-heat-light: #ffedd5;
    --rk-exp-bg: #ffffff;
    --rk-exp-border: #e2e8f0;
    --rk-exp-text: #334155;
    --rk-exp-text-dim: #64748b;
}

.rk-expert-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--rk-exp-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.15);
    border: 1px solid var(--rk-exp-border);
    overflow: hidden;
}

/* Header */
.rk-expert-header {
    background: linear-gradient(135deg, var(--rk-exp-dark) 0%, #0f172a 100%);
    padding: 45px 50px;
    display: flex;
    align-items: center;
    gap: 30px;
    position: relative;
    overflow: hidden;
    border-bottom: 4px solid var(--rk-exp-air);
}

.rk-expert-header::before {
    content: ''; position: absolute; right: 0; top: 0; width: 50%; height: 100%;
    background: radial-gradient(circle at top right, rgba(14, 165, 233, 0.15), transparent 70%);
}

.rk-expert-header::after {
    content: ''; position: absolute; left: 0; bottom: 0; width: 50%; height: 100%;
    background: radial-gradient(circle at bottom left, rgba(249, 115, 22, 0.15), transparent 70%);
}

.rk-exp-avatar {
    width: 100px;
    height: 100px;
    border-radius: 50%;
    border: 3px solid var(--rk-exp-air);
    box-shadow: 0 0 25px rgba(14, 165, 233, 0.4);
    object-fit: cover;
    position: relative;
    z-index: 2;
}

.rk-exp-hcontent {
    position: relative;
    z-index: 2;
}

.rk-exp-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 12px;
    border: 1px solid rgba(56, 189, 248, 0.3);
}

.rk-exp-hcontent h2 {
    font-size: 28px;
    font-weight: 900;
    color: #ffffff;
    margin: 0 0 10px 0;
    line-height: 1.2;
}

.rk-exp-hcontent p {
    color: #cbd5e1;
    font-size: 15px;
    margin: 0;
    font-weight: 400;
    line-height: 1.6;
}

/* Tabs & Details Body */
.rk-exp-body {
    display: grid;
    grid-template-columns: 1fr 1.2fr;
    background: var(--rk-exp-bg);
}

.rk-exp-tabs {
    padding: 35px;
    border-right: 1px solid var(--rk-exp-border);
    display: flex;
    flex-direction: column;
    gap: 12px;
    background: #f8fafc;
}

.rk-exp-tab-btn {
    background: #ffffff;
    border: 1px solid var(--rk-exp-border);
    padding: 20px;
    border-radius: 16px;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: flex-start;
    gap: 15px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.02);
}

.rk-exp-tab-btn:hover {
    border-color: var(--rk-exp-air);
    transform: translateX(5px);
}

.rk-exp-tab-btn.active {
    background: var(--rk-exp-air-light);
    border-color: var(--rk-exp-air);
    box-shadow: inset 5px 0 0 var(--rk-exp-air);
}

.rk-exp-icon {
    width: 36px; height: 36px;
    background: #f1f5f9;
    border-radius: 10px;
    display: flex; align-items: center; justify-content: center;
    color: var(--rk-exp-text-dim);
    flex-shrink: 0;
    transition: 0.3s;
}

.rk-exp-tab-btn.active .rk-exp-icon {
    background: var(--rk-exp-air);
    color: #ffffff;
}

.rk-exp-tab-btn[data-target="rk-exp-p2"].active { background: var(--rk-exp-heat-light); border-color: var(--rk-exp-heat); box-shadow: inset 5px 0 0 var(--rk-exp-heat); }
.rk-exp-tab-btn[data-target="rk-exp-p2"].active .rk-exp-icon { background: var(--rk-exp-heat); }

.rk-exp-tab-text h3 { margin: 0 0 6px 0; font-size: 16px; font-weight: 800; color: var(--rk-exp-dark); }
.rk-exp-tab-text p { margin: 0; font-size: 13px; color: var(--rk-exp-text-dim); line-height: 1.5; }

/* SEO Long Tail Box */
.rk-exp-seo-box {
    margin-top: 15px;
    padding: 15px;
    background: rgba(14, 165, 233, 0.03);
    border: 1px dashed rgba(14, 165, 233, 0.3);
    border-radius: 12px;
    text-align: center;
    text-decoration: none;
    display: block;
    transition: all 0.3s ease;
}

.rk-exp-seo-box:hover {
    background: rgba(14, 165, 233, 0.08);
    border-color: rgba(14, 165, 233, 0.6);
    transform: translateY(-2px);
}

.rk-exp-seo-box .seo-label {
    display: block;
    font-size: 10px;
    color: var(--rk-exp-text-dim);
    text-transform: uppercase;
    font-weight: 800;
    letter-spacing: 1px;
    margin-bottom: 5px;
}

.rk-exp-seo-box .seo-phrase {
    display: block;
    font-size: 13px;
    color: var(--rk-exp-dark);
    font-weight: 700;
    line-height: 1.4;
    transition: color 0.3s;
}

.rk-exp-seo-box:hover .seo-phrase {
    color: var(--rk-exp-air);
}

/* Panels */
.rk-exp-details {
    padding: 40px;
    position: relative;
    overflow: hidden;
}

.rk-exp-panel {
    display: none;
}

.rk-exp-panel.active {
    display: flex !important;
    flex-direction: column;
    gap: 25px;
    animation: rkSlideFadeIn 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

@keyframes rkSlideFadeIn {
    from { opacity: 0; transform: translateY(15px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-exp-panel h4 { margin: 0; font-size: 22px; font-weight: 900; color: var(--rk-exp-dark); }
.rk-exp-panel p { margin: 0; font-size: 15px; line-height: 1.7; color: var(--rk-exp-text); }
.rk-exp-link { color: var(--rk-exp-air); font-weight: 800; text-decoration: none; border-bottom: 2px solid transparent; transition: 0.3s; }
.rk-exp-link:hover { border-bottom-color: var(--rk-exp-air); }

.rk-exp-svg-box {
    width: 100%;
    height: 180px;
    background: var(--rk-exp-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    box-shadow: inset 0 10px 30px rgba(0,0,0,0.5);
}

/* Calculator Section */
.rk-exp-calc {
    background: var(--rk-exp-panel);
    padding: 40px 50px;
    border-top: 1px solid #334155;
    color: #ffffff;
}

.rk-calc-top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 30px;
}

.rk-calc-top h4 {
    margin: 0; font-size: 20px; font-weight: 900; color: #ffffff;
    display: flex; align-items: center; gap: 12px;
}

.rk-calc-layout {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 40px;
    align-items: center;
}

.rk-calc-slider-box {
    display: flex;
    flex-direction: column;
    gap: 20px;
    background: rgba(255,255,255,0.03);
    padding: 25px;
    border-radius: 16px;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-calc-label { font-size: 14px; font-weight: 700; color: #94a3b8; display: flex; justify-content: space-between; align-items: center; }
.rk-calc-label span { color: var(--rk-exp-air); font-size: 24px; font-weight: 900; }

.rk-slider {
    -webkit-appearance: none; width: 100%; height: 8px; border-radius: 4px; background: #334155; outline: none;
}
.rk-slider::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 26px; height: 26px; border-radius: 50%;
    background: var(--rk-exp-air); cursor: pointer; border: 4px solid #ffffff; transition: 0.2s; box-shadow: 0 0 10px rgba(14, 165, 233, 0.5);
}
.rk-slider::-webkit-slider-thumb:active { transform: scale(1.2); }

.rk-calc-outputs {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

.rk-out-card {
    background: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 20px 15px;
    border-radius: 16px;
    text-align: center;
    transition: 0.3s;
}

.rk-out-card:hover { transform: translateY(-5px); background: rgba(255,255,255,0.08); }
.rk-out-card.highlight { border-color: var(--rk-exp-air); background: rgba(14, 165, 233, 0.1); }
.rk-out-card.highlight-heat { border-color: var(--rk-exp-heat); background: rgba(249, 115, 22, 0.1); }

.rk-out-val { display: block; font-size: 26px; font-weight: 900; color: #ffffff; margin-bottom: 8px; }
.rk-out-card.highlight .rk-out-val { color: var(--rk-exp-air); }
.rk-out-card.highlight-heat .rk-out-val { color: var(--rk-exp-heat); }
.rk-out-lab { display: block; font-size: 12px; color: #94a3b8; text-transform: uppercase; font-weight: 800; line-height: 1.4; }

/* Author & CTA */
.rk-exp-footer {
    background: #f8fafc;
    padding: 40px 50px;
    display: flex;
    align-items: center;
    gap: 30px;
    border-top: 1px solid var(--rk-exp-border);
}

.rk-author-block { flex-grow: 1; }
.rk-author-block h4 { margin: 0 0 8px 0; font-size: 18px; font-weight: 900; color: var(--rk-exp-dark); }
.rk-author-block p { margin: 0; font-size: 14px; color: var(--rk-exp-text); line-height: 1.6; }

.rk-socials { display: flex; gap: 15px; margin-top: 15px; }
.rk-socials a { color: var(--rk-exp-air); font-size: 14px; font-weight: 800; text-decoration: none; display: inline-flex; align-items: center; gap: 6px; transition: 0.2s; }
.rk-socials a:hover { color: #0284c7; }

.rk-cta-btn {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    background: var(--rk-exp-heat);
    color: #ffffff;
    padding: 16px 32px;
    border-radius: 12px;
    font-size: 16px;
    font-weight: 800;
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    box-shadow: 0 10px 20px -5px rgba(249, 115, 22, 0.4);
    transition: all 0.3s;
    white-space: nowrap;
}

.rk-cta-btn:hover { background: #ea580c; transform: translateY(-3px); box-shadow: 0 15px 25px -5px rgba(249, 115, 22, 0.5); }

/* SVG Animations */
.anim-air-flow { stroke-dasharray: 15; animation: dashAir 2s linear infinite; }
@keyframes dashAir { to { stroke-dashoffset: -30; } }

.anim-heat-radiate { transform-origin: center; animation: pulseHeat 2s infinite alternate; }
@keyframes pulseHeat { from { transform: scale(0.95); opacity: 0.7; } to { transform: scale(1.05); opacity: 1; } }

.anim-gear-spin { transform-origin: center; animation: spinGear 6s linear infinite; }
@keyframes spinGear { to { transform: rotate(360deg); } }

@media (max-width: 768px) {
    .rk-expert-header { flex-direction: column; text-align: center; padding: 40px 20px; }
    .rk-exp-body { grid-template-columns: 1fr; }
    .rk-exp-tabs { border-right: none; border-bottom: 1px solid var(--rk-exp-border); padding: 25px 20px; }
    .rk-exp-details { padding: 30px 20px; }
    .rk-calc-layout { grid-template-columns: 1fr; gap: 25px; }
    .rk-exp-calc { padding: 35px 20px; }
    .rk-calc-outputs { grid-template-columns: 1fr; }
    .rk-exp-footer { flex-direction: column; text-align: center; padding: 35px 20px; }
    .rk-socials { justify-content: center; }
    .rk-cta-btn { width: 100%; justify-content: center; }
}
</style>

<!-- JSON-LD Invisible Data -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-expert-summary",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Podsumowanie eksperta: Synergia rekuperacji i ogrzewania podłogowego",
    "description": "Interaktywne podsumowanie i estymator korzyści z połączenia wentylacji mechanicznej z niskotemperaturowym systemem grzewczym. Autor: inż. Robert Kucharski.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "jobTitle": "Inżynier HVAC & CEO Projekt-Ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-synergy",
    "name": "Parametry Synergii Energetycznej 2026",
    "description": "Zestawienie twardych danych określających wzrost sprawności COP oraz redukcję strat cieplnych budynku po integracji rekuperacji z podłogówką.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator oszczędności rekuperacja",
      "koszty ogrzewania podłogowego 2026",
      "obliczenia OZC dom jednorodzinny",
      "sprawność pompy ciepła podłogówka",
      "projekt wentylacji mechanicznej z odzyskiem ciepła"
    ],
    "measurementTechnique": "Szacowanie oparte na normach PN-EN 12831 oraz danych z rzeczywistych realizacji, uwzględniające obniżenie parametru zasilania do 30°C.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Spadek mocy projektowej (OZC) o około 2.3 kW dla domu 150m2.",
        "Wzrost realnego COP pompy ciepła dzięki obniżeniu zasilania z 45°C na 30°C.",
        "Redukcja rocznych kosztów eksploatacji ogrzewania do 40%."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-synergy",
    "name": "Symulator Synergii Instalacyjnej",
    "description": "Interaktywne narzędzie obliczające szacunkowy spadek obciążenia cieplnego oraz roczne oszczędności finansowe na podstawie deklarowanego metrażu budynku.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-expert-container" id="rk-final-summary">
    
    <div class="rk-expert-header">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-exp-avatar" loading="lazy">
        <div class="rk-exp-hcontent">
            <div class="rk-exp-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                Ostateczny werdykt
            </div>
            <h2>Podsumowanie eksperta: Synergia układów</h2>
            <p>Rekuperacja i podłogówka to nie są dwa oddzielne systemy. W nowoczesnym budownictwie to jeden zintegrowany mechanizm termiczny. Poznaj trzy zasady, które chronią Twój portfel przez dekady.</p>
        </div>
    </div>

    <div class="rk-exp-body">
        
        <div class="rk-exp-tabs">
            <button class="rk-exp-tab-btn active" data-target="rk-exp-p1">
                <div class="rk-exp-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg></div>
                <div class="rk-exp-tab-text">
                    <h3>Stabilność i COP</h3>
                    <p>Maksymalizacja wydajności pompy ciepła</p>
                </div>
            </button>

            <button class="rk-exp-tab-btn" data-target="rk-exp-p2">
                <div class="rk-exp-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div>
                <div class="rk-exp-tab-text">
                    <h3>Zysk Finansowy</h3>
                    <p>Dlaczego rachunki spadają o 40%</p>
                </div>
            </button>

            <button class="rk-exp-tab-btn" data-target="rk-exp-p3">
                <div class="rk-exp-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 20.94c1.5 0 2.75 1.06 4 1.06 3 0 6-8 6-12.22A4.91 4.91 0 0 0 17 5c-2.22 0-4 1.44-5 2-1-.56-2.78-2-5-2a4.9 4.9 0 0 0-5 4.78C2 14 5 22 8 22c1.25 0 2.5-1.06 4-1.06Z"></path></svg></div>
                <div class="rk-exp-tab-text">
                    <h3>Wymóg Projektowy</h3>
                    <p>Obliczenia OZC jako fundament</p>
                </div>
            </button>

            <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/" class="rk-exp-seo-box">
                <span class="seo-label">Ważny standard inżynierski</span>
                <span class="seo-phrase">Zintegrowany projekt wodnego ogrzewania podłogowego z rekuperacją i pompą ciepła</span>
            </a>
        </div>

        <div class="rk-exp-details">
            
            <div class="rk-exp-panel active" id="rk-exp-p1">
                <h4>Koniec z uderzeniami mrozu</h4>
                <p>Ogrzewanie podłogowe nagrzewa się wolno. Gdy z wentylacji grawitacyjnej uderza powiew mrozu, system nie zdąży zareagować. Rekuperacja dostarcza stałe, przefiltrowane i ciepłe powietrze, pozwalając na pracę pompy ciepła na stabilnym, skrajnie niskim parametrze zasilania zaledwie 30°C.</p>
                <div class="rk-exp-svg-box">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <path class="anim-air-flow" d="M 40 20 Q 100 50 160 20" fill="none" stroke="#0ea5e9" stroke-width="6" stroke-linecap="round"></path>
                        <circle cx="100" cy="80" r="15" fill="none" stroke="#f97316" stroke-width="4" class="anim-heat-radiate"></circle>
                        <circle cx="100" cy="80" r="25" fill="none" stroke="#f97316" stroke-width="2" opacity="0.5" class="anim-heat-radiate" style="animation-delay: 0.5s"></circle>
                    </svg>
                </div>
            </div>

            <div class="rk-exp-panel" id="rk-exp-p2">
                <h4>Fizyka nie kłamie</h4>
                <p>Odzysk ciepła z wymiennika centrali oznacza, że dom o powierzchni 150 m2 potrzebuje w największe mrozy o około 2.3 kW mniej mocy grzewczej. Kupujesz mniejszą <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-exp-link">pompę ciepła</a>, masz rzadsze cykle jej pracy (brak taktowania) i oszczędzasz fizyczne pieniądze każdego dnia sezonu grzewczego.</p>
                <div class="rk-exp-svg-box">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <path d="M 20 80 L 180 80" stroke="#334155" stroke-width="2"></path>
                        <path d="M 20 80 L 80 50 L 130 60 L 180 20" fill="none" stroke="#f97316" stroke-width="4" stroke-linecap="round"></path>
                        <circle cx="180" cy="20" r="6" fill="#f97316"></circle>
                        <text x="175" y="45" fill="#f97316" font-size="12" font-weight="bold">-40% KOSZTÓW</text>
                    </svg>
                </div>
            </div>

            <div class="rk-exp-panel" id="rk-exp-p3">
                <h4>Bez OZC tracisz pieniądze</h4>
                <p>Łącząc te technologie, musisz zagęścić <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-exp-link">rozstaw rur</a> (nawet co 10 cm), dopasować strefy brzegowe i obliczyć precyzyjnie przepływy na rozdzielaczu. Bez <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-exp-link">obliczeń OZC</a> instalator dobierze rury "z pamięci", całkowicie niszcząc potencjał energetyczny układu.</p>
                <div class="rk-exp-svg-box">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="70" y="30" width="60" height="40" fill="none" stroke="#cbd5e1" stroke-width="2"></rect>
                        <line x1="70" y1="50" x2="130" y2="50" stroke="#cbd5e1" stroke-width="1" stroke-dasharray="4"></line>
                        <line x1="100" y1="30" x2="100" y2="70" stroke="#cbd5e1" stroke-width="1" stroke-dasharray="4"></line>
                        <circle cx="100" cy="50" r="12" fill="none" stroke="#0ea5e9" stroke-width="3" class="anim-gear-spin"></circle>
                        <path d="M 100 38 L 100 34 M 100 62 L 100 66 M 88 50 L 84 50 M 112 50 L 116 50" stroke="#0ea5e9" stroke-width="2" class="anim-gear-spin"></path>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-exp-calc">
        <div class="rk-calc-top">
            <h4>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--rk-exp-air)" stroke-width="2.5"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="8" y1="6" x2="16" y2="6"></line><line x1="16" y1="14" x2="16.01" y2="14"></line><line x1="12" y1="14" x2="12.01" y2="14"></line><line x1="8" y1="14" x2="8.01" y2="14"></line><line x1="16" y1="18" x2="16.01" y2="18"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="8" y1="18" x2="8.01" y2="18"></line></svg>
                Symulator Synergii
            </h4>
        </div>

        <div class="rk-calc-layout">
            
            <div class="rk-calc-slider-box">
                <div class="rk-calc-label">
                    Ogrzewana pow. domu:
                    <span id="synAreaOut">150 m2</span>
                </div>
                <input type="range" class="rk-slider" id="synAreaSlider" min="80" max="300" step="10" value="150">
                <p style="font-size: 11px; color:#94a3b8; margin:0; line-height: 1.4;">
                    *Dane orientacyjne względem układu wentylacji grawitacyjnej i zasilania temp. 45°C.
                </p>
            </div>

            <div class="rk-calc-outputs">
                <div class="rk-out-card highlight">
                    <span class="rk-out-val" id="synPwr">2.3 <span style="font-size:14px;color:#cbd5e1;">kW</span></span>
                    <span class="rk-out-lab">Mniej strat na wentylacji</span>
                </div>
                <div class="rk-out-card highlight-heat">
                    <span class="rk-out-val" id="synCop">+1.5 <span style="font-size:14px;color:#cbd5e1;">COP</span></span>
                    <span class="rk-out-lab">Skok wydajności pompy ciepła</span>
                </div>
                <div class="rk-out-card">
                    <span class="rk-out-val" id="synPln">4000 <span style="font-size:14px;color:#cbd5e1;">PLN</span></span>
                    <span class="rk-out-lab">Szacunkowe roczne oszczędności</span>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-exp-footer">
        <div class="rk-author-block">
            <h4>O autorze inżynierze</h4>
            <p><strong>Robert Kucharski</strong> – CEO portalu https://projekt-ogrzewania.pl/. Od lat uświadamiam inwestorów, że dom energooszczędny to matematyka, a nie zgadywanka. Zintegrowany projekt i precyzyjne parametry to jedyna gwarancja zwrotu z inwestycji.</p>
            <div class="rk-socials">
                <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener noreferrer">
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg>
                    LinkedIn
                </a>
                <a href="https://www.facebook.com/robert.kucharski.budowa.bez.sciemy" target="_blank" rel="noopener noreferrer">
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.469h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.469h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"></path></svg>
                    Facebook
                </a>
            </div>
        </div>
        
        <a href="https://projekt-ogrzewania.pl/kontakt/" class="rk-cta-btn">
            Kontakt ze mną
            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Tabs Logic
    const tabs = document.querySelectorAll('.rk-exp-tab-btn');
    const panels = document.querySelectorAll('.rk-exp-panel');

    tabs.forEach(btn => {
        btn.addEventListener('click', () => {
            // Usunięcie class active tylko z dzieci tego komponentu
            tabs.forEach(t => t.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));
            
            btn.classList.add('active');
            
            // Bezpieczne pobranie po unikalnym ID
            const targetId = btn.getAttribute('data-target');
            const target = document.getElementById(targetId);
            
            if(target) {
                target.classList.add('active');
            }
        });
    });

    // Calculator Logic
    const slider = document.getElementById('synAreaSlider');
    const areaOut = document.getElementById('synAreaOut');
    const pwrOut = document.getElementById('synPwr');
    const plnOut = document.getElementById('synPln');

    function updateSynergy() {
        if(!slider) return;
        const area = parseInt(slider.value);
        if(areaOut) areaOut.textContent = area + ' m2';

        const powerSaved = (area * (2.3 / 150)).toFixed(1);
        const cashSaved = Math.round(area * (4000 / 150));

        if(pwrOut) pwrOut.innerHTML = powerSaved + ' <span style="font-size:14px;color:#cbd5e1;">kW</span>';
        if(plnOut) plnOut.innerHTML = cashSaved + ' <span style="font-size:14px;color:#cbd5e1;">PLN</span>';
    }

    if(slider) {
        slider.addEventListener('input', updateSynergy);
        updateSynergy();
    }
});
</script>



<style>
:root {
    --rk-symb-dark: #0f172a;
    --rk-symb-card: #1e293b;
    --rk-symb-blue: #0ea5e9;
    --rk-symb-cyan: #22d3ee;
    --rk-symb-green: #10b981;
    --rk-symb-red: #ef4444;
    --rk-symb-text: #f8fafc;
    --rk-symb-muted: #94a3b8;
    --rk-symb-bg: #f8fafc;
    --rk-symb-border: #e2e8f0;
}

.rk-symb-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--rk-symb-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.1);
    border: 1px solid var(--rk-symb-border);
    overflow: hidden;
}

/* Header Section */
.rk-symb-header {
    background: linear-gradient(135deg, var(--rk-symb-dark) 0%, var(--rk-symb-card) 100%);
    padding: 50px 40px 40px;
    text-align: center;
    color: var(--rk-symb-text);
    border-bottom: 4px solid var(--rk-symb-blue);
}

.rk-symb-header h2 {
    font-size: 32px;
    font-weight: 900;
    margin: 0 0 15px 0;
    line-height: 1.2;
    background: linear-gradient(to right, #ffffff, var(--rk-symb-cyan));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.rk-symb-header h3 {
    font-size: 18px;
    font-weight: 400;
    color: var(--rk-symb-muted);
    margin: 0 auto;
    max-width: 700px;
    line-height: 1.6;
}

/* Interactive App Interface */
.rk-symb-app-ui {
    padding: 40px;
    background: #ffffff;
}

.rk-symb-toggle-wrapper {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-symb-toggle {
    display: flex;
    background: #f1f5f9;
    padding: 6px;
    border-radius: 99px;
    border: 1px solid var(--rk-symb-border);
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.05);
}

.rk-symb-toggle-btn {
    padding: 14px 32px;
    font-size: 16px;
    font-weight: 700;
    border: none;
    background: transparent;
    border-radius: 99px;
    cursor: pointer;
    color: var(--rk-symb-muted);
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 2;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-symb-toggle-btn svg { width: 20px; height: 20px; }

.rk-symb-toggle-btn.active[data-mode="project"] { color: #ffffff; }
.rk-symb-toggle-btn.active[data-mode="amateur"] { color: #ffffff; }

.rk-symb-toggle-slider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    left: 6px;
    width: calc(50% - 6px);
    border-radius: 99px;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 1;
}

.rk-symb-toggle.state-project .rk-symb-toggle-slider {
    background: var(--rk-symb-blue);
    transform: translateX(0);
    box-shadow: 0 4px 12px rgba(14, 165, 233, 0.3);
}

.rk-symb-toggle.state-amateur .rk-symb-toggle-slider {
    background: var(--rk-symb-red);
    transform: translateX(100%);
    box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}

/* Result Dashboard */
.rk-symb-dashboard {
    display: grid;
    grid-template-columns: 1fr 1.5fr;
    gap: 40px;
    align-items: center;
    background: var(--rk-symb-bg);
    border: 1px solid var(--rk-symb-border);
    border-radius: 24px;
    padding: 40px;
    transition: all 0.3s ease;
}

.state-project .rk-symb-dashboard { border-color: rgba(14, 165, 233, 0.3); box-shadow: 0 10px 30px rgba(14, 165, 233, 0.05); }
.state-amateur .rk-symb-dashboard { border-color: rgba(239, 68, 68, 0.3); box-shadow: 0 10px 30px rgba(239, 68, 68, 0.05); }

/* Animation Visualizer */
.rk-symb-visualizer {
    position: relative;
    width: 100%;
    aspect-ratio: 1;
    background: #ffffff;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.05);
}

.rk-svg-system { width: 60%; height: 60%; }

/* Default / Project Animations */
.anim-wave { transform-origin: center; animation: radiate 3s infinite ease-out; }
.anim-wave:nth-child(2) { animation-delay: 1s; }
.anim-wave:nth-child(3) { animation-delay: 2s; }

@keyframes radiate {
    0% { transform: scale(0.5); opacity: 0.8; stroke-width: 4px; }
    100% { transform: scale(1.5); opacity: 0; stroke-width: 1px; }
}

.anim-flow { stroke-dasharray: 10; animation: flowMove 1s linear infinite; }
@keyframes flowMove { to { stroke-dashoffset: -20; } }

/* Error / Amateur Animations */
.state-amateur .anim-wave { stroke: var(--rk-symb-red); animation: erratic 0.5s infinite; }
.state-amateur .anim-flow { stroke: var(--rk-symb-red); stroke-dasharray: 5 15; animation: flowMove 0.2s linear infinite reverse; }
.state-amateur .icon-center { fill: var(--rk-symb-red); }

@keyframes erratic {
    0% { transform: translate(0,0) scale(1); opacity: 1; }
    25% { transform: translate(-2px, 2px) scale(1.05); opacity: 0.8; }
    50% { transform: translate(2px, -2px) scale(0.95); opacity: 1; }
    75% { transform: translate(-2px, -2px) scale(1.02); opacity: 0.9; }
    100% { transform: translate(0,0) scale(1); opacity: 1; }
}

/* Dashboard Content */
.rk-symb-metrics h4 {
    font-size: 22px;
    font-weight: 900;
    margin: 0 0 20px 0;
    color: var(--rk-symb-dark);
}

.rk-metric-list {
    list-style: none;
    padding: 0;
    margin: 0 0 25px 0;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-metric-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.rk-metric-item svg {
    flex-shrink: 0;
    margin-top: 3px;
}

.state-project .rk-metric-item svg { color: var(--rk-symb-blue); }
.state-amateur .rk-metric-item svg { color: var(--rk-symb-red); }

.rk-metric-item a {
    color: var(--rk-symb-blue);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.rk-symb-savings {
    display: inline-block;
    padding: 10px 20px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 18px;
    transition: all 0.3s;
}

.state-project .rk-symb-savings { background: #e0f2fe; color: #0284c7; }
.state-amateur .rk-symb-savings { background: #fee2e2; color: #b91c1c; }

/* Text Content Area */
.rk-symb-text-content {
    padding: 0 40px 40px;
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
}

.rk-symb-text-content p { margin: 0 0 20px 0; }

/* CTA Section */
.rk-symb-cta {
    background: var(--rk-symb-dark);
    padding: 40px;
    text-align: center;
    border-top: 1px solid rgba(255,255,255,0.1);
}

.rk-btn-solid {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    background: var(--rk-symb-green);
    color: #ffffff;
    padding: 18px 36px;
    border-radius: 16px;
    font-size: 18px;
    font-weight: 800;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(16, 185, 129, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-btn-solid:hover {
    transform: translateY(-4px);
    background: #059669;
    box-shadow: 0 15px 35px -5px rgba(16, 185, 129, 0.5);
}

.rk-btn-solid svg { transition: transform 0.3s; }
.rk-btn-solid:hover svg { transform: translateX(6px); }

@media (max-width: 768px) {
    .rk-symb-header { padding: 40px 20px; }
    .rk-symb-header h2 { font-size: 26px; }
    .rk-symb-app-ui { padding: 30px 20px; }
    .rk-symb-toggle { flex-direction: column; border-radius: 16px; }
    .rk-symb-toggle-slider { width: calc(100% - 12px); bottom: auto; height: calc(50% - 6px); }
    .rk-symb-toggle.state-project .rk-symb-toggle-slider { transform: translateY(0); }
    .rk-symb-toggle.state-amateur .rk-symb-toggle-slider { transform: translateY(100%); left: 6px; }
    .rk-symb-dashboard { grid-template-columns: 1fr; gap: 30px; padding: 25px; text-align: center; }
    .rk-metric-item { text-align: left; }
    .rk-symb-text-content { padding: 0 20px 30px; }
    .rk-btn-solid { width: 100%; justify-content: center; padding: 16px 20px; font-size: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Podsumowanie inżynierskie – Klucz do bezawaryjnej inwestycji",
    "description": "Połączenie rekuperacji i ogrzewania podłogowego to standard 2026 roku. Dowiedz się, dlaczego zintegrowany projekt OZC to jedyna droga do 40% oszczędności.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-podsumowanie",
    "name": "Analiza efektywności: Rekuperacja + Ogrzewanie Podłogowe 2026",
    "description": "Zestawienie parametrów techniczno-ekonomicznych ukazujące redukcję kosztów eksploatacyjnych dzięki symbiozie układów niskotemperaturowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zintegrowany projekt ogrzewania podłogowego",
      "oszczędności rekuperacja i podłogówka",
      "obliczenia OZC dla rekuperacji",
      "balansowanie hydrauliczne pętli",
      "neutralność emisyjna domów"
    ],
    "measurementTechnique": "Obliczenia obciążenia cieplnego (OZC) z uwzględnieniem odzysku ciepła i niskich temperatur zasilania źródła.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zintegrowany Projekt (OZC): Oszczędność do 40%, stabilny profil temperatur, zbalansowane pętle, brak zawilgocenia.",
        "Montaż 'Na oko': Nadmierne zużycie prądu, brak balansu hydraulicznego, problemy z wilgotnością budowlaną."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#webapp-podsumowanie",
    "name": "Symulator Standardu Instalacyjnego 2026",
    "description": "Interaktywny panel weryfikujący wpływ profesjonalnego projektu na stabilność i koszty systemu rekuperacji połączonej z podłogówką.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-symb-container" id="rk-symb-app">
    <div class="rk-symb-header">
        <h2>Podsumowanie inżynierskie – Klucz do bezawaryjnej inwestycji</h2>
        <h3>Połączenie rekuperacji i ogrzewania podłogowego to standard determinowany przez fizykę budowli i dążenie do neutralności emisyjnej.</h3>
    </div>

    <div class="rk-symb-app-ui" id="rk-symb-app-root">
        
        <div class="rk-symb-toggle-wrapper">
            <div class="rk-symb-toggle state-project" id="rkSymbToggle">
                <div class="rk-symb-toggle-slider"></div>
                <button class="rk-symb-toggle-btn active" data-mode="project">
                    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    Pełny Projekt Inżynierski
                </button>
                <button class="rk-symb-toggle-btn" data-mode="amateur">
                    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
                    Montaż "Na oko"
                </button>
            </div>
        </div>

        <div class="rk-symb-dashboard" id="rkSymbDashboard">
            
            <div class="rk-symb-visualizer">
                <svg class="rk-svg-system" viewBox="0 0 100 100">
                    <circle cx="50" cy="50" r="20" fill="none" stroke="currentColor" class="anim-wave"></circle>
                    <circle cx="50" cy="50" r="20" fill="none" stroke="currentColor" class="anim-wave"></circle>
                    <circle cx="50" cy="50" r="20" fill="none" stroke="currentColor" class="anim-wave"></circle>
                    <path d="M10 50 Q 30 20 50 50 T 90 50" fill="none" stroke="currentColor" stroke-width="4" class="anim-flow" stroke-linecap="round"></path>
                    <circle cx="50" cy="50" r="12" fill="var(--rk-symb-blue)" class="icon-center" style="transition: fill 0.3s;"></circle>
                </svg>
            </div>

            <div class="rk-symb-metrics" id="rkSymbMetrics">
                <h4>Pełna Symbioza Systemów</h4>
                <ul class="rk-metric-list">
                    <li class="rk-metric-item">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                        <span>Rekuperacja stabilizuje profil temperatur wewnątrz obiektu, usuwając konieczność gwałtownych odpowiedzi posadzki.</span>
                    </li>
                    <li class="rk-metric-item">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                        <span>Instalacja zaplanowana na bazie szczegółowych <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczeń OZC</a> maksymalnie wykorzystuje sprawność źródeł energii.</span>
                    </li>
                </ul>
                <div class="rk-symb-savings">Do 40% Oszczędności Eksploatacyjnej</div>
            </div>

        </div>
    </div>

    <div class="rk-symb-text-content">
        <p>Warunkiem bezwzględnym osiągnięcia opisywanych oszczędności na poziomie 40% jest wykonanie zintegrowanego, wielobranżowego <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">projektu instalacyjnego</a> opartego na rzeczywistych parametrach. Systemy te działają w pełnej symbiozie tylko wtedy, gdy są do siebie idealnie dopasowane kalibrażem rur i przepływami powierza.</p>
        <p>Próby montażu tych systemów „na oko” przez przypadkowe ekipy wykonawcze zawsze kończą się problemami z hydraulicznym zbalansowaniem pętli, zawilgoceniem budowlanym lub po prostu nadmiernym zużyciem drogiej energii elektrycznej.</p>
    </div>

    <div class="rk-symb-cta">
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-solid">
            Przeczytaj więcej poradników na naszym blogu.
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
        <div style="margin-top: 15px; color: #94a3b8; font-size: 14px;">To jedyna droga do idealnego komfortu i minimalnych rachunków przez dekady.</div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // 1. Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-symb-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 20px;">🛑</div>
                    <div style="font-size: 20px; font-weight: 900; margin-bottom: 15px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener interaktywny i struktura danych JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto nieautoryzowaną próbę użycia zasobów.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Interfejsu (Symulator)
    const toggleContainer = document.getElementById('rkSymbToggle');
    const dashboard = document.getElementById('rkSymbDashboard');
    const metricsContainer = document.getElementById('rkSymbMetrics');
    const btns = toggleContainer.querySelectorAll('.rk-symb-toggle-btn');

    const contentData = {
        project: {
            title: "Pełna Symbioza Systemów",
            icon: `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>`,
            points: [
                `Rekuperacja stabilizuje profil temperatur wewnątrz obiektu, usuwając konieczność gwałtownych odpowiedzi posadzki.`,
                `Instalacja zaplanowana na bazie szczegółowych <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczeń OZC</a> maksymalnie wykorzystuje sprawność źródeł energii.`
            ],
            savings: "Do 40% Oszczędności Eksploatacyjnej"
        },
        amateur: {
            title: "Kosztowny Chaos Instalacyjny",
            icon: `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>`,
            points: [
                `Brak synchronizacji prowadzi do hydraulicznego niezbalansowania pętli i poważnych problemów z zawilgoceniem.`,
                `Próby montażu bez dokumentacji zmuszają pompę ciepła do ciągłego taktowania, drastycznie zawyżając zużycie energii.`
            ],
            savings: "Ryzyko Ciągłych Awarii Systemu"
        }
    };

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            const mode = this.getAttribute('data-mode');
            
            // Update classes
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');
            
            toggleContainer.className = `rk-symb-toggle state-${mode}`;
            dashboard.className = `rk-symb-dashboard state-${mode}`;
            
            // Update Content
            const data = contentData[mode];
            metricsContainer.innerHTML = `
                <h4 style="color: ${mode === 'project' ? 'var(--rk-symb-dark)' : 'var(--rk-symb-red)'}">${data.title}</h4>
                <ul class="rk-metric-list">
                    <li class="rk-metric-item">
                        ${data.icon}
                        <span>${data.points[0]}</span>
                    </li>
                    <li class="rk-metric-item">
                        ${data.icon}
                        <span>${data.points[1]}</span>
                    </li>
                </ul>
                <div class="rk-symb-savings">${data.savings}</div>
            `;
        });
    });
});
</script>



<style>
:root {
    --dl-primary: #0f172a;
    --dl-accent: #0ea5e9;
    --dl-accent-dark: #0284c7;
    --dl-bg: #f8fafc;
    --dl-border: #e2e8f0;
    --dl-text: #334155;
    --dl-white: #ffffff;
}

.download-hub-container {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--dl-white);
    border-radius: 24px;
    border: 1px solid var(--dl-border);
    box-shadow: 0 20px 40px -10px rgba(14, 165, 233, 0.15);
    overflow: hidden;
}

/* NAGŁÓWEK SEKCJI */
.dl-header {
    background: linear-gradient(135deg, var(--dl-primary) 0%, #082f49 100%);
    padding: 40px 50px;
    color: var(--dl-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    border-bottom: 4px solid var(--dl-accent);
}

.dl-header-content { position: relative; z-index: 2; max-width: 65%; }

.dl-badge {
    display: inline-block;
    background: rgba(14, 165, 233, 0.2);
    border: 1px solid rgba(14, 165, 233, 0.3);
    color: #7dd3fc;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.dl-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 10px 0;
    letter-spacing: -0.5px;
}

.dl-header p {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.6;
}

/* WIZUALIZACJA PDF / IKONA */
.dl-header-visual {
    position: relative;
    z-index: 2;
}

.dl-pdf-icon-svg {
    width: 80px;
    height: auto;
    filter: drop-shadow(0 10px 15px rgba(0,0,0,0.3));
    animation: floatIcon 3s infinite ease-in-out alternate;
}

@keyframes floatIcon {
    from { transform: translateY(0); }
    to { transform: translateY(-10px); }
}

/* GŁÓWNY WORKSPACE */
.dl-workspace {
    display: flex;
    padding: 40px 50px;
    gap: 40px;
    background: var(--dl-white);
}

.dl-preview-box {
    flex: 1;
    background: var(--dl-bg);
    border: 1px solid var(--dl-border);
    border-radius: 16px;
    padding: 10px;
    position: relative;
    cursor: zoom-in;
    transition: transform 0.3s, box-shadow 0.3s;
}

.dl-preview-box:hover {
    transform: scale(1.02);
    box-shadow: 0 15px 30px -10px rgba(14, 165, 233, 0.2);
    border-color: var(--dl-accent);
}

.dl-preview-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
}

.dl-info-side {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.dl-feature-list {
    list-style: none;
    padding: 0;
    margin: 0 0 30px 0;
}

.dl-feature-item {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 15px;
    font-size: 15px;
    font-weight: 700;
    color: var(--dl-text);
}

.dl-check-svg {
    width: 24px;
    height: 24px;
    color: var(--dl-accent);
    flex-shrink: 0;
}

/* PRZYCISK POBIERANIA */
.dl-main-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--dl-accent);
    color: var(--dl-white);
    text-decoration: none !important;
    padding: 18px 30px;
    border-radius: 14px;
    font-weight: 800;
    font-size: 16px;
    transition: all 0.3s;
    box-shadow: 0 10px 20px -5px rgba(14, 165, 233, 0.4);
}

.dl-main-btn:hover {
    background: var(--dl-accent-dark);
    transform: translateY(-3px);
    box-shadow: 0 15px 30px -5px rgba(14, 165, 233, 0.5);
}

.dl-main-btn span { font-size: 20px; }

/* STOPKA MODUŁU */
.dl-footer {
    padding: 20px 50px;
    background: var(--dl-bg);
    border-top: 1px solid var(--dl-border);
    font-size: 13px;
    color: var(--dl-muted);
    text-align: center;
}

.dl-footer a {
    color: var(--dl-accent-dark);
    font-weight: 800;
    text-decoration: none;
    border-bottom: 1px dotted var(--dl-accent-dark);
    transition: all 0.3s;
}

.dl-footer a:hover {
    border-bottom-style: solid;
}

@media (max-width: 800px) {
    .dl-header { flex-direction: column; text-align: center; padding: 30px 20px; }
    .dl-header-content { max-width: 100%; margin-bottom: 25px; }
    .dl-workspace { flex-direction: column; padding: 30px 20px; }
    .dl-preview-box { margin-bottom: 20px; }
    .dl-footer { padding: 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#infografika-article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/"
    },
    "headline": "Rekuperacja i ogrzewanie podłogowe – czy to się opłaca? (Infografika PDF)",
    "description": "Pobierz inżynierskie zestawienie kosztów, parametrów COP i algorytmów obliczeniowych dla układu podłogówki z wentylacją mechaniczną.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Rekuperacja-i-ogrzewanie-podlogowe-–-czy-to-sie-oplaca.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-28",
    "dateModified": "2026-05-28"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#dataset-infografika",
    "name": "Zestawienie efektywności: Rekuperacja + Ogrzewanie Podłogowe",
    "description": "Zbiór danych określający oszczędności eksploatacyjne, optymalne temperatury zasilania oraz skutki błędów instalacyjnych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika rekuperacja i podłogówka",
      "koszty ogrzewania podłogowego PDF",
      "algorytm strat wentylacyjnych OZC",
      "porównanie COP pompy ciepła",
      "błędy instalacyjne HVAC schemat"
    ],
    "measurementTechnique": "Synteza normy PN-EN 12831-1 i analizy rocznych kosztów eksploatacji w formie graficznej.",
    "mainEntity": {
      "@type": "Thing",
      "name": "Materiały referencyjne i instruktażowe dla inwestorów"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/#download-app",
    "name": "Centrum Pobierania Wiedzy: Rekuperacja i Podłogówka",
    "description": "Interaktywny moduł umożliwiający szybki podgląd i pobranie kompletnej infografiki analitycznej w formacie PDF.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3"
  }
]
</script>

<div class="download-hub-container" id="app-recup-dl">
    
    <div class="dl-header">
        <div class="dl-header-content">
            <div class="dl-badge">Darmowe Materiały</div>
            <h2>Pobierz Podsumowanie Inżynierskie</h2>
            <p>Zabierz pigułkę wiedzy ze sobą. Algorytm OZC, zestawienie kosztów eksploatacji i wytyczne projektowe w jednym pliku PDF.</p>
        </div>
        <div class="dl-header-visual">
            <svg class="dl-pdf-icon-svg" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M14 2H6C4.89543 2 4 2.89543 4 4V20C4 21.1046 4.89543 22 6 22H18C19.1046 22 20 21.1046 20 20V8L14 2Z" fill="#ef4444" stroke="#ffffff" stroke-width="1"/>
                <path d="M14 2V8H20" stroke="#ffffff" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/>
                <text x="7" y="18" fill="white" font-size="5" font-weight="900" font-family="sans-serif">PDF</text>
            </svg>
        </div>
    </div>

    <div class="dl-workspace">
        
        <div class="dl-preview-box" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Rekuperacja-i-ogrzewanie-podlogowe-–-czy-to-sie-oplaca.webp', '_blank')">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Rekuperacja-i-ogrzewanie-podlogowe-–-czy-to-sie-oplaca.webp" alt="Infografika - Rekuperacja i ogrzewanie podłogowe - czy to się opłaca" class="dl-preview-img" loading="lazy">
            <div style="position:absolute; bottom:20px; right:20px; background:rgba(0,0,0,0.7); color:white; padding:8px 14px; border-radius:8px; font-size:12px; font-weight:800; backdrop-filter: blur(4px);">🔍 Kliknij, aby powiększyć</div>
        </div>

        <div class="dl-info-side">
            <ul class="dl-feature-list">
                <li class="dl-feature-item">
                    <svg class="dl-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    Porównanie kosztów i parametru SCOP
                </li>
                <li class="dl-feature-item">
                    <svg class="dl-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    Krokowy algorytm strat wentylacyjnych
                </li>
                <li class="dl-feature-item">
                    <svg class="dl-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    Checklista najczęstszych błędów wykonawczych
                </li>
                <li class="dl-feature-item">
                    <svg class="dl-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    Format przygotowany do wydruku (A4)
                </li>
            </ul>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Rekuperacja-i-ogrzewanie-podlogowe-–-czy-to-sie-oplaca.pdf" class="dl-main-btn" target="_blank">
                <span>📥</span> POBIERZ INFOGRAFIKĘ (PDF)
            </a>
            
            <p style="margin-top: 25px; font-size: 13px; color: var(--dl-muted); line-height: 1.6;">
                Potrzebujesz precyzyjnych obliczeń OZC dla swojego domu? <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt podłogówki</a> z profesjonalnym doborem źródła ciepła.
            </p>
        </div>

    </div>

    <div class="dl-footer">
        © 2026 Projekt-Ogrzewania.pl | Autor: <strong>Robert Kucharski</strong>. Udostępnianie dozwolone z zachowaniem linku do źródła.
    </div>
</div>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">Rekuperacja i ogrzewanie podłogowe – czy to się opłaca?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
