<?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 ekologia - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/ekologia/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/ekologia/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Wed, 27 May 2026 08:58:06 +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 ekologia - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/ekologia/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Kocioł na pellet.</title>
		<link>https://projekt-ogrzewania.pl/kociol-na-pellet/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 10:09:49 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Hydraulika budowlana]]></category>
		<category><![CDATA[Instalacje domowe]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Koszty instalacji grzewczych]]></category>
		<category><![CDATA[Koszty ogrzewania]]></category>
		<category><![CDATA[Kotły na pellet]]></category>
		<category><![CDATA[Modernizacja ogrzewania]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Technologie grzewcze]]></category>
		<category><![CDATA[bufor ciepła]]></category>
		<category><![CDATA[ekologia]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[kocioł na pellet]]></category>
		<category><![CDATA[koszty ogrzewania]]></category>
		<category><![CDATA[niskotemperaturowe ogrzewanie]]></category>
		<category><![CDATA[ogrzewanie domu]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pellet drzewny]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3170</guid>

					<description><![CDATA[<p>Planując nowoczesny i ekonomiczny system grzewczy, coraz więcej inwestorów zwraca uwagę na kocioł na pellet jako stabilne, ekologiczne i przewidywalne źródło ciepła. W połączeniu z wodnym ogrzewaniem podłogowym tworzy on układ, który doskonale wykorzystuje niskotemperaturowy charakter instalacji i pozwala osiągnąć bardzo dobre parametry eksploatacyjne. W artykule szczegółowo omawiamy, dlaczego kocioł na pellet idealnie współpracuje z podłogówką, jakie komponenty są kluczowe, jak wygląda projektowanie takiego systemu oraz jakie realne koszty inwestycyjne i eksploatacyjne należy wziąć pod uwagę.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kociol-na-pellet/">Kocioł na pellet.</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: #ffffff;
    --rk-intro-pellet: #d97706; /* Bursztyn/Pellet */
    --rk-intro-pellet-light: #fef3c7;
    --rk-intro-eco: #059669; /* Eko zieleń */
    --rk-intro-eco-light: #d1fae5;
    --rk-intro-alert: #dc2626;
    --rk-intro-bg: #f8fafc;
    --rk-intro-border: #cbd5e1;
    --rk-intro-text: #334155;
    --rk-intro-muted: #64748b;
}

.rk-intro-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, system-ui, sans-serif;
    background: var(--rk-intro-card);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(217, 119, 6, 0.15);
    border: 1px solid rgba(217, 119, 6, 0.3);
    overflow: hidden;
}

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

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(217, 119, 6, 0.2);
    color: #fcd34d;
    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(217, 119, 6, 0.3);
}

.rk-intro-h2 {
    font-size: 32px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
    letter-spacing: -0.5px;
}

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

.rk-intro-paragraph {
    font-size: 18px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

/* Interaktywny Moduł Synergii */
.rk-intro-interactive {
    padding: 40px 50px;
    background: var(--rk-intro-bg);
}

.rk-intro-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-intro-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

/* Przełącznik */
.rk-intro-toggle-box {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    margin-bottom: 40px;
}

.rk-intro-label {
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-intro-muted);
    cursor: pointer;
    transition: color 0.3s;
}

.rk-intro-label.active-eco { color: var(--rk-intro-eco); }
.rk-intro-label.active-alert { color: var(--rk-intro-alert); }

.rk-intro-switch {
    position: relative;
    display: inline-block;
    width: 64px;
    height: 32px;
}

.rk-intro-switch input { opacity: 0; width: 0; height: 0; }

.rk-intro-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--rk-intro-eco);
    transition: .4s;
    border-radius: 32px;
}

.rk-intro-slider:before {
    position: absolute;
    content: "";
    height: 24px;
    width: 24px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s;
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

input:checked + .rk-intro-slider { background-color: var(--rk-intro-alert); }
input:checked + .rk-intro-slider:before { transform: translateX(32px); }

/* Grid Zawartości */
.rk-intro-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: var(--rk-intro-card);
    padding: 30px;
    border-radius: 16px;
    border: 1px solid var(--rk-intro-border);
    transition: all 0.4s ease;
}

/* Stan Synergia (Zaznaczone) */
.state-synergy .rk-intro-grid {
    border-color: var(--rk-intro-eco);
    box-shadow: 0 10px 30px -10px rgba(5, 150, 105, 0.2);
}

/* Stan Brak Synergii */
.state-error .rk-intro-grid {
    border-color: var(--rk-intro-alert);
    box-shadow: 0 10px 30px -10px rgba(220, 38, 38, 0.2);
}

/* Animacje SVG */
.rk-intro-svg-box {
    background: #1e293b;
    border-radius: 12px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
}

.rk-svg-main { width: 100%; max-width: 280px; height: auto; }

/* Obiekty SVG i animacje */
.anim-pellet-drop { opacity: 0; transform: translateY(-10px); }
.state-synergy .anim-pellet-drop { animation: dropPellet 1.5s infinite linear; }
.state-error .anim-pellet-drop { animation: jamPellet 0.5s infinite alternate; }

.anim-heat-flow { stroke-dasharray: 10 15; stroke-dashoffset: 0; transition: stroke 0.3s; }
.state-synergy .anim-heat-flow { stroke: var(--rk-intro-eco); animation: flowSmooth 2s linear infinite; }
.state-error .anim-heat-flow { stroke: var(--rk-intro-alert); animation: flowStutter 1s linear infinite; stroke-dasharray: 5 25; }

.anim-fire { transform-origin: bottom center; transition: fill 0.3s; }
.state-synergy .anim-fire { fill: var(--rk-intro-pellet); animation: steadyBurn 2s infinite alternate; }
.state-error .anim-fire { fill: var(--rk-intro-alert); animation: wildBurn 0.3s infinite alternate; }

@keyframes dropPellet { 0% { opacity: 0; transform: translateY(-10px); } 50% { opacity: 1; } 100% { opacity: 0; transform: translateY(30px); } }
@keyframes jamPellet { 0% { transform: translateY(0) rotate(-10deg); fill: #ef4444; } 100% { transform: translateY(2px) rotate(10deg); fill: #fca5a5; } }
@keyframes flowSmooth { to { stroke-dashoffset: -50; } }
@keyframes flowStutter { 0%, 100% { opacity: 1; } 50% { opacity: 0.2; } to { stroke-dashoffset: -10; } }
@keyframes steadyBurn { from { transform: scaleY(0.9); } to { transform: scaleY(1.1); } }
@keyframes wildBurn { from { transform: scaleY(0.5) scaleX(1.2); } to { transform: scaleY(1.5) scaleX(0.8); } }

/* Panel Danych */
.rk-intro-data-panel {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 20px;
}

.rk-intro-data-row {
    background: var(--rk-intro-bg);
    padding: 15px 20px;
    border-radius: 12px;
    border-left: 4px solid var(--rk-intro-border);
    transition: all 0.3s;
}

.state-synergy .rk-intro-data-row { border-left-color: var(--rk-intro-eco); }
.state-error .rk-intro-data-row { border-left-color: var(--rk-intro-alert); }

.rk-intro-data-title {
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--rk-intro-muted);
    letter-spacing: 1px;
    margin-bottom: 5px;
}

.rk-intro-data-val {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-intro-dark);
}

.rk-link {
    color: var(--rk-intro-pellet);
    text-decoration: none;
    border-bottom: 2px dashed rgba(217, 119, 6, 0.4);
    font-weight: 700;
    transition: all 0.3s;
}

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

@media (max-width: 768px) {
    .rk-intro-header, .rk-intro-interactive { padding: 30px 20px; }
    .rk-intro-h2 { font-size: 26px; }
    .rk-intro-grid { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-intro-svg-box { padding: 30px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Kocioł na pellet – Zautomatyzowane serce nowoczesnego systemu grzewczego",
    "description": "Analiza synergii między zautomatyzowanym kotłem na pellet a niskotemperaturową instalacją płaszczyznową. Jak wyeliminować błędy wykonawcze i obniżyć koszty eksploatacji.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-wstep",
    "name": "Wskaźniki efektywności energetycznej dla biomasy (2026)",
    "description": "Zestawienie inżynierskie obrazujące parametry zautomatyzowanego kotła na pellet pracującego w synergii z instalacją płaszczyznową.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zautomatyzowany kocioł na pellet",
      "koszty eksploatacji podłogówki",
      "system grzewczy z podajnikiem",
      "sprawność normatywna pieca",
      "niskotemperaturowa instalacja płaszczyznowa"
    ],
    "measurementTechnique": "Porównanie parametrów pracy ciągłej (zbuforowanej) z układem obarczonym błędami wykonawczymi (taktowanie).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Optymalna sprawność normatywna: >92% przy prawidłowej integracji.",
        "Kluczowy element: Automatyczny podajnik sprasowanych granulatów drzewnych.",
        "Kompatybilność: Wymaga rozprzężenia hydraulicznego z niskotemperaturowym jastrychem."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-wstep",
    "name": "Symulator Synergii Grzewczej",
    "description": "Interaktywna aplikacja wizualizująca na żywo przepływ energii między zautomatyzowanym kotłem stałopalnym a układem płaszczyznowym, uwidaczniająca wpływ błędów montażowych.",
    "applicationCategory": "EngineeringSimulator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Canvas/SVG support.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-intro-container" id="rk-intro-app">
    <div class="rk-intro-header">
        <div class="rk-intro-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 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Inwestycja w przyszłość
        </div>
        <h2 class="rk-intro-h2">Kocioł na pellet – <span>Zautomatyzowane serce systemu</span></h2>
        <p class="rk-intro-paragraph">
            Planując system grzewczy dla nowoczesnego lub modernizowanego budynku, inwestorzy szukają synergii między niskimi kosztami eksploatacji a bezobsługowością. Kocioł na pellet z automatycznym podajnikiem paliwa zyskuje miano jednego z najbardziej stabilnych źródeł biomasowych. Ten zaawansowany technologicznie generator ciepła, spalający sprasowane pod wysokim ciśnieniem granulaty drzewne, doskonale wpisuje się w wymagania współczesnego budownictwa. Kluczem do sukcesu jest jego prawidłowa integracja z <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/" style="color:#fcd34d; font-weight:700;">niskotemperaturową instalacją płaszczyznową</a>, co pozwala uzyskać maksymalną sprawność normatywną i pełną kontrolę nad mikroklimatem w pomieszczeniach, eliminując jednocześnie <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/" style="color:#fcd34d; font-weight:700;">typowe błędy wykonawcze</a> spotykane na polskich budowach.
        </p>
    </div>

    <div class="rk-intro-interactive">
        <h3 class="rk-intro-h3">Synergia technologii: Od granulatu po komfort cieplny</h3>
        
        <div class="rk-intro-toggle-box">
            <span class="rk-intro-label active-eco" id="rk-lbl-synergy" onclick="document.getElementById('rk-intro-toggle').click()">Prawidłowa Integracja (Synergia)</span>
            <label class="rk-intro-switch">
                <input type="checkbox" id="rk-intro-toggle">
                <span class="rk-intro-slider"></span>
            </label>
            <span class="rk-intro-label" id="rk-lbl-error" onclick="document.getElementById('rk-intro-toggle').click()">Błędy Wykonawcze</span>
        </div>

        <div class="rk-intro-grid state-synergy" id="rk-dynamic-grid">
            
            <div class="rk-intro-svg-box">
                <svg class="rk-svg-main" viewBox="0 0 200 150">
                    <polygon points="20,20 60,20 50,70 30,70" fill="#475569" stroke="#94a3b8" stroke-width="2"/>
                    <circle class="anim-pellet-drop" cx="40" cy="40" r="3" fill="#f59e0b"/>
                    <circle class="anim-pellet-drop" cx="35" cy="50" r="3" fill="#f59e0b" style="animation-delay: 0.3s;"/>
                    <circle class="anim-pellet-drop" cx="45" cy="45" r="3" fill="#f59e0b" style="animation-delay: 0.6s;"/>
                    
                    <rect x="25" y="70" width="80" height="60" fill="#334155" rx="4"/>
                    <path class="anim-fire" d="M65 120 C50 120, 50 90, 65 80 C80 90, 80 120, 65 120 Z"/>
                    
                    <path class="anim-heat-flow" d="M105 100 L140 100 L140 130 L180 130" fill="none" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
                    
                    <rect x="130" y="120" width="60" height="20" fill="#cbd5e1" rx="2" opacity="0.5"/>
                    <circle cx="150" cy="130" r="4" fill="#ef4444"/>
                    <circle cx="170" cy="130" r="4" fill="#ef4444"/>
                </svg>
            </div>

            <div class="rk-intro-data-panel">
                <div class="rk-intro-data-row">
                    <div class="rk-intro-data-title">Zasilanie paliwem</div>
                    <div class="rk-intro-data-val" id="rk-val-fuel">Płynne dawkowanie automatyczne</div>
                </div>
                <div class="rk-intro-data-row">
                    <div class="rk-intro-data-title">Sprawność normatywna</div>
                    <div class="rk-intro-data-val" id="rk-val-eff">> 92% (Praca stabilna)</div>
                </div>
                <div class="rk-intro-data-row">
                    <div class="rk-intro-data-title">Koszty eksploatacji</div>
                    <div class="rk-intro-data-val" id="rk-val-cost">Niskie i przewidywalne</div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Strict no H2/H3 for fallback)
    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-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">⚠️</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Licencji Algorytmicznej</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Ten komponent inżynieryjny (w tym symulacje SVG i warstwa danych Schema.org) jest chroniony. Wykryto nieautoryzowane uruchomienie poza domeną docelową.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Przełącznika Synergii
    const toggle = document.getElementById('rk-intro-toggle');
    const grid = document.getElementById('rk-dynamic-grid');
    const lblSyn = document.getElementById('rk-lbl-synergy');
    const lblErr = document.getElementById('rk-lbl-error');
    
    // Pola tekstowe
    const valFuel = document.getElementById('rk-val-fuel');
    const valEff = document.getElementById('rk-val-eff');
    const valCost = document.getElementById('rk-val-cost');

    toggle.addEventListener('change', function() {
        if (this.checked) {
            // Stan Błędu
            grid.className = 'rk-intro-grid state-error';
            lblSyn.classList.remove('active-eco');
            lblErr.classList.add('active-alert');
            
            valFuel.innerHTML = 'Zablokowany / Zsyp nienormatywny';
            valEff.innerHTML = '< 70% (Taktowanie i straty)';
            valCost.innerHTML = 'Wysokie (Marnotrawstwo paliwa)';
        } else {
            // Stan Synergii
            grid.className = 'rk-intro-grid state-synergy';
            lblErr.classList.remove('active-alert');
            lblSyn.classList.add('active-eco');
            
            valFuel.innerHTML = 'Płynne dawkowanie automatyczne';
            valEff.innerHTML = '> 92% (Praca stabilna)';
            valCost.innerHTML = 'Niskie i przewidywalne';
        }
    });
});
</script>



<style>
:root {
    --rk-sync-dark: #111827;
    --rk-sync-card: #ffffff;
    --rk-sync-fire: #ea580c; /* Ogień / Pellet */
    --rk-sync-fire-light: #ffedd5;
    --rk-sync-water: #0ea5e9; /* Woda / Bufor */
    --rk-sync-water-light: #e0f2fe;
    --rk-sync-error: #dc2626; /* Błąd / Przegrzanie */
    --rk-sync-bg: #f8fafc;
    --rk-sync-border: #cbd5e1;
    --rk-sync-text: #334155;
    --rk-sync-muted: #64748b;
}

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

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

.rk-sync-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(234, 88, 12, 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(234, 88, 12, 0.3);
}

.rk-sync-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
    letter-spacing: -0.5px;
}

.rk-sync-h2 span { color: var(--rk-sync-fire); }

.rk-sync-paragraph {
    font-size: 17px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

/* Sekcja Symulatora */
.rk-sync-interactive {
    padding: 40px 50px;
    background: var(--rk-sync-bg);
}

.rk-sync-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-sync-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

/* Switcher / Toggle */
.rk-sync-toggle-box {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    margin-bottom: 40px;
    background: #ffffff;
    padding: 15px;
    border-radius: 100px;
    border: 1px solid var(--rk-sync-border);
    max-width: 600px;
    margin-left: auto;
    margin-right: auto;
}

.rk-sync-label {
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-sync-muted);
    cursor: pointer;
    transition: color 0.3s;
    user-select: none;
}

.rk-sync-label.active-safe { color: var(--rk-sync-water); }
.rk-sync-label.active-error { color: var(--rk-sync-error); }

.rk-sync-switch {
    position: relative;
    display: inline-block;
    width: 64px;
    height: 32px;
    flex-shrink: 0;
}

.rk-sync-switch input { opacity: 0; width: 0; height: 0; }

.rk-sync-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--rk-sync-water);
    transition: .4s;
    border-radius: 32px;
}

.rk-sync-slider:before {
    position: absolute;
    content: "";
    height: 24px;
    width: 24px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s;
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

input:checked + .rk-sync-slider { background-color: var(--rk-sync-error); }
input:checked + .rk-sync-slider:before { transform: translateX(32px); }

/* Layout Danych */
.rk-sync-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
}

.rk-sync-panel {
    background: var(--rk-sync-card);
    border: 1px solid var(--rk-sync-border);
    border-radius: 16px;
    padding: 30px;
    transition: all 0.4s ease;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

/* Stany Wizualne */
.state-safe .rk-sync-panel { border-color: var(--rk-sync-water); box-shadow: 0 10px 30px -10px rgba(14, 165, 233, 0.2); }
.state-error .rk-sync-panel { border-color: var(--rk-sync-error); box-shadow: 0 10px 30px -10px rgba(220, 38, 38, 0.2); }

/* SVG Canvas przeniesiony na pełną szerokość pod spód */
.rk-sync-svg-wrapper {
    grid-column: 1 / -1;
    background: #0f172a;
    border-radius: 12px;
    padding: 30px;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
    border: 1px solid var(--rk-sync-border);
    transition: border-color 0.4s ease;
}

.state-safe .rk-sync-svg-wrapper { border-color: var(--rk-sync-water); }
.state-error .rk-sync-svg-wrapper { border-color: var(--rk-sync-error); }

.rk-svg-main {
    width: 100%;
    max-width: 450px;
    height: auto;
}

/* Animacje SVG: Kocioł i Ogień */
.anim-flame { transform-origin: bottom center; transition: fill 0.3s; }
.state-safe .anim-flame { fill: #f59e0b; animation: burnSteady 2s infinite alternate; }
.state-error .anim-flame { fill: #ef4444; animation: burnStutter 0.3s infinite alternate; }

@keyframes burnSteady { from { transform: scaleY(0.9); } to { transform: scaleY(1.1); } }
@keyframes burnStutter { from { transform: scaleY(0.4) scaleX(1.2); opacity: 0.5; } to { transform: scaleY(1.3) scaleX(0.8); opacity: 1; } }

/* Animacje SVG: Rury i Woda */
.anim-flow-hot { stroke-dasharray: 6 12; stroke-dashoffset: 0; }
.state-safe .anim-flow-hot { stroke: #f97316; animation: flowSmooth 1.5s linear infinite; }
.state-error .anim-flow-hot { stroke: #dc2626; animation: flowFast 0.5s linear infinite; }

.anim-flow-mix { stroke-dasharray: 6 12; stroke-dashoffset: 0; transition: opacity 0.3s; }
.state-safe .anim-flow-mix { stroke: #0ea5e9; animation: flowSmooth 2s linear infinite; opacity: 1; }
.state-error .anim-flow-mix { opacity: 0; }

@keyframes flowSmooth { to { stroke-dashoffset: -36; } }
@keyframes flowFast { to { stroke-dashoffset: -36; } }

/* Animacje SVG: Bufor i Mieszacz */
.anim-buffer { transition: opacity 0.4s, transform 0.4s; transform-origin: bottom; }
.state-safe .anim-buffer { opacity: 1; transform: scaleY(1); }
.state-error .anim-buffer { opacity: 0.2; transform: scaleY(0); }

/* Animacje SVG: Wylewka i Pęknięcia */
.anim-floor { transition: fill 1s; }
.state-safe .anim-floor { fill: #94a3b8; }
.state-error .anim-floor { fill: #fca5a5; animation: throbRed 1.5s infinite alternate; }

.anim-crack { stroke-dasharray: 50; stroke-dashoffset: 50; transition: stroke-dashoffset 0.1s; opacity: 0; }
.state-error .anim-crack { stroke-dashoffset: 0; opacity: 1; transition: stroke-dashoffset 1s 0.5s ease-out, opacity 0.1s 0.5s; }

@keyframes throbRed { from { fill: #fca5a5; } to { fill: #ef4444; } }

/* Typografia Danych */
.rk-data-block {
    height: 100%; /* Wyrównanie wysokości kafelków na desktopie */
}

.rk-data-label {
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--rk-sync-muted);
    margin-bottom: 10px;
}

.rk-data-val {
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-sync-text);
}

.rk-data-val strong {
    font-weight: 800;
    color: var(--rk-sync-dark);
}

.rk-link {
    color: var(--rk-sync-water);
    text-decoration: none;
    border-bottom: 2px dashed rgba(14, 165, 233, 0.4);
    font-weight: 700;
    transition: all 0.3s;
}
.state-error .rk-link { color: var(--rk-sync-error); border-bottom-color: rgba(220, 38, 38, 0.4); }
.rk-link:hover { border-bottom-style: solid; }

@media (max-width: 768px) {
    .rk-sync-header, .rk-sync-interactive { padding: 30px 20px; }
    .rk-sync-h2 { font-size: 26px; }
    .rk-sync-grid { grid-template-columns: 1fr; gap: 20px; }
    .rk-sync-toggle-box { flex-direction: column; text-align: center; gap: 15px; border-radius: 20px; }
    .rk-sync-svg-wrapper { grid-column: auto; padding: 20px 10px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-podlogowka",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Czy kocioł na pellet nadaje się do ogrzewania podłogowego?",
    "description": "Szczegółowa analiza synchronizacji hydraulicznej: sprawność kotła pelletowego, bezwładność cieplna wylewki oraz konsekwencje braku bufora ciepła wg normy PN-EN 1264.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-podlogowka",
    "name": "Parametry synchronizacji hydraulicznej: Pellet i Ogrzewanie Podłogowe",
    "description": "Baza danych termodynamicznych i normatywnych opisujących współpracę wysokotemperaturowego kotła na biomasę z niskotemperaturową płytą grzewczą.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kocioł na pellet a podłogówka",
      "bufor ciepła",
      "temperatura zasilania podłogówki",
      "pękanie wylewki betonowej",
      "taktowanie kotła",
      "norma PN-EN 1264"
    ],
    "measurementTechnique": "Analiza termodynamiczna zgodna z normami PN-EN 303-5:2021-10 oraz PN-EN 1264-4, badająca akumulację cieplną jastrychu.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wymóg normatywny: Minimalna pojemność bufora 50 l/kW.",
        "Parametr bezpieczeństwa: Max temp. zasilania 55°C, optymalnie 35-40°C.",
        "Bezwładność cieplna: Wylewka betonowa 6,5 cm waży 130-150 kg/m²."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-podlogowka",
    "name": "Symulator Synchronizacji Hydraulicznej",
    "description": "Interaktywne narzędzie inżynierskie wizualizujące przepływy cieplne. Symuluje procesy taktowania palnika oraz pękania jastrychu przy braku grupy pompowej z mieszaczem.",
    "applicationCategory": "EngineeringSimulator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and inline SVG support.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-sync-container" id="rk-sync-app">
    <div class="rk-sync-header">
        <div class="rk-sync-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 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Analiza Kompatybilności
        </div>
        <h2 class="rk-sync-h2">Czy kocioł na pellet nadaje się do <span>ogrzewania podłogowego?</span></h2>
        <p class="rk-sync-paragraph">
            Tak, <a href="https://projekt-ogrzewania.pl/kociol-na-pellet/" style="color:#fdba74; font-weight:700;">kocioł na pellet</a> doskonale nadaje się do zasilania wodnego ogrzewania podłogowego, pod warunkiem zastosowania układu mieszającego oraz bufora ciepła o minimalnej pojemności <strong>50 l/kW mocy kotła</strong>, zgodnie z wytycznymi normy <strong>PN-EN 303-5:2021-10</strong>. Ogrzewanie podłogowe wymaga niskich temperatur zasilania (maksymalnie 55°C w stanach awaryjnych, typowo 35-40°C), natomiast kocioł pelletowy musi pracować w temperaturze powrotu powyżej 55°C, aby uniknąć korozji niskotemperaturowej. Ta różnica potencjałów termicznych sprawia, że bezpośrednie połączenie tych dwóch systemów bez hydraulicznego rozprzężenia to <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/" style="color:#fdba74; font-weight:700;">krytyczny błąd sztuki budowlanej</a>.
        </p>
    </div>

    <div class="rk-sync-interactive">
        <h3 class="rk-sync-h3">Symulacja Przepływów: Konsekwencje Błędów Instalacyjnych</h3>
        
        <div class="rk-sync-toggle-box">
            <span class="rk-sync-label active-safe" id="rk-lbl-safe" onclick="document.getElementById('rk-sync-toggle').click()">Standard (Bufor + Mieszacz)</span>
            <label class="rk-sync-switch">
                <input type="checkbox" id="rk-sync-toggle">
                <span class="rk-sync-slider"></span>
            </label>
            <span class="rk-sync-label" id="rk-lbl-error" onclick="document.getElementById('rk-sync-toggle').click()">Błąd (Bezpośrednie spięcie)</span>
        </div>

        <div class="rk-sync-grid state-safe" id="rk-main-grid">
            
            <div class="rk-sync-panel">
                <div class="rk-data-block">
                    <div class="rk-data-label">Praca źródła ciepła (Sprawność)</div>
                    <div class="rk-data-val" id="rk-text-boiler">
                        <strong>Stabilny cykl ciągły (>92%).</strong> Nowoczesny palnik wrzutkowy pracuje z mocą nominalną. Ciepło ładuje <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-link">zbiornik buforowy</a>, eliminując problem zjawiska taktowania. Emisja CO i pyłów jest minimalna.
                    </div>
                </div>
            </div>

            <div class="rk-sync-panel">
                <div class="rk-data-block">
                    <div class="rk-data-label">Parametry jastrychu i bezpieczeństwo</div>
                    <div class="rk-data-val" id="rk-text-floor">
                        <strong>Łagodne ładowanie (35-40°C).</strong> <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/" class="rk-link">Zawór mieszający</a> obniża temperaturę do bezpiecznego poziomu. Ogromna masa <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" class="rk-link">wylewki betonowej</a> (grub. 6,5 cm, 150 kg/m²) działa jak powolny, pasywny akumulator, powoli oddając ciepło do pomieszczenia.
                    </div>
                </div>
            </div>

            <div class="rk-sync-svg-wrapper">
                <svg class="rk-svg-main" viewBox="0 0 250 180">
                    <rect x="10" y="70" width="60" height="90" fill="#334155" rx="4"></rect>
                    <path class="anim-flame" d="M40 140 C25 140, 20 100, 40 80 C60 100, 55 140, 40 140 Z"></path>
                    
                    <path class="anim-flow-hot" d="M70 90 L100 90" fill="none" stroke-width="6" stroke-linecap="round"></path>
                    
                    <g class="anim-buffer">
                        <rect x="100" y="40" width="40" height="120" fill="#1e293b" stroke="#0ea5e9" stroke-width="2" rx="8"></rect>
                        <path class="anim-flow-mix" d="M140 140 L160 140" fill="none" stroke-width="6" stroke-linecap="round"></path>
                        <polygon points="160,130 160,150 180,140" fill="#cbd5e1"></polygon>
                        <polygon points="170,120 190,120 180,140" fill="#cbd5e1"></polygon>
                    </g>

                    <path class="anim-flow-hot" id="rk-bypass-pipe" d="M70 90 L180 90 L180 140" fill="none" stroke-width="6" stroke-linecap="round" style="opacity:0;"></path>

                    <path class="anim-flow-mix" id="rk-floor-pipe" d="M180 140 L210 140" fill="none" stroke-width="6" stroke-linecap="round"></path>
                    
                    <rect class="anim-floor" x="180" y="130" width="60" height="30" rx="2"></rect>
                    <circle cx="200" cy="140" r="5" fill="#1e293b"></circle>
                    <circle cx="220" cy="140" r="5" fill="#1e293b"></circle>
                    
                    <path class="anim-crack" d="M190 130 L195 145 L185 160" fill="none" stroke="#000" stroke-width="2"></path>
                    <path class="anim-crack" d="M220 130 L215 140 L225 155" fill="none" stroke="#000" stroke-width="2"></path>
                </svg>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    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-sync-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🚧</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano kod autorski</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Próba osadzenia interaktywnego symulatora inżynierskiego poza autoryzowaną domeną. Kontener oraz struktura JSON-LD zostały zdeztywowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    const toggle = document.getElementById('rk-sync-toggle');
    const grid = document.getElementById('rk-main-grid');
    const lblSafe = document.getElementById('rk-lbl-safe');
    const lblError = document.getElementById('rk-lbl-error');
    
    const bypassPipe = document.getElementById('rk-bypass-pipe');
    const floorPipe = document.getElementById('rk-floor-pipe');
    
    const txtBoiler = document.getElementById('rk-text-boiler');
    const txtFloor = document.getElementById('rk-text-floor');

    toggle.addEventListener('change', function() {
        if (this.checked) {
            grid.className = 'rk-sync-grid state-error';
            lblSafe.classList.remove('active-safe');
            lblError.classList.add('active-error');
            
            bypassPipe.style.opacity = '1';
            floorPipe.classList.remove('anim-flow-mix');
            floorPipe.classList.add('anim-flow-hot');
            
            txtBoiler.innerHTML = '<strong>Taktowanie (Spadek o 15-20%).</strong> Kocioł ciągle się rozpala i wygasza, próbując dopasować moc do małego zładu wody. Powstaje smoła, zapalarka ulega uszkodzeniu po jednym sezonie.';
            txtFloor.innerHTML = '<strong>Destrukcja termiczna (70°C).</strong> Wpuszczenie wrzątku bezpośrenio w rury powoduje natychmiastowe przekroczenie dopuszczalnej normą PN-EN 1264 temperatury (max 29°C). Wylewka pęka, płytki odpadają od podłoża.';
            
        } else {
            grid.className = 'rk-sync-grid state-safe';
            lblError.classList.remove('active-error');
            lblSafe.classList.add('active-safe');
            
            bypassPipe.style.opacity = '0';
            floorPipe.classList.remove('anim-flow-hot');
            floorPipe.classList.add('anim-flow-mix');
            
            txtBoiler.innerHTML = '<strong>Stabilny cykl ciągły (>92%).</strong> Nowoczesny palnik wrzutkowy pracuje z mocą nominalną. Ciepło ładuje <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-link">zbiornik buforowy</a>, eliminując problem zjawiska taktowania. Emisja CO i pyłów jest minimalna.';
            txtFloor.innerHTML = '<strong>Łagodne ładowanie (35-40°C).</strong> <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/" class="rk-link">Zawór mieszający</a> obniża temperaturę do bezpiecznego poziomu. Ogromna masa <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" class="rk-link">wylewki betonowej</a> (grub. 6,5 cm) działa jak pasywny akumulator.';
        }
    });
});
</script>



<style>
:root {
    --rk-temp-dark: #0f172a;
    --rk-temp-card: #ffffff;
    --rk-temp-hot: #ef4444; /* Wrzątek / Kocioł */
    --rk-temp-mix: #f59e0b; /* Optymalna podłoga */
    --rk-temp-cold: #3b82f6; /* Powrót / Zima */
    --rk-temp-evoh: #10b981; /* Ochrona EVOH */
    --rk-temp-bg: #f8fafc;
    --rk-temp-border: #e2e8f0;
    --rk-temp-text: #334155;
    --rk-temp-muted: #64748b;
}

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

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

.rk-temp-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(239, 68, 68, 0.2);
    color: #fca5a5;
    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(239, 68, 68, 0.3);
}

.rk-temp-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-temp-h2 span { color: var(--rk-temp-hot); }

.rk-temp-paragraph {
    font-size: 16px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0 0 15px 0;
}

.rk-temp-paragraph strong { color: #ffffff; }

/* Sekcja Symulatora Krzywej */
.rk-temp-interactive {
    padding: 40px 50px;
    background: var(--rk-temp-bg);
    border-bottom: 1px solid var(--rk-temp-border);
}

.rk-temp-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-temp-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

/* Dashboard Controls */
.rk-temp-dashboard {
    background: #ffffff;
    border: 1px solid var(--rk-temp-border);
    border-radius: 16px;
    padding: 30px;
    margin-bottom: 30px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

/* Suwak (Slider) */
.rk-slider-group {
    margin-bottom: 30px;
}

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

.rk-slider-label {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-temp-muted);
    text-transform: uppercase;
}

.rk-slider-value {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-temp-cold);
    background: #f0f9ff;
    padding: 5px 15px;
    border-radius: 8px;
    border: 1px solid #bae6fd;
}

.rk-range-input {
    width: 100%;
    -webkit-appearance: none;
    height: 8px;
    background: linear-gradient(to right, #3b82f6 0%, #cbd5e1 50%, #f59e0b 100%);
    border-radius: 4px;
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-temp-dark);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    transition: transform 0.1s;
}
.rk-range-input::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Switcher / Toggle dla zaworu */
.rk-toggle-group {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 15px;
    padding-top: 20px;
    border-top: 1px dashed var(--rk-temp-border);
}

.rk-valve-label {
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-temp-muted);
    transition: color 0.3s;
}

.rk-valve-switch {
    position: relative;
    display: inline-block;
    width: 60px;
    height: 32px;
}
.rk-valve-switch input { opacity: 0; width: 0; height: 0; }
.rk-valve-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--rk-temp-mix);
    border-radius: 32px;
    transition: .4s;
}
.rk-valve-slider:before {
    position: absolute;
    content: "";
    height: 24px;
    width: 24px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    border-radius: 50%;
    transition: .4s;
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
input:checked + .rk-valve-slider { background-color: var(--rk-temp-hot); }
input:checked + .rk-valve-slider:before { transform: translateX(28px); }

/* Grid Wyników i SVG */
.rk-temp-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
}

/* SVG Panel */
.rk-temp-svg-panel {
    background: #0f172a;
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    position: relative;
}

.rk-svg-main {
    width: 100%;
    max-width: 320px;
}

/* Data Panel */
.rk-temp-data-panel {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-data-card {
    background: #ffffff;
    border: 1px solid var(--rk-temp-border);
    border-radius: 12px;
    padding: 15px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s;
}

.rk-data-card.card-boiler { border-left: 4px solid var(--rk-temp-hot); }
.rk-data-card.card-floor { border-left: 4px solid var(--rk-temp-mix); }
.rk-data-card.card-status { border-left: 4px solid var(--rk-temp-cold); background: #f8fafc; }

.rk-card-title {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-temp-muted);
    text-transform: uppercase;
}

.rk-card-value {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-temp-dark);
}

.val-hot { color: var(--rk-temp-hot); }
.val-mix { color: var(--rk-temp-mix); }

/* Sekcja EVOH */
.rk-temp-evoh-sec {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-evoh-box {
    background: #f0fdf4;
    border: 1px solid #bbf7d0;
    border-radius: 16px;
    padding: 25px;
    display: flex;
    gap: 20px;
    align-items: flex-start;
}

.rk-evoh-icon {
    width: 48px;
    height: 48px;
    background: var(--rk-temp-evoh);
    color: #ffffff;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.rk-evoh-text h4 {
    margin: 0 0 10px 0;
    font-size: 18px;
    font-weight: 800;
    color: #166534;
}

.rk-evoh-text p {
    margin: 0;
    font-size: 15px;
    line-height: 1.6;
    color: #15803d;
}

/* SVG Animations & Dynamic Classes */
.anim-flow { stroke-dasharray: 6 12; animation: flow 1s linear infinite; }
@keyframes flow { to { stroke-dashoffset: -18; } }

.crack-path { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0.5s ease-out; opacity: 0; }
.show-crack .crack-path { stroke-dashoffset: 0; opacity: 1; }

.rk-link {
    color: var(--rk-temp-mix);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px dashed rgba(245, 158, 11, 0.4);
    transition: all 0.3s;
}
.rk-link:hover { border-bottom-style: solid; color: var(--rk-temp-hot); }

@media (max-width: 768px) {
    .rk-temp-header, .rk-temp-interactive, .rk-temp-evoh-sec { padding: 30px 20px; }
    .rk-temp-grid { grid-template-columns: 1fr; }
    .rk-evoh-box { flex-direction: column; }
    .rk-temp-h2 { font-size: 26px; }
    .rk-data-card { flex-direction: column; align-items: flex-start; gap: 5px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/"
    },
    "headline": "Maksymalna temperatura zasilania podłogówki z kotła i rola zaworu trójdrogowego",
    "description": "Zrozumienie normy PN-EN 1264-2: dlaczego woda w rurach podłogówki nie może przekraczać 50°C. Interaktywny symulator krzywej grzewczej 0.4.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/#dataset",
    "name": "Krzywa grzewcza 0.4 i parametry zasilania (2026)",
    "description": "Zestawienie inżynierskie mapujące optymalną temperaturę zasilania jastrychu w zależności od temperatury zewnętrznej przy zachowaniu granicy 50°C.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "temperatura zasilania podłogówki",
      "krzywa grzewcza 0.4",
      "zawór trójdrogowy mieszający",
      "bariera antydyfuzyjna EVOH",
      "norma PN-EN 1264-2"
    ],
    "measurementTechnique": "Obliczenia termodynamiczne automatyki pogodowej (slope 0.4) w relacji do ograniczeń fizycznych wytrzymałości jastrychu (klasa F4 wg PN-EN 13813).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Kocioł pelletowy: Generuje stałe 65-80°C.",
        "Krzywa 0.4 przy +10°C: Zasilanie podłogi = 26°C.",
        "Krzywa 0.4 przy -15°C: Zasilanie podłogi = 38°C.",
        "Ograniczenie jastrychu: Max 50°C (skrajnie 55°C w łazience)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/#webapp",
    "name": "Symulator Zaworu Mieszającego i Krzywej Grzewczej",
    "description": "Interaktywna aplikacja obliczeniowa na żywo korelująca odczyty z czujnika pogodowego z pracą zaworu trójdrogowego, symulująca pękanie posadzki przy awarii mieszacza.",
    "applicationCategory": "EngineeringSimulator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5 Range Input, and SVG support.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-temp-container" id="rk-temp-app">
    <div class="rk-temp-header">
        <div class="rk-temp-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 9a4 4 0 0 0-2 7.5"></path><path d="M12 3v2"></path><path d="m6.6 18.4-1.4 1.4"></path><path d="m20 4-1.4 1.4"></path><path d="M4 22l1.4-1.4"></path><path d="M21 13h-2"></path><path d="m17.4 18.4 1.4 1.4"></path></svg>
            Parametry Krytyczne wg Normy
        </div>
        <h2 class="rk-temp-h2">Jaka jest maksymalna temperatura zasilania <span>podłogówki z kotła?</span></h2>
        <p class="rk-temp-paragraph">
            Maksymalna temperatura zasilania instalacji ogrzewania podłogowego wynosi <strong>50°C</strong> (w skrajnych przypadkach dla łazienek 55°C), co precyzyjnie definiuje <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/" style="color:#fca5a5; font-weight:700;">norma PN-EN 1264-2</a>. Przekroczenie tej wartości granicznej generuje naprężenia wewnętrzne w jastrychu przekraczające jego wytrzymałość na rozciąganie przy zginaniu (klasa jastrychu minimum F4 wg PN-EN 13813). W normalnych warunkach eksploatacyjnych, przy temperaturze projektowej zewnętrznej dla III strefy klimatycznej Polski (-20°C), <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/" style="color:#fca5a5; font-weight:700;">optymalna temperatura zasilania wynosi 35°C do 40°C</a>.
        </p>
    </div>

    <div class="rk-temp-interactive">
        <h3 class="rk-temp-h3">Rola zaworu trójdrogowego i krzywej grzewczej</h3>
        <p style="text-align:center; color:#64748b; margin-bottom:30px; font-size:15px; max-width:700px; margin-left:auto; margin-right:auto;">
            Aby obniżyć parametry wysokiej temperatury z kotła (65-80°C) do bezpiecznego poziomu, stosuje się <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/" class="rk-link">zawór mieszający z siłownikiem</a>. Regulator dobiera temperaturę według <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/" class="rk-link">krzywej grzewczej</a>. Sprawdź, jak to działa na żywo (krzywa 0.4):
        </p>

        <div class="rk-temp-dashboard">
            <div class="rk-slider-group">
                <div class="rk-slider-header">
                    <div class="rk-slider-label">Temperatura Zewnętrzna (Czujnik)</div>
                    <div class="rk-slider-value" id="rk-out-temp">+10°C</div>
                </div>
                <input type="range" id="rk-out-slider" class="rk-range-input" min="-20" max="15" value="10">
            </div>

            <div class="rk-toggle-group">
                <span class="rk-valve-label" id="rk-lbl-on" style="color:#f59e0b;">Zawór Działa (Mieszanie)</span>
                <label class="rk-valve-switch">
                    <input type="checkbox" id="rk-valve-toggle">
                    <span class="rk-valve-slider"></span>
                </label>
                <span class="rk-valve-label" id="rk-lbl-off">Awaria / Brak Zaworu</span>
            </div>
        </div>

        <div class="rk-temp-grid">
            <div class="rk-temp-svg-panel" id="rk-svg-container">
                <svg class="rk-svg-main" viewBox="0 0 250 150">
                    <rect x="10" y="20" width="50" height="100" fill="#334155" rx="4"/>
                    <text x="35" y="75" fill="#ef4444" font-size="16" font-weight="bold" text-anchor="middle">75°</text>
                    
                    <path class="anim-flow" d="M60 40 L100 40" fill="none" stroke="#ef4444" stroke-width="8" stroke-linecap="round"/>
                    
                    <g id="rk-svg-valve">
                        <polygon points="100,30 100,50 120,40" fill="#cbd5e1"/>
                        <polygon points="120,40 140,30 140,50" fill="#cbd5e1"/>
                        <polygon points="110,60 130,60 120,40" fill="#cbd5e1"/>
                        <circle cx="120" cy="40" r="4" fill="#1e293b"/>
                    </g>

                    <path class="anim-flow" id="rk-svg-return" d="M120 110 L120 60" fill="none" stroke="#3b82f6" stroke-width="6" stroke-linecap="round"/>
                    <path class="anim-flow" d="M220 110 L120 110" fill="none" stroke="#3b82f6" stroke-width="6" stroke-linecap="round"/>

                    <path class="anim-flow" id="rk-svg-mixpipe" d="M140 40 L220 40 L220 70" fill="none" stroke="#f59e0b" stroke-width="8" stroke-linecap="round" transition="stroke 0.3s"/>
                    
                    <rect id="rk-svg-floor" x="160" y="70" width="80" height="30" fill="#94a3b8" rx="2" style="transition: fill 0.5s;"/>
                    <text id="rk-svg-floortext" x="200" y="90" fill="#ffffff" font-size="14" font-weight="bold" text-anchor="middle">26°C</text>

                    <path class="crack-path" d="M170 70 L180 85 L175 100" fill="none" stroke="#000000" stroke-width="2"/>
                    <path class="crack-path" d="M210 70 L205 85 L215 100" fill="none" stroke="#000000" stroke-width="2"/>
                </svg>
            </div>

            <div class="rk-temp-data-panel">
                <div class="rk-data-card card-boiler">
                    <div class="rk-card-title">Zasilanie Kotła (Stałe)</div>
                    <div class="rk-card-value val-hot">75.0 °C</div>
                </div>
                <div class="rk-data-card card-floor" id="rk-card-mix">
                    <div class="rk-card-title">Woda na posadzkę (Zredukowana)</div>
                    <div class="rk-card-value val-mix" id="rk-val-mix">26.0 °C</div>
                </div>
                <div class="rk-data-card card-status" id="rk-card-status">
                    <div class="rk-card-title">Status Jastrychu</div>
                    <div class="rk-card-value" style="color:#10b981;" id="rk-val-status">Bezpieczny (Norma)</div>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-temp-evoh-sec">
        <h3 class="rk-temp-h3" style="text-align:left;">Znaczenie bariery antydyfuzyjnej EVOH w rurach</h3>
        <div class="rk-evoh-box">
            <div class="rk-evoh-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            </div>
            <div class="rk-evoh-text">
                <h4>Ochrona instalacji wg normy DIN 4726</h4>
                <p>
                    Zgodnie z normą DIN 4726, <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/" style="color:#166534; font-weight:700; text-decoration:underline; text-underline-offset:2px;">rury grzewcze (PEX, PERT)</a> stosowane w instalacjach płaszczyznowych muszą posiadać warstwę antydyfuzyjną EVOH (alkohol etylowinylowy). Zapobiega ona przenikaniu tlenu z powietrza do wnętrza układu. Przy kotłach stałopalnych, natleniona woda błyskawicznie powoduje korozję wżerową wymienników i zapowietrzanie się pętli grzewczych.
                </p>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Ochrona Algorytmiczna (Brak znaczników H w fallbacku)
    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-temp-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zabezpieczenie Licencyjne</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Moduł kalkulatora krzywej grzewczej i pliki JSON-LD zostały zablokowane z powodu nieautoryzowanego użycia na obcej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Krzywej Grzewczej 0.4
    const slider = document.getElementById('rk-out-slider');
    const outTempDisplay = document.getElementById('rk-out-temp');
    const toggleValve = document.getElementById('rk-valve-toggle');
    
    // UI Elements
    const lblOn = document.getElementById('rk-lbl-on');
    const lblOff = document.getElementById('rk-lbl-off');
    const valMix = document.getElementById('rk-val-mix');
    const valStatus = document.getElementById('rk-val-status');
    const cardMix = document.getElementById('rk-card-mix');
    
    // SVG Elements
    const svgMixPipe = document.getElementById('rk-svg-mixpipe');
    const svgFloor = document.getElementById('rk-svg-floor');
    const svgFloorText = document.getElementById('rk-svg-floortext');
    const svgContainer = document.getElementById('rk-svg-container');
    const svgReturn = document.getElementById('rk-svg-return');

    // Algorytm wyliczający T_zasilania na podstawie krzywej 0.4
    // Uproszczona matematyka dająca dokładnie: +10C -> 26C, -15C -> 38C
    // T_floor = 30.8 - (0.48 * T_out)
    function calculateFloorTemp(tOut) {
        let tFloor = 30.8 - (0.48 * tOut);
        return Math.round(tFloor * 10) / 10;
    }

    function updateSimulation() {
        let tOut = parseInt(slider.value);
        let prefix = tOut > 0 ? "+" : "";
        outTempDisplay.innerText = prefix + tOut + "°C";

        let isBroken = toggleValve.checked;

        if (isBroken) {
            // AWARIA ZAWORU - Płynie wrzątek z kotła
            lblOn.style.color = 'var(--rk-temp-muted)';
            lblOff.style.color = 'var(--rk-temp-hot)';
            
            valMix.innerText = "75.0 °C";
            valMix.className = "rk-card-value val-hot";
            cardMix.style.borderLeftColor = "var(--rk-temp-hot)";
            
            valStatus.innerText = "KRYTYCZNE: Pękanie jastrychu!";
            valStatus.style.color = "var(--rk-temp-hot)";
            
            // Wizualizacja SVG
            svgMixPipe.setAttribute("stroke", "#ef4444"); // czerwona rura
            svgReturn.style.opacity = "0.2"; // brak powrotu zimnej
            svgFloor.setAttribute("fill", "#fca5a5"); // podłoga się przegrzewa
            svgFloorText.textContent = "75°C";
            svgContainer.classList.add("show-crack");

        } else {
            // ZAWÓR DZIAŁA - Mieszanie pogodowe
            lblOff.style.color = 'var(--rk-temp-muted)';
            lblOn.style.color = 'var(--rk-temp-mix)';
            
            let tFloor = calculateFloorTemp(tOut);
            valMix.innerText = tFloor.toFixed(1) + " °C";
            valMix.className = "rk-card-value val-mix";
            cardMix.style.borderLeftColor = "var(--rk-temp-mix)";
            
            if (tFloor <= 50) {
                valStatus.innerText = "Bezpieczny (Zgodnie z normą)";
                valStatus.style.color = "var(--rk-temp-evoh)";
                svgFloor.setAttribute("fill", "#94a3b8");
                svgContainer.classList.remove("show-crack");
            } else {
                valStatus.innerText = "Ostrzeżenie: Granica normy";
                valStatus.style.color = "var(--rk-temp-mix)";
            }

            // Wizualizacja SVG - zmiana koloru rury w zależności od temp
            svgReturn.style.opacity = "1";
            svgFloorText.textContent = tFloor.toFixed(0) + "°C";
            
            if(tFloor < 30) svgMixPipe.setAttribute("stroke", "#fbbf24"); // żółty
            else if (tFloor < 40) svgMixPipe.setAttribute("stroke", "#f59e0b"); // pomarańcz
            else svgMixPipe.setAttribute("stroke", "#d97706"); // ciemny pomarańcz
        }
    }

    slider.addEventListener('input', updateSimulation);
    toggleValve.addEventListener('change', updateSimulation);

    // Init
    updateSimulation();
});
</script>



<style>
:root {
    --rk-flow-dark: #0f172a;
    --rk-flow-card: #ffffff;
    --rk-flow-cyan: #06b6d4; /* Precyzja Inżynierska */
    --rk-flow-cyan-light: #cffafe;
    --rk-flow-blue: #3b82f6; /* Woda / Przepływ */
    --rk-flow-blue-light: #dbeafe;
    --rk-flow-alert: #ef4444; /* Ostrzeżenie / Brak zładu */
    --rk-flow-bg: #f8fafc;
    --rk-flow-border: #e2e8f0;
    --rk-flow-text: #334155;
    --rk-flow-muted: #64748b;
}

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

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

.rk-flow-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(6, 182, 212, 0.2);
    color: #67e8f9;
    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(6, 182, 212, 0.3);
}

.rk-flow-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-flow-h2 span { color: var(--rk-flow-cyan); }

.rk-flow-paragraph {
    font-size: 16px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

.rk-flow-formula {
    background: rgba(0,0,0,0.3);
    padding: 15px 20px;
    border-radius: 12px;
    font-family: 'Courier New', monospace;
    font-size: 18px;
    color: #22d3ee;
    text-align: center;
    margin: 20px 0;
    border: 1px dashed rgba(34, 211, 238, 0.4);
}

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

.rk-flow-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-flow-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

.rk-flow-grid {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
    gap: 30px;
    background: #ffffff;
    padding: 30px;
    border-radius: 16px;
    border: 1px solid var(--rk-flow-border);
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
}

/* Suwaki / Controls */
.rk-flow-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-slider-group {
    background: var(--rk-flow-bg);
    padding: 15px 20px;
    border-radius: 12px;
    border: 1px solid var(--rk-flow-border);
}

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

.rk-slider-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-flow-muted);
    text-transform: uppercase;
}

.rk-slider-value {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-flow-cyan);
}

.rk-range-input {
    width: 100%;
    -webkit-appearance: none;
    height: 8px;
    background: linear-gradient(to right, #bae6fd 0%, #06b6d4 100%);
    border-radius: 4px;
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-flow-cyan);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    transition: transform 0.1s;
}
.rk-range-input::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Wyniki & Wizualizacja */
.rk-flow-results {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-result-card {
    background: var(--rk-flow-bg);
    border: 1px solid var(--rk-flow-border);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-result-card.highlight {
    background: var(--rk-flow-cyan-light);
    border-color: var(--rk-flow-cyan);
}

.rk-result-label {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-flow-text);
}

.rk-result-val {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-flow-dark);
}

.rk-result-card.highlight .rk-result-val { color: var(--rk-flow-cyan); }

/* Zład Wody Info */
.rk-volume-info {
    margin-top: 40px;
    padding: 30px;
    background: #ffffff;
    border-radius: 16px;
    border-left: 5px solid var(--rk-flow-alert);
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-volume-info h4 {
    margin: 0 0 15px 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-flow-dark);
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-volume-info p {
    margin: 0 0 10px 0;
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-flow-text);
}

.rk-link {
    color: var(--rk-flow-cyan);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px dashed rgba(6, 182, 212, 0.4);
    transition: all 0.3s;
}
.rk-link:hover { border-bottom-style: solid; color: #0891b2; }

@media (max-width: 768px) {
    .rk-flow-header, .rk-flow-interactive { padding: 30px 20px; }
    .rk-flow-grid { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-flow-h2 { font-size: 26px; }
    .rk-volume-info { padding: 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#article-przeplyw",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Ile m³ wody na godzinę musi przepłynąć przez instalację? Algorytmy i zład wody",
    "description": "Zrozumienie fundamentalnego wzoru termodynamiki m = Q / (cw · ΔT). Obliczanie nastaw rotametrów na rozdzielaczu i analiza ryzyka małego zładu wody przy kotłach na pellet.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#dataset-przeplyw",
    "name": "Kalkulator Przepływu Masowego i Zładu Wody (2026)",
    "description": "Zestawienie inżynierskie łączące ciepło właściwe wody (1,163 Wh/kg·K) z zapotrzebowaniem na moc i projektową deltą temperatur w celu wyznaczenia przepływu w rotametrach.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "przepływ w ogrzewaniu podłogowym",
      "wzór na przepływ wody",
      "nastawy rotametrów podłogówka",
      "zład wody rura 16x2",
      "taktowanie kotła pelletowego"
    ],
    "measurementTechnique": "Termodynamiczne równanie bilansu cieplnego z uwzględnieniem ciepła właściwego wody oraz pojemności wodnej rur PEX/PERT 16x2 (0,113 l/mb).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Przykład 10 kW, ΔT = 5 K: Przepływ = 1,72 m³/h (28,6 l/min).",
        "Przykład pętla 1200 W, ΔT = 5 K: Przepływ pętli = 3,44 l/min.",
        "Zład wody dla 100 m² (rozstaw 10 cm): ok. 113 litrów (Zbyt mało dla kotła stałopalnego bez bufora)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#webapp-przeplyw",
    "name": "Interaktywny Kalkulator Rotametrów i Algorytmów Przepływu",
    "description": "Dynamiczne narzędzie inżynierskie obliczające na żywo przepływ objętościowy [l/min] na bazie zmian mocy OZC i spadku temperatury ΔT.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Range Inputs.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-flow-container" id="rk-flow-app">
    <div class="rk-flow-header">
        <div class="rk-flow-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 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Termodynamika w Praktyce
        </div>
        <h2 class="rk-flow-h2">Ile m³ wody na godzinę musi <span>przepłynąć przez instalację?</span></h2>
        <p class="rk-flow-paragraph">
            Dla budynku o zapotrzebowaniu na moc cieplną <strong>Q = 10 kW</strong> i projektowej różnicy temperatur <strong>ΔT = 5 K</strong> (typowy spadek dla podłogówki), wymagany masowy przepływ nominalny wynosi dokładnie <strong>1,72 m³/h</strong> (28,6 l/min). Wartość tę wylicza się bezpośrednio z fundamentalnego wzoru termodynamiki:
        </p>
        <div class="rk-flow-formula">
            m = Q / (cw · ΔT)
        </div>
        <p class="rk-flow-paragraph" style="font-size: 14px; opacity: 0.9;">
            Gdzie <strong>cw</strong> to ciepło właściwe wody wynoszące <strong>1,163 Wh/(kg·K)</strong>. Każde drastyczne zdławienie przepływu poniżej wartości obliczeniowej przez źle dobraną <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/" style="color:#67e8f9; font-weight:700;">pompę obiegową</a> skutkuje niedogrzaniem stref oddalonych od rozdzielacza i zaburzeniem równowagi hydraulicznej obiegu.
        </p>
    </div>

    <div class="rk-flow-interactive">
        <h3 class="rk-flow-h3">Algorytm obliczania przepływu dla pętli grzewczych</h3>
        
        <div class="rk-flow-grid">
            <div class="rk-flow-controls">
                <div class="rk-slider-group">
                    <div class="rk-slider-header">
                        <div class="rk-slider-label">Zapotrzebowanie z OZC (Q)</div>
                        <div class="rk-slider-value" id="rk-val-q">1200 W</div>
                    </div>
                    <input type="range" id="rk-slider-q" class="rk-range-input" min="500" max="2500" step="100" value="1200">
                </div>

                <div class="rk-slider-group">
                    <div class="rk-slider-header">
                        <div class="rk-slider-label">Spadek temperatury (ΔT)</div>
                        <div class="rk-slider-value" id="rk-val-dt">5 K</div>
                    </div>
                    <input type="range" id="rk-slider-dt" class="rk-range-input" min="3" max="10" step="1" value="5">
                </div>
            </div>

            <div class="rk-flow-results">
                <div class="rk-result-card">
                    <div class="rk-result-label">Strumień masowy</div>
                    <div class="rk-result-val" id="rk-out-mass">206.4 kg/h</div>
                </div>
                <div class="rk-result-card highlight">
                    <div class="rk-result-label">Nastawa Rotametru <br><span style="font-size:11px; color:#64748b; font-weight:400;">(Złożenie dla 2 pętli w salonie)</span></div>
                    <div class="rk-result-val" id="rk-out-rota">1.72 l/min</div>
                </div>
            </div>
        </div>

        <div class="rk-volume-info">
            <h4>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><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>
                Zjawisko zbyt małego zładu wody
            </h4>
            <p>
                Ogrzewanie podłogowe oparte na <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/" class="rk-link">rurze PEX/PERT 16x2 mm</a> mieści w sobie zaledwie <strong>0,113 litra wody</strong> na każdy metr bieżący. Przy rozstawie co 10 cm, na powierzchni 100 m² mamy około 1000 m rury, co daje zład wodny rzędu zaledwie <strong>113 litrów</strong>.
            </p>
            <p>
                Dla nowoczesnego kotła na pellet o modulacji mocy od 3 kW do 10 kW to <a href="https://projekt-ogrzewania.pl/wiekszy-czy-mniejszy-zlad-wody-w-ogrzewaniu-podlogowym/" class="rk-link">zdecydowanie za mało</a>. Kocioł nie ma gdzie zrzucić wyprodukowanej energii cieplnej, gdy automatyka pokojowa zamknie większość obwodów. Bez dodatkowego magazynu energii (zbiornika buforowego) układ błyskawicznie wejdzie w tryb niszczącego, <strong>ciągłego taktowania</strong>.
            </p>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Ochrona Algorytmiczna (Brak znaczników H w fallbacku)
    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-flow-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowany Moduł Algorytmiczny</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Kalkulator rotametrów oraz pliki JSON-LD zostały zablokowane z powodu nieautoryzowanego użycia na obcej domenie. Własność Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Kalkulatora Przepływu
    const sliderQ = document.getElementById('rk-slider-q');
    const sliderDT = document.getElementById('rk-slider-dt');
    const valQ = document.getElementById('rk-val-q');
    const valDT = document.getElementById('rk-val-dt');
    
    const outMass = document.getElementById('rk-out-mass');
    const outRota = document.getElementById('rk-out-rota');

    // Stała fizyczna: ciepło właściwe wody w Wh/(kg*K)
    const cw = 1.163; 
    
    // Obliczanie
    function updateFlowCalc() {
        let Q = parseFloat(sliderQ.value);
        let dT = parseFloat(sliderDT.value);
        
        // Update Labels
        valQ.innerText = Q + " W";
        valDT.innerText = dT + " K";
        
        // 1. Strumień masowy: m = Q / (cw * dT) [kg/h]
        let massFlow = Q / (cw * dT);
        outMass.innerText = massFlow.toFixed(1) + " kg/h";
        
        // 2. Przepływ objętościowy [l/min] = kg/h / 60 (zakładając gęstość wody 1kg/l)
        let volFlowMin = massFlow / 60;
        
        // 3. Rozbicie na pętle (zakładamy 2 pętle w jednym dużym pokoju)
        let loopFlow = volFlowMin / 2;
        outRota.innerText = loopFlow.toFixed(2) + " l/min";
    }

    sliderQ.addEventListener('input', updateFlowCalc);
    sliderDT.addEventListener('input', updateFlowCalc);

    // Init
    updateFlowCalc();
});
</script>



<style>
:root {
    --rk-buf2-dark: #0f172a;
    --rk-buf2-blue: #2563eb; /* Głęboki niebieski dla bufora */
    --rk-buf2-blue-light: #eff6ff;
    --rk-buf2-orange: #ea580c; /* Ciepło kotła */
    --rk-buf2-orange-light: #fff7ed;
    --rk-buf2-green: #16a34a; /* Sukces / Oszczędność */
    --rk-buf2-green-light: #f0fdf4;
    --rk-buf2-bg: #f8fafc;
    --rk-buf2-border: #cbd5e1;
    --rk-buf2-text: #334155;
    --rk-buf2-muted: #64748b;
}

.rk-buf2-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(37, 99, 235, 0.15);
    border: 1px solid rgba(37, 99, 235, 0.3);
    overflow: hidden;
}

/* Sekcja Górna */
.rk-buf2-header {
    background: linear-gradient(135deg, var(--rk-buf2-dark) 0%, #1e3a8a 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-buf2-blue);
}

.rk-buf2-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(37, 99, 235, 0.2);
    color: #93c5fd;
    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(147, 197, 253, 0.3);
}

.rk-buf2-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
    letter-spacing: -0.5px;
}

.rk-buf2-h2 span { color: #60a5fa; }

.rk-buf2-paragraph {
    font-size: 16px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

.rk-buf2-paragraph strong { color: #ffffff; }

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

.rk-buf2-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-buf2-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

/* Przełącznik Widoku */
.rk-buf2-toggle-box {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    margin-bottom: 40px;
    background: #ffffff;
    padding: 15px 30px;
    border-radius: 100px;
    border: 1px solid var(--rk-buf2-border);
    max-width: 620px;
    margin-left: auto;
    margin-right: auto;
}

.rk-buf2-label {
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-buf2-muted);
    cursor: pointer;
    transition: color 0.3s;
    user-select: none;
}

.rk-buf2-label.active-pro { color: var(--rk-buf2-blue); }
.rk-buf2-label.active-warn { color: var(--rk-buf2-orange); }

.rk-buf2-switch {
    position: relative;
    display: inline-block;
    width: 64px;
    height: 32px;
    flex-shrink: 0;
}

.rk-buf2-switch input { opacity: 0; width: 0; height: 0; }

.rk-buf2-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--rk-buf2-blue);
    transition: .4s;
    border-radius: 32px;
}

.rk-buf2-slider:before {
    position: absolute;
    content: "";
    height: 24px;
    width: 24px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s;
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

input:checked + .rk-buf2-slider { background-color: var(--rk-buf2-orange); }
input:checked + .rk-buf2-slider:before { transform: translateX(32px); }

/* Wizualizacja SVG */
.rk-buf2-svg-wrapper {
    background: #0f172a;
    border-radius: 16px;
    padding: 25px;
    display: flex;
    justify-content: center;
    align-items: center;
    margin-bottom: 35px;
    box-shadow: inset 0 0 25px rgba(0,0,0,0.4);
}

.rk-buf2-svg { width: 100%; max-width: 450px; height: auto; }

/* Dynamiczne klasy i animacje dla SVG */
.anim-flow-boiler { stroke-dasharray: 6 12; stroke: var(--rk-buf2-orange); }
.anim-flow-floor { stroke-dasharray: 4 8; stroke: #60a5fa; }

.state-pro .anim-flow-boiler { animation: flowLeft 2s linear infinite; }
.state-pro .anim-flow-floor { animation: flowRight 1.5s linear infinite; }

.state-warn .anim-flow-boiler { animation: flowLeft 0.4s linear infinite; stroke: #ef4444; }
.state-warn .anim-flow-floor { animation: flowStutter 1s ease infinite; stroke: #f97316; stroke-dasharray: 2 20; }

.svg-buffer-tank { transition: opacity 0.4s, transform 0.4s; }
.state-warn .svg-buffer-tank { opacity: 0.1; transform: scaleY(0.8); }

@keyframes flowLeft { to { stroke-dashoffset: -36; } }
@keyframes flowRight { to { stroke-dashoffset: 36; } }
@keyframes flowStutter { 0%, 100% { opacity: 1; stroke-dashoffset: 0; } 50% { opacity: 0.3; stroke-dashoffset: -10; } }

/* Responsywny Matrix Zastępujący Tabelę */
.rk-matrix-grid {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-bottom: 35px;
}

/* Wiersz nagłówkowy (ukrywany na mobile) */
.rk-matrix-header {
    display: grid;
    grid-template-columns: 2fr 1.5fr 1.5fr;
    gap: 15px;
    padding: 10px 20px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--rk-buf2-muted);
    letter-spacing: 0.5px;
}

/* Wiersz danych */
.rk-matrix-row {
    display: grid;
    grid-template-columns: 2fr 1.5fr 1.5fr;
    gap: 15px;
    background: #ffffff;
    padding: 18px 20px;
    border-radius: 12px;
    border: 1px solid var(--rk-buf2-border);
    align-items: center;
    transition: all 0.3s;
}

.rk-matrix-label {
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-buf2-dark);
}

.rk-matrix-val {
    font-size: 15px;
    line-height: 1.4;
}

.rk-matrix-val strong { font-weight: 800; }

/* Kolorowanie kolumn aktywnego stanu */
.state-pro .row-pro { background: var(--rk-buf2-green-light); border-color: #bbf7d0; color: #166534; }
.state-warn .row-warn { background: var(--rk-buf2-orange-light); border-color: #fed7aa; color: #9a3412; }

/* Dolna Sekcja Zagrożeń H4 */
.rk-buf2-threats {
    background: #ffffff;
    border: 1px solid var(--rk-buf2-border);
    border-radius: 16px;
    padding: 30px;
}

.rk-buf2-h4 {
    margin: 0 0 15px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-buf2-dark);
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-buf2-threats-p {
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-buf2-text);
    margin: 0;
}

.rk-link {
    color: var(--rk-buf2-blue);
    text-decoration: none;
    border-bottom: 2px dashed rgba(37, 99, 235, 0.4);
    font-weight: 700;
    transition: all 0.3s;
}
.state-warn .rk-link { color: var(--rk-buf2-orange); border-bottom-color: rgba(234, 88, 12, 0.4); }
.rk-link:hover { border-bottom-style: solid; }

/* RESPONSYWNOŚĆ (Mobile w kafelki) */
@media (max-width: 768px) {
    .rk-buf2-header, .rk-buf2-interactive, .rk-buf2-threats { padding: 30px 20px; }
    .rk-buf2-h2 { font-size: 24px; }
    .rk-buf2-toggle-box { flex-direction: column; text-align: center; gap: 15px; border-radius: 20px; }
    
    /* Zamiana tabeli/gridu na kafelki jeden pod drugim */
    .rk-matrix-header { display: none; } /* Ukrywamy nagłówek płaski */
    
    .rk-matrix-row {
        grid-template-columns: 1fr;
        gap: 12px;
        padding: 20px;
    }
    
    .rk-matrix-val {
        padding-left: 15px;
        position: relative;
    }
    
    /* Wstrzykiwanie etykiet kontekstowych na mobile */
    .rk-matrix-val::before {
        content: attr(data-label);
        display: block;
        font-size: 11px;
        text-transform: uppercase;
        font-weight: 800;
        color: var(--rk-buf2-muted);
        margin-bottom: 2px;
    }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-bufor",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Dlaczego bufor ciepła jest absolutnie konieczny w instalacjach pelletowych?",
    "description": "Porównanie techniczne sprawności układu z buforem i bez. Analiza rozprzężenia strumieni masowych oraz zagrożeń braku zbiornika akumulacyjnego w programie Czyste Powietrze 2026.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-bufor",
    "name": "Porównanie sprawności i parametrów eksploatacyjnych układu pellet-podłogówka (2026)",
    "description": "Zbiór danych inżynierskich określających średnią sprawność kotła, taktowanie palnika oraz zużycie paliwa w zależności od obecności zbiornika buforowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "bufor ciepła w ogrzewaniu podłogowym",
      "taktowanie kotła pelletowego",
      "zużycie pelletu dom 150m2",
      "korozja niskotemperaturowa",
      "zwrotnica hydrauliczna strumieni"
    ],
    "measurementTechnique": "Bilansowanie energetyczne i monitorowanie zużycia paliwa na bazie normy PN-EN 303-5:2021-10 dla instalacji niskotemperaturowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Z buforem: Sprawność 91-94%, 2-4 odpaleń/dobę, zużycie 3.9 tony/rok, żywotność grzałki 5-7 lat.",
        "Bez bufora: Sprawność 74-79%, 12-18 odpaleń/dobę, zużycie 4.8 tony/rok, żywotność grzałki 12-18 miesięcy."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-bufor",
    "name": "Symulator Rozprzężenia Strumieni Masowych",
    "description": "Interaktywny panel inżynierski (Toggle Switch) mapujący zmiany przepływów hydraulicznych (0,7 m3/h kocioł vs 1,8 m3/h podłoga) i obrazujący skutki usunięcia bufora ciepła.",
    "applicationCategory": "EngineeringSimulator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG rendering.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-buf2-container" id="rk-buf2-app">
    <div class="rk-buf2-header">
        <div class="rk-buf2-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"><rect x="2" y="2" width="20" height="20" rx="2.18" ry="2.18"></rect><line x1="12" y1="2" x2="12" y2="22"></line><line x1="2" y1="12" x2="22" y2="12"></line></svg>
            Rozprzężenie Hydrauliczne Strumieni
        </div>
        <h2 class="rk-buf2-h2">Dlaczego bufor ciepła jest <span>absolutnie konieczny?</span></h2>
        <p class="rk-buf2-paragraph">
            Zastosowanie zbiornika buforowego (akumulacyjnego) przy połączeniu kotła na pellet z podłogówką jest bezwzględnym wymogiem technicznym (potwierdzonym w procedurach dotacyjnych programu <strong>"Czyste Powietrze" w 2026 roku</strong>), ponieważ rozprzęga on hydraulicznie i termicznie niezależne strumienie masowe obu układów. Kocioł pracuje z optymalnym przepływem rzędu 0,6-0,8 m³/h przy różnicy temperatur ΔT = 20 K (75/55°C), podczas gdy instalacja podłogowa wymaga przepływu na poziomie 1,5-2,0 m³/h przy ΔT = 5 K. <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" style="color:#60a5fa; font-weight:700;">Bufor działa jak hydrauliczna zwrotnica</a> o wielkiej pojemności termicznej.
        </p>
    </div>

    <div class="rk-buf2-interactive">
        <h3 class="rk-buf2-h3">Porównanie parametrów pracy układu z buforem i bez bufora</h3>
        
        <div class="rk-buf2-toggle-box">
            <span class="rk-buf2-label active-pro" id="rk-buf-lbl-pro" onclick="document.getElementById('rk-buf-toggle').click()">Układ Z buforem (Standard Inż.)</span>
            <label class="rk-buf2-switch">
                <input type="checkbox" id="rk-buf-toggle">
                <span class="rk-buf2-slider"></span>
            </label>
            <span class="rk-buf2-label" id="rk-buf-lbl-warn" onclick="document.getElementById('rk-buf-toggle').click()">Układ BEZ bufora (Zagrożenie)</span>
        </div>

        <div class="rk-buf2-svg-wrapper state-pro" id="rk-buf-svg-container">
            <svg class="rk-buf2-svg" viewBox="0 0 300 120">
                <rect x="10" y="30" width="40" height="60" fill="#334155" rx="4"/>
                <circle cx="30" cy="60" r="8" fill="#ea580c"/>
                
                <path class="anim-flow-boiler" d="M50 45 L100 45" fill="none" stroke-width="4"/>
                <path class="anim-flow-boiler" d="M100 75 L50 75" fill="none" stroke-width="4" style="stroke: #3b82f6;"/>
                <text x="75" y="38" fill="#ea580c" font-size="8" font-family="sans-serif" text-anchor="middle" id="rk-svg-t1">0.7 m³/h</text>

                <g class="svg-buffer-tank" id="rk-svg-tank">
                    <rect x="100" y="15" width="30" height="90" fill="#1e293b" stroke="#2563eb" stroke-width="2" rx="6"/>
                    <rect x="105" y="20" width="20" height="80" fill="#2563eb" opacity="0.3" rx="4"/>
                </g>

                <path class="anim-flow-floor" d="M130 45 L240 45" fill="none" stroke-width="4" style="stroke: #ef4444;"/>
                <path class="anim-flow-floor" d="M240 75 L130 75" fill="none" stroke-width="4" style="stroke: #3b82f6;"/>
                <text x="185" y="38" fill="#60a5fa" font-size="8" font-family="sans-serif" text-anchor="middle" id="rk-svg-t2">1.8 m³/h</text>

                <rect x="240" y="35" width="10" height="50" fill="#475569"/>
                <path d="M250 45 C260 45, 260 55, 250 55 M250 65 C260 65, 260 75, 250 75" fill="none" stroke="#ef4444" stroke-width="3"/>
            </svg>
        </div>

        <div class="rk-matrix-grid state-pro" id="rk-matrix-container">
            
            <div class="rk-matrix-header">
                <div>Parametr eksploatacyjny</div>
                <div>Układ BEZ bufora ciepła</div>
                <div>Układ Z buforem ciepła (600 L)</div>
            </div>

            <div class="rk-matrix-row">
                <div class="rk-matrix-label">Średnia sprawność kotła</div>
                <div class="rk-matrix-val row-warn" data-label="Bez bufora"><strong>74 - 79%</strong> (straty rozruchowe)</div>
                <div class="rk-matrix-val row-pro" data-label="Z buforem"><strong>91 - 94%</strong> (praca nominalna)</div>
            </div>

            <div class="rk-matrix-row">
                <div class="rk-matrix-label">Częstotliwość załączeń palnika</div>
                <div class="rk-matrix-val row-warn" data-label="Bez bufora"><strong>12 - 18 razy / dobę</strong></div>
                <div class="rk-matrix-val row-pro" data-label="Z buforem"><strong>2 - 4 razy / dobę</strong></div>
            </div>

            <div class="rk-matrix-row">
                <div class="rk-matrix-label">Zużycie pelletu (dom 150 m²)</div>
                <div class="rk-matrix-val row-warn" data-label="Bez bufora"><strong>4,8 tony / rok</strong></div>
                <div class="rk-matrix-val row-pro" data-label="Z buforem"><strong>3,9 tony / rok</strong></div>
            </div>

            <div class="rk-matrix-row">
                <div class="rk-matrix-label">Żywotność grzałki ceramicznej</div>
                <div class="rk-matrix-val row-warn" data-label="Bez bufora"><strong>12 - 18 miesięcy</strong></div>
                <div class="rk-matrix-val row-pro" data-label="Z buforem"><strong>5 - 7 lat</strong></div>
            </div>

            <div class="rk-matrix-row">
                <div class="rk-matrix-label">Emisja pyłów i sadzy w komorze</div>
                <div class="rk-matrix-val row-warn" data-label="Bez bufora">Wysoka (częste czyszczenie)</div>
                <div class="rk-matrix-val row-pro" data-label="Z buforem">Minimalna (suchy, szary popiół)</div>
            </div>

        </div>

        <div class="rk-buf2-threats">
            <h4 class="rk-buf2-h4">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#ea580c" 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>
                Zagrożenia związane z rezygnacją ze zbiornika akumulacyjnego
            </h4>
            <p class="rk-buf2-threats-p">
                Brak bufora wymusza na kotle pelletowym bezpośrednią reakcję na zamknięcie <a href="https://projekt-ogrzewania.pl/silowniki-termoelektryczne-na-rozdzielaczach/" class="rk-link">siłowników termoelektrycznych</a> na rozdzielaczach. Gdy pokoje zostaną dogrzane i zamknie się 8 z 10 pętli, przepływ po stronie instalacji drastycznie spada. Kocioł, nie mogąc oddać wygenerowanej mocy 10 kW do zredukowanego zładu, natychmiast przekracza temperaturę zadaną i awaryjnie się wygasza. Po 15 minutach woda w rurach stygnie, a automatyka ponownie uruchamia procedurę rozpalania. Taki cykl niszczy zapalarkę, powoduje osadzanie się szklistej smoły (kondensacja spalin) na wymienniku kotła i drastycznie zwiększa koszty ogrzewania.
            </p>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie domenowe (Brak znaczników H2/H3 w fallback)
    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-buf2-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; box-sizing: border-box;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Kontrola Autorska Aktywowana</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Wykryto nieautoryzowaną próbę klonowania interaktywnego matrixa danych technicznych. Skrypty i warstwa danych strukturalnych zostały zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika interaktywnego przełącznika widoków
    const toggle = document.getElementById('rk-buf-toggle');
    const svgContainer = document.getElementById('rk-buf-svg-container');
    const matrixContainer = document.getElementById('rk-matrix-container');
    const lblPro = document.getElementById('rk-buf-lbl-pro');
    const lblWarn = document.getElementById('rk-buf-lbl-warn');
    
    // Teksty na SVG
    const svgT1 = document.getElementById('rk-svg-t1');
    const svgT2 = document.getElementById('rk-svg-t2');

    toggle.addEventListener('change', function() {
        if (this.checked) {
            // STAN: AMATEUR (Brak bufora / Awaria)
            svgContainer.className = 'rk-buf2-svg-wrapper state-warn';
            matrixContainer.className = 'rk-matrix-grid state-warn';
            lblPro.classList.remove('active-pro');
            lblWarn.classList.add('active-warn');
            
            svgT1.textContent = "Taktowanie! (Niestabilny)";
            svgT1.setAttribute("fill", "#ef4444");
            svgT2.textContent = "Dławienie przepływu";
            svgT2.setAttribute("fill", "#f97316");
        } else {
            // STAN: PRO (Z buforem / Norma)
            svgContainer.className = 'rk-buf2-svg-wrapper state-pro';
            matrixContainer.className = 'rk-matrix-grid state-pro';
            lblWarn.classList.remove('active-warn');
            lblPro.classList.add('active-pro');
            
            svgT1.textContent = "0.7 m³/h";
            svgT1.setAttribute("fill", "#ea580c");
            svgT2.textContent = "1.8 m³/h";
            svgT2.setAttribute("fill", "#60a5fa");
        }
    });
});
</script>



<style>
:root {
    --rk-calc2-dark: #0f172a;
    --rk-calc2-card: #ffffff;
    --rk-calc2-primary: #8b5cf6; /* Techniczny fiolet/indygo */
    --rk-calc2-primary-light: #e0e7ff;
    --rk-calc2-pellet: #ea580c; /* Kolor pelletu/ognia */
    --rk-calc2-water: #0ea5e9; /* Kolor bufora/wody */
    --rk-calc2-bg: #f8fafc;
    --rk-calc2-border: #cbd5e1;
    --rk-calc2-text: #334155;
    --rk-calc2-muted: #64748b;
}

.rk-calc2-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, system-ui, sans-serif;
    background: var(--rk-calc2-card);
    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;
}

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

.rk-calc2-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.2);
    color: #c4b5fd;
    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(139, 92, 246, 0.3);
}

.rk-calc2-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-calc2-h2 span { color: #a78bfa; }

.rk-calc2-paragraph {
    font-size: 16px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

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

.rk-calc2-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-calc2-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

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

/* Sekcja Suwaków (Inputs) */
.rk-calc2-controls {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

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

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

.rk-calc2-slider-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-calc2-muted);
    text-transform: uppercase;
}

.rk-calc2-slider-value {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-calc2-primary);
    background: var(--rk-calc2-primary-light);
    padding: 4px 12px;
    border-radius: 8px;
}

.rk-range-input {
    width: 100%;
    -webkit-appearance: none;
    height: 8px;
    background: linear-gradient(to right, #ddd6fe 0%, #8b5cf6 100%);
    border-radius: 4px;
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-calc2-primary);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    transition: transform 0.1s;
}
.rk-range-input::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Sekcja Wyników (Outputs) */
.rk-calc2-results {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-res-card {
    background: #ffffff;
    border: 1px solid var(--rk-calc2-border);
    border-radius: 16px;
    padding: 18px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    overflow: hidden;
}

.rk-res-card::before {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 4px;
}

.rk-res-card.c-ozc::before { background: var(--rk-calc2-muted); }
.rk-res-card.c-boiler::before { background: var(--rk-calc2-pellet); }
.rk-res-card.c-buffer::before { background: var(--rk-calc2-water); }
.rk-res-card.c-floor::before { background: var(--rk-calc2-primary); }

.rk-res-label {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-calc2-text);
}

.rk-res-val {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-calc2-dark);
}

.c-boiler .rk-res-val { color: var(--rk-calc2-pellet); }
.c-buffer .rk-res-val { color: var(--rk-calc2-water); }

/* Schemat SVG */
.rk-calc2-svg-box {
    grid-column: 1 / -1;
    background: #0f172a;
    border-radius: 16px;
    padding: 30px;
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 15px;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    border: 1px solid #334155;
}

.rk-svg-main {
    width: 100%;
    max-width: 600px;
    height: auto;
}

.anim-power-flow { stroke-dasharray: 6 12; animation: flowData 1s linear infinite; }
@keyframes flowData { to { stroke-dashoffset: -18; } }

/* Procedura Tekstowa */
.rk-calc2-procedure {
    margin-top: 40px;
    background: #ffffff;
    border: 1px solid var(--rk-calc2-border);
    border-radius: 16px;
    padding: 30px;
}

.rk-proc-step {
    margin-bottom: 25px;
    padding-bottom: 25px;
    border-bottom: 1px dashed var(--rk-calc2-border);
}
.rk-proc-step:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; }

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

.rk-proc-badge {
    background: var(--rk-calc2-dark);
    color: #fff;
    width: 24px; height: 24px;
    display: inline-flex; justify-content: center; align-items: center;
    border-radius: 6px;
    font-size: 12px;
}

.rk-proc-text {
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-calc2-text);
    margin: 0 0 10px 0;
}

.rk-proc-math {
    background: var(--rk-calc2-bg);
    padding: 12px 20px;
    border-radius: 8px;
    font-family: 'Courier New', monospace;
    font-weight: 700;
    color: var(--rk-calc2-primary);
    border: 1px solid var(--rk-calc2-primary-light);
    display: inline-block;
}

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

@media (max-width: 768px) {
    .rk-calc2-header, .rk-calc2-interactive, .rk-calc2-procedure { padding: 30px 20px; }
    .rk-calc2-grid { grid-template-columns: 1fr; }
    .rk-calc2-h2 { font-size: 26px; }
    .rk-calc2-svg-box { padding: 20px 10px; }
    .rk-res-card { flex-direction: column; align-items: flex-start; gap: 5px; }
    .rk-proc-math { font-size: 13px; word-break: break-all; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-dobor",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Jak dobrać moc kotła na pellet i pojemność instalacji podłogowej?",
    "description": "Inżynierski algorytm krok po kroku: obliczanie projektowego obciążenia cieplnego (OZC), mocy kotła, pojemności bufora i zładu wody. Zgodnie z normą PN-EN 303-5.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-dobor",
    "name": "Algorytm doboru mocy kotła pelletowego i pojemności bufora (2026)",
    "description": "Matematyczny model doboru komponentów maszynowni na podstawie zapotrzebowania cieplnego budynku, z uwzględnieniem strat przesyłowych i podgrzewu CWU.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "dobór mocy kotła na pellet",
      "obliczenia OZC",
      "pojemność bufora ciepła",
      "zład wody podłogówki",
      "norma PN-EN 303-5"
    ],
    "measurementTechnique": "Kalkulacja wg normy PN-EN 12831 (OZC) oraz PN-EN 303-5 (dobór bufora dla biomasy, min. 50-70 l/kW). Zład wody dla rury 16x2 przyjęto jako 0,113 l/mb.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Moc kotła: Q_kotła = Q_p × 1,15 + 0,4 kW (dla 4 osób).",
        "Bufor: V_b = Q_kotła × 60 litrów/kW.",
        "Pojemność podłogówki: Powierzchnia × 6,6 m/m² × 0,113 l/m."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-dobor",
    "name": "Kalkulator Inżynierski: Dobór Kotła i Bufora",
    "description": "Interaktywny algorytm wyliczający na żywo OZC, moc katalogową kotła stałopalnego, wymagany zład bufora oraz pojemność jastrychu na podstawie powierzchni domu i izolacji.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5 Range Inputs, and SVG animation support.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-calc2-container" id="rk-calc2-app">
    <div class="rk-calc2-header">
        <div class="rk-calc2-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"><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>
            Algorytm Projektowy
        </div>
        <h2 class="rk-calc2-h2">Jak dobrać moc kotła na pellet i <span>pojemność instalacji?</span></h2>
        <p class="rk-calc2-paragraph">
            Poniższy algorytm inżynierski pozwala krok po kroku obliczyć optymalną moc źródła ciepła oraz minimalną kubaturę zbiornika buforowego dla domu jednorodzinnego w oparciu o <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" style="color:#c4b5fd; font-weight:700;">normatywne wskaźniki projektowe OZC</a>. Wykorzystaj suwaki poniżej, aby przeprowadzić symulację dla własnego budynku.
        </p>
    </div>

    <div class="rk-calc2-interactive">
        <h3 class="rk-calc2-h3">Kalkulator: Ścieżka Doboru Komponentów</h3>
        
        <div class="rk-calc2-grid">
            <div class="rk-calc2-controls">
                <div class="rk-calc2-slider-group">
                    <div class="rk-calc2-slider-header">
                        <div class="rk-calc2-slider-label">Powierzchnia domu</div>
                        <div class="rk-calc2-slider-value" id="rk-val-area">150 m²</div>
                    </div>
                    <input type="range" id="rk-slider-area" class="rk-range-input" min="80" max="300" step="10" value="150">
                </div>

                <div class="rk-calc2-slider-group">
                    <div class="rk-calc2-slider-header">
                        <div class="rk-calc2-slider-label">Standard izolacji (EA)</div>
                        <div class="rk-calc2-slider-value" id="rk-val-iso">50 W/m²</div>
                    </div>
                    <input type="range" id="rk-slider-iso" class="rk-range-input" min="30" max="100" step="5" value="50">
                </div>
                
                <div class="rk-calc2-slider-group">
                    <div class="rk-calc2-slider-header">
                        <div class="rk-calc2-slider-label">Liczba osób (CWU)</div>
                        <div class="rk-calc2-slider-value" id="rk-val-ppl">4</div>
                    </div>
                    <input type="range" id="rk-slider-ppl" class="rk-range-input" min="1" max="8" step="1" value="4">
                </div>
            </div>

            <div class="rk-calc2-results">
                <div class="rk-res-card c-ozc">
                    <div class="rk-res-label">Obciążenie Cieplne (OZC)</div>
                    <div class="rk-res-val" id="rk-out-ozc">7.5 kW</div>
                </div>
                <div class="rk-res-card c-boiler">
                    <div class="rk-res-label">Wymagana Moc Kotła</div>
                    <div class="rk-res-val" id="rk-out-boiler">9.0 kW</div>
                </div>
                <div class="rk-res-card c-buffer">
                    <div class="rk-res-label">Pojemność Bufora (Min.)</div>
                    <div class="rk-res-val" id="rk-out-buffer">540 L</div>
                </div>
                <div class="rk-res-card c-floor">
                    <div class="rk-res-label">Zład Wody (Podłogówka)</div>
                    <div class="rk-res-val" id="rk-out-floor">112 L</div>
                </div>
            </div>

            <div class="rk-calc2-svg-box">
                <svg class="rk-svg-main" viewBox="0 0 600 120">
                    <rect x="10" y="30" width="100" height="60" fill="#334155" rx="8"/>
                    <text x="60" y="55" fill="#94a3b8" font-size="12" text-anchor="middle" font-weight="bold">KROK 1</text>
                    <text x="60" y="75" fill="#ffffff" font-size="16" text-anchor="middle" font-weight="bold" id="rk-svg-ozc">7.5 kW</text>
                    
                    <path class="anim-power-flow" d="M110 60 L160 60" fill="none" stroke="#64748b" stroke-width="4" stroke-linecap="round"/>
                    <polygon points="155,55 165,60 155,65" fill="#64748b"/>

                    <rect x="170" y="20" width="100" height="80" fill="#1e293b" stroke="#ea580c" stroke-width="2" rx="8"/>
                    <text x="220" y="45" fill="#ea580c" font-size="12" text-anchor="middle" font-weight="bold">KROK 2 (Kocioł)</text>
                    <text x="220" y="75" fill="#ffffff" font-size="20" text-anchor="middle" font-weight="bold" id="rk-svg-boiler">9.0 kW</text>

                    <path class="anim-power-flow" d="M270 60 L320 60" fill="none" stroke="#ea580c" stroke-width="4" stroke-linecap="round"/>
                    <polygon points="315,55 325,60 315,65" fill="#ea580c"/>

                    <rect x="330" y="10" width="100" height="100" fill="#1e293b" stroke="#0ea5e9" stroke-width="2" rx="16"/>
                    <text x="380" y="45" fill="#0ea5e9" font-size="12" text-anchor="middle" font-weight="bold">KROK 3 (Bufor)</text>
                    <text x="380" y="75" fill="#ffffff" font-size="20" text-anchor="middle" font-weight="bold" id="rk-svg-buffer">540 L</text>

                    <path class="anim-power-flow" d="M430 60 L480 60" fill="none" stroke="#0ea5e9" stroke-width="4" stroke-linecap="round"/>
                    <polygon points="475,55 485,60 475,65" fill="#0ea5e9"/>

                    <rect x="490" y="40" width="100" height="40" fill="#334155" stroke="#8b5cf6" stroke-width="2" rx="4"/>
                    <text x="540" y="55" fill="#a78bfa" font-size="10" text-anchor="middle" font-weight="bold">KROK 4 (Zład)</text>
                    <text x="540" y="72" fill="#ffffff" font-size="14" text-anchor="middle" font-weight="bold" id="rk-svg-floor">112 L</text>
                </svg>
            </div>
        </div>

        <div class="rk-calc2-procedure">
            <div class="rk-proc-step">
                <h4 class="rk-proc-title"><span class="rk-proc-badge">1</span> Wyznaczenie obciążenia cieplnego z OZC</h4>
                <p class="rk-proc-text">
                    Odczytujemy z projektu OZC (<a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" class="rk-link">PN-EN 12831</a>) projektowe obciążenie cieplne budynku dla skrajnych temperatur zewnętrznych. Dla nowoczesnego domu 150 m² o współczynniku przenikania 50 W/m², wartość ta wynosi średnio 7,5 kW.
                </p>
                <div class="rk-proc-math">Q_p = Powierzchnia × Izolacja / 1000</div>
            </div>

            <div class="rk-proc-step">
                <h4 class="rk-proc-title"><span class="rk-proc-badge">2</span> Kalkulacja mocy nominalnej kotła z zapasem na CWU</h4>
                <p class="rk-proc-text">
                    Wyznaczamy moc znamionową kotła, uwzględniając sprawność przesyłu (mnożnik 1.15) oraz zapas na przygotowanie ciepłej wody użytkowej (przyjmuje się ok. 0.1 kW na osobę, wg normy 0.4 kW dla 4 osób). Dobieramy najbliższy katalogowo model kotła.
                </p>
                <div class="rk-proc-math">Q_kotła = Q_p × 1.15 + (Liczba_osób × 0.1) kW</div>
            </div>

            <div class="rk-proc-step">
                <h4 class="rk-proc-title"><span class="rk-proc-badge">3</span> Obliczenie minimalnej objętości bufora</h4>
                <p class="rk-proc-text">
                    Obliczamy minimalną pojemność wodną bufora zgodnie z załącznikiem do normy <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-link">PN-EN 303-5</a>, stosując uproszczony przelicznik dla biomasy, który wynosi minimum 60 litrów na każdy kW mocy znamionowej kotła.
                </p>
                <div class="rk-proc-math">V_b = Q_kotła × 60 l/kW</div>
            </div>

            <div class="rk-proc-step">
                <h4 class="rk-proc-title"><span class="rk-proc-badge">4</span> Objętość wodna instalacji podłogowej</h4>
                <p class="rk-proc-text">
                    Wyznaczamy całkowitą pojemność wodną wylewki, bazując na średniej długości <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/" class="rk-link">rury 16x2 mm</a>. Przy rozstawie co 15 cm zużywamy ok. 6,6 metra rury na m². Każdy metr bieżący tej rury mieści dokładnie 0,113 litra wody.
                </p>
                <div class="rk-proc-math">V_podł = Powierzchnia × 6.6 m/m² × 0.113 l/m</div>
            </div>
        </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-calc2-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowany Algorytm Inżynierski</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Moduł obliczeniowy doboru maszynowni oraz struktura JSON-LD stanowią własność Projekt-Ogrzewania.pl. Uruchomienie zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Kalkulatora
    const sliderArea = document.getElementById('rk-slider-area');
    const sliderIso = document.getElementById('rk-slider-iso');
    const sliderPpl = document.getElementById('rk-slider-ppl');
    
    const valArea = document.getElementById('rk-val-area');
    const valIso = document.getElementById('rk-val-iso');
    const valPpl = document.getElementById('rk-val-ppl');

    // Outputs
    const outOzc = document.getElementById('rk-out-ozc');
    const outBoiler = document.getElementById('rk-out-boiler');
    const outBuffer = document.getElementById('rk-out-buffer');
    const outFloor = document.getElementById('rk-out-floor');
    
    // SVG Outputs
    const svgOzc = document.getElementById('rk-svg-ozc');
    const svgBoiler = document.getElementById('rk-svg-boiler');
    const svgBuffer = document.getElementById('rk-svg-buffer');
    const svgFloor = document.getElementById('rk-svg-floor');

    function updateCalculations() {
        let area = parseFloat(sliderArea.value);
        let iso = parseFloat(sliderIso.value);
        let ppl = parseFloat(sliderPpl.value);

        // Update Labels
        valArea.innerText = area + " m²";
        valIso.innerText = iso + " W/m²";
        valPpl.innerText = ppl;

        // Krok 1: OZC (kW)
        let q_p = (area * iso) / 1000;
        let q_p_str = q_p.toFixed(1) + " kW";
        outOzc.innerText = q_p_str;
        svgOzc.textContent = q_p_str;

        // Krok 2: Kocioł (kW)
        let q_kotla = (q_p * 1.15) + (ppl * 0.1);
        let q_kotla_str = q_kotla.toFixed(1) + " kW";
        outBoiler.innerText = q_kotla_str;
        svgBoiler.textContent = q_kotla_str;

        // Krok 3: Bufor (L) -> 60 litrów na każdy kW
        let v_b = Math.round(q_kotla * 60);
        let v_b_str = v_b + " L";
        outBuffer.innerText = v_b_str;
        svgBuffer.textContent = v_b_str;

        // Krok 4: Podłoga (L) -> Zakładamy rozstaw 15cm (6.6m/m2), rura 16x2 (0.113 l/m)
        let v_floor = Math.round(area * 6.6 * 0.113);
        let v_floor_str = v_floor + " L";
        outFloor.innerText = v_floor_str;
        svgFloor.textContent = v_floor_str;
    }

    sliderArea.addEventListener('input', updateCalculations);
    sliderIso.addEventListener('input', updateCalculations);
    sliderPpl.addEventListener('input', updateCalculations);

    // Init
    updateCalculations();
});
</script>



<style>
:root {
    --rk-dsgn-dark: #0f172a;
    --rk-dsgn-card: #ffffff;
    --rk-dsgn-brand: #2563eb; /* Inżynierski Niebieski */
    --rk-dsgn-brand-light: #eff6ff;
    --rk-dsgn-accent: #f59e0b; /* Akcent Pelletu */
    --rk-dsgn-edge: #8b5cf6; /* Strefa brzegowa */
    --rk-dsgn-danger: #ef4444; /* Alert hydrauliczny */
    --rk-dsgn-danger-light: #fef2f2;
    --rk-dsgn-bg: #f8fafc;
    --rk-dsgn-border: #cbd5e1;
    --rk-dsgn-text: #334155;
    --rk-dsgn-muted: #64748b;
}

.rk-dsgn-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, system-ui, sans-serif;
    background: var(--rk-dsgn-card);
    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;
}

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

.rk-dsgn-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(37, 99, 235, 0.2);
    color: #93c5fd;
    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(147, 197, 253, 0.3);
}

.rk-dsgn-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
    letter-spacing: -0.5px;
}

.rk-dsgn-h2 span { color: #60a5fa; }

.rk-dsgn-paragraph {
    font-size: 16px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

.rk-dsgn-paragraph strong { color: #ffffff; }

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

.rk-dsgn-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-dsgn-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

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

/* Kontrolki (Lewa kolumna) */
.rk-dsgn-controls {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

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

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

.rk-ctrl-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-dsgn-muted);
    text-transform: uppercase;
}

.rk-ctrl-val {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-dsgn-brand);
    background: var(--rk-dsgn-brand-light);
    padding: 4px 12px;
    border-radius: 8px;
}

.rk-dsgn-range {
    width: 100%;
    -webkit-appearance: none;
    height: 8px;
    background: linear-gradient(to right, #93c5fd 0%, #2563eb 100%);
    border-radius: 4px;
    outline: none;
    transition: background 0.3s;
}

.rk-dsgn-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-dsgn-brand);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.rk-dsgn-range:active::-webkit-slider-thumb { transform: scale(1.1); }

.rk-dsgn-range.danger-mode { background: linear-gradient(to right, #2563eb 66%, #ef4444 100%); }
.rk-dsgn-range.danger-mode::-webkit-slider-thumb { border-color: var(--rk-dsgn-danger); }

/* Przełącznik Stref */
.rk-zone-toggle {
    display: flex;
    background: #f1f5f9;
    border-radius: 12px;
    padding: 4px;
    position: relative;
}

.rk-zone-btn {
    flex: 1;
    padding: 10px;
    text-align: center;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-dsgn-muted);
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.3s;
    z-index: 1;
}

.rk-zone-btn.active {
    color: #ffffff;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

.rk-zone-btn[data-zone="std"].active { background: var(--rk-dsgn-brand); }
.rk-zone-btn[data-zone="edge"].active { background: var(--rk-dsgn-edge); }

/* Wyniki (Prawa Kolumna) */
.rk-dsgn-results {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-res-card {
    background: #ffffff;
    border: 1px solid var(--rk-dsgn-border);
    border-radius: 12px;
    padding: 15px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s;
}

.rk-res-card.warn-card {
    background: var(--rk-dsgn-danger-light);
    border-color: #fca5a5;
}

.rk-res-label { font-size: 14px; font-weight: 700; color: var(--rk-dsgn-text); }
.rk-res-val { font-size: 20px; font-weight: 900; color: var(--rk-dsgn-dark); }
.warn-card .rk-res-val { color: var(--rk-dsgn-danger); }

/* Zastępczy Panel Danych Technicznych (Dark Mode) */
.rk-dsgn-data-box {
    background: #0f172a;
    border-radius: 16px;
    padding: 25px;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    border: 1px solid #334155;
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 15px;
    transition: border-color 0.3s;
}

.rk-data-box-title {
    color: #93c5fd;
    font-size: 14px;
    text-transform: uppercase;
    font-weight: 800;
    margin: 0 0 5px 0;
    letter-spacing: 1px;
    transition: color 0.3s;
}

.rk-data-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom: 1px dashed #334155;
    padding-bottom: 10px;
}
.rk-data-row:last-child { border-bottom: none; padding-bottom: 0; }

.rk-data-row span {
    color: #cbd5e1;
    font-size: 14px;
}

.rk-data-row strong {
    color: #ffffff;
    font-size: 15px;
    font-weight: 700;
}

/* Stany Awaryjne dla Panelu Danych */
.state-jam.rk-dsgn-data-box { border-color: #ef4444; }
.state-jam .rk-data-box-title { color: #ef4444; }
.state-jam .rk-data-row strong { color: #fca5a5; }

/* CTA Section */
.rk-dsgn-cta {
    background: #ffffff;
    padding: 45px 50px;
    text-align: center;
    border-top: 1px solid var(--rk-dsgn-border);
}

.rk-cta-h3 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-dsgn-dark);
    margin: 0 0 15px 0;
}

.rk-cta-p {
    font-size: 16px;
    color: var(--rk-dsgn-muted);
    max-width: 600px;
    margin: 0 auto 30px auto;
    line-height: 1.6;
}

.rk-btn-massive {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-dsgn-brand);
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 20px 40px;
    border-radius: 16px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(37, 99, 235, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-btn-massive:hover {
    transform: translateY(-5px);
    background: #1d4ed8;
    box-shadow: 0 20px 35px -5px rgba(37, 99, 235, 0.5);
}

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

.rk-link {
    color: var(--rk-dsgn-brand);
    text-decoration: none;
    font-weight: 700;
    border-bottom: 2px dashed rgba(37, 99, 235, 0.4);
    transition: all 0.3s;
}
.rk-link:hover { border-bottom-style: solid; color: #1e3a8a; }

@media (max-width: 768px) {
    .rk-dsgn-header, .rk-dsgn-interactive, .rk-dsgn-cta { padding: 30px 20px; }
    .rk-dsgn-grid { grid-template-columns: 1fr; }
    .rk-dsgn-h2 { font-size: 26px; }
    .rk-btn-massive { width: 100%; padding: 18px 20px; font-size: 16px; }
    .rk-res-card { flex-direction: column; align-items: flex-start; gap: 5px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/"
    },
    "headline": "Jak kocioł na pellet wpływa na projekt ogrzewania podłogowego?",
    "description": "Zasady projektowania instalacji płaszczyznowych. Wpływ długości pętli na opory hydrauliczne i dobór pompy obiegowej z regulacją Δp-v lub Δp-c.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#dataset",
    "name": "Parametry projektowe instalacji płaszczyznowych (2026)",
    "description": "Zestawienie inżynierskie opisujące korelacje między rozstawem rur, długością pętli a oporami hydraulicznymi pompy obiegowej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne ozc",
      "rozstaw rur w ogrzewaniu podłogowym",
      "strefa brzegowa podłogówki",
      "maksymalna długość pętli",
      "pompa obiegowa Δp-v"
    ],
    "measurementTechnique": "Algorytm oparty na normie PN-EN 12831 (OZC), wyznaczający straty ciśnienia (kPa) w rurach wielowarstwowych 16x2 mm.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Strefa mieszkalna: Rozstaw 10 - 15 cm.",
        "Strefa brzegowa: Zagęszczenie 7.5 - 10 cm na szer. 1m.",
        "Maksymalna długość pętli: 100m. Przekroczenie generuje opór >20 kPa (martwe strefy)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#webapp",
    "name": "Symulator Pętli i Oporów Hydraulicznych",
    "description": "Interaktywne narzędzie dla instalatorów i inwestorów symulujące narastanie oporów hydraulicznych pompy wraz ze wzrostem długości pętli grzewczej i zagęszczenia rur.",
    "applicationCategory": "EngineeringSimulator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5 Range Inputs, and CSS transitions.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-dsgn-container" id="rk-dsgn-app">
    <div class="rk-dsgn-header">
        <div class="rk-dsgn-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>
            Wytyczne Projektowe
        </div>
        <h2 class="rk-dsgn-h2">Jak to wpływa na projekt <span>ogrzewania podłogowego?</span></h2>
        <p class="rk-dsgn-paragraph">
            Integracja kotła na pellet z systemem podłogowym wymusza restrykcyjne podejście do fazy projektowej, gdzie fundamentalnym dokumentem wyjściowym jest <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-link" style="color:#93c5fd;">Projektowe Obciążenie Cieplne (OZC)</a> sporządzone wg normy PN-EN 12831. Charakterystyka źródła stałopalnego wyklucza projektowanie instalacji "na oko".
        </p>
    </div>

    <div class="rk-dsgn-interactive">
        <h3 class="rk-dsgn-h3">Limity Hydrauliczne: Sprawdź swój projekt</h3>
        
        <div class="rk-dsgn-grid">
            
            <div class="rk-dsgn-controls">
                
                <div class="rk-ctrl-box">
                    <div class="rk-ctrl-header">
                        <div class="rk-ctrl-label">Rodzaj Strefy Projektowej</div>
                    </div>
                    <div class="rk-zone-toggle">
                        <div class="rk-zone-btn active" data-zone="std" id="btn-zone-std">Mieszkalna (15cm)</div>
                        <div class="rk-zone-btn" data-zone="edge" id="btn-zone-edge">Brzegowa (10cm)</div>
                    </div>
                    <p style="font-size:12px; color:#64748b; margin-top:10px; line-height:1.5;">
                        Ze względu na obniżenie zasilania, <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-link">rozstaw rur</a> w strefach mieszkalnych projektuje się co 10-15 cm, a w <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/" class="rk-link">strefach brzegowych</a> zagęszcza do 7,5-10 cm.
                    </p>
                </div>

                <div class="rk-ctrl-box">
                    <div class="rk-ctrl-header">
                        <div class="rk-ctrl-label">Długość pojedynczej pętli</div>
                        <div class="rk-ctrl-val" id="rk-val-len">80 m</div>
                    </div>
                    <input type="range" id="rk-slider-len" class="rk-dsgn-range" min="30" max="150" step="5" value="80">
                    <p style="font-size:12px; color:#64748b; margin-top:10px; line-height:1.5;">
                        <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/" class="rk-link">Maksymalna długość pętli</a> dla rury 16 mm to bezwzględnie 100m. Przekroczenie niszczy przepływ.
                    </p>
                </div>

            </div>

            <div class="rk-dsgn-results">
                
                <div class="rk-dsgn-data-box" id="rk-data-wrap">
                    <h4 class="rk-data-box-title">Parametry Hydrauliczne Pętli</h4>
                    <div class="rk-data-row">
                        <span>Zalecany tryb pompy:</span>
                        <strong id="rk-val-pump">Δp-c (Stałociśnieniowy)</strong>
                    </div>
                    <div class="rk-data-row">
                        <span>Szacowana prędkość wody:</span>
                        <strong id="rk-val-vel">0.25 m/s</strong>
                    </div>
                    <div class="rk-data-row">
                        <span>Wydajność cieplna pętli:</span>
                        <strong id="rk-val-power">~720 W</strong>
                    </div>
                </div>

                <div class="rk-res-card" id="rk-card-press">
                    <div class="rk-res-label">Opór hydrauliczny pompy</div>
                    <div class="rk-res-val" id="rk-val-press">16.0 kPa</div>
                </div>

                <div class="rk-res-card" id="rk-card-status">
                    <div class="rk-res-label">Status Przepływu (Δp-v / Δp-c)</div>
                    <div class="rk-res-val" id="rk-val-status" style="color:#10b981; font-size:16px;">Norma. Pompa radzi sobie.</div>
                </div>

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

    <div class="rk-dsgn-cta">
        <h3 class="rk-cta-h3">Nie ryzykuj "martwych stref" w swoim domu</h3>
        <p class="rk-cta-p">
            Błędy w obliczeniach oporów lub rozstawie rur mszczą się przez dekady. <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/" class="rk-link">Źle dobrana pompa obiegowa</a> lub zbyt długa pętla oznacza zimną podłogę, której nie da się naprawić po wylaniu betonu.
        </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"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
        </a>
    </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-dsgn-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano Kod Inżynierski</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Próba osadzenia kalkulatora oporów hydraulicznych poza domeną docelową. Warstwa JSON-LD i skrypty zostały wyłączone.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora
    const sliderLen = document.getElementById('rk-slider-len');
    const valLen = document.getElementById('rk-val-len');
    
    const btnZoneStd = document.getElementById('btn-zone-std');
    const btnZoneEdge = document.getElementById('btn-zone-edge');
    let currentZone = 'std';

    const cardPress = document.getElementById('rk-card-press');
    const valPress = document.getElementById('rk-val-press');
    const cardStatus = document.getElementById('rk-card-status');
    const valStatus = document.getElementById('rk-val-status');

    // Dynamiczne parametry panelu zastępczego
    const dataWrap = document.getElementById('rk-data-wrap');
    const valPump = document.getElementById('rk-val-pump');
    const valVel = document.getElementById('rk-val-vel');
    const valPower = document.getElementById('rk-val-power');

    // Obsługa przycisków strefy
    btnZoneStd.addEventListener('click', function() {
        currentZone = 'std';
        btnZoneStd.classList.add('active');
        btnZoneEdge.classList.remove('active');
        updateCalc();
    });

    btnZoneEdge.addEventListener('click', function() {
        currentZone = 'edge';
        btnZoneEdge.classList.add('active');
        btnZoneStd.classList.remove('active');
        updateCalc();
    });

    // Kalkulacja i update UI
    function updateCalc() {
        let length = parseInt(sliderLen.value);
        valLen.innerText = length + " m";

        // Uproszczony model oporu: 1m rury = 0.2 kPa oporu.
        // Jeśli strefa brzegowa (gęściej), opór lekko rośnie (mnożnik 1.15) z uwagi na ostrzejsze zagięcia
        let multiplier = (currentZone === 'edge') ? 1.15 : 1.0;
        let pressure = length * 0.2 * multiplier;
        valPress.innerText = pressure.toFixed(1) + " kPa";

        if (length > 100) {
            // AWARIA (Przekroczenie 100m)
            sliderLen.classList.add('danger-mode');
            cardPress.classList.add('warn-card');
            cardStatus.classList.add('warn-card');
            
            valStatus.innerText = "BŁĄD: Zbyt duży opór (>20kPa). Martwe strefy!";
            valStatus.style.color = "var(--rk-dsgn-danger)";
            
            // Aktualizacja panelu danych dla awarii
            dataWrap.classList.add('state-jam');
            valPump.innerText = "AWARIA ZASILANIA";
            valVel.innerText = "< 0.1 m/s (Zadławienie)";
            valPower.innerText = "Spadek mocy grzewczej";
            
        } else {
            // NORMA
            sliderLen.classList.remove('danger-mode');
            cardPress.classList.remove('warn-card');
            cardStatus.classList.remove('warn-card');
            
            valStatus.innerText = "Norma. Pompa obiegowa radzi sobie.";
            valStatus.style.color = "#10b981"; // Sukces
            
            // Aktualizacja panelu danych dla normy
            dataWrap.classList.remove('state-jam');
            
            let power = (currentZone === 'std') ? (length / 6.6) * 60 : (length / 10) * 85;
            let velocity = 0.15 + (length / 500);
            
            valPump.innerText = "Δp-c (Stałociśnieniowy)";
            valVel.innerText = velocity.toFixed(2) + " m/s";
            valPower.innerText = "~" + Math.round(power) + " W";
        }
    }

    sliderLen.addEventListener('input', updateCalc);

    // Inicjalizacja
    updateCalc();
});
</script>



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-card: #ffffff;
    --rk-cs-brand: #d97706; /* Pellet Gold/Amber */
    --rk-cs-brand-light: #fef3c7;
    --rk-cs-blue: #3b82f6; /* Inżynierski błękit */
    --rk-cs-green: #10b981; /* Oszczędności / Eko */
    --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, system-ui, sans-serif;
    background: var(--rk-cs-card);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(217, 119, 6, 0.15);
    border: 1px solid rgba(217, 119, 6, 0.3);
    overflow: hidden;
}

/* Nagłówek i Wstęp */
.rk-cs-header {
    background: linear-gradient(135deg, var(--rk-cs-dark) 0%, #291502 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-cs-brand);
}

.rk-cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(217, 119, 6, 0.2);
    color: #fcd34d;
    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(217, 119, 6, 0.3);
}

.rk-cs-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
    letter-spacing: -0.5px;
}

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

.rk-cs-paragraph {
    font-size: 16px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0 0 15px 0;
}

.rk-cs-paragraph:last-child { margin-bottom: 0; }

.rk-cs-quote {
    border-left: 4px solid var(--rk-cs-brand);
    padding-left: 20px;
    margin: 25px 0;
    font-style: italic;
    color: #e2e8f0;
    background: rgba(255,255,255,0.05);
    padding: 20px;
    border-radius: 0 12px 12px 0;
}

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

.rk-cs-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-cs-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

/* Nawigacja Tabs */
.rk-cs-tabs {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-bottom: 35px;
    background: #ffffff;
    padding: 8px;
    border-radius: 100px;
    border: 1px solid var(--rk-cs-border);
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-cs-tab-btn {
    flex: 1;
    padding: 12px 20px;
    text-align: center;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-cs-muted);
    cursor: pointer;
    border-radius: 99px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    border: none;
    background: transparent;
}

.rk-cs-tab-btn:hover { color: var(--rk-cs-dark); background: #f1f5f9; }
.rk-cs-tab-btn.active { color: #ffffff; background: var(--rk-cs-brand); box-shadow: 0 4px 12px rgba(217, 119, 6, 0.3); }

/* Grid Zawartości */
.rk-cs-grid {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
    gap: 30px;
}

/* Panele Danych */
.rk-cs-panel {
    display: none;
    animation: fadeIn 0.5s ease;
}

.rk-cs-panel.active { display: block; }

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

.rk-data-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-data-card {
    background: #ffffff;
    border: 1px solid var(--rk-cs-border);
    padding: 18px;
    border-radius: 16px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    transition: transform 0.3s, border-color 0.3s;
}

.rk-data-card:hover { transform: translateY(-2px); border-color: var(--rk-cs-brand); }

.rk-data-card.full-width { grid-column: 1 / -1; }

.rk-data-label {
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--rk-cs-muted);
    margin-bottom: 8px;
    letter-spacing: 0.5px;
}

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

.rk-data-val span { font-size: 14px; font-weight: 700; color: var(--rk-cs-muted); }
.val-highlight { color: var(--rk-cs-brand); font-size: 24px; }
.val-success { color: var(--rk-cs-green); font-size: 24px; }

/* SVG Box */
.rk-cs-svg-box {
    background: #0f172a;
    border-radius: 20px;
    padding: 30px;
    display: flex;
    justify-content: center;
    align-items: center;
    box-shadow: inset 0 0 25px rgba(0,0,0,0.5);
    border: 1px solid #334155;
    position: relative;
    overflow: hidden;
}

.rk-svg-layer {
    width: 100%;
    height: auto;
    max-width: 300px;
    display: none;
    animation: scaleIn 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.rk-svg-layer.active { display: block; }

@keyframes scaleIn { from { transform: scale(0.9); opacity: 0; } to { transform: scale(1); opacity: 1; } }

/* Animacje SVG wewnątrz warstw */
.anim-heat-wave { stroke-dasharray: 5 10; animation: flowUp 2s linear infinite; stroke: #fcd34d; }
.anim-pellet-drop { animation: dropPellet 1.5s infinite linear; fill: #d97706; }
.anim-coin-spin { transform-origin: center; animation: spinY 3s infinite linear; }
.anim-chart-bar { transform-origin: bottom; animation: growBar 1s ease-out forwards; }

@keyframes flowUp { to { stroke-dashoffset: -30; } }
@keyframes dropPellet { 0% { opacity: 0; transform: translateY(-10px); } 20% { opacity: 1; } 100% { transform: translateY(40px); opacity: 0; } }
@keyframes spinY { 0% { transform: rotateY(0deg); } 100% { transform: rotateY(360deg); } }
@keyframes growBar { from { transform: scaleY(0); } to { transform: scaleY(1); } }

.rk-link {
    color: var(--rk-cs-brand);
    text-decoration: none;
    font-weight: 700;
    border-bottom: 2px dashed rgba(217, 119, 6, 0.4);
    transition: all 0.3s;
}
.rk-link:hover { border-bottom-style: solid; color: #b45309; }

@media (max-width: 768px) {
    .rk-cs-header, .rk-cs-interactive { padding: 30px 20px; }
    .rk-cs-grid { grid-template-columns: 1fr; }
    .rk-cs-h2 { font-size: 26px; }
    .rk-cs-tabs { flex-direction: column; border-radius: 16px; padding: 10px; }
    .rk-cs-tab-btn { border-radius: 8px; padding: 15px; }
    .rk-data-grid { grid-template-columns: 1fr; }
    .rk-cs-svg-box { min-height: 200px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Case Study: Analiza techniczna rzeczywistej inwestycji z kotłem na pellet",
    "description": "Realne wyniki zużycia pelletu i kosztów ogrzewania dla domu 164 m2. Analiza zrównoważenia hydraulicznego, pracy bufora 600L i systemu podłogowego w sezonie 2025/2026.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-casestudy",
    "name": "Bilans energetyczny domu 164 m2 z kotłem na pellet (Sezon 2025/2026)",
    "description": "Zestawienie wskaźników operacyjnych maszynowni pelletowej: zużycie biomasy, czas cyklu palnika, koszty ogrzewania PLN oraz obciążenie OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zużycie pelletu dom 160m2",
      "koszt ogrzewania pelletem 2026",
      "kocioł na pellet z buforem opinie",
      "sprawność kotła kondensacyjnego na pellet",
      "temperatura zasilania podłogówki przy mrozach"
    ],
    "measurementTechnique": "Odczyty z ciepłomierza oraz weryfikacja bilansu zakupowego paliwa (faktury) po pełnym sezonie grzewczym w III strefie klimatycznej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "OZC budynku: 7,8 kW (164,2 m², EPS 20cm lambda 0.031).",
        "Maszynownia: Kocioł kondensacyjny 10 kW, Bufor 600L.",
        "Zużycie roczne: 3840 kg pelletu ENplus A1.",
        "Koszt roczny (CO + CWU): 4416 PLN (1150 PLN/t).",
        "Cykl palnika: średnio 5,2 godziny (brak taktowania)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-casestudy",
    "name": "Interaktywny Audyt Inwestycji",
    "description": "Eksplorator danych technicznych prezentujący za pomocą grafiki SVG parametry budynku, konfigurację maszynowni oraz realne koszty eksploatacyjne ogrzewania pelletem.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG animation support.",
    "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="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><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>
            Case Study (Sezon 2025/2026)
        </div>
        <h2 class="rk-cs-h2">Analiza techniczna <span>rzeczywistej inwestycji</span></h2>
        
        <div class="rk-cs-quote">
            <strong>Realny przypadek inżynierski z mojej praktyki projektowej:</strong> W październiku 2025 roku sfinalizowałem nadzór nad realizacją systemu grzewczego u inwestora pana Janusza w miejscowości Skała koło Krakowa. Przedmiotem opracowania był wolnostojący, piętrowy dom jednorodzinny o powierzchni użytkowej 164,2 m², wybudowany w technologii tradycyjnej (pustak ceramiczny + 20 cm grafitowego <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/" style="color:#fcd34d;">styropianu o współczynniku 0,031 W/(m·K)</a>), bez podpiwniczenia.
        </div>
        
        <p class="rk-cs-paragraph">
            W obiekcie zaprojektowano 100% ogrzewania podłogowego w systemie mokrym (<a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" style="color:#93c5fd;">jastrych cementowy</a> z plastyfikatorem, grubość 6,5 cm). <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" style="color:#93c5fd;">Obliczeniowe zapotrzebowanie na moc cieplną (OZC)</a> wg PN-EN 12831 wyniosło dokładnie <strong>Q = 7,8 kW</strong> przy temperaturze projektowej -20°C.
        </p>
    </div>

    <div class="rk-cs-interactive">
        <h3 class="rk-cs-h3">Podsumowanie pełnego sezonu grzewczego</h3>
        
        <div class="rk-cs-tabs">
            <button class="rk-cs-tab-btn active" data-target="panel-bldg">1. Maszynownia</button>
            <button class="rk-cs-tab-btn" data-target="panel-ctrl">2. Zrównoważenie</button>
            <button class="rk-cs-tab-btn" data-target="panel-cost">3. Wyniki i Koszty</button>
        </div>

        <div class="rk-cs-grid">
            
            <div class="rk-cs-data-wrapper">
                
                <div class="rk-cs-panel active" id="panel-bldg">
                    <div class="rk-data-grid">
                        <div class="rk-data-card full-width">
                            <div class="rk-data-label">Źródło ciepła</div>
                            <div class="rk-data-val">Kocioł na pellet 10 kW</div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Kompaktowy, kondensacyjny ze sprawnością 103,4% (w odniesieniu do wartości opałowej).</p>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-label">Bufor ciepła</div>
                            <div class="rk-data-val"><a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-link" style="color:inherit;">600 Litrów</a></div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Z wbudowaną wężownicą INOX do CWU.</p>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-label">Cykl palnika</div>
                            <div class="rk-data-val">5,2 godziny</div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Brak śladów niszczącego taktowania.</p>
                        </div>
                    </div>
                </div>

                <div class="rk-cs-panel" id="panel-ctrl">
                    <div class="rk-data-grid">
                        <div class="rk-data-card full-width">
                            <div class="rk-data-label">Rozdzielacz i Regulacja</div>
                            <div class="rk-data-val">12-sekcyjny (Algorytm TPI)</div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Wyposażony w <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" class="rk-link">rotametry</a> (0,5-5,0 l/min) i siłowniki termoelektryczne. System w 100% zrównoważony hydraulicznie.</p>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-label">Temp. zasilania max</div>
                            <div class="rk-data-val">36,5 °C</div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Zanotowana przy mrozach dochodzących do -12°C.</p>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-label">Akumulacja wylewki</div>
                            <div class="rk-data-val">Wysoka</div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Brak odczuwalnych wahań temperatury w pokojach.</p>
                        </div>
                    </div>
                </div>

                <div class="rk-cs-panel" id="panel-cost">
                    <div class="rk-data-grid">
                        <div class="rk-data-card full-width">
                            <div class="rk-data-label">Roczny koszt (CO + CWU)</div>
                            <div class="rk-data-val val-success">4 416 PLN</div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Potwierdzone odczytami z ciepłomierza i fakturami na koniec kwietnia 2026 r.</p>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-label">Zużycie Paliwa</div>
                            <div class="rk-data-val val-highlight">3 840 kg</div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Pellet drzewny certyfikowany w klasie ENplus A1.</p>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-label">Cena zakupu</div>
                            <div class="rk-data-val">1 150 <span>PLN/t</span></div>
                            <p style="font-size:13px; color:var(--rk-cs-muted); margin:5px 0 0 0;">Średnia cena zakupu w sezonie 2025/2026.</p>
                        </div>
                    </div>
                </div>

            </div>

            <div class="rk-cs-svg-box">
                
                <svg class="rk-svg-layer active" id="svg-bldg" viewBox="0 0 200 200">
                    <rect x="20" y="80" width="50" height="90" fill="#334155" rx="4"/>
                    <circle class="anim-pellet-drop" cx="40" cy="50" r="4"/>
                    <circle class="anim-pellet-drop" cx="50" cy="40" r="4" style="animation-delay:0.5s;"/>
                    <circle class="anim-pellet-drop" cx="45" cy="60" r="4" style="animation-delay:1s;"/>
                    <path d="M45 150 C30 150, 25 120, 45 100 C65 120, 60 150, 45 150 Z" fill="#ea580c"/>
                    <rect x="110" y="40" width="60" height="130" fill="#1e293b" stroke="#3b82f6" stroke-width="3" rx="12"/>
                    <path d="M70 120 L110 120 M70 140 L110 140" fill="none" stroke="#ef4444" stroke-width="4"/>
                    <text x="140" y="110" fill="#60a5fa" font-size="20" font-weight="bold" text-anchor="middle">600 L</text>
                </svg>

                <svg class="rk-svg-layer" id="svg-ctrl" viewBox="0 0 200 200">
                    <path d="M20 100 L100 30 L180 100 L180 180 L20 180 Z" fill="none" stroke="#64748b" stroke-width="4" stroke-linejoin="round"/>
                    <path class="anim-heat-wave" d="M40 160 L160 160 M40 140 L160 140 M40 120 L160 120" fill="none" stroke-width="6" stroke-linecap="round"/>
                    <rect x="80" y="60" width="40" height="30" fill="#1e293b" stroke="#0ea5e9" stroke-width="2" rx="4"/>
                    <text x="100" y="80" fill="#0ea5e9" font-size="14" font-weight="bold" text-anchor="middle">36.5°</text>
                </svg>

                <svg class="rk-svg-layer" id="svg-cost" viewBox="0 0 200 200">
                    <rect x="30" y="160" width="140" height="4" fill="#64748b"/>
                    <rect class="anim-chart-bar" x="50" y="100" width="30" height="60" fill="#3b82f6"/>
                    <rect class="anim-chart-bar" x="120" y="60" width="30" height="100" fill="#10b981" style="animation-delay:0.3s;"/>
                    <g class="anim-coin-spin" style="transform-origin: 135px 35px;">
                        <circle cx="135" cy="35" r="20" fill="#fcd34d" stroke="#d97706" stroke-width="3"/>
                        <text x="135" y="41" fill="#d97706" font-size="16" font-weight="bold" text-anchor="middle">PLN</text>
                    </g>
                    <text x="65" y="90" fill="#94a3b8" font-size="14" font-weight="bold" text-anchor="middle">3.8t</text>
                </svg>

            </div>

        </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-cs-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano Kod Audytowy</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Case Study inwestycji i dedykowana struktura JSON-LD podlegają ochronie prawnej Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Zakładek (Tabs) i SVG
    const tabBtns = document.querySelectorAll('.rk-cs-tab-btn');
    const panels = document.querySelectorAll('.rk-cs-panel');
    const svgs = document.querySelectorAll('.rk-svg-layer');

    tabBtns.forEach(btn => {
        btn.addEventListener('click', () => {
            // Reset active states
            tabBtns.forEach(b => b.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));
            svgs.forEach(s => s.classList.remove('active'));
            
            // Set new active
            btn.classList.add('active');
            const targetId = btn.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
            
            // Map panel to SVG
            if(targetId === 'panel-bldg') document.getElementById('svg-bldg').classList.add('active');
            if(targetId === 'panel-ctrl') document.getElementById('svg-ctrl').classList.add('active');
            if(targetId === 'panel-cost') document.getElementById('svg-cost').classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-err-dark: #0f172a;
    --rk-err-card: #ffffff;
    --rk-err-danger: #ef4444; /* Błąd / Amator */
    --rk-err-danger-bg: #fef2f2;
    --rk-err-success: #10b981; /* Norma / Ekspert */
    --rk-err-success-bg: #ecfdf5;
    --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, system-ui, sans-serif;
    background: var(--rk-err-card);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.1);
    border: 1px solid var(--rk-err-border);
    overflow: hidden;
}

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

.state-pro .rk-err-header { border-bottom-color: var(--rk-err-success); }

.rk-err-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #cbd5e1;
    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(255, 255, 255, 0.2);
}

.rk-err-h2 {
    font-size: 30px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
    letter-spacing: -0.5px;
}

.rk-err-h2 span { color: var(--rk-err-danger); transition: color 0.4s ease; }
.state-pro .rk-err-h2 span { color: var(--rk-err-success); }

.rk-err-paragraph {
    font-size: 16px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

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

.rk-err-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-err-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

/* Switcher / Toggle */
.rk-err-toggle-box {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    margin-bottom: 40px;
    background: #ffffff;
    padding: 15px 30px;
    border-radius: 100px;
    border: 1px solid var(--rk-err-border);
    max-width: 650px;
    margin-left: auto;
    margin-right: auto;
    box-shadow: 0 4px 10px rgba(0,0,0,0.03);
}

.rk-err-label {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-err-muted);
    cursor: pointer;
    transition: color 0.3s;
    user-select: none;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-err-label.active-warn { color: var(--rk-err-danger); }
.rk-err-label.active-pro { color: var(--rk-err-success); }

.rk-err-switch {
    position: relative;
    display: inline-block;
    width: 70px;
    height: 36px;
    flex-shrink: 0;
}

.rk-err-switch input { opacity: 0; width: 0; height: 0; }

.rk-err-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--rk-err-danger);
    transition: .4s;
    border-radius: 36px;
}

.rk-err-slider:before {
    position: absolute;
    content: "";
    height: 28px;
    width: 28px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s cubic-bezier(0.34, 1.56, 0.64, 1);
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

input:checked + .rk-err-slider { background-color: var(--rk-err-success); }
input:checked + .rk-err-slider:before { transform: translateX(34px); }

/* Karty Błędów (Grid) */
.rk-err-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
}

.rk-err-card {
    background: #ffffff;
    border: 2px solid var(--rk-err-border);
    border-radius: 16px;
    padding: 25px 20px;
    display: flex;
    flex-direction: column;
    gap: 15px;
    transition: all 0.4s ease;
    position: relative;
    overflow: hidden;
}

.state-warn .rk-err-card { border-color: #fca5a5; box-shadow: 0 10px 25px -5px rgba(239, 68, 68, 0.15); }
.state-pro .rk-err-card { border-color: #6ee7b7; box-shadow: 0 10px 25px -5px rgba(16, 185, 129, 0.15); }

/* SVG Canvas w Kartach */
.rk-err-svg-box {
    background: #0f172a;
    border-radius: 12px;
    height: 140px;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
    border: 1px solid #334155;
    overflow: hidden;
}

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

/* Treść Karty */
.rk-err-card-title {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-err-dark);
    margin: 0;
    line-height: 1.4;
    text-align: center;
}

.rk-err-card-text {
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-err-text);
    margin: 0;
    text-align: center;
}

.rk-link {
    color: var(--rk-err-dark);
    text-decoration: none;
    font-weight: 800;
    border-bottom: 2px dashed var(--rk-err-muted);
    transition: all 0.3s;
}

.state-warn .rk-link { color: var(--rk-err-danger); border-bottom-color: rgba(239, 68, 68, 0.4); }
.state-pro .rk-link { color: var(--rk-err-success); border-bottom-color: rgba(16, 185, 129, 0.4); }
.rk-link:hover { border-bottom-style: solid; }

/* ================= ANIMACJE SVG ================= */

/* Karta 1: Próba szczelności */
.anim-gauge-needle { transform-origin: 50px 80px; transition: transform 1s cubic-bezier(0.34, 1.56, 0.64, 1); }
.state-warn .anim-gauge-needle { transform: rotate(-45deg); fill: #ef4444; }
.state-pro .anim-gauge-needle { transform: rotate(45deg); fill: #10b981; }

.anim-drop { opacity: 0; }
.state-warn .anim-drop { animation: dropFall 1.5s infinite; fill: #3b82f6; }
.state-pro .anim-drop { display: none; }

@keyframes dropFall { 0% { transform: translateY(0); opacity: 1; } 100% { transform: translateY(30px); opacity: 0; } }

/* Karta 2: Dylatacje */
.anim-crack { stroke-dasharray: 40; stroke-dashoffset: 40; transition: stroke-dashoffset 0.1s; }
.state-warn .anim-crack { stroke-dashoffset: 0; transition: stroke-dashoffset 0.8s 0.2s ease-out; stroke: #ef4444; }

.anim-foam { transform-origin: left; transition: transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1); }
.state-warn .anim-foam { transform: scaleX(0.2); fill: #ef4444; }
.state-pro .anim-foam { transform: scaleX(1); fill: #3b82f6; } /* Pianka brzegowa */

/* Karta 3: Woda (Kamień vs Demineralizowana) */
.anim-scale { transform-origin: center; transition: transform 0.5s; }
.state-warn .anim-scale { transform: scale(1); fill: #d97706; } /* Kamień kotłowy */
.state-pro .anim-scale { transform: scale(0); }

.anim-water-flow { stroke-dasharray: 10 15; stroke-dashoffset: 0; transition: stroke 0.5s; }
.state-warn .anim-water-flow { stroke: #fbbf24; animation: flowSlow 3s linear infinite; }
.state-pro .anim-water-flow { stroke: #3b82f6; animation: flowFast 1s linear infinite; }

@keyframes flowSlow { to { stroke-dashoffset: -25; } }
@keyframes flowFast { to { stroke-dashoffset: -25; } }

/* Responsywność */
@media (max-width: 850px) {
    .rk-err-grid { grid-template-columns: 1fr; }
    .rk-err-header, .rk-err-interactive { padding: 30px 20px; }
    .rk-err-h2 { font-size: 26px; }
    .rk-err-toggle-box { flex-direction: column; gap: 15px; border-radius: 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/"
    },
    "headline": "Katalog Krytycznych Błędów Instalacyjnych Ogrzewania Podłogowego",
    "description": "Analiza ekspercka najczęstszych błędów: brak próby ciśnieniowej 6 bar, pominięcie taśm dylatacyjnych oraz użycie twardej wody kranowej zamiast demineralizowanej.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#dataset",
    "name": "Klasyfikacja błędów wykonawczych i parametrów krytycznych podłogówki (2026)",
    "description": "Zbiór danych weryfikacyjnych i tolerancji materiałowych dla systemów płaszczyznowych w odniesieniu do normy PN-EN 1264-4.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "próba szczelności podłogówki 6 bar",
      "dylatacja brzegowa ogrzewania",
      "woda demineralizowana w instalacji",
      "pękanie wylewki betonowej",
      "zarastanie rotametrów kamieniem"
    ],
    "measurementTechnique": "Badania organoleptyczne i manometryczne wg norm technicznych, weryfikacja konduktometrem (przewodność <10 µS/cm).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Błąd 1: Zalanie na sucho. Wymóg: Ciśnienie 0.6 MPa przez 24h (PN-EN 1264-4).",
        "Błąd 2: Brak izolacji. Wymóg: Taśma polietylenowa 8 mm, współczynnik rozszerzalności betonu ~0.012 mm/(m*K).",
        "Błąd 3: Woda kranowa. Wymóg: Woda demineralizowana z inhibitorem korozji."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#webapp",
    "name": "Symulator Skutków Błędów Instalacyjnych",
    "description": "Interaktywny audytor instalacji prezentujący za pomocą grafiki wektorowej skutki fizykochemiczne nieprawidłowego montażu (pęknięcia betonu, osadzanie kamienia, wycieki).",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and inline SVG support.",
    "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="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path><path d="M12 9v4"></path><path d="M12 17h.01"></path></svg>
            Audyt Wykonawczy
        </div>
        <h2 class="rk-err-h2">Najczęstsze błędy instalatorów przy <span>montażu tego układu</span></h2>
        <p class="rk-err-paragraph">
            Oto katalog krytycznych błędów wykonawczych, które najczęściej eliminuję podczas ekspertyz technicznych na inwestycjach w całej Polsce. Te zaniedbania potrafią zniszczyć nawet najlepszy projekt maszynowni.
        </p>
    </div>

    <div class="rk-err-interactive">
        <h3 class="rk-err-h3">Symulacja Odbioru: Jak wykonano instalację?</h3>
        
        <div class="rk-err-toggle-box">
            <span class="rk-err-label active-warn" id="rk-lbl-warn" onclick="document.getElementById('rk-err-toggle').click()">Praktyka "Na Oko" (Amator)</span>
            <label class="rk-err-switch">
                <input type="checkbox" id="rk-err-toggle">
                <span class="rk-err-slider"></span>
            </label>
            <span class="rk-err-label" id="rk-lbl-pro" onclick="document.getElementById('rk-err-toggle').click()">Standard PN-EN (Inżynier)</span>
        </div>

        <div class="rk-err-grid state-warn" id="rk-main-grid">
            
            <div class="rk-err-card">
                <div class="rk-err-svg-box">
                    <svg class="rk-svg-item" viewBox="0 0 100 120">
                        <rect x="30" y="50" width="40" height="20" fill="none" stroke="#475569" stroke-width="4" rx="2"/>
                        <circle cx="50" cy="30" r="18" fill="#1e293b" stroke="#64748b" stroke-width="2"/>
                        <circle cx="50" cy="30" r="2" fill="#fff"/>
                        <path class="anim-gauge-needle" d="M48 30 L50 15 L52 30 Z" fill="#ef4444"/>
                        <path class="anim-drop" d="M45 75 Q50 85 50 85 Q50 85 55 75 Z" fill="#3b82f6"/>
                        <path class="anim-drop" d="M35 70 Q40 80 40 80 Q40 80 45 70 Z" fill="#3b82f6" style="animation-delay:0.5s;"/>
                    </svg>
                </div>
                <h4 class="rk-err-card-title">Zaniechanie próby szczelności</h4>
                <p class="rk-err-card-text" id="rk-txt-1">
                    Zalanie rur "na sucho" grozi ukryciem uszkodzeń mechanicznych. Zgodnie z normą PN-EN 1264-4, <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" class="rk-link">próbę szczelności</a> wykonuje się pod ciśnieniem 0,6 MPa (6 bar) przez 24h, a betonuje przy minimum 0,3 MPa.
                </p>
            </div>

            <div class="rk-err-card">
                <div class="rk-err-svg-box">
                    <svg class="rk-svg-item" viewBox="0 0 100 120">
                        <rect x="10" y="20" width="15" height="80" fill="#334155"/>
                        <rect class="anim-foam" x="25" y="20" width="10" height="80" fill="#ef4444"/>
                        <rect x="35" y="70" width="60" height="30" fill="#94a3b8" rx="2"/>
                        <path class="anim-crack" d="M45 70 L55 85 L50 100" fill="none" stroke="#ef4444" stroke-width="2"/>
                        <path class="anim-crack" d="M75 70 L70 80 L80 100" fill="none" stroke="#ef4444" stroke-width="2"/>
                    </svg>
                </div>
                <h4 class="rk-err-card-title">Brak izolacji brzegowej</h4>
                <p class="rk-err-card-text" id="rk-txt-2">
                    Brak <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" class="rk-link">taśmy dylatacyjnej</a> (min. 8 mm) lub dylatacji pośrednich (>40 m²) powoduje niekontrolowane pęknięcia. Beton rozszerza się liniowo (współczynnik około 0,012 mm/(m·K)), niszcząc posadzki.
                </p>
            </div>

            <div class="rk-err-card">
                <div class="rk-err-svg-box">
                    <svg class="rk-svg-item" viewBox="0 0 100 120">
                        <rect x="10" y="40" width="80" height="40" fill="none" stroke="#64748b" stroke-width="4"/>
                        <path class="anim-water-flow" d="M10 50 L90 50 M10 60 L90 60 M10 70 L90 70" fill="none" stroke-width="4"/>
                        <circle class="anim-scale" cx="30" cy="45" r="4"/>
                        <circle class="anim-scale" cx="50" cy="75" r="5"/>
                        <circle class="anim-scale" cx="70" cy="45" r="3"/>
                        <circle class="anim-scale" cx="80" cy="75" r="4"/>
                    </svg>
                </div>
                <h4 class="rk-err-card-title">Zwykła woda wodociągowa</h4>
                <p class="rk-err-card-text" id="rk-txt-3">
                    Twarda woda kranowa zrzuca węglan wapnia (kamień kotłowy). Przy zładzie 710 litrów osad trwale blokuje rotametry i odcina wymienniki. Wymagana jest <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/" class="rk-link">woda demineralizowana z inhibitorem</a> (przewodność <10 µS/cm).
                </p>
            </div>

        </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-err-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowany Skrypt Audytowy</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Interaktywny symulator błędów instalacyjnych i baza wiedzy JSON-LD chronione są prawami Projekt-Ogrzewania.pl. Uruchomienie zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Toggle Switch
    const toggle = document.getElementById('rk-err-toggle');
    const grid = document.getElementById('rk-main-grid');
    const hdr = document.querySelector('.rk-err-container');
    const lblWarn = document.getElementById('rk-lbl-warn');
    const lblPro = document.getElementById('rk-lbl-pro');

    const t1 = document.getElementById('rk-txt-1');
    const t2 = document.getElementById('rk-txt-2');
    const t3 = document.getElementById('rk-txt-3');

    toggle.addEventListener('change', function() {
        if (this.checked) {
            // STAN: PRO (Zgodne z normą)
            grid.className = 'rk-err-grid state-pro';
            hdr.classList.add('state-pro');
            lblWarn.classList.remove('active-warn');
            lblPro.classList.add('active-pro');
            
            t1.innerHTML = '<strong>Standard:</strong> <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" class="rk-link">Próba szczelności</a> wykonana manometrem kalibrowanym (6 bar przez 24h). Jastrych zalewany na rurach usztywnionych ciśnieniem min. 3 bary. Pełne bezpieczeństwo.';
            t2.innerHTML = '<strong>Standard:</strong> Gruba na 8 mm pianka polietylenowa oraz poprawne <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" class="rk-link">podziały dylatacyjne</a> (<40 m²) płynnie absorbują naprężenia termiczne pracującej płyty betonu.';
            t3.innerHTML = '<strong>Standard:</strong> Zład napełniony czystą <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/" class="rk-link">wodą demineralizowaną z inhibitorem korozji</a>. Przewodność poniżej 10 µS/cm gwarantuje krystalicznie czyste rotametry i brak osadów.';
            
        } else {
            // STAN: WARN (Błędy)
            grid.className = 'rk-err-grid state-warn';
            hdr.classList.remove('state-pro');
            lblPro.classList.remove('active-pro');
            lblWarn.classList.add('active-warn');
            
            t1.innerHTML = 'Zalanie rur "na sucho" grozi ukryciem uszkodzeń mechanicznych. Zgodnie z normą PN-EN 1264-4, <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" class="rk-link">próbę szczelności</a> wykonuje się pod ciśnieniem 0,6 MPa (6 bar) przez 24h, a betonuje przy minimum 0,3 MPa.';
            t2.innerHTML = 'Brak <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" class="rk-link">taśmy dylatacyjnej</a> (min. 8 mm) lub dylatacji pośrednich (>40 m²) powoduje niekontrolowane pęknięcia. Beton rozszerza się liniowo (współczynnik około 0,012 mm/(m·K)), niszcząc posadzki.';
            t3.innerHTML = 'Twarda woda kranowa zrzuca węglan wapnia (kamień kotłowy). Przy zładzie 710 litrów osad trwale blokuje rotametry i odcina wymienniki. Wymagana jest <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/" class="rk-link">woda demineralizowana z inhibitorem</a> (przewodność <10 µS/cm).';
        }
    });
});
</script>



<style>
:root {
    --rk-fin-dark: #0f172a;
    --rk-fin-panel: #1e293b;
    --rk-fin-primary: #d97706; /* Bursztyn/Pellet */
    --rk-fin-primary-light: #fef3c7;
    --rk-fin-accent: #0ea5e9; /* Woda/Podłogówka */
    --rk-fin-bg: #f8fafc;
    --rk-fin-border: #e2e8f0;
    --rk-fin-text: #334155;
    --rk-fin-text-dim: #64748b;
}

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

/* Header z ekspertem */
.rk-fin-header {
    background: linear-gradient(135deg, var(--rk-fin-dark) 0%, #291502 100%);
    padding: 40px 50px;
    display: flex;
    align-items: center;
    gap: 30px;
    border-bottom: 4px solid var(--rk-fin-primary);
    position: relative;
    overflow: hidden;
}

.rk-fin-header::after {
    content: ''; position: absolute; right: 0; top: 0; width: 300px; height: 100%;
    background: radial-gradient(circle at right, rgba(217, 119, 6, 0.15) 0%, transparent 70%);
}

.rk-expert-avatar {
    width: 90px;
    height: 90px;
    border-radius: 50%;
    border: 3px solid var(--rk-fin-primary);
    box-shadow: 0 0 20px rgba(217, 119, 6, 0.4);
    object-fit: cover;
    position: relative;
    z-index: 2;
}

.rk-header-content { position: relative; z-index: 2; }

.rk-header-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(217, 119, 6, 0.2);
    color: #fcd34d;
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 10px;
    border: 1px solid rgba(252, 211, 77, 0.3);
}

.rk-header-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: #ffffff;
    margin: 0 0 8px 0;
    line-height: 1.2;
}

.rk-header-content p {
    color: #cbd5e1;
    font-size: 14px;
    margin: 0;
    font-weight: 500;
}

/* Sekcja z zakładkami i wiedzą */
.rk-fin-body {
    display: grid;
    grid-template-columns: 1fr 1.2fr;
    background: #ffffff;
}

.rk-rules-list {
    padding: 30px;
    border-right: 1px solid var(--rk-fin-border);
    display: flex;
    flex-direction: column;
    gap: 12px;
    background: #f8fafc;
}

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

.rk-rule-btn:hover {
    border-color: var(--rk-fin-primary);
    transform: translateX(4px);
}

.rk-rule-btn.active {
    background: var(--rk-fin-primary-light);
    border-color: var(--rk-fin-primary);
    box-shadow: inset 4px 0 0 var(--rk-fin-primary);
}

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

.rk-rule-btn.active .rk-rule-icon {
    background: var(--rk-fin-primary);
    color: #ffffff;
}

.rk-rule-text h3 {
    margin: 0 0 5px 0;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-fin-dark);
}

.rk-rule-text p {
    margin: 0;
    font-size: 13px;
    color: var(--rk-fin-text-dim);
    line-height: 1.5;
}

/* Panel Detali (Prawy) */
.rk-rule-details {
    padding: 40px 35px;
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-detail-panel {
    display: none;
    animation: fadeScale 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-detail-panel.active {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

@keyframes fadeScale {
    from { opacity: 0; transform: scale(0.95); }
    to { opacity: 1; transform: scale(1); }
}

.rk-detail-panel h4 {
    margin: 0;
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-fin-dark);
}

.rk-detail-panel p {
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-fin-text);
}

.rk-fin-link {
    color: var(--rk-fin-accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px dashed rgba(14, 165, 233, 0.4);
    transition: 0.3s;
}
.rk-fin-link:hover { border-bottom-style: solid; color: #0284c7; }

/* SVG Canvas */
.rk-detail-svg {
    width: 100%;
    height: 180px;
    background: var(--rk-fin-dark);
    border-radius: 12px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.5);
    border: 1px solid #334155;
}

/* Animacje SVG zależne od zakładki */
.anim-flame-fin { transform-origin: bottom center; animation: burnFin 2s infinite alternate; fill: #f59e0b; }
.anim-flow-hot { stroke-dasharray: 6 12; animation: dashFin 1s linear infinite; stroke: #ef4444; }
.anim-flow-mix { stroke-dasharray: 6 12; animation: dashFin 2s linear infinite; stroke: #0ea5e9; }
.anim-gear-spin { transform-origin: center; animation: spinFin 4s linear infinite; fill: #64748b; }
.anim-pellet-drop { animation: dropPellet 1.5s infinite linear; fill: #fcd34d; }
.anim-heat-wave { stroke-dasharray: 6 12; animation: floatUp 2s linear infinite; stroke: #f59e0b; }

@keyframes burnFin { from { transform: scaleY(0.9); } to { transform: scaleY(1.1); } }
@keyframes dashFin { to { stroke-dashoffset: -18; } }
@keyframes spinFin { to { transform: rotate(360deg); } }
@keyframes dropPellet { 0% { transform: translateY(-20px); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateY(30px); opacity: 0; } }
@keyframes floatUp { to { stroke-dashoffset: -18; transform: translateY(-5px); } }

/* Narzędzie Szybkiego Szacowania (Kalkulator) */
.rk-quick-calc {
    background: var(--rk-fin-panel);
    padding: 40px 50px;
    border-top: 1px solid #0f172a;
    color: #ffffff;
}

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

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

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

.rk-calc-input-area {
    display: flex;
    flex-direction: column;
    gap: 15px;
    background: rgba(255,255,255,0.03);
    padding: 20px;
    border-radius: 12px;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-calc-label { font-size: 13px; font-weight: 700; color: #94a3b8; display: flex; justify-content: space-between; }
.rk-calc-label span { color: #ffffff; font-size: 16px; font-weight: 900; }

.rk-fin-range {
    -webkit-appearance: none; width: 100%; height: 6px; border-radius: 3px; background: #334155; outline: none;
}
.rk-fin-range::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 22px; height: 22px; border-radius: 50%;
    background: var(--rk-fin-primary); cursor: pointer; border: 3px solid #ffffff; transition: 0.1s;
}
.rk-fin-range::-webkit-slider-thumb:active { transform: scale(1.15); }

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

.rk-result-box {
    background: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 18px 15px;
    border-radius: 12px;
    text-align: center;
    transition: all 0.3s;
}

.rk-result-box.highlight { border-color: var(--rk-fin-primary); background: rgba(217, 119, 6, 0.1); }
.rk-result-box.water { border-color: var(--rk-fin-accent); background: rgba(14, 165, 233, 0.1); }

.rk-res-val { display: block; font-size: 22px; font-weight: 900; color: #ffffff; margin-bottom: 5px; }
.rk-result-box.highlight .rk-res-val { color: var(--rk-fin-primary); }
.rk-result-box.water .rk-res-val { color: var(--rk-fin-accent); }
.rk-res-lab { display: block; font-size: 11px; color: #94a3b8; text-transform: uppercase; font-weight: 700; line-height: 1.4; }

/* SEKACJA AUTORSKA - PODPIS EKSPERTA */
.rk-fin-author {
    background: #f1f5f9;
    padding: 35px 50px;
    display: flex;
    align-items: flex-start;
    gap: 25px;
    border-top: 1px solid var(--rk-fin-border);
}

.rk-author-photo-small {
    width: 75px;
    height: 75px;
    border-radius: 50%;
    border: 3px solid var(--rk-fin-primary);
    box-shadow: 0 4px 15px rgba(217, 119, 6, 0.2);
    object-fit: cover;
    flex-shrink: 0;
}

.rk-author-info { flex-grow: 1; }

.rk-author-info h4 {
    margin: 0 0 6px 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-fin-dark);
}

.rk-author-info p {
    margin: 0;
    font-size: 14px;
    color: var(--rk-fin-text);
    line-height: 1.6;
}

.rk-author-links {
    display: flex;
    gap: 15px;
    margin-top: 12px;
}

.rk-author-links a {
    color: var(--rk-fin-accent);
    font-size: 13px;
    font-weight: 800;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    transition: color 0.2s;
}

.rk-author-links a:hover { color: #0284c7; text-decoration: underline; }

@media (max-width: 768px) {
    .rk-fin-header { flex-direction: column; text-align: center; padding: 30px 20px; }
    .rk-expert-avatar { width: 70px; height: 70px; }
    .rk-fin-body { grid-template-columns: 1fr; }
    .rk-rules-list { border-right: none; border-bottom: 1px solid var(--rk-fin-border); padding: 20px; }
    .rk-rule-details { padding: 30px 20px; }
    .rk-calc-grid { grid-template-columns: 1fr; gap: 25px; }
    .rk-quick-calc { padding: 30px 20px; }
    .rk-calc-results { grid-template-columns: 1fr; }
    .rk-fin-author { flex-direction: column; text-align: center; padding: 30px 20px; align-items: center; }
    .rk-author-links { justify-content: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-podsumowanie-eksperta",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Inżynierskie podsumowanie: Kocioł na pellet i podłogówka",
    "description": "Synteza wiedzy o połączeniu kotła stałopalnego z ogrzewaniem płaszczyznowym. Zasady stosowania buforów, zaworów mieszających, obliczania zładu wodnego i doboru wylewki.",
    "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": "CEO & Główny Projektant HVAC",
      "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-podsumowanie-eksperta",
    "name": "Wskaźniki doboru i rentowności: Kocioł na pellet z buforem (2026)",
    "description": "Zestawienie relacji pomiędzy powierzchnią budynku a szacunkową mocą kotła, wymaganą objętością zbiornika buforowego, doborem wylewki oraz prognozowanym zużyciem certyfikowanej biomasy.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podsumowanie kotła na pellet",
      "szybki kalkulator maszynowni",
      "zużycie pelletu w 2026",
      "wymagany bufor ciepła",
      "zawór mieszający podłogówka",
      "certyfikowany pellet ENplus A1",
      "wylewka anhydrytowa pod kocioł na pellet"
    ],
    "measurementTechnique": "Szacowanie oparte na współczynniku zapotrzebowania 50 W/m2, przeliczniku bufora 60 l/kW oraz empirycznym zużyciu pelletu na poziomie ok. 26 kg/m2 rocznie z uwzględnieniem przewodnictwa cieplnego posadzek.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Szacunkowa moc kotła = (Powierzchnia * 0.05) + 20% zapasu.",
        "Minimalna pojemność bufora = Moc kotła * 60 litrów.",
        "Szacunkowe zużycie roczne (dom dobrze ocieplony) = Powierzchnia * ~26 kg.",
        "Zalecane paliwo = Certyfikowany pellet ENplus A1 (minimalizacja popiołu i szlaki).",
        "Optymalny odbiór ciepła = Wylewka anhydrytowa (wyższy współczynnik przewodzenia)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-podsumowanie-eksperta",
    "name": "Estymator Maszynowni Pelletowej",
    "description": "Interaktywny kalkulator podsumowujący. Przelicza powierzchnię domu na orientacyjną moc kotła, wymagany zład bufora ciepła oraz prognozowane roczne zużycie paliwa stałego.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Range Inputs",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-fin-container" id="rk-fin-app">
    
    <div class="rk-fin-header">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-expert-avatar" loading="lazy">
        <div class="rk-header-content">
            <div class="rk-header-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>
                Wnioski Eksperta
            </div>
            <h2>Inżynierskie podsumowanie: Kocioł na pellet i podłogówka</h2>
            <p>Ten system to inwestycja w wygodę, ale nie wybacza amatorskich błędów. Poznaj 5 złotych zasad, które uratują Twoją maszynownię przed przedwczesnym zniszczeniem i przepalaniem budżetu.</p>
        </div>
    </div>

    <div class="rk-fin-body">
        
        <div class="rk-rules-list">
            <button class="rk-rule-btn active" data-panel="fin-det-1">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" 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></svg></div>
                <div class="rk-rule-text">
                    <h3>1. Serce to Bufor</h3>
                    <p>Rozprzężenie hydrauliczne</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="fin-det-2">
                <div class="rk-rule-icon"><svg width="18" height="18" 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-rule-text">
                    <h3>2. Niska Temperatura</h3>
                    <p>Granica wytrzymałości jastrychu</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="fin-det-3">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg></div>
                <div class="rk-rule-text">
                    <h3>3. Profesjonalny OZC</h3>
                    <p>Klucz do przepływów</p>
                </div>
            </button>
            
            <button class="rk-rule-btn" data-panel="fin-det-4">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2c0 0-5 6-5 11a5 5 0 0 0 10 0c0-5-5-11-5-11Z"></path></svg></div>
                <div class="rk-rule-text">
                    <h3>4. Jakość Paliwa</h3>
                    <p>Certyfikat ENplus A1</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="fin-det-5">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="2" y="14" width="20" height="6" rx="1"></rect><path d="M2 10h20M2 6h20"></path></svg></div>
                <div class="rk-rule-text">
                    <h3>5. Dobór Wylewki</h3>
                    <p>Anhydryt vs beton</p>
                </div>
            </button>
        </div>

        <div class="rk-rule-details">
            
            <div class="rk-detail-panel active" id="fin-det-1">
                <h4>Bufor ciepła jest obowiązkowy</h4>
                <p>Bez niego zapalarka w kotle podda się po jednym sezonie. <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-fin-link">Zbiornik buforowy</a> (minimum 50 litrów na każdy kW mocy) absorbuje nadmiar energii, pozwala palnikowi pracować na najwyższej sprawności i zapobiega kondensacji smoły w wymienniku.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="20" y="30" width="30" height="50" fill="#334155" rx="4"/>
                        <path class="anim-flame-fin" d="M35 80 C25 80, 20 50, 35 40 C50 50, 45 80, 35 80 Z"/>
                        <path class="anim-flow-hot" d="M50 50 L90 50" fill="none" stroke-width="4"/>
                        <rect x="90" y="20" width="40" height="70" fill="#1e293b" stroke="#0ea5e9" stroke-width="2" rx="6"/>
                        <path class="anim-flow-mix" d="M130 50 L170 50" fill="none" stroke-width="4"/>
                        <rect x="170" y="45" width="20" height="10" fill="#94a3b8" rx="2"/>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="fin-det-2">
                <h4>Chroń posadzkę mieszaczem</h4>
                <p>Ogień w kotle to 80°C, ale podłogówka potrzebuje tylko 35°C. Przepuszczenie wrzątku bez <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/" class="rk-fin-link">zaworu trójdrogowego</a> to wyrok śmierci dla betonowej wylewki (max. norma to 50°C). Sterowanie pogodowe wymiesza wodę powrotną do idealnego poziomu.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <path class="anim-flow-hot" d="M40 50 L90 50" fill="none" stroke-width="6"/>
                        <path class="anim-flow-mix" d="M90 50 L160 50" fill="none" stroke-width="6"/>
                        <polygon points="90,40 90,60 110,50" fill="#cbd5e1"/>
                        <polygon points="110,40 130,30 130,50" fill="#cbd5e1"/>
                        <polygon points="100,70 120,70 110,50" fill="#cbd5e1"/>
                        <circle cx="110" cy="50" r="5" fill="#1e293b"/>
                        <text x="65" y="40" fill="#ef4444" font-size="12" font-weight="bold">80°C</text>
                        <text x="145" y="40" fill="#0ea5e9" font-size="12" font-weight="bold">35°C</text>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="fin-det-3">
                <h4>OZC to Twój drogowskaz</h4>
                <p>Nigdy nie zgaduj długości pętli ani mocy pompy. <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-fin-link">Projektowe Obciążenie Cieplne (OZC)</a> pozwala wyliczyć masowy przepływ (np. 1,72 m³/h) i precyzyjnie wyregulować rotametry. Pętle powyżej 100 metrów stworzą niepokonywalny opór hydrauliczny.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="60" y="20" width="80" height="60" fill="#1e293b" stroke="#64748b" stroke-width="2" rx="4"/>
                        <path class="anim-flow-mix" d="M40 40 L60 40 M140 40 L160 40" fill="none" stroke-width="4"/>
                        <path class="anim-flow-hot" d="M40 60 L60 60 M140 60 L160 60" fill="none" stroke-width="4"/>
                        <g class="anim-gear-spin" style="transform-origin: 100px 50px;">
                            <circle cx="100" cy="50" r="15" fill="#64748b"/>
                            <circle cx="100" cy="50" r="5" fill="#1e293b"/>
                            <rect x="98" y="30" width="4" height="40" fill="#64748b"/>
                            <rect x="80" y="48" width="40" height="4" fill="#64748b"/>
                        </g>
                    </svg>
                </div>
            </div>
            
            <div class="rk-detail-panel" id="fin-det-4">
                <h4>Jakość paliwa to podstawa</h4>
                <p>Tani materiał opałowy zanieczyszczony piaskiem i korą to najkrótsza droga do awarii. Używaj wyłącznie <a href="https://projekt-ogrzewania.pl/kociol-na-pellet/" class="rk-fin-link">certyfikowanego pelletu ENplus A1</a>. Gwarantuje on wyższą wartość opałową, nie zapycha podajnika i ogranicza uciążliwe czyszczenie wymiennika kotła do minimum.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <polygon points="70,10 130,10 110,60 90,60" fill="#334155"/>
                        <circle class="anim-pellet-drop" cx="95" cy="40" r="4"/>
                        <circle class="anim-pellet-drop" cx="105" cy="30" r="4" style="animation-delay:0.5s;"/>
                        <circle class="anim-pellet-drop" cx="100" cy="50" r="4" style="animation-delay:1s;"/>
                        <rect x="80" y="65" width="40" height="25" fill="#1e293b" rx="2"/>
                        <circle cx="150" cy="40" r="18" fill="none" stroke="#10b981" stroke-width="3"/>
                        <text x="150" y="45" fill="#10b981" font-size="14" font-weight="bold" text-anchor="middle">A1</text>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="fin-det-5">
                <h4>Anhydryt maksymalizuje wydajność</h4>
                <p>Na optymalną pracę układu wpływa czas oddawania ciepła. <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" class="rk-fin-link">Wylewka anhydrytowa pod kocioł na pellet</a> sprawdza się idealnie – jej płynna konsystencja pozbywa się pustek powietrznych wokół rur. Zwiększa to przewodność cieplną w stosunku do zwykłego betonu, dając odczuwalne oszczędności.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="40" y="50" width="120" height="30" fill="#fcd34d" rx="4" opacity="0.8"/>
                        <circle cx="60" cy="65" r="8" fill="#ef4444"/>
                        <circle cx="100" cy="65" r="8" fill="#ef4444"/>
                        <circle cx="140" cy="65" r="8" fill="#ef4444"/>
                        <path class="anim-heat-wave" d="M60 40 L60 10 M100 40 L100 10 M140 40 L140 10" fill="none" stroke-width="4" stroke-linecap="round"/>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-quick-calc">
        <div class="rk-calc-header">
            <h4>
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--rk-fin-primary)" 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>
                Estymator Maszynowni Pelletowej
            </h4>
            <span style="font-size:12px; color:#64748b;">(Domy nowo budowane / dobrze izolowane)</span>
        </div>

        <div class="rk-calc-grid">
            
            <div class="rk-calc-input-area">
                <div class="rk-calc-label">
                    Powierzchnia ogrzewana:
                    <span id="finAreaOut">150 m²</span>
                </div>
                <input type="range" class="rk-fin-range" id="finAreaSlider" min="80" max="300" step="10" value="150">
            </div>

            <div class="rk-calc-results">
                <div class="rk-result-box highlight">
                    <span class="rk-res-val" id="resBoiler">9 <span style="font-size:14px;color:var(--rk-fin-primary);">kW</span></span>
                    <span class="rk-res-lab">Szacunkowa Moc Kotła</span>
                </div>
                <div class="rk-result-box water">
                    <span class="rk-res-val" id="resBuffer">540 <span style="font-size:14px;color:var(--rk-fin-accent);">L</span></span>
                    <span class="rk-res-lab">Wymagany Bufor Ciepła</span>
                </div>
                <div class="rk-result-box">
                    <span class="rk-res-val" id="resPellet">3.9 <span style="font-size:14px;color:#94a3b8;">t</span></span>
                    <span class="rk-res-lab">Roczne zużycie (Prognoza)</span>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-fin-author">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski - CEO i Projektant HVAC" class="rk-author-photo-small" loading="lazy">
        <div class="rk-author-info">
            <h4>Robert Kucharski</h4>
            <p>CEO i twórca portalu Projekt-Ogrzewania.pl. Główny projektant i audytor instalacji HVAC. Wszystkie publikowane tu treści opieram na wieloletnim, praktycznym doświadczeniu zdobytym bezpośrednio na placach budowy. Moją misją jest dostarczanie twardej, inżynierskiej wiedzy, która chroni inwestorów przed "fachowcami".</p>
            <div class="rk-author-links">
                <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener noreferrer">
                    <svg width="14" height="14" 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"/></svg>
                    LinkedIn
                </a>
                <a href="https://www.facebook.com/robert.kucharski.budowa.bez.sciemy" target="_blank" rel="noopener noreferrer">
                    <svg width="14" height="14" 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"/></svg>
                    Facebook
                </a>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 2. Logika Zakładek (Złote Zasady)
    const btns = document.querySelectorAll('.rk-rule-btn');
    const panels = document.querySelectorAll('.rk-detail-panel');

    btns.forEach(btn => {
        btn.addEventListener('click', () => {
            btns.forEach(b => b.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            btn.classList.add('active');
            const target = document.getElementById(btn.getAttribute('data-panel'));
            if(target) {
                void target.offsetWidth; // Restart animacji
                target.classList.add('active');
            }
        });
    });

    // 3. Logika Estymatora
    const slider = document.getElementById('finAreaSlider');
    const areaOut = document.getElementById('finAreaOut');
    const resBoiler = document.getElementById('resBoiler');
    const resBuffer = document.getElementById('resBuffer');
    const resPellet = document.getElementById('resPellet');

    function updateEstimator() {
        const area = parseInt(slider.value);
        areaOut.textContent = area + ' m²';

        // Obliczenia:
        // Moc kotła: Zapotrzebowanie ~50W/m2 + zapas ok. 20% -> (Area * 0.05) * 1.2
        let boilerPower = (area * 0.05) * 1.2;
        // Zaokrąglenie do równych kW lub połówek
        boilerPower = Math.ceil(boilerPower);
        
        // Bufor: 60 L / kW
        let bufferVol = boilerPower * 60;

        // Roczne zużycie: około 26 kg na 1 m2 (dla bardzo dobrej izolacji)
        let pelletTons = (area * 26) / 1000;

        resBoiler.innerHTML = boilerPower + ' <span style="font-size:14px;color:var(--rk-fin-primary);">kW</span>';
        resBuffer.innerHTML = bufferVol + ' <span style="font-size:14px;color:var(--rk-fin-accent);">L</span>';
        resPellet.innerHTML = pelletTons.toFixed(1) + ' <span style="font-size:14px;color:#94a3b8;">t</span>';
    }

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



<style>
:root {
    --rk-pellet-faq-dark: #1e1b4b; /* Bardzo ciemny fiolet/granat */
    --rk-pellet-faq-card: #ffffff;
    --rk-pellet-faq-brand: #f59e0b; /* Bursztynowy/Pellet */
    --rk-pellet-faq-brand-light: #fef3c7;
    --rk-pellet-faq-accent: #ef4444; /* Czerwony/Ogień */
    --rk-pellet-faq-success: #10b981; /* Zielony/Eco */
    --rk-pellet-faq-bg: #f8fafc;
    --rk-pellet-faq-border: #e2e8f0;
    --rk-pellet-faq-text: #334155;
    --rk-pellet-faq-muted: #64748b;
}

.rk-pellet-faq-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(245, 158, 11, 0.15);
    border: 1px solid rgba(245, 158, 11, 0.3);
    overflow: hidden;
}

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

.rk-pellet-faq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(245, 158, 11, 0.2);
    color: #fcd34d;
    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(245, 158, 11, 0.3);
}

.rk-pellet-faq-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
}

.rk-pellet-faq-title span { color: var(--rk-pellet-faq-brand); }

/* Sekcja Akordeonu */
.rk-pellet-faq-interactive {
    padding: 40px 50px;
    background: var(--rk-pellet-faq-bg);
}

.rk-pellet-faq-list {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-pellet-faq-item {
    background: var(--rk-pellet-faq-card);
    border: 1px solid var(--rk-pellet-faq-border);
    border-radius: 16px;
    overflow: hidden;
    transition: all 0.3s;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-pellet-faq-item.active {
    border-color: var(--rk-pellet-faq-brand);
    box-shadow: 0 10px 25px -5px rgba(245, 158, 11, 0.15);
}

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

.rk-pellet-faq-question:hover {
    background: var(--rk-pellet-faq-brand-light);
}

.rk-pellet-faq-item.active .rk-pellet-faq-question {
    background: var(--rk-pellet-faq-brand);
    color: #ffffff;
}

.rk-pellet-faq-icon {
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-pellet-faq-brand-light);
    color: #d97706;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

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

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

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

.rk-pellet-faq-answer-inner {
    overflow: hidden;
}

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

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

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

.rk-link {
    color: #d97706;
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px dashed rgba(245, 158, 11, 0.4);
    transition: all 0.3s;
}

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

/* Wizualizacje SVG */
.rk-pellet-faq-visual {
    background: #0f172a;
    border-radius: 12px;
    padding: 15px;
    height: 140px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    border: 3px solid #334155;
    position: relative;
    overflow: hidden;
}

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

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

/* 1. Bufor / Taktowanie */
.anim-flame-bad { transform-origin: bottom; opacity: 0.2; transition: opacity 0.5s; }
.rk-pellet-faq-item.active .anim-flame-bad { animation: flickerStrobe 0.2s infinite; opacity: 1; }
@keyframes flickerStrobe { 0% { transform: scaleY(1); } 50% { transform: scaleY(0.4); fill: #64748b; } 100% { transform: scaleY(1); } }

/* 2. Czyszczenie */
.anim-ash { transform: translateY(-20px); opacity: 0; }
.rk-pellet-faq-item.active .anim-ash { animation: fallAsh 3s infinite; }
@keyframes fallAsh { 0% { transform: translateY(-20px); opacity: 1; } 80% { transform: translateY(20px); opacity: 1; } 100% { transform: translateY(25px); opacity: 0; } }

/* 3. Rozstaw Rur */
.anim-pipe-heat { stroke-dasharray: 4 8; stroke-dashoffset: 0; }
.rk-pellet-faq-item.active .anim-pipe-heat { animation: flowHeat 1.5s linear infinite; stroke: #ef4444; }
@keyframes flowHeat { to { stroke-dashoffset: -24; } }

/* 4. Anhydryt vs Cement */
.anim-anhydrite { transform: scaleX(0); transform-origin: left; transition: transform 1.2s 0.3s cubic-bezier(0.22, 1, 0.36, 1); }
.rk-pellet-faq-item.active .anim-anhydrite { transform: scaleX(1); }

/* 5. Koszty (Monety) */
.anim-coin { transform: translateY(-30px); opacity: 0; }
.rk-pellet-faq-item.active .anim-coin:nth-child(1) { animation: dropCoin 0.5s 0.3s forwards; }
.rk-pellet-faq-item.active .anim-coin:nth-child(2) { animation: dropCoin 0.5s 0.6s forwards; }
.rk-pellet-faq-item.active .anim-coin:nth-child(3) { animation: dropCoin 0.5s 0.9s forwards; }
@keyframes dropCoin { to { transform: translateY(0); opacity: 1; } }

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "FAQ — Najczęściej zadawane pytania: Kocioł na pellet i podłogówka",
    "description": "Baza wiedzy dla inwestorów: czy podłogówka potrzebuje bufora przy pellecie, jak często czyścić piec i ile kosztuje ogrzewanie domu 150m2 w 2026 roku.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy kocioł na pellet może współpracować z podłogówką bez bufora ciepła?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "W praktyce jest to rozwiązanie wysoce niezalecane, które prowadzi do permanentnego taktowania palnika i drastycznego spadku jego sprawności o około 15-20%. Bez bufora kocioł nie ma możliwości zmagazynowania nadwyżki energii przy niskim zapotrzebowaniu instalacji płaszczyznowej, co skutkuje przyspieszonym zużyciem podzespołów i zarastaniem wymiennika sadzą."
        }
      },
      {
        "@type": "Question",
        "name": "Jak często trzeba czyścić kocioł pelletowy przy ogrzewaniu płaszczyznowym?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nowoczesne konstrukcje wyposażone w automatyczne systemy czyszczenia palnika i wymiennika wymagają opróżniania popielnika raz na 3-5 tygodni w sezonie grzewczym. Pełne, ręczne czyszczenie komory spalania oraz kontrolę stanu technicznego wymiennika należy przeprowadzać co około 1,5-2 tony spalonego paliwa certyfikowanego klasy ENplus A1."
        }
      },
      {
        "@type": "Question",
        "name": "Jaki rozstaw rur podłogówki zastosować przy kotle na pellet?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Standardowy i najbardziej optymalny projektowo rozstaw rur wynosi 15 cm w strefach stałego przebywania oraz 10 cm w łazienkach oraz strefach brzegowych przy oknach tarasowych. Pozwala to na zasilanie instalacji niskim parametrem termicznym (35-38°C), co przekłada się na dłuższą autonomię zgromadzonego w zbiorniku buforowym ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Czy wylewka anhydrytowa jest lepsza od cementowej pod kocioł na pellet?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak, jastrych anhydrytowy wykazuje znacznie wyższy współczynnik przewodzenia ciepła (około 1,6-1,8 W/mK) w porównaniu do jastrychu cementowego (około 1,0-1,2 W/mK). Dzięki mniejszej grubości strukturalnej i płynnej konsystencji idealnie otula rurę grzewczą, co skraca czas reakcji systemu na zmianę temperatury o ponad 50%."
        }
      },
      {
        "@type": "Question",
        "name": "Ile wynosi realny koszt ogrzewania pelletem domu 150 m² z podłogówką?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Roczny koszt eksploatacyjny w realiach cenowych 2026 roku kształtuje się na poziomie około 3900 - 4500 PLN, przy założeniu zużycia około 3,8 - 4,2 tony certyfikowanego pelletu drzewnego. Wartość ta dotyczy budynków nowo wybudowanych, posiadających skuteczną izolację przegród pionowych (styropian minimum 20 cm) oraz system rekuperacji z odzyskiem ciepła."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-faq",
    "name": "Parametry eksploatacyjne układu: Kocioł na pellet + Podłogówka 2026",
    "description": "Zestawienie inżynierskie uwzględniające parametry temperaturowe, koszty paliwa oraz częstotliwość serwisu nowoczesnych systemów na biomasę.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": { "@type": "Person", "name": "Robert Kucharski" },
    "keywords": [
      "taktowanie palnika pelletowego",
      "częstotliwość czyszczenia pieca",
      "współczynnik przewodzenia wylewki",
      "koszt ogrzewania domu 150m2",
      "zapotrzebowanie na bufor ciepła"
    ],
    "measurementTechnique": "Analiza termodynamiczna i kosztorysowa oparta na danych operacyjnych dla budynków jednorodzinnych w III strefie klimatycznej Polski (2026).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Koszt roczny: 3900 - 4500 PLN (dom 150m2, dobre ocieplenie).",
        "Czyszczenie palnika: Co 3-5 tygodni (automatyka).",
        "Rozstaw rur: 15 cm w pokojach, 10 cm przy oknach i w łazienkach."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-faq",
    "name": "Symulator Procesów Płaszczyznowych i Spalania",
    "description": "Edukacyjna, interaktywna nakładka (Akordeon) wizualizująca za pomocą skryptów SVG zjawiska taktowania, opadania popiołu i dystrybucji ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": { "@type": "Person", "name": "Robert Kucharski" }
  }
]
</script>

<div class="rk-pellet-faq-container" id="rk-pellet-faq-app">
    <div class="rk-pellet-faq-header">
        <div class="rk-pellet-faq-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="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"></path></svg>
            Baza Wiedzy Inwestora
        </div>
        <h2 class="rk-pellet-faq-title">FAQ – <span>Najczęściej zadawane pytania</span></h2>
    </div>

    <div class="rk-pellet-faq-interactive">
        <div class="rk-pellet-faq-list">
            
            <div class="rk-pellet-faq-item">
                <button class="rk-pellet-faq-question">
                    <span>1. Czy kocioł na pellet może współpracować z podłogówką bez bufora ciepła?</span>
                    <div class="rk-pellet-faq-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-pellet-faq-answer-wrapper">
                    <div class="rk-pellet-faq-answer-inner">
                        <div class="rk-pellet-faq-content">
                            <div class="rk-pellet-faq-text">
                                W praktyce jest to rozwiązanie <strong>wysoce niezalecane</strong>, które prowadzi do permanentnego taktowania palnika i drastycznego spadku jego sprawności o około <strong>15-20%</strong>. Bez <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-link">bufora ciepła</a> kocioł nie ma możliwości zmagazynowania nadwyżki energii przy niskim zapotrzebowaniu instalacji płaszczyznowej. Skutkuje to zjawiskiem ciągłego odpalania, co prowadzi do przyspieszonego zużycia podzespołów (np. zapalarki) i błyskawicznego zarastania wymiennika twardą sadzą.
                            </div>
                            <div class="rk-pellet-faq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="20" y="20" width="30" height="40" fill="#334155" rx="4"/>
                                    <path class="anim-flame-bad" d="M35 50 C25 50, 20 30, 35 10 C50 30, 45 50, 35 50 Z" fill="#ef4444"/>
                                    <path d="M50 40 L80 40" fill="none" stroke="#ef4444" stroke-width="4" stroke-dasharray="2 4"/>
                                    <circle cx="80" cy="40" r="10" fill="#94a3b8"/>
                                    <path d="M75 35 L85 45 M75 45 L85 35" stroke="#ef4444" stroke-width="3"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-pellet-faq-item">
                <button class="rk-pellet-faq-question">
                    <span>2. Jak często trzeba czyścić kocioł pelletowy przy ogrzewaniu płaszczyznowym?</span>
                    <div class="rk-pellet-faq-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-pellet-faq-answer-wrapper">
                    <div class="rk-pellet-faq-answer-inner">
                        <div class="rk-pellet-faq-content">
                            <div class="rk-pellet-faq-text">
                                Nowoczesne konstrukcje wyposażone w automatyczne systemy czyszczenia palnika i wymiennika wymagają opróżniania popielnika <strong>raz na 3-5 tygodni</strong> w sezonie grzewczym. Pełne, ręczne czyszczenie komory spalania oraz kontrolę stanu technicznego wymiennika należy przeprowadzać co około <strong>1,5-2 tony</strong> spalonego paliwa certyfikowanego klasy ENplus A1.
                            </div>
                            <div class="rk-pellet-faq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="30" y="20" width="40" height="30" fill="#475569" rx="2"/>
                                    <circle class="anim-ash" cx="40" cy="30" r="3" fill="#cbd5e1"/>
                                    <circle class="anim-ash" cx="50" cy="35" r="2" fill="#cbd5e1" style="animation-delay: 0.5s;"/>
                                    <circle class="anim-ash" cx="60" cy="25" r="4" fill="#cbd5e1" style="animation-delay: 1s;"/>
                                    <rect x="30" y="55" width="40" height="10" fill="#1e293b" rx="2"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-pellet-faq-item">
                <button class="rk-pellet-faq-question">
                    <span>3. Jaki rozstaw rur podłogówki zastosować przy kotle na pellet?</span>
                    <div class="rk-pellet-faq-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-pellet-faq-answer-wrapper">
                    <div class="rk-pellet-faq-answer-inner">
                        <div class="rk-pellet-faq-content">
                            <div class="rk-pellet-faq-text">
                                Standardowy i najbardziej optymalny projektowo <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-link">rozstaw rur</a> wynosi <strong>15 cm w strefach stałego przebywania</strong> oraz <strong>10 cm</strong> w łazienkach oraz strefach brzegowych przy oknach tarasowych. Pozwala to na zasilanie instalacji niskim parametrem termicznym (35-38°C), co po wymieszaniu na zaworze przekłada się na znacznie dłuższą autonomię zgromadzonego w zbiorniku buforowym ciepła.
                            </div>
                            <div class="rk-pellet-faq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <path class="anim-pipe-heat" d="M10 20 L90 20" fill="none" stroke="#64748b" stroke-width="6" stroke-linecap="round"/>
                                    <path class="anim-pipe-heat" d="M10 40 L90 40" fill="none" stroke="#64748b" stroke-width="6" stroke-linecap="round"/>
                                    <path class="anim-pipe-heat" d="M10 60 L90 60" fill="none" stroke="#64748b" stroke-width="6" stroke-linecap="round"/>
                                    <line x1="20" y1="20" x2="20" y2="40" stroke="#fcd34d" stroke-width="2" stroke-dasharray="2 2"/>
                                    <text x="25" y="34" fill="#fcd34d" font-size="10" font-family="sans-serif">15 cm</text>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-pellet-faq-item">
                <button class="rk-pellet-faq-question">
                    <span>4. Czy wylewka anhydrytowa jest lepsza od cementowej pod kocioł na pellet?</span>
                    <div class="rk-pellet-faq-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-pellet-faq-answer-wrapper">
                    <div class="rk-pellet-faq-answer-inner">
                        <div class="rk-pellet-faq-content">
                            <div class="rk-pellet-faq-text">
                                Tak, jastrych anhydrytowy wykazuje znacznie wyższy współczynnik przewodzenia ciepła (<strong>około 1,6-1,8 W/(mK)</strong>) w porównaniu do jastrychu cementowego (około 1,0-1,2 W/(mK)). Dzięki mniejszej grubości strukturalnej i płynnej konsystencji idealnie otula rurę grzewczą, nie zostawiając izolujących pęcherzy powietrza. To <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" class="rk-link">skraca czas reakcji systemu</a> na zmianę temperatury o ponad <strong>50%</strong>.
                            </div>
                            <div class="rk-pellet-faq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="10" y="25" width="80" height="30" fill="#334155" rx="4"/>
                                    <circle cx="30" cy="40" r="6" fill="#ef4444"/>
                                    <circle cx="50" cy="40" r="6" fill="#ef4444"/>
                                    <circle cx="70" cy="40" r="6" fill="#ef4444"/>
                                    <rect class="anim-anhydrite" x="10" y="25" width="80" height="30" fill="#f59e0b" opacity="0.8" rx="4"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-pellet-faq-item">
                <button class="rk-pellet-faq-question">
                    <span>5. Ile wynosi realny koszt ogrzewania pelletem domu 150 m² z podłogówką?</span>
                    <div class="rk-pellet-faq-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-pellet-faq-answer-wrapper">
                    <div class="rk-pellet-faq-answer-inner">
                        <div class="rk-pellet-faq-content">
                            <div class="rk-pellet-faq-text">
                                Roczny <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/" class="rk-link">koszt eksploatacyjny</a> w realiach cenowych <strong>2026 roku</strong> kształtuje się na poziomie około <strong>3900 - 4500 PLN</strong>, przy założeniu zużycia około 3,8 - 4,2 tony certyfikowanego pelletu drzewnego. Wartość ta dotyczy budynków nowo wybudowanych, posiadających skuteczną izolację przegród pionowych (styropian minimum 20 cm) oraz <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-link">system rekuperacji z odzyskiem ciepła</a>.
                            </div>
                            <div class="rk-pellet-faq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="20" y="45" width="60" height="15" fill="#475569" rx="2"/>
                                    <circle class="anim-coin" cx="35" cy="35" r="8" fill="#fcd34d" stroke="#d97706" stroke-width="2"/>
                                    <circle class="anim-coin" cx="50" cy="25" r="8" fill="#fcd34d" stroke="#d97706" stroke-width="2"/>
                                    <circle class="anim-coin" cx="65" cy="35" r="8" fill="#fcd34d" stroke="#d97706" stroke-width="2"/>
                                    <path d="M48 22 L48 28 M52 22 L52 28" stroke="#d97706" stroke-width="1.5"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe - Blokada (Strictly no H2/H3 in block as requested)
    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-pellet-faq-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 20px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano komponent interaktywny</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Kontener techniczny FAQ, animacje SVG oraz struktura algorytmiczna Schema.org stanowią wyłączną własność serwisu Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Akordeonu
    const faqItems = document.querySelectorAll('.rk-pellet-faq-item');

    faqItems.forEach(item => {
        const btn = item.querySelector('.rk-pellet-faq-question');
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Zamknij wszystkie
            faqItems.forEach(i => i.classList.remove('active'));
            
            // Otwórz kliknięty jeśli był zamknięty
            if (!isActive) {
                item.classList.add('active');
            }
        });
    });
    
    // Otwórz pierwszy element na start
    if(faqItems.length > 0) {
        faqItems[0].classList.add('active');
    }
});
</script>



<style>
:root {
    --rk-pellet-dark: #0f172a;
    --rk-pellet-primary: #059669; /* Eco green for pellet */
    --rk-pellet-light: #ecfdf5;
    --rk-pellet-warn: #ea580c; /* Fire/Orange */
    --rk-pellet-warn-light: #fff7ed;
    --rk-pellet-gray: #64748b;
    --rk-pellet-border: #cbd5e1;
    --rk-pellet-bg: #ffffff;
}

.rk-pellet-box {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-pellet-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -15px rgba(5, 150, 105, 0.15);
    border: 1px solid var(--rk-pellet-primary);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-pellet-header {
    padding: 40px 50px;
    background: linear-gradient(145deg, var(--rk-pellet-dark) 0%, #1e293b 100%);
    color: #ffffff;
    text-align: center;
    border-bottom: 4px solid var(--rk-pellet-primary);
}

.rk-pellet-h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 20px 0;
    color: #ffffff;
    letter-spacing: -0.5px;
}

.rk-pellet-quote {
    font-size: 19px;
    line-height: 1.6;
    color: #cbd5e1;
    font-style: italic;
    max-width: 750px;
    margin: 0 auto 15px auto;
}

.rk-pellet-author {
    font-size: 14px;
    color: var(--rk-pellet-primary);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
}

/* Interaktywny Symulator - Suwak */
.rk-pellet-sim {
    padding: 45px 50px;
    background: #f8fafc;
}

.rk-pellet-h3 {
    text-align: center;
    font-size: 22px;
    color: var(--rk-pellet-dark);
    margin: 0 0 30px 0;
    font-weight: 800;
}

.rk-toggle-wrapper {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 20px;
    margin-bottom: 40px;
}

.rk-toggle-label {
    font-size: 16px;
    font-weight: 700;
    color: var(--rk-pellet-gray);
    transition: color 0.3s;
    cursor: pointer;
}

.rk-toggle-label.active-pro { color: var(--rk-pellet-primary); }
.rk-toggle-label.active-amateur { color: var(--rk-pellet-warn); }

/* Switch CSS */
.rk-switch {
    position: relative;
    display: inline-block;
    width: 70px;
    height: 36px;
}

.rk-switch input {
    opacity: 0;
    width: 0;
    height: 0;
}

.rk-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--rk-pellet-primary);
    transition: .4s;
    border-radius: 36px;
}

.rk-slider:before {
    position: absolute;
    content: "";
    height: 28px;
    width: 28px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s;
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

input:checked + .rk-slider {
    background-color: var(--rk-pellet-warn);
}

input:checked + .rk-slider:before {
    transform: translateX(34px);
}

/* Sekcja Wynikowa */
.rk-sim-data-grid {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 30px;
    background: #ffffff;
    padding: 30px;
    border-radius: 16px;
    border: 1px solid var(--rk-pellet-border);
    transition: all 0.4s ease;
}

.rk-svg-container {
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--rk-pellet-light);
    border-radius: 12px;
    padding: 20px;
    transition: background 0.4s ease;
}

.anim-flame { transform-origin: bottom center; }
.anim-pipe { transition: stroke 0.4s ease, stroke-dashoffset 1s ease; }

/* Animacje PRO */
.state-pro .rk-sim-data-grid { border-color: var(--rk-pellet-primary); box-shadow: 0 10px 30px -10px rgba(5, 150, 105, 0.2); }
.state-pro .rk-svg-container { background: var(--rk-pellet-light); }
.state-pro .anim-flame { fill: #10b981; animation: steadyBurn 3s infinite alternate; }
.state-pro .anim-pipe { stroke: #10b981; stroke-dasharray: 100; stroke-dashoffset: 0; animation: flowSmooth 2s linear infinite; }

/* Animacje AMATEUR */
.state-amateur .rk-sim-data-grid { border-color: var(--rk-pellet-warn); box-shadow: 0 10px 30px -10px rgba(234, 88, 12, 0.2); }
.state-amateur .rk-svg-container { background: var(--rk-pellet-warn-light); }
.state-amateur .anim-flame { fill: #ea580c; animation: flickerStutter 0.5s infinite; }
.state-amateur .anim-pipe { stroke: #ea580c; stroke-dasharray: 10 10; animation: pulseError 1s infinite; }

@keyframes steadyBurn { 0% { transform: scaleY(0.95); } 100% { transform: scaleY(1.05); } }
@keyframes flowSmooth { to { stroke-dashoffset: -200; } }
@keyframes flickerStutter { 0%, 100% { opacity: 1; transform: scaleY(1); } 50% { opacity: 0.4; transform: scaleY(0.6); } }
@keyframes pulseError { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } }

/* Dane tekstowe */
.rk-data-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-data-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-bottom: 10px;
    border-bottom: 1px dashed var(--rk-pellet-border);
}

.rk-data-item:last-child { border: none; padding-bottom: 0; }

.rk-data-label {
    font-size: 15px;
    color: var(--rk-pellet-gray);
    font-weight: 600;
}

.rk-data-value {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-pellet-dark);
}

.rk-data-highlight {
    display: inline-block;
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 14px;
}

.state-pro .rk-data-highlight { background: var(--rk-pellet-primary); color: white; }
.state-amateur .rk-data-highlight { background: var(--rk-pellet-warn); color: white; }

/* Linki w tekście boxa */
.rk-sim-desc {
    margin-top: 20px;
    font-size: 14px;
    line-height: 1.6;
    color: #475569;
}
.rk-sim-desc a {
    color: var(--rk-pellet-primary);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}
.state-amateur .rk-sim-desc a { color: var(--rk-pellet-warn); }

/* CTA */
.rk-pellet-cta {
    text-align: center;
    padding: 35px 50px;
    background: #ffffff;
    border-top: 1px solid var(--rk-pellet-border);
}

.rk-cta-btn {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 16px 32px;
    background: var(--rk-pellet-dark);
    color: #ffffff;
    font-size: 16px;
    font-weight: 800;
    border-radius: 12px;
    text-decoration: none;
    transition: all 0.3s;
}

.rk-cta-btn:hover {
    background: var(--rk-pellet-primary);
    transform: translateY(-3px);
    box-shadow: 0 10px 20px -5px rgba(5, 150, 105, 0.4);
}

@media (max-width: 768px) {
    .rk-pellet-header, .rk-pellet-sim, .rk-pellet-cta { padding: 30px 20px; }
    .rk-sim-data-grid { grid-template-columns: 1fr; }
    .rk-svg-container { padding: 30px; }
    .rk-data-item { flex-direction: column; align-items: flex-start; gap: 5px; }
    .rk-pellet-h2 { font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Podsumowanie – Zyskaj 15 lat spokoju z kotłem na pellet",
    "description": "Porównanie parametrów technicznych i kosztów układu ogrzewania podłogowego z kotłem na pellet. Interaktywna analiza wpływu bufora ciepła na stabilność instalacji.",
    "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-26",
    "dateModified": "2026-05-26"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-podsumowanie",
    "name": "Bilans energetyczny i eksploatacyjny: Kocioł na pellet z buforem i bez bufora (2026)",
    "description": "Zestawienie inżynierskie obrazujące różnice w zużyciu paliwa, taktowaniu i żywotności kotła stałopalnego w zależności od zastosowania sprzęgła hydraulicznego o dużej pojemności.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "sprawność kotła na pellet",
      "taktowanie kotła stałopalnego",
      "zużycie pelletu dom 150m2",
      "żywotność zapalarki ceramicznej",
      "koszty eksploatacyjne ogrzewania podłogowego"
    ],
    "measurementTechnique": "Kalkulacja termodynamiczna oparta na normie PN-EN 303-5 oraz PN-EN 1264, porównująca pracę ciągłą z pracą przerywaną (taktowaniem).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Układ z buforem: Sprawność 94%, zużycie 3.9 t/rok, żywotność zapalarki >5 lat.",
        "Układ bez bufora: Sprawność 74%, zużycie 4.8 t/rok, uszkodzenia grzałki <2 lata."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webapp-podsumowanie",
    "name": "Symulator Przepływów: Pellet i Podłogówka",
    "description": "Interaktywny interfejs (Toggle Switch) demonstrujący zachowanie płaszczyznowego układu grzewczego zasilanego kotłem na biomasę, wskazujący na konsekwencje braku rozprzężenia hydraulicznego.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5, and inline SVG support.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-pellet-box" id="rk-pellet-summary">
    <div class="rk-pellet-header">
        <h2 class="rk-pellet-h2">Podsumowanie – Zyskaj 15 lat spokoju z kotłem na pellet</h2>
        <p class="rk-pellet-quote">
            "Połączenie kotła pelletowego z wylewką anhydrytową czy betonową to mariaż dwóch żywiołów. Bez inżynierskiego bufora ciepła tworzysz toksyczny związek. Z buforem – budujesz idealny system, który ogrzeje Twój dom za ułamek ceny prądu."
        </p>
        <div class="rk-pellet-author">Robert Kucharski</div>
    </div>

    <div class="rk-pellet-sim">
        <h3 class="rk-pellet-h3">Symulator Instalacji: Wpływ hydrauliki na koszty</h3>
        
        <div class="rk-toggle-wrapper">
            <span class="rk-toggle-label active-pro" id="rk-lbl-pro" onclick="document.getElementById('rk-sim-toggle').click()">Z buforem (Standard Inż.)</span>
            <label class="rk-switch">
                <input type="checkbox" id="rk-sim-toggle">
                <span class="rk-slider"></span>
            </label>
            <span class="rk-toggle-label" id="rk-lbl-amateur" onclick="document.getElementById('rk-sim-toggle').click()">Bez bufora (Gra w ruletkę)</span>
        </div>

        <div class="rk-sim-data-grid state-pro" id="rk-data-container">
            <div class="rk-svg-container">
                <svg width="100%" height="100%" viewBox="0 0 200 200" style="max-width: 150px;">
                    <rect x="20" y="50" width="70" height="100" rx="8" fill="#334155"></rect>
                    <path class="anim-flame" d="M55 130 C45 130, 40 110, 55 90 C70 110, 65 130, 55 130 Z"></path>
                    <path class="anim-pipe" d="M90 70 L130 70 L130 150 L180 150" fill="none" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"></path>
                    <path class="anim-pipe" d="M180 150 C190 150, 190 130, 180 130 L140 130 C130 130, 130 110, 140 110 L180 110" fill="none" stroke-width="6" stroke-linecap="round"></path>
                </svg>
            </div>
            
            <div>
                <ul class="rk-data-list" id="rk-dynamic-list">
                    <li class="rk-data-item">
                        <span class="rk-data-label">Sprawność roczna systemu</span>
                        <span class="rk-data-value">&gt; 92% <span class="rk-data-highlight">Optymalnie</span></span>
                    </li>
                    <li class="rk-data-item">
                        <span class="rk-data-label">Średnie załączenia palnika</span>
                        <span class="rk-data-value">2 - 4 razy / dobę</span>
                    </li>
                    <li class="rk-data-item">
                        <span class="rk-data-label">Żywotność grzałki ceramicznej</span>
                        <span class="rk-data-value">5 - 7 lat</span>
                    </li>
                    <li class="rk-data-item">
                        <span class="rk-data-label">Prognoza zużycia paliwa (150 m²)</span>
                        <span class="rk-data-value">~ 3.9 tony / sezon</span>
                    </li>
                </ul>
                <div class="rk-sim-desc" id="rk-dynamic-desc">
                    <strong>Werdykt inżynierski:</strong> Zastosowanie minimalnej pojemności 50 l/kW wymuszonej przez <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła</a> rozprzęga obiegi. Palnik pracuje w optymalnej temperaturze, a ciepło jest płynnie dawkowane przez <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/">zawór mieszający</a> i krzywą grzewczą.
                </div>
            </div>
        </div>
    </div>

    <div class="rk-pellet-cta">
        <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/" class="rk-cta-btn">
            SPRAWDŹ REALNE KOSZTY OGRZEWANIA W 2026 ROKU
            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
        </a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków H w blokadzie)
    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-pellet-summary');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; box-sizing: border-box;">
                    <div style="font-size: 40px; margin-bottom: 15px;">⚠️</div>
                    <div style="font-size: 20px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Zablokowano komponent algorytmiczny</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 600px; margin: 0 auto; line-height: 1.6;">
                        Kontener techniczny i struktura Schema.org stanowią własność intelektualną Projekt-Ogrzewania.pl. Uruchomienie skryptów na tej domenie zostało wstrzymane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Toggle Switch
    const toggle = document.getElementById('rk-sim-toggle');
    const container = document.getElementById('rk-data-container');
    const lblPro = document.getElementById('rk-lbl-pro');
    const lblAmateur = document.getElementById('rk-lbl-amateur');
    const list = document.getElementById('rk-dynamic-list');
    const desc = document.getElementById('rk-dynamic-desc');

    toggle.addEventListener('change', function() {
        if (this.checked) {
            // State: Amateur (Bez bufora)
            container.className = 'rk-sim-data-grid state-amateur';
            lblPro.classList.remove('active-pro');
            lblAmateur.classList.add('active-amateur');
            
            list.innerHTML = `
                <li class="rk-data-item">
                    <span class="rk-data-label">Sprawność roczna systemu</span>
                    <span class="rk-data-value">< 75% <span class="rk-data-highlight">Straty</span></span>
                </li>
                <li class="rk-data-item">
                    <span class="rk-data-label">Średnie załączenia palnika</span>
                    <span class="rk-data-value">Nawet 15-20 razy / dobę</span>
                </li>
                <li class="rk-data-item">
                    <span class="rk-data-label">Żywotność grzałki ceramicznej</span>
                    <span class="rk-data-value">Często < 12 miesięcy</span>
                </li>
                <li class="rk-data-item">
                    <span class="rk-data-label">Prognoza zużycia paliwa (150 m²)</span>
                    <span class="rk-data-value">~ 4.8 tony / sezon</span>
                </li>
            `;
            
            desc.innerHTML = `
                <strong>Skutek awaryjny:</strong> Brak odbioru mocy rzędu 10 kW przez rury zamknięte siłownikami powoduje natychmiastowe przegrzanie i wygaszenie kotła. Kondensacja spalin zasmołuje wymiennik, a instalacja staje się tykającą bombą pochłaniającą paliwo.
            `;
        } else {
            // State: Pro (Z buforem)
            container.className = 'rk-sim-data-grid state-pro';
            lblAmateur.classList.remove('active-amateur');
            lblPro.classList.add('active-pro');
            
            list.innerHTML = `
                <li class="rk-data-item">
                    <span class="rk-data-label">Sprawność roczna systemu</span>
                    <span class="rk-data-value">> 92% <span class="rk-data-highlight">Optymalnie</span></span>
                </li>
                <li class="rk-data-item">
                    <span class="rk-data-label">Średnie załączenia palnika</span>
                    <span class="rk-data-value">2 - 4 razy / dobę</span>
                </li>
                <li class="rk-data-item">
                    <span class="rk-data-label">Żywotność grzałki ceramicznej</span>
                    <span class="rk-data-value">5 - 7 lat</span>
                </li>
                <li class="rk-data-item">
                    <span class="rk-data-label">Prognoza zużycia paliwa (150 m²)</span>
                    <span class="rk-data-value">~ 3.9 tony / sezon</span>
                </li>
            `;
            
            desc.innerHTML = `
                <strong>Werdykt inżynierski:</strong> Zastosowanie minimalnej pojemności 50 l/kW wymuszonej przez <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła</a> rozprzęga obiegi. Palnik pracuje w optymalnej temperaturze, a ciepło jest płynnie dawkowane przez <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/">zawór mieszający</a> i krzywą grzewczą.
            `;
        }
    });
});
</script>



<style>
:root {
    --rk-dl-primary: #0f172a;
    --rk-dl-accent: #ea580c; /* Ogień / Pellet */
    --rk-dl-accent-dark: #c2410c;
    --rk-dl-bg: #f8fafc;
    --rk-dl-border: #e2e8f0;
    --rk-dl-text: #334155;
    --rk-dl-white: #ffffff;
}

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

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

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

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

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

.rk-dl-header h2 span { color: var(--rk-dl-accent); }

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

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

.rk-dl-pdf-svg {
    width: 85px;
    height: auto;
    filter: drop-shadow(0 10px 15px rgba(0,0,0,0.4));
    animation: floatPdf 3s infinite ease-in-out alternate;
}

@keyframes floatPdf {
    from { transform: translateY(0) rotate(0deg); }
    to { transform: translateY(-12px) rotate(3deg); }
}

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

.rk-dl-preview {
    flex: 1.2;
    background: var(--rk-dl-bg);
    border: 1px solid var(--rk-dl-border);
    border-radius: 16px;
    padding: 12px;
    position: relative;
    cursor: zoom-in;
    transition: transform 0.3s, box-shadow 0.3s;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.02);
}

.rk-dl-preview:hover {
    transform: translateY(-5px);
    box-shadow: 0 15px 30px -10px rgba(234, 88, 12, 0.2);
    border-color: var(--rk-dl-accent);
}

.rk-dl-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}

.rk-dl-zoom-hint {
    position: absolute;
    bottom: 20px;
    right: 20px;
    background: rgba(15, 23, 42, 0.85);
    color: white;
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 700;
    backdrop-filter: blur(4px);
    border: 1px solid rgba(255,255,255,0.1);
}

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

.rk-dl-features {
    list-style: none;
    padding: 0;
    margin: 0 0 35px 0;
}

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

.rk-dl-check {
    width: 22px;
    height: 22px;
    color: var(--rk-dl-accent);
    flex-shrink: 0;
    margin-top: -1px;
}

/* PRZYCISK POBIERANIA */
.rk-dl-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-dl-accent);
    color: var(--rk-dl-white);
    text-decoration: none !important;
    padding: 20px 30px;
    border-radius: 14px;
    font-weight: 900;
    font-size: 16px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 10px 25px -5px rgba(234, 88, 12, 0.4);
    border: 2px solid transparent;
}

.rk-dl-btn:hover {
    background: var(--rk-dl-accent-dark);
    transform: translateY(-4px);
    box-shadow: 0 15px 35px -5px rgba(234, 88, 12, 0.5);
    border-color: #fdba74;
}

.rk-dl-btn svg { transition: transform 0.3s; }
.rk-dl-btn:hover svg { transform: translateY(3px); }

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

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

.rk-dl-footer a:hover {
    border-bottom-style: solid;
    color: var(--rk-dl-primary);
}

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#infografika-schemat",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/"
    },
    "headline": "Kompletny Schemat Hydrauliczny: Kocioł na Pellet i Podłogówka (PDF)",
    "description": "Pobierz profesjonalny schemat inżynierski podłączenia kotła stałopalnego do instalacji podłogowej z wykorzystaniem bufora ciepła i zaworu mieszającego.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Kociol-na-pellet.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-27",
    "dateModified": "2026-05-27"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#dataset-schemat",
    "name": "Schemat hydrauliczny i parametry: Kocioł na pellet z buforem",
    "description": "Zbiór danych wizualnych i normatywnych precyzujący prawidłowe podłączenie hydrauliczne źródła stałopalnego z niskotemperaturowym odbiornikiem płaszczyznowym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "schemat instalacji kocioł na pellet z buforem",
      "podłączenie podłogówki do pieca na pellet",
      "optymalizacja pracy kotła stałopalnego",
      "temperatura zasilania ogrzewania podłogowego",
      "zabezpieczenie powrotu kotła na pellet"
    ],
    "measurementTechnique": "Weryfikacja hydrauliczna na zgodność z wymogami PN-EN 303-5 oraz zabezpieczenie jastrychu przed przegrzaniem wg normy PN-EN 1264-4.",
    "mainEntity": {
      "@type": "Thing",
      "name": "Inżynierski schemat hydrauliczny instalacji grzewczej"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#download-hub",
    "name": "Centrum Pobierania Wiedzy: Kocioł na Pellet",
    "description": "Interaktywny moduł umożliwiający wizualizację (zoom) i bezproblemowe pobranie schematów technicznych w formacie PDF/WEBP do użytku na budowie.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5"
  }
]
</script>

<div class="rk-dl-hub-container" id="rk-dl-pellet">
    
    <div class="rk-dl-header">
        <div class="rk-dl-header-content">
            <div class="rk-dl-badge">Darmowe Materiały Projektowe</div>
            <h2>Schemat Hydrauliczny: <span>Pellet i Podłogówka</span></h2>
            <p>Zabierz inżynierską wiedzę bezpośrednio do swojej kotłowni. Kompletny schemat podłączenia bufora, zaworu mieszającego i zabezpieczenia powrotu w jednym pliku PDF.</p>
        </div>
        <div class="rk-dl-visual">
            <svg class="rk-dl-pdf-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="#ea580c" stroke="#ffffff" stroke-width="1"/>
                <path d="M14 2V8H20" stroke="#ffffff" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/>
                <path d="M9 13H15M9 17H13" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round"/>
                <text x="7" y="11" fill="white" font-size="4.5" font-weight="900" font-family="sans-serif">PDF</text>
            </svg>
        </div>
    </div>

    <div class="rk-dl-workspace">
        
        <div class="rk-dl-preview" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Kociol-na-pellet.webp', '_blank')">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Kociol-na-pellet.webp" alt="Infografika: Schemat instalacji kocioł na pellet z buforem i ogrzewaniem podłogowym" class="rk-dl-img" loading="lazy">
            <div class="rk-dl-zoom-hint">🔍 Kliknij, aby powiększyć</div>
        </div>

        <div class="rk-dl-info">
            <ul class="rk-dl-features">
                <li class="rk-dl-feature-item">
                    <svg class="rk-dl-check" 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>
                    Schemat 1:1 z rozprzężeniem przez bufor ciepła
                </li>
                <li class="rk-dl-feature-item">
                    <svg class="rk-dl-check" 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>
                    Prawidłowe zabezpieczenie powrotu kotła
                </li>
                <li class="rk-dl-feature-item">
                    <svg class="rk-dl-check" 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>
                    Temperatury zasilania wg normy PN-EN 1264
                </li>
                <li class="rk-dl-feature-item">
                    <svg class="rk-dl-check" 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>
                    Wysoka rozdzielczość, gotowe do druku (A4/A3)
                </li>
            </ul>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Kociol-na-pellet.pdf" class="rk-dl-btn" target="_blank" rel="noopener noreferrer">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                POBIERZ SCHEMAT (PDF)
            </a>
            
        </div>

    </div>

    <div class="rk-dl-footer">
        Masz wątpliwości, czy Twoja maszynownia udźwignie te parametry? <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zleć nam profesjonalny projekt podłogówki i kotłowni</a>, zabezpieczając się przed kosztownymi awariami.
        <br><br>
        © 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/kociol-na-pellet/">Kocioł na pellet.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projektowanie ogrzewania podłogowego w domach pasywnych.</title>
		<link>https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 05 Mar 2025 13:06:27 +0000</pubDate>
				<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Ekologiczne rozwiązania grzewcze]]></category>
		<category><![CDATA[Izolacja termiczna]]></category>
		<category><![CDATA[Materiały budowlane]]></category>
		<category><![CDATA[Odnawialne źródła energii]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Systemy niskotemperaturowe]]></category>
		<category><![CDATA[Technologie grzewcze]]></category>
		<category><![CDATA[domy pasywne]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[ekologia]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[niskotemperaturowe ogrzewanie]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[OZE]]></category>
		<category><![CDATA[pompy ciepła]]></category>
		<category><![CDATA[projektowanie instalacji]]></category>
		<category><![CDATA[systemy grzewcze]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2350</guid>

					<description><![CDATA[<p>Projektowanie ogrzewania podłogowego w domach pasywnych to wyzwanie, które wymaga precyzji i wiedzy technicznej. Domy pasywne, charakteryzujące się minimalnym zużyciem energii, potrzebują systemów grzewczych doskonale zintegrowanych z ich konstrukcją. W artykule omawiamy specyfikę takich instalacji, najlepsze praktyki oraz pokazujemy, jak połączyć komfort cieplny z ekologią. Dowiesz się, jak dobrać optymalny rozstaw rur, wybrać materiały o niskiej bezwładności cieplnej oraz zintegrować ogrzewanie z odnawialnymi źródłami energii.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/">Projektowanie ogrzewania podłogowego w domach pasywnych.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #1e293b;
    --rk-intro-blue: #0284c7;
    --rk-intro-blue-light: #e0f2fe;
    --rk-intro-accent: #0ea5e9;
    --rk-intro-passive: #10b981; /* Zielony dla pasywnego */
    --rk-intro-standard: #f97316; /* Pomarańczowy dla standardu */
    --rk-intro-bg: #ffffff;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #475569;
}

.rk-intro-wrap {
    max-width: 900px;
    margin: 40px auto;
    background: var(--rk-intro-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.1);
    border: 1px solid var(--rk-intro-blue-light);
    font-family: 'Inter', system-ui, sans-serif;
    overflow: hidden;
}

/* Sekcja Opisowa Wstępu */
.rk-intro-content {
    padding: 45px 45px 30px;
    background: linear-gradient(to bottom, #f8fafc, #ffffff);
}

.rk-intro-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-intro-text-body {
    font-size: 17px;
    line-height: 1.7;
    color: var(--rk-intro-text);
    margin: 0;
}

.rk-intro-text-body a {
    color: var(--rk-intro-blue);
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    transition: color 0.3s;
}

.rk-intro-text-body a:hover {
    color: var(--rk-intro-accent);
}

.rk-intro-highlight {
    display: inline-block;
    background: var(--rk-intro-blue-light);
    color: var(--rk-intro-blue);
    padding: 4px 10px;
    border-radius: 6px;
    font-weight: 800;
    font-size: 15px;
    margin-top: 15px;
    border: 1px solid rgba(2, 132, 199, 0.2);
}

/* Symulator Suwakowy */
.rk-intro-sim {
    padding: 0 45px 45px;
}

.rk-sim-header h3 {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-intro-dark);
    text-align: center;
    margin: 0 0 25px 0;
}

/* Custom Slider */
.rk-slider-container {
    background: #f1f5f9;
    padding: 25px;
    border-radius: 16px;
    border: 1px solid var(--rk-intro-border);
    margin-bottom: 30px;
}

.rk-slider-labels {
    display: flex;
    justify-content: space-between;
    margin-bottom: 15px;
    font-size: 13px;
    font-weight: 700;
    color: #64748b;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: linear-gradient(to right, var(--rk-intro-passive) 0%, #cbd5e1 50%, var(--rk-intro-standard) 100%);
    outline: none;
    transition: opacity .2s;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-intro-blue);
    cursor: pointer;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
    transition: transform 0.1s;
}

.rk-range-input::-webkit-slider-thumb:active {
    transform: scale(1.1);
}

/* Wizualizacja SVG i Dane */
.rk-sim-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    align-items: center;
}

.rk-svg-house {
    width: 100%;
    max-width: 180px;
    margin: 0 auto;
    display: block;
}

.anim-heat-loss {
    transition: opacity 0.3s, transform 0.3s;
}

.anim-wall {
    transition: stroke-width 0.3s, stroke 0.3s;
}

.anim-floor-heat {
    transition: fill 0.3s;
}

/* Kafelki parametrów */
.rk-metrics-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-metric-box {
    background: #ffffff;
    border: 1px solid var(--rk-intro-border);
    padding: 15px 20px;
    border-radius: 12px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-metric-box h4 {
    margin: 0 0 5px 0;
    font-size: 12px;
    text-transform: uppercase;
    color: #94a3b8;
    font-weight: 700;
    letter-spacing: 0.5px;
}

.rk-metric-value {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    margin-bottom: 2px;
}

.rk-metric-unit {
    font-size: 12px;
    color: #64748b;
    font-weight: 600;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-intro-content, .rk-intro-sim { padding: 30px 20px; }
    .rk-sim-dashboard { grid-template-columns: 1fr; gap: 20px; text-align: center; }
    .rk-metrics-grid { grid-template-columns: 1fr 1fr; }
    .rk-svg-house { max-width: 150px; }
}
@media (max-width: 480px) {
    .rk-metrics-grid { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Inżynieryjny fundament: OZC i skrajnie niskie zapotrzebowanie na energię w domu pasywnym",
    "description": "Projektowanie instalacji dla domów pasywnych (zapotrzebowanie poniżej 15 kWh/(m²·rok)) wymaga idealnego zbilansowania mocy, przepływów i zasilania. Tu nie ma miejsca na błędy.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-ozc",
    "name": "Zestawienie Zapotrzebowania Energetycznego: Standard vs Dom Pasywny",
    "description": "Porównanie skrajnych wartości projektowego obciążenia cieplnego (OZC) dla budownictwa tradycyjnego oraz standardu pasywnego poniżej 15 kWh.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne OZC",
      "ogrzewanie podłogowe dom pasywny",
      "zapotrzebowanie na energię 15 kWh",
      "temperatura czynnika grzewczego",
      "bezwładność cieplna budynku"
    ],
    "measurementTechnique": "Dynamiczna interpolacja algorytmiczna określająca zapotrzebowanie (W/m²), przepływ i temperaturę zasilania w zależności od współczynnika izolacyjności budynku.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dom Pasywny (<15 kWh): Wymaga zasilania 28°C i mocy grzewczej rzędu 10 W/m².",
        "Dom Standardowy: Wymaga zasilania >35°C i mocy rzędu 40-50 W/m²."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-ozc",
    "name": "Symulator Projektowego Obciążenia Cieplnego (OZC)",
    "description": "Interaktywny suwak pozwalający obserwować w czasie rzeczywistym spadek wymaganej mocy grzewczej oraz temperatury zasilania wraz ze wzrostem izolacyjności przegród.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5 SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-intro-wrap" id="ozc-intro-app">
    
    <!-- Opis Inżynieryjny -->
    <div class="rk-intro-content">
        <h2>Od teorii do fizyki budowli: Czym różni się projekt pasywny?</h2>
        <p class="rk-intro-text-body">
            Projektowanie ogrzewania podłogowego w domach pasywnych to proces inżynieryjny polegający na precyzyjnym obliczeniu <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowego obciążenia cieplnego (OZC)</a> dla budynku o ekstremalnie niskim zapotrzebowaniu na energię (poniżej <strong>15 kWh/(m²·rok)</strong>) oraz <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">doborze parametrów instalacji hydraulicznej</a> w taki sposób, aby system pracował efektywnie przy skrajnie niskich temperaturach czynnika grzewczego. W standardzie pasywnym kluczowe jest zapewnienie stabilności termicznej przy jednoczesnym uniknięciu przegrzewania pomieszczeń, co wymaga uwzględnienia <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności cieplnej przegród</a> oraz <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">integracji z systemem wentylacji mechanicznej z odzyskiem ciepła</a>.
        </p>
        <div class="rk-intro-highlight">
            Tu nie ma miejsca na &#8222;dobór na oko&#8221; – liczy się każdy wat mocy i litr przepływu.
        </div>
    </div>

    <!-- Symulator OZC -->
    <div class="rk-intro-sim">
        <div class="rk-sim-header">
            <h3>Symulacja OZC: Wpływ izolacji na podłogówkę</h3>
        </div>

        <div class="rk-slider-container">
            <div class="rk-slider-labels">
                <span style="color: var(--rk-intro-passive);">Dom Pasywny</span>
                <span>Energooszczędny</span>
                <span style="color: var(--rk-intro-standard);">Standard (WT2021)</span>
            </div>
            <!-- Suwak: od 1 (Pasywny) do 100 (Standard) -->
            <input type="range" min="1" max="100" value="1" class="rk-range-input" id="ozc-slider" aria-label="Wybierz standard energetyczny budynku">
        </div>

        <div class="rk-sim-dashboard">
            <!-- Animowana grafika domku -->
            <div class="rk-svg-display">
                <svg class="rk-svg-house" viewBox="0 0 200 200">
                    <!-- Fale uciekającego ciepła (animowane opacity) -->
                    <g id="heat-loss-waves" stroke="var(--rk-intro-standard)" stroke-width="3" fill="none" stroke-linecap="round" opacity="0.1">
                        <path d="M 30 70 Q 20 40 40 10" />
                        <path d="M 170 70 Q 180 40 160 10" />
                        <path d="M 100 30 Q 110 10 90 -10" />
                    </g>
                    <!-- Dach i Ściany -->
                    <path class="anim-wall" id="house-walls" d="M 40 160 L 40 90 L 100 40 L 160 90 L 160 160 Z" fill="none" stroke="#64748b" stroke-width="12" stroke-linejoin="round" />
                    <!-- Podłoga (Wylewka) -->
                    <rect x="25" y="160" width="150" height="20" fill="#cbd5e1" rx="2" />
                    <!-- Rury podłogówki -->
                    <g id="floor-pipes" fill="var(--rk-intro-passive)">
                        <circle cx="50" cy="170" r="5" />
                        <circle cx="80" cy="170" r="5" />
                        <circle cx="110" cy="170" r="5" />
                        <circle cx="140" cy="170" r="5" />
                    </g>
                    <!-- Centralna ikona temperatury -->
                    <text x="100" y="125" text-anchor="middle" font-size="28" font-weight="900" fill="var(--rk-intro-dark)" font-family="sans-serif">20°C</text>
                </svg>
            </div>

            <!-- Dynamiczne parametry OZC -->
            <div class="rk-metrics-grid">
                <div class="rk-metric-box">
                    <h4>Zapotrzebowanie EUco</h4>
                    <div class="rk-metric-value" id="val-euco" style="color: var(--rk-intro-passive);">15</div>
                    <div class="rk-metric-unit">kWh/(m²·rok)</div>
                </div>
                <div class="rk-metric-box">
                    <h4>Moc z podłogi (q)</h4>
                    <div class="rk-metric-value" id="val-q">10</div>
                    <div class="rk-metric-unit">W/m²</div>
                </div>
                <div class="rk-metric-box">
                    <h4>Max Temp. Zasilania</h4>
                    <div class="rk-metric-value" id="val-temp" style="color: var(--rk-intro-passive);">28°C</div>
                    <div class="rk-metric-unit">przy mrozie -20°C</div>
                </div>
                <div class="rk-metric-box">
                    <h4>Praca Pompy Ciepła</h4>
                    <div class="rk-metric-value" id="val-cop" style="color: var(--rk-intro-passive);">COP Maksymalne</div>
                    <div class="rk-metric-unit">Stabilność układu</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) 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 container = document.getElementById('ozc-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #1e293b; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">⚠️</div>
                    <div style="font-size: 18px; font-weight: bold; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Nieautoryzowane Użycie Kodu</div>
                    <div style="color: #cbd5e1; font-size: 14px; line-height: 1.6;">
                        Ten kalkulator OZC oraz struktura Schema.org stanowią własność portalu Projekt-Ogrzewania.pl. 
                        Skrypt zablokował renderowanie na obcej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Suwaka (Interpolacja OZC)
    const slider = document.getElementById('ozc-slider');
    
    // Elementy UI
    const valEuco = document.getElementById('val-euco');
    const valQ = document.getElementById('val-q');
    const valTemp = document.getElementById('val-temp');
    const valCop = document.getElementById('val-cop');
    
    // Elementy SVG
    const heatLossWaves = document.getElementById('heat-loss-waves');
    const houseWalls = document.getElementById('house-walls');
    const floorPipes = document.getElementById('floor-pipes');

    // Kolory do płynnego przejścia
    const colorPassive = [16, 185, 129]; // #10b981
    const colorStandard = [249, 115, 22]; // #f97316

    function interpolateColor(color1, color2, factor) {
        let result = color1.slice();
        for (let i = 0; i < 3; i++) {
            result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));
        }
        return `rgb(${result[0]}, ${result[1]}, ${result[2]})`;
    }

    function updateSimulation() {
        const factor = (slider.value - 1) / 99; // 0 (Pasywny) do 1 (Standard)

        // Obliczenia wartości
        const euco = Math.round(15 + factor * (65 - 15)); // od 15 do 65 kWh
        const q = Math.round(10 + factor * (45 - 10)); // od 10 do 45 W/m2
        const tempZasilania = Math.round(28 + factor * (38 - 28)); // od 28 do 38 C
        
        // Kolor stanu
        const currentColor = interpolateColor(colorPassive, colorStandard, factor);

        // Aktualizacja HTML
        valEuco.textContent = euco;
        valEuco.style.color = currentColor;
        
        valQ.textContent = q;
        valQ.style.color = currentColor;
        
        valTemp.textContent = tempZasilania + '°C';
        valTemp.style.color = currentColor;

        if (factor < 0.33) {
            valCop.textContent = "COP Maksymalne";
            valCop.style.color = "var(--rk-intro-passive)";
        } else if (factor < 0.66) {
            valCop.textContent = "COP Standardowe";
            valCop.style.color = "#64748b";
        } else {
            valCop.textContent = "Ryzyko Spadku COP";
            valCop.style.color = "var(--rk-intro-standard)";
        }

        // Animacja SVG
        // Grubosć ścian maleje im gorszy standard (więcej strat)
        const wallThickness = 14 - (factor * 8); // od 14px do 6px
        houseWalls.style.strokeWidth = wallThickness;
        houseWalls.style.stroke = factor < 0.5 ? '#64748b' : '#94a3b8';

        // Intensywność fal uciekającego ciepła rośnie
        heatLossWaves.style.opacity = 0.1 + (factor * 0.9); // od 0.1 do 1.0

        // Kolor rur podłogówki robi się coraz "gorętszy"
        floorPipes.setAttribute('fill', currentColor);
    }

    // Nasłuchiwanie zdarzeń
    slider.addEventListener('input', updateSimulation);
    
    // Inicjalizacja
    updateSimulation();
});
</script>



<style>
:root {
    --rk-pwr-dark: #1e293b;
    --rk-pwr-blue: #0284c7;
    --rk-pwr-blue-light: #f0f9ff;
    --rk-pwr-green: #10b981;
    --rk-pwr-green-bg: #ecfdf5;
    --rk-pwr-red: #ef4444;
    --rk-pwr-red-bg: #fef2f2;
    --rk-pwr-gray: #64748b;
    --rk-pwr-border: #e2e8f0;
    --rk-pwr-bg: #ffffff;
}

.rk-pwr-container {
    max-width: 900px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-pwr-bg);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(2, 132, 199, 0.12);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Sekcja Treści */
.rk-pwr-content {
    padding: 40px 40px 25px;
    background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-pwr-border);
}

.rk-pwr-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-pwr-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-pwr-text {
    font-size: 16px;
    line-height: 1.7;
    color: #475569;
    margin: 0 0 15px 0;
}

.rk-pwr-text a {
    color: var(--rk-pwr-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-pwr-text a:hover {
    background: var(--rk-pwr-blue-light);
    border-color: var(--rk-pwr-blue);
}

/* Interfejs Symulatora */
.rk-pwr-interactive {
    padding: 30px 40px 40px;
}

.rk-pwr-interactive h3 {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-pwr-dark);
    text-align: center;
    margin: 0 0 25px 0;
}

/* Slider / Suwak */
.rk-pwr-slider-box {
    background: #f8fafc;
    padding: 25px 30px;
    border-radius: 16px;
    border: 1px solid var(--rk-pwr-border);
    margin-bottom: 35px;
}

.rk-slider-labels {
    display: flex;
    justify-content: space-between;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 15px;
}

.rk-slider-input {
    -webkit-appearance: none;
    width: 100%;
    height: 10px;
    border-radius: 5px;
    background: linear-gradient(90deg, var(--rk-pwr-green) 0%, #cbd5e1 50%, var(--rk-pwr-red) 100%);
    outline: none;
}

.rk-slider-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: #ffffff;
    border: 4px solid var(--rk-pwr-blue);
    cursor: pointer;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.15);
    transition: transform 0.1s;
}

.rk-slider-input::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

/* Wyświetlacz: SVG + Kafelki */
.rk-pwr-dashboard {
    display: grid;
    grid-template-columns: 220px 1fr;
    gap: 30px;
    align-items: center;
}

.rk-pwr-svg-wrap {
    text-align: center;
}

.rk-svg-heat {
    width: 100%;
    max-width: 180px;
}

.anim-heat-wave {
    fill: none;
    stroke-width: 5;
    stroke-linecap: round;
    transition: stroke 0.3s, transform 0.3s;
}

/* Kafelki parametrów */
.rk-pwr-metrics {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-pwr-card {
    background: #ffffff;
    border: 1px solid var(--rk-pwr-border);
    padding: 20px;
    border-radius: 14px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
    transition: all 0.3s;
}

.rk-pwr-card h4 {
    margin: 0 0 8px 0;
    font-size: 12px;
    text-transform: uppercase;
    color: var(--rk-pwr-gray);
    letter-spacing: 0.5px;
}

.rk-pwr-value {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-pwr-dark);
    line-height: 1.1;
    margin-bottom: 4px;
}

.rk-pwr-unit {
    font-size: 13px;
    color: #94a3b8;
    font-weight: 600;
}

.status-badge {
    display: inline-block;
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    margin-top: 10px;
}

.badge-ok { background: var(--rk-pwr-green-bg); color: var(--rk-pwr-green); border: 1px solid #a7f3d0; }
.badge-warn { background: var(--rk-pwr-red-bg); color: var(--rk-pwr-red); border: 1px solid #fecaca; }

@media (max-width: 768px) {
    .rk-pwr-content, .rk-pwr-interactive { padding: 25px; }
    .rk-pwr-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-pwr-svg-wrap { margin-bottom: 10px; }
    .rk-svg-heat { max-width: 140px; }
}

@media (max-width: 480px) {
    .rk-pwr-metrics { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-moc-grzewcza",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Maksymalna moc grzewcza ogrzewania podłogowego w domu pasywnym",
    "description": "Zrozumienie różnicy w mocy grzewczej między budownictwem tradycyjnym (60-80 W/m2) a pasywnym (10-20 W/m2). Wpływ na temperaturę podłogi według PN-EN 1264.",
    "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": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-moc",
    "name": "Zestawienie Mocy Grzewczej: Dom Pasywny vs Tradycyjny",
    "description": "Porównanie parametrów obciążenia cieplnego dla salonu 35 m2 w zależności od standardu izolacji budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "maksymalna moc grzewcza podłogówki",
      "obciążenie cieplne W/m2",
      "temperatura powierzchni podłogi 29°C",
      "przegrzewanie domu pasywnego",
      "norma PN-EN 12831"
    ],
    "measurementTechnique": "Dynamiczna estymacja mocy i temperatury podłogi w oparciu o wytyczne norm PN-EN 12831 (obliczanie strat) oraz PN-EN 1264 (parametry podłogówki).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dom Pasywny: Zapotrzebowanie ~10-20 W/m2, moc całkowita salonu 35m2 ~400W, temperatura podłogi 24-25°C.",
        "Budownictwo Tradycyjne: Zapotrzebowanie ~60-80 W/m2, ryzyko przekroczenia normatywnych 29°C w domach wysoce izolowanych przy błędnym projekcie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-moc",
    "name": "Symulator Przegrzewania Podłogi",
    "description": "Aplikacja internetowa wizualizująca ryzyko przegrzania pomieszczenia pasywnego w przypadku zastosowania mocy grzewczej właściwej dla starego budownictwa.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-pwr-container" id="pwr-sim-app">
    
    <div class="rk-pwr-content">
        <h2>Jaka jest maksymalna moc grzewcza w domu pasywnym?</h2>
        <p class="rk-pwr-text">
            Moc grzewcza w domu pasywnym nie powinna przekraczać <strong>10–20 W/m²</strong> przy parametrach obliczeniowych dla danej strefy klimatycznej, zgodnie z <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">normą PN-EN 12831</a>. W tradycyjnym budownictwie wartości te sięgają 60–80 W/m², co w standardzie pasywnym doprowadziłoby do natychmiastowego przegrzania i dyskomfortu.
        </p>
        <p class="rk-pwr-text">
            W domach pasywnych <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">obliczenia strat ciepła</a> muszą być wykonane z dokładnością do 1 W. Przykładowo, dla salonu o powierzchni 35 m² projektowe obciążenie cieplne wynosi zaledwie 350–450 W. Zgodnie z <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">normą PN-EN 1264</a>, musimy tak dobrać rozstaw i temperaturę, aby nie przekroczyć granicy 29°C. Prawidłowo zaprojektowana <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/">optymalna temperatura podłogi</a> w domu pasywnym rzadko przekracza jednak 24–25°C.
        </p>
    </div>

    <div class="rk-pwr-interactive">
        <h3>Symulator Salonu 35 m²: Ryzyko Przegrzania</h3>
        
        <div class="rk-pwr-slider-box">
            <div class="rk-slider-labels">
                <span style="color: var(--rk-pwr-green);">Dom Pasywny</span>
                <span style="color: var(--rk-pwr-red);">Stare Budownictwo</span>
            </div>
            <input type="range" min="1" max="100" value="10" class="rk-slider-input" id="rk-pwr-slider" aria-label="Symulacja obciążenia cieplnego budynku">
        </div>

        <div class="rk-pwr-dashboard">
            <!-- Animacja SVG -->
            <div class="rk-pwr-svg-wrap">
                <svg class="rk-svg-heat" viewBox="0 0 200 200">
                    <!-- Fale promieniowania -->
                    <g id="heat-waves" stroke="var(--rk-pwr-green)">
                        <path class="anim-heat-wave" id="wave1" d="M 50 140 Q 60 90 50 40" />
                        <path class="anim-heat-wave" id="wave2" d="M 100 140 Q 110 90 100 40" />
                        <path class="anim-heat-wave" id="wave3" d="M 150 140 Q 160 90 150 40" />
                    </g>
                    <!-- Przekrój podłogi -->
                    <rect x="20" y="160" width="160" height="24" fill="#cbd5e1" rx="4" />
                    <!-- Rury grzewcze -->
                    <g id="floor-pipes" fill="var(--rk-pwr-green)">
                        <circle cx="50" cy="172" r="6" />
                        <circle cx="83" cy="172" r="6" />
                        <circle cx="116" cy="172" r="6" />
                        <circle cx="150" cy="172" r="6" />
                    </g>
                </svg>
            </div>

            <!-- Karty Danych -->
            <div class="rk-pwr-metrics">
                <div class="rk-pwr-card">
                    <h4>Moc z 1 m² (q)</h4>
                    <div class="rk-pwr-value" id="val-wm2">12</div>
                    <div class="rk-pwr-unit">W/m²</div>
                    <div class="status-badge badge-ok" id="badge-wm2">Zgodnie z normą</div>
                </div>
                <div class="rk-pwr-card">
                    <h4>Moc Całkowita Salonu</h4>
                    <div class="rk-pwr-value" id="val-total">420</div>
                    <div class="rk-pwr-unit">Watów (W)</div>
                </div>
                <div class="rk-pwr-card">
                    <h4>Temp. Powierzchni</h4>
                    <div class="rk-pwr-value" id="val-temp">24.5</div>
                    <div class="rk-pwr-unit">°C</div>
                    <div class="status-badge badge-ok" id="badge-temp">Komfortowa</div>
                </div>
                <div class="rk-pwr-card">
                    <h4>Zasilanie Pętli</h4>
                    <div class="rk-pwr-value" id="val-supply">30</div>
                    <div class="rk-pwr-unit">°C</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) 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 container = document.getElementById('pwr-sim-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #1e293b; border: 2px solid #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 16px; font-weight: bold; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano</div>
                    <div style="color: #cbd5e1; font-size: 13px; line-height: 1.5;">
                        Kod kalkulatora mocy grzewczej oraz dane ustrukturyzowane Schema.org są chronione. Uruchamianie na nieautoryzowanej domenie zostało przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Suwaka
    const slider = document.getElementById('rk-pwr-slider');
    
    // Elementy DOM
    const valWm2 = document.getElementById('val-wm2');
    const valTotal = document.getElementById('val-total');
    const valTemp = document.getElementById('val-temp');
    const valSupply = document.getElementById('val-supply');
    
    const badgeWm2 = document.getElementById('badge-wm2');
    const badgeTemp = document.getElementById('badge-temp');
    
    // SVG
    const heatWaves = document.getElementById('heat-waves');
    const floorPipes = document.getElementById('floor-pipes');
    const wavePaths = document.querySelectorAll('.anim-heat-wave');

    const AREA = 35; // Powierzchnia salonu stała = 35 m2

    function interpolateColor(color1, color2, factor) {
        let result = color1.slice();
        for (let i = 0; i < 3; i++) {
            result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));
        }
        return `rgb(${result[0]}, ${result[1]}, ${result[2]})`;
    }

    const rgbGreen = [16, 185, 129]; // #10b981
    const rgbRed = [239, 68, 68];    // #ef4444

    function updateSim() {
        const factor = (slider.value - 1) / 99; // 0.0 to 1.0

        // Obliczenia
        const powerPerSqm = Math.round(10 + factor * (80 - 10)); // 10 do 80 W/m2
        const totalPower = powerPerSqm * AREA;
        const surfaceTemp = (24 + factor * (33 - 24)).toFixed(1); // 24.0 do 33.0 °C
        const supplyTemp = Math.round(28 + factor * (45 - 28)); // 28 do 45 °C

        const currentColor = interpolateColor(rgbGreen, rgbRed, factor);

        // Aktualizacja Wartości
        valWm2.textContent = powerPerSqm;
        valWm2.style.color = currentColor;
        
        valTotal.textContent = totalPower;
        
        valTemp.textContent = surfaceTemp;
        valTemp.style.color = currentColor;
        
        valSupply.textContent = supplyTemp;

        // Logika Odznak (Badges)
        if (powerPerSqm <= 20) {
            badgeWm2.className = 'status-badge badge-ok';
            badgeWm2.textContent = 'Standard Pasywny';
        } else {
            badgeWm2.className = 'status-badge badge-warn';
            badgeWm2.textContent = 'Straty Tradycyjne';
        }

        if (surfaceTemp <= 29) {
            badgeTemp.className = 'status-badge badge-ok';
            badgeTemp.textContent = 'Norma zachowana';
        } else {
            badgeTemp.className = 'status-badge badge-warn';
            badgeTemp.textContent = 'Przegrzewanie (>29°C)';
        }

        // Animacja SVG
        heatWaves.setAttribute('stroke', currentColor);
        floorPipes.setAttribute('fill', currentColor);

        // Intensywność fal na podstawie mocy (wymuszenie ruchu)
        const waveOffset = factor * 20;
        wavePaths[0].setAttribute('d', `M 50 140 Q ${60 + waveOffset} 90 50 40`);
        wavePaths[1].setAttribute('d', `M 100 140 Q ${110 - waveOffset} 90 100 40`);
        wavePaths[2].setAttribute('d', `M 150 140 Q ${160 + waveOffset} 90 150 40`);
        
        heatWaves.style.opacity = 0.4 + (factor * 0.6); // Zwiększa widoczność ciepła
    }

    slider.addEventListener('input', updateSim);
    updateSim(); // Init
});
</script>




<style>
:root {
    --rk-therm-dark: #1e293b;
    --rk-therm-brand: #0ea5e9;
    --rk-therm-sun: #fbbf24;
    --rk-therm-heat: #ef4444;
    --rk-therm-cool: #3b82f6;
    --rk-therm-bg: #ffffff;
    --rk-therm-panel: #f8fafc;
    --rk-therm-border: #e2e8f0;
    --rk-therm-text: #475569;
}

.rk-therm-wrap {
    max-width: 920px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-therm-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(14, 165, 233, 0.15);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Sekcja Treści */
.rk-therm-content {
    padding: 45px 50px 30px;
    background: linear-gradient(180deg, #f0f9ff 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-therm-border);
}

.rk-therm-content h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-therm-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
    letter-spacing: -0.5px;
}

.rk-therm-text {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-therm-text);
    margin: 0 0 16px 0;
}

.rk-therm-text a {
    color: #0284c7;
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-therm-text a:hover {
    background: #e0f2fe;
    border-color: #0284c7;
}

.rk-highlight-box {
    background: #fffbeb;
    border-left: 4px solid var(--rk-therm-sun);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    margin: 25px 0;
    font-size: 15px;
    color: #92400e;
    font-weight: 600;
}

/* Symulator Samoregulacji */
.rk-therm-interactive {
    padding: 40px 50px;
}

.rk-therm-interactive h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-therm-dark);
    margin: 0 0 30px 0;
}

/* Unikalny Kontroler - Suwak Słoneczny */
.rk-sun-controller {
    background: var(--rk-therm-panel);
    border: 1px solid var(--rk-therm-border);
    padding: 25px 35px;
    border-radius: 16px;
    margin-bottom: 40px;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);
}

.rk-sun-labels {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
    font-weight: 800;
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #64748b;
}

.rk-sun-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 12px;
    border-radius: 6px;
    background: linear-gradient(90deg, #cbd5e1 0%, var(--rk-therm-sun) 100%);
    outline: none;
}

.rk-sun-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: #ffffff;
    border: 4px solid var(--rk-therm-sun);
    cursor: pointer;
    box-shadow: 0 4px 10px rgba(251, 191, 36, 0.4);
    transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-sun-slider::-webkit-slider-thumb:hover {
    transform: scale(1.15);
}

/* Dashboard: SVG + Dane (Układ zintegrowany) */
.rk-therm-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
}

/* Wizualizacja interaktywna SVG */
.rk-svg-stage {
    background: #ffffff;
    border-radius: 20px;
    padding: 20px;
    border: 1px solid var(--rk-therm-border);
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.05);
    position: relative;
}

.rk-anim-sun-rays {
    transition: opacity 0.3s ease;
}

.rk-anim-therm-fill {
    transition: y 0.3s ease, height 0.3s ease, fill 0.3s ease;
}

.rk-anim-pipe {
    transition: fill 0.4s ease;
}

/* Kafelki Danych (H4) */
.rk-metrics-grid {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-metric-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #ffffff;
    border: 1px solid var(--rk-therm-border);
    padding: 16px 24px;
    border-radius: 14px;
    transition: all 0.3s;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-metric-row:hover {
    border-color: #bae6fd;
    transform: translateX(5px);
}

.rk-metric-info h4 {
    margin: 0 0 4px 0;
    font-size: 13px;
    text-transform: uppercase;
    color: var(--rk-therm-text);
    letter-spacing: 0.5px;
}

.rk-metric-info p {
    margin: 0;
    font-size: 11px;
    color: #94a3b8;
}

.rk-metric-value {
    font-size: 26px;
    font-weight: 900;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.rk-metric-value span {
    font-size: 13px;
    font-weight: 700;
    margin-left: 2px;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-therm-content, .rk-therm-interactive { padding: 30px 25px; }
    .rk-therm-dashboard { grid-template-columns: 1fr; gap: 30px; }
    .rk-metric-row { padding: 15px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/"
    },
    "headline": "Optymalna temperatura zasilania pompy ciepła i efekt samoregulacji podłogówki",
    "description": "Dlaczego temperatura zasilania 28°C-32°C to ideał dla pomp ciepła? Poznaj efekt samoregulacji instalacji według normy ISO 10508 i wpływ pasywnych zysków 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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#dataset",
    "name": "Analiza Efektu Samoregulacji Ogrzewania Podłogowego",
    "description": "Zestawienie spadku mocy grzewczej podłogi w funkcji wzrostu temperatury wewnętrznej pomieszczenia wywołanej pasywnymi zyskami słonecznymi.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "temperatura zasilania pompy ciepła",
      "współczynnik COP pompy ciepła",
      "samoregulacja ogrzewania podłogowego",
      "pasywne zyski słoneczne dom pasywny",
      "norma ISO 10508 podłogówka"
    ],
    "measurementTechnique": "Algorytmiczna interpolacja liniowa odwzorowująca spadek gęstości strumienia cieplnego przy zmniejszającej się różnicy temperatur między podłogą a powietrzem.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Stan bazowy: Temp. pokoju 20.0°C, moc podłogi 100%, zasilanie 30°C.",
        "Efekt samoregulacji: Wzrost temp. pokoju do 22.0°C od słońca automatycznie dławi oddawanie ciepła przez podłogę o 30%, redukując zużycie prądu przez pompę."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#webapp",
    "name": "Symulator Samoregulacji Termicznej Płyty Grzewczej",
    "description": "Narzędzie interaktywne ilustrujące zjawisko fizyczne, w którym podłoga przestaje oddawać ciepło pod wpływem nasłonecznienia zewnętrznego, bez ingerencji termostatów.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-therm-wrap" id="samoregulacja-app">
    
    <div class="rk-therm-content">
        <h2>Jaka temperatura zasilania jest idealna dla pompy ciepła w standardzie pasywnym?</h2>
        <p class="rk-therm-text">
            Idealna temperatura zasilania (T_z) w domu pasywnym oscyluje w granicach <strong>28°C – 32°C</strong> przy temperaturze zewnętrznej -20°C. Obniżenie temperatury zasilania o każdy 1°C zwiększa <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">współczynnik COP pompy ciepła</a> o około 2-3%, co w skali roku generuje wymierne oszczędności na rachunkach za prąd.
        </p>
        <p class="rk-therm-text">
            Projektując układ, dążymy do tzw. "grzania ciągłego" o bardzo niskiej mocy. <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">Norma EN 1264</a> oraz ISO 10508 klasyfikują takie systemy w Klasie 4 (niskotemperaturowe <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">wodne ogrzewanie podłogowe</a>). Przy zasilaniu 30°C i powrocie 25°C (spadek temperatury Delta T = 5K), średnia temperatura jastrychu wynosi zaledwie 27,5°C.
        </p>
        
        <div class="rk-highlight-box">
            Przy temperaturze docelowej w pomieszczeniu 20°C, różnica między powietrzem a podłogą to tylko 7,5K. Uruchamia to zjawisko fizycznej samoregulacji.
        </div>
        
        <p class="rk-therm-text">
            To sprawia, że system dławi się samoczynnie. Jeśli <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">pasywne zyski ciepła od nasłonecznienia</a> podniosą temperaturę w salonie o 2°C, moc oddawana przez podłogę spadnie automatycznie o blisko <strong>30%</strong>, bez jakiejkolwiek ingerencji elektroniki sterującej!
        </p>
    </div>

    <div class="rk-therm-interactive">
        <h3>Przetestuj zjawisko: Symulator Samoregulacji</h3>
        
        <div class="rk-sun-controller">
            <div class="rk-sun-labels">
                <span style="color: #94a3b8;">Brak słońca (Zima/Noc)</span>
                <span style="color: var(--rk-therm-sun);">Duże zyski przez okna (Dzień)</span>
            </div>
            <input type="range" min="0" max="100" value="0" class="rk-sun-slider" id="rk-sun-input" aria-label="Poziom nasłonecznienia pomieszczenia">
        </div>

        <div class="rk-therm-dashboard">
            <!-- Grafika Pokoju, Słońca i Termometru -->
            <div class="rk-svg-stage">
                <svg viewBox="0 0 300 200" width="100%" height="auto">
                    <!-- Słońce (animowane) -->
                    <g id="svg-sun" opacity="0.3">
                        <circle cx="50" cy="50" r="20" fill="var(--rk-therm-sun)" />
                        <g class="rk-anim-sun-rays" id="sun-rays">
                            <line x1="50" y1="15" x2="50" y2="5" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="50" y1="85" x2="50" y2="95" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="15" y1="50" x2="5" y2="50" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="85" y1="50" x2="95" y2="50" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="25" y1="25" x2="18" y2="18" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="75" y1="75" x2="82" y2="82" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="25" y1="75" x2="18" y2="82" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="75" y1="25" x2="82" y2="18" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                        </g>
                    </g>
                    
                    <!-- Termometr -->
                    <rect x="220" y="30" width="20" height="120" rx="10" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="2"/>
                    <rect x="224" y="80" width="12" height="70" rx="6" fill="#ef4444" id="therm-fill" class="rk-anim-therm-fill"/>
                    <circle cx="230" cy="150" r="14" fill="#ef4444" id="therm-bulb" class="rk-anim-therm-fill"/>
                    <!-- Skala -->
                    <path d="M 245 50 L 255 50 M 245 70 L 255 70 M 245 90 L 255 90 M 245 110 L 255 110 M 245 130 L 255 130" stroke="#94a3b8" stroke-width="1.5"/>

                    <!-- Podłoga i Rury (animowane) -->
                    <rect x="20" y="170" width="260" height="20" fill="#e2e8f0" rx="4"/>
                    <g id="floor-pipes">
                        <circle cx="50" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="90" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="130" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="170" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="210" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="250" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                    </g>
                </svg>
            </div>

            <!-- Parametry Dynamiczne -->
            <div class="rk-metrics-grid">
                <div class="rk-metric-row">
                    <div class="rk-metric-info">
                        <h4>Zyski Słoneczne</h4>
                        <p>Dodatkowa darmowa energia</p>
                    </div>
                    <div class="rk-metric-value" style="color: var(--rk-therm-sun);">
                        <span id="val-sun" style="font-size: 26px;">0</span><span>%</span>
                    </div>
                </div>

                <div class="rk-metric-row">
                    <div class="rk-metric-info">
                        <h4>Temperatura w salonie</h4>
                        <p>Baza: 20°C (różnica 7,5K do podłogi)</p>
                    </div>
                    <div class="rk-metric-value" style="color: var(--rk-therm-dark);">
                        <span id="val-room" style="font-size: 26px;">20.0</span><span>°C</span>
                    </div>
                </div>

                <div class="rk-metric-row" style="border-left: 4px solid var(--rk-therm-brand);">
                    <div class="rk-metric-info">
                        <h4>Moc grzewcza podłogi</h4>
                        <p>Efekt automatycznego dławienia</p>
                    </div>
                    <div class="rk-metric-value" style="color: var(--rk-therm-heat);" id="color-power">
                        <span id="val-power" style="font-size: 26px;">100</span><span>%</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('samoregulacja-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 25px; text-align: center; background: #fffbeb; border: 2px solid #f59e0b; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 10px;">🛑</div>
                    <div style="font-size: 15px; font-weight: bold; color: #b45309; margin-bottom: 8px;">Blokada Własności Intelektualnej</div>
                    <div style="color: #92400e; font-size: 13px; line-height: 1.5;">
                        Moduł symulacji samoregulacji oraz kod strukturalny zostały zablokowane. Wykryto próbę uruchomienia skryptu Projekt-Ogrzewania.pl na innej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Efekt Samoregulacji)
    const slider = document.getElementById('rk-sun-input');
    
    // UI Elements
    const valSun = document.getElementById('val-sun');
    const valRoom = document.getElementById('val-room');
    const valPower = document.getElementById('val-power');
    const colorPower = document.getElementById('color-power');
    
    // SVG Elements
    const sunGroup = document.getElementById('svg-sun');
    const thermFill = document.getElementById('therm-fill');
    const pipes = document.querySelectorAll('.rk-anim-pipe');

    // Kolory interpolacji dla rur (od gorącego czerwonego do chłodnego niebieskawego)
    const colorHot = [239, 68, 68]; // #ef4444 (100% mocy)
    const colorCool = [148, 163, 184]; // #94a3b8 (70% mocy, uśpienie)

    function interpolateColor(c1, c2, factor) {
        let result = [];
        for (let i = 0; i < 3; i++) {
            result[i] = Math.round(c1[i] + factor * (c2[i] - c1[i]));
        }
        return `rgb(${result[0]}, ${result[1]}, ${result[2]})`;
    }

    function updateSimulation() {
        const factor = slider.value / 100; // 0.0 do 1.0

        // Obliczenia parametrów fizycznych
        // Zyski rosną od 0 do 100%
        valSun.textContent = Math.round(factor * 100);
        
        // Temperatura wzrasta od 20.0 do 22.0 °C
        const currentTemp = 20.0 + (factor * 2.0);
        valRoom.textContent = currentTemp.toFixed(1);
        
        // Moc podłogi spada od 100% do 70% (dławienie o 30%)
        const currentPower = 100 - (factor * 30);
        valPower.textContent = Math.round(currentPower);

        // --- Aktualizacja Wizualna SVG ---
        
        // Słońce rozjaśnia się bez transformacji promieni
        sunGroup.setAttribute('opacity', 0.2 + (factor * 0.8));

        // Termometr idzie do góry (y maleje, height rośnie)
        // Baza y=80, h=70 (20 st). Max y=40, h=110 (22 st)
        const newY = 80 - (factor * 40);
        const newH = 70 + (factor * 40);
        thermFill.setAttribute('y', newY);
        thermFill.setAttribute('height', newH);
        
        // Zmiana koloru termometru i rur w miarę samoregulacji
        // Termometr staje się cieplejszy (pomarańcz) od słońca, a rury stygną
        const pipeColor = interpolateColor(colorHot, colorCool, factor);
        
        pipes.forEach(pipe => {
            pipe.setAttribute('fill', pipeColor);
        });
        
        colorPower.style.color = pipeColor;
    }

    // Inicjalizacja nasłuchiwania
    slider.addEventListener('input', updateSimulation);
    
    // Uruchomienie stanu zero
    updateSimulation();
});
</script>



<style>
:root {
    --rk-sp-dark: #0f172a;
    --rk-sp-brand: #0284c7;
    --rk-sp-brand-light: #f0f9ff;
    --rk-sp-accent: #38bdf8;
    --rk-sp-eco: #10b981;
    --rk-sp-warn: #f59e0b;
    --rk-sp-text: #475569;
    --rk-sp-border: #e2e8f0;
    --rk-sp-bg: #ffffff;
}

.rk-sp-wrap {
    max-width: 920px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-sp-bg);
    border-radius: 28px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.12);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Header */
.rk-sp-header {
    padding: 45px 50px 35px;
    background: linear-gradient(180deg, #f0f9ff 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-sp-border);
}

.rk-sp-header h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-sp-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-sp-formula {
    background: var(--rk-sp-dark);
    color: #cbd5e1;
    padding: 22px 25px;
    border-radius: 16px;
    font-family: 'JetBrains Mono', monospace;
    font-size: 14px;
    border-left: 5px solid var(--rk-sp-brand);
    margin-top: 20px;
}

.rk-sp-formula .hl { color: var(--rk-sp-eco); font-weight: 800; }

/* Dashboard */
.rk-sp-dashboard {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-sp-selector {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-bottom: 35px;
}

.rk-sp-card {
    background: #ffffff;
    border: 2px solid var(--rk-sp-border);
    padding: 20px;
    border-radius: 20px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-sp-card.active {
    border-color: var(--rk-sp-brand);
    background: var(--rk-sp-brand-light);
    box-shadow: 0 10px 15px -3px rgba(2, 132, 199, 0.15);
}

.rk-sp-label { font-size: 11px; font-weight: 800; color: #64748b; text-transform: uppercase; margin-bottom: 5px; display: block; }
.rk-sp-val { font-size: 18px; font-weight: 900; color: var(--rk-sp-dark); }

.rk-sp-grid {
    display: grid;
    grid-template-columns: 1.3fr 1fr;
    gap: 30px;
    align-items: start;
}

/* SVG Visualization */
.rk-sp-visual {
    background: #ffffff;
    border: 1px solid var(--rk-sp-border);
    border-radius: 24px;
    padding: 35px;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);
}

.rk-svg-main { width: 100%; height: auto; display: block; }
.layer-text { font-size: 8px; font-weight: 700; fill: #94a3b8; text-transform: uppercase; }
.pipe-anim { transition: opacity 0.4s ease; }

/* Stats */
.rk-sp-stats {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-stat-row {
    background: #ffffff;
    border: 1px solid var(--rk-sp-border);
    padding: 18px 22px;
    border-radius: 16px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s ease;
}

.rk-stat-row:hover { border-color: var(--rk-sp-accent); transform: translateX(5px); }

.rk-stat-info h4 { margin: 0; font-size: 12px; color: #64748b; text-transform: uppercase; letter-spacing: 0.5px; }
.rk-stat-info p { margin: 4px 0 0 0; font-size: 11px; color: #94a3b8; }
.rk-stat-num { font-size: 24px; font-weight: 900; color: var(--rk-sp-dark); display: block; }

@media (max-width: 850px) {
    .rk-sp-grid { grid-template-columns: 1fr; }
    .rk-sp-selector { grid-template-columns: 1fr; }
}
</style>

<div class="rk-sp-wrap" id="rk-spacing-app">
    
    <div class="rk-sp-header">
        <h2>Jaki rozstaw rur jest optymalny przy niskim zapotrzebowaniu na ciepło?</h2>
        <p>W domach pasywnych (10-15 W/m²) optymalny rozstaw to <strong>15 cm lub 20 cm</strong>. Zapewnia to idealne przepływy dla pompy ciepła i eliminuje zbędne koszty materiału.</p>
        <div class="rk-sp-formula">
            // Bilans hydrauliczny pętli 15 m²<br>
            Moc (Q) = 225 W | Przepływ (m) = <span class="hl">0,64 l/min</span>
        </div>
    </div>

    <div class="rk-sp-dashboard">
        <div class="rk-sp-selector">
            <div class="rk-sp-card active" data-mode="1">
                <span class="rk-sp-label">Standard WT2021</span>
                <span class="rk-sp-val">co 10 cm</span>
            </div>
            <div class="rk-sp-card" data-mode="2">
                <span class="rk-sp-label">Energooszczędny</span>
                <span class="rk-sp-val">co 15 cm</span>
            </div>
            <div class="rk-sp-card" data-mode="3">
                <span class="rk-sp-label">Standard Pasywny</span>
                <span class="rk-sp-val">co 20 cm</span>
            </div>
        </div>

        <div class="rk-sp-grid">
            <div class="rk-sp-visual">
                <svg class="rk-svg-main" viewBox="0 0 240 160">
                    <defs>
                        <linearGradient id="g-pipe" x1="0%" y1="0%" x2="0%" y2="100%">
                            <stop offset="0%" style="stop-color:#38bdf8" />
                            <stop offset="100%" style="stop-color:#0284c7" />
                        </linearGradient>
                    </defs>
                    <rect x="10" y="40" width="220" height="60" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/>
                    <text x="20" y="55" class="layer-text">Wylewka Anhydrytowa (60mm)</text>
                    <rect x="10" y="100" width="220" height="50" fill="#e2e8f0" stroke="#cbd5e1" stroke-width="1"/>
                    <text x="20" y="115" class="layer-text">Izolacja EPS 200 (200mm)</text>

                    <g id="pipes">
                        <circle cx="30" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2"/>
                        <circle cx="65" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p10"/>
                        <circle cx="100" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p15"/>
                        <circle cx="135" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p10"/>
                        <!-- Ta rura (170) jest kluczowa dla widoku 20cm -->
                        <circle cx="170" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p15 p20"/>
                        <circle cx="205" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p10"/>
                    </g>
                    
                    <path d="M 30 35 L 65 35 M 30 30 L 30 40 M 65 30 L 65 40" stroke="#94a3b8" stroke-width="1.5" id="m-line"/>
                    <text x="47.5" y="25" text-anchor="middle" font-size="10" font-weight="900" fill="#0284c7" id="m-text">10 cm</text>
                </svg>
            </div>

            <div class="rk-sp-stats">
                <div class="rk-stat-row">
                    <div class="rk-stat-info"><h4>Długość rur</h4><p>Dom 150 m²</p></div>
                    <div class="rk-stat-value"><span class="rk-stat-num" id="s-meters">1500</span><span class="rk-stat-unit">mb</span></div>
                </div>
                <div class="rk-stat-row" style="border-left: 5px solid var(--rk-sp-eco);">
                    <div class="rk-stat-info"><h4>Koszt materiału</h4><p id="s-label">Baza porównawcza</p></div>
                    <div class="rk-stat-value"><span class="rk-stat-num" id="s-price">6750</span><span class="rk-stat-unit">PLN</span></div>
                </div>
                <div class="rk-stat-row">
                    <div class="rk-stat-info"><h4>Opory</h4><p>Hydraulika</p></div>
                    <div class="rk-stat-value"><span class="rk-stat-num" id="s-hydro" style="font-size:18px;color:var(--rk-sp-warn)">Wysokie</span></div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-spacing-app').innerHTML = '<div style="padding:40px;text-align:center;background:#0f172a;color:#ef4444;border-radius:20px;font-weight:900;">🛡️ MODUŁ CHRONIONY</div>';
        return;
    }

    const cards = document.querySelectorAll('.rk-sp-card');
    const p10 = document.querySelectorAll('.p10'), p15 = document.querySelectorAll('.p15'), p20 = document.querySelectorAll('.p20');
    const mLine = document.getElementById('m-line'), mText = document.getElementById('m-text');
    const sMeters = document.getElementById('s-meters'), sPrice = document.getElementById('s-price'), sHydro = document.getElementById('s-hydro'), sLabel = document.getElementById('s-label');

    cards.forEach(card => {
        card.addEventListener('click', function() {
            cards.forEach(c => c.classList.remove('active'));
            this.classList.add('active');
            const mode = this.getAttribute('data-mode');

            if (mode === '1') {
                p10.forEach(p => p.style.opacity = '1'); p15.forEach(p => p.style.opacity = '1');
                mLine.setAttribute('d', 'M 30 35 L 65 35 M 30 30 L 30 40 M 65 30 L 65 40');
                mText.textContent = '10 cm'; mText.setAttribute('x', '47.5');
                update('1500', '6750', 'Wysokie', '#f59e0b', 'Baza porównawcza');
            } else if (mode === '2') {
                p10.forEach(p => p.style.opacity = '0'); p15.forEach(p => p.style.opacity = '1');
                mLine.setAttribute('d', 'M 30 35 L 100 35 M 30 30 L 30 40 M 100 30 L 100 40');
                mText.textContent = '15 cm'; mText.setAttribute('x', '65');
                update('1000', '4500', 'Optymalne', '#0284c7', 'Oszczędzasz 2250 PLN');
            } else {
                p10.forEach(p => p.style.opacity = '0'); p15.forEach(p => p.style.opacity = '0');
                p20.forEach(p => p.style.opacity = '1'); // Pokazuje rurę na 20 cm
                mLine.setAttribute('d', 'M 30 35 L 170 35 M 30 30 L 30 40 M 170 30 L 170 40');
                mText.textContent = '20 cm'; mText.setAttribute('x', '100');
                update('900', '4050', 'Minimalne', '#10b981', 'Oszczędzasz 2700 PLN');
            }
        });
    });

    function update(m, p, h, c, l) {
        sMeters.textContent = m; sPrice.textContent = p; sHydro.textContent = h; sHydro.style.color = c; sLabel.textContent = l;
    }
});
</script>



<style>
:root {
    --rk-sys-dark: #0f172a;
    --rk-sys-wet: #f97316;     /* Pomarańcz - akumulacja, ciepło */
    --rk-sys-wet-light: #fff7ed;
    --rk-sys-dry: #06b6d4;     /* Cyjan - szybkość, aluminium */
    --rk-sys-dry-light: #ecfeff;
    --rk-sys-text: #334155;
    --rk-sys-muted: #64748b;
    --rk-sys-border: #cbd5e1;
    --rk-sys-bg: #ffffff;
}

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

/* Sekcja Treści - Akapit */
.rk-sys-content {
    padding: 40px 45px 30px;
    background: linear-gradient(to bottom right, #f8fafc, #ffffff);
    border-bottom: 1px solid var(--rk-sys-border);
}

.rk-sys-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-sys-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-sys-text {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-sys-text);
    margin: 0 0 15px 0;
}

.rk-sys-text a {
    color: #2563eb;
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bfdbfe;
    transition: all 0.3s;
}

.rk-sys-text a:hover {
    background: #dbeafe;
    border-color: #2563eb;
}

.rk-sys-note {
    background: #f1f5f9;
    border-left: 4px solid var(--rk-sys-dark);
    padding: 15px 20px;
    margin: 20px 0;
    border-radius: 0 12px 12px 0;
    font-size: 14px;
    color: var(--rk-sys-dark);
    font-weight: 600;
}

/* Interaktywny Symulator */
.rk-sys-interactive {
    padding: 40px 45px;
}

.rk-sys-interactive h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-sys-dark);
    margin: 0 0 30px 0;
}

/* Unikalny Przełącznik (Toggle) */
.rk-toggle-station {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    background: #f8fafc;
    padding: 20px;
    border-radius: 100px;
    border: 1px solid var(--rk-sys-border);
    margin-bottom: 40px;
}

.rk-toggle-label {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--rk-sys-muted);
    transition: color 0.3s;
    cursor: pointer;
}

.rk-toggle-label.active-wet { color: var(--rk-sys-wet); }
.rk-toggle-label.active-dry { color: var(--rk-sys-dry); }

.rk-main-switch {
    position: relative;
    width: 80px;
    height: 40px;
    background: var(--rk-sys-wet);
    border-radius: 40px;
    cursor: pointer;
    transition: background 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
}

.rk-main-switch.mode-dry {
    background: var(--rk-sys-dry);
}

.rk-switch-knob {
    position: absolute;
    top: 4px;
    left: 4px;
    width: 32px;
    height: 32px;
    background: #ffffff;
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-main-switch.mode-dry .rk-switch-knob {
    transform: translateX(40px);
}

/* Dashboard SVG + Kafelki */
.rk-sys-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: stretch;
}

/* Kontener SVG */
.rk-svg-box {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-sys-border);
    padding: 25px;
    display: flex;
    justify-content: center;
    align-items: center;
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.05);
}

.rk-svg-cross-section {
    width: 100%;
    max-width: 250px;
}

/* Warstwy SVG */
.layer-screed { transition: opacity 0.4s; }
.layer-lamella { transition: opacity 0.4s; }
.wave-heat { fill: none; stroke-linecap: round; }

/* Animacje Bezwładności */
.state-wet .wave-heat { 
    stroke: var(--rk-sys-wet); 
    stroke-width: 6; 
    animation: flowUp 3s infinite linear; 
}
.state-dry .wave-heat { 
    stroke: var(--rk-sys-dry); 
    stroke-width: 3; 
    animation: flowUp 0.8s infinite linear; 
}

@keyframes flowUp {
    0% { transform: translateY(10px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(-30px); opacity: 0; }
}

/* Kafelki Danych (Grid) */
.rk-sys-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tile {
    background: #ffffff;
    border: 1px solid var(--rk-sys-border);
    border-radius: 14px;
    padding: 15px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    transition: all 0.3s;
}

.rk-tile h4 {
    margin: 0 0 5px 0;
    font-size: 11px;
    text-transform: uppercase;
    color: var(--rk-sys-muted);
    letter-spacing: 0.5px;
}

.rk-tile .val {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-sys-dark);
    margin-bottom: 2px;
    line-height: 1.2;
}

.rk-tile .desc {
    font-size: 12px;
    color: var(--rk-sys-text);
}

/* Mobilna responsywność */
@media (max-width: 768px) {
    .rk-sys-content, .rk-sys-interactive { padding: 25px 20px; }
    .rk-toggle-station { flex-direction: column; gap: 15px; border-radius: 20px; padding: 15px; }
    .rk-sys-dashboard { grid-template-columns: 1fr; }
    .rk-sys-tiles { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/"
    },
    "headline": "System mokry czy suchy – co wybrać do domu pasywnym?",
    "description": "Porównanie systemów ogrzewania podłogowego. System mokry (anhydryt, wysoka bezwładność, domy murowane) kontra system suchy (lamele aluminiowe, niska bezwładność, domy szkieletowe). Wymagania izolacji EPS.",
    "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": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#dataset",
    "name": "Parametry Techniczne: Wylewka Anhydrytowa vs Sucha Zabudowa",
    "description": "Tabela porównawcza parametrów przewodzenia ciepła, grubości wylewki oraz izolacji wymaganej w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wylewka anhydrytowa ogrzewanie podłogowe",
      "system suchy podłogówki",
      "bezwładność cieplna wylewki",
      "grubość styropianu dom pasywny",
      "lamele aluminiowe system suchy"
    ],
    "measurementTechnique": "Analiza współczynnika przewodzenia ciepła lambda (W/mK) oraz oporu cieplnego R dla jastrychów i izolacji EPS na gruncie.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Anhydryt (System Mokry): Lambda 1,6–1,8 W/(m·K), grubość 35-45 mm nad rurą, wysoka akumulacja.",
        "System Suchy (Lamele): Błyskawiczna reakcja, dedykowane do domów szkieletowych.",
        "Izolacja dom pasywny: 20-25 cm EPS 100/200, Lambda = 0,031 W/(m·K), Opór R = 6,0-8,0 (m²·K)/W."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#webapp",
    "name": "Symulator Bezwładności Termicznej Posadzki",
    "description": "Interaktywna animacja SVG obrazująca różnicę w prędkości przekazywania ciepła (reakcji na zyski słoneczne) pomiędzy ciężkim systemem mokrym a lekkim systemem suchym.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-sys-container" id="sys-simulator-app">
    
    <div class="rk-sys-content">
        <h2>System mokry czy suchy – co wybrać do domu pasywnego?</h2>
        <p class="rk-sys-text">
            W domach pasywnych o konstrukcji ciężkiej (murowanej) zalecam <a href="https://projekt-ogrzewania.pl/czym-jest-system-mokry-w-wodnym-ogrzewaniu-podlogowym/">system mokry</a> z <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">wylewką anhydrytową</a> o grubości 35–45 mm nad rurą, natomiast w <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-domu-szkieletowym-kluczowe-roznice-i-pulapki/">budownictwie szkieletowym</a> jedynym rozsądnym wyborem jest <a href="https://projekt-ogrzewania.pl/czym-jest-system-suchy-w-wodnym-ogrzewaniu-podlogowym/">system suchy</a> o niskiej bezwładności. Wylewka anhydrytowa ma współczynnik przewodzenia ciepła lambda 1,6–1,8 W/(m·K), co jest wartością znacznie lepszą niż w przypadku jastrychu cementowego lambda 1,1–1,2 W/(m·K).
        </p>
        <p class="rk-sys-text">
            Niska <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplna</a> systemu suchego (płyty systemowe z lamelami aluminiowymi) pozwala na szybszą reakcję na zyski ciepła od słońca, co w domach pasywnych z dużymi przeszkleniami od południa jest kluczowe. System mokry z kolei działa jak akumulator energii.
        </p>
        <div class="rk-sys-note">
            <strong>Parametry techniczne izolacji:</strong> Pod ogrzewaniem podłogowym na gruncie w domu pasywnym wymagane jest minimum <strong>20–25 cm <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/" style="color:var(--rk-sys-dark); text-decoration:underline;">styropianu EPS 100 lub EPS 200</a></strong> o współczynniku lambda = 0,031 W/(m·K), aby opór cieplny izolacji R wynosił minimum 6,0–8,0 (m²·K)/W.
        </div>
    </div>

    <div class="rk-sys-interactive">
        <h3>Symulator Bezwładności Termicznej</h3>
        
        <div class="rk-toggle-station">
            <div class="rk-toggle-label active-wet" id="lbl-wet" onclick="document.getElementById('rk-mode-switch').click()">
                System Mokry (Anhydryt)
            </div>
            <div class="rk-main-switch" id="rk-mode-switch">
                <div class="rk-switch-knob"></div>
            </div>
            <div class="rk-toggle-label" id="lbl-dry" onclick="document.getElementById('rk-mode-switch').click()">
                System Suchy (Lamele)
            </div>
        </div>

        <div class="rk-sys-dashboard">
            <!-- Animacja SVG Przekroju -->
            <div class="rk-svg-box state-wet" id="svg-anim-state">
                <svg class="rk-svg-cross-section" viewBox="0 0 200 150">
                    <!-- Baza: Izolacja EPS 200 (Zawsze widoczna) -->
                    <rect x="20" y="100" width="160" height="40" fill="#e2e8f0" rx="4"/>
                    <text x="100" y="125" text-anchor="middle" fill="#64748b" font-size="12" font-weight="bold">EPS 200 (Izolacja)</text>

                    <!-- System Mokry (Wylewka Anhydrytowa) -->
                    <g class="layer-screed" id="svg-screed">
                        <rect x="20" y="40" width="160" height="60" fill="#cbd5e1" rx="4"/>
                    </g>

                    <!-- System Suchy (Płyta z Lamelem) -->
                    <g class="layer-lamella" id="svg-lamella" opacity="0">
                        <rect x="20" y="70" width="160" height="30" fill="#f8fafc" rx="4" stroke="#cbd5e1" stroke-width="2"/>
                        <!-- Aluminiowe Lamele -->
                        <path d="M 20 70 L 180 70 M 20 75 L 180 75" stroke="#06b6d4" stroke-width="3"/>
                    </g>

                    <!-- Rury Grzewcze -->
                    <g fill="#ef4444">
                        <circle cx="50" cy="85" r="8"/>
                        <circle cx="100" cy="85" r="8"/>
                        <circle cx="150" cy="85" r="8"/>
                    </g>

                    <!-- Fale Ciepła (Animacja CSS definiuje prędkość) -->
                    <path class="wave-heat" d="M 50 70 Q 60 40 50 10" />
                    <path class="wave-heat" d="M 100 70 Q 110 40 100 10" style="animation-delay: 0.3s;" />
                    <path class="wave-heat" d="M 150 70 Q 160 40 150 10" style="animation-delay: 0.6s;" />
                </svg>
            </div>

            <!-- Dynamiczne Kafelki Danych -->
            <div class="rk-sys-tiles">
                <div class="rk-tile" id="tile-lambda">
                    <h4>Przewodzenie (Lambda)</h4>
                    <div class="val" style="color: var(--rk-sys-wet);">1,6 - 1,8</div>
                    <div class="desc">W/(m·K) - Anhydryt</div>
                </div>
                <div class="rk-tile" id="tile-inertia">
                    <h4>Bezwładność Cieplna</h4>
                    <div class="val" style="color: var(--rk-sys-wet);">Wysoka</div>
                    <div class="desc">Działa jak akumulator</div>
                </div>
                <div class="rk-tile" id="tile-thick">
                    <h4>Wysokość Zabudowy</h4>
                    <div class="val">35 - 45 mm</div>
                    <div class="desc">Zalewane nad rurą</div>
                </div>
                <div class="rk-tile" id="tile-build">
                    <h4>Konstrukcja Budynku</h4>
                    <div class="val">Murowana</div>
                    <div class="desc">Wysoka nośność stropu</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('sys-simulator-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 25px; text-align: center; background: #f8fafc; border: 2px solid #ef4444; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 15px; font-weight: bold; color: #dc2626; margin-bottom: 8px;">Blokada Praw Autorskich</div>
                    <div style="color: #475569; font-size: 13px; line-height: 1.5;">
                        Interaktywny kalkulator systemów (mokry/suchy) został zablokowany, ponieważ domena nie posiada licencji na renderowanie kodu Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Przełącznika i Aktualizacji Danych
    const switchBtn = document.getElementById('rk-mode-switch');
    const lblWet = document.getElementById('lbl-wet');
    const lblDry = document.getElementById('lbl-dry');
    const svgState = document.getElementById('svg-anim-state');
    
    // Warstwy SVG
    const svgScreed = document.getElementById('svg-screed');
    const svgLamella = document.getElementById('svg-lamella');

    // Kafelki
    const tileLambda = document.getElementById('tile-lambda');
    const tileInertia = document.getElementById('tile-inertia');
    const tileThick = document.getElementById('tile-thick');
    const tileBuild = document.getElementById('tile-build');

    let isDry = false;

    function updateCard(card, valText, descText, color = 'var(--rk-sys-dark)') {
        const valEl = card.querySelector('.val');
        const descEl = card.querySelector('.desc');
        
        valEl.style.opacity = 0;
        descEl.style.opacity = 0;
        
        setTimeout(() => {
            valEl.textContent = valText;
            valEl.style.color = color;
            descEl.textContent = descText;
            
            valEl.style.opacity = 1;
            descEl.style.opacity = 1;
        }, 150);
    }

    switchBtn.addEventListener('click', () => {
        isDry = !isDry;

        if (isDry) {
            // Przejście na System Suchy
            switchBtn.classList.add('mode-dry');
            lblWet.classList.remove('active-wet');
            lblDry.classList.add('active-dry');
            
            // Zmiana animacji SVG
            svgState.classList.remove('state-wet');
            svgState.classList.add('state-dry');
            svgScreed.style.opacity = 0;
            svgLamella.style.opacity = 1;

            // Aktualizacja Danych
            updateCard(tileLambda, 'Aluminium', 'Doskonałe przewodzenie', 'var(--rk-sys-dry)');
            updateCard(tileInertia, 'Niska', 'Błyskawiczna reakcja', 'var(--rk-sys-dry)');
            updateCard(tileThick, 'Minimalna', 'Tylko grubość płyty', 'var(--rk-sys-dark)');
            updateCard(tileBuild, 'Szkieletowa', 'Lekka konstrukcja', 'var(--rk-sys-dark)');
            
        } else {
            // Powrót do Systemu Mokrego
            switchBtn.classList.remove('mode-dry');
            lblDry.classList.remove('active-dry');
            lblWet.classList.add('active-wet');

            // Zmiana animacji SVG
            svgState.classList.remove('state-dry');
            svgState.classList.add('state-wet');
            svgLamella.style.opacity = 0;
            svgScreed.style.opacity = 1;

            // Aktualizacja Danych
            updateCard(tileLambda, '1,6 - 1,8', 'W/(m·K) - Anhydryt', 'var(--rk-sys-wet)');
            updateCard(tileInertia, 'Wysoka', 'Działa jak akumulator', 'var(--rk-sys-wet)');
            updateCard(tileThick, '35 - 45 mm', 'Zalewane nad rurą', 'var(--rk-sys-dark)');
            updateCard(tileBuild, 'Murowana', 'Wysoka nośność stropu', 'var(--rk-sys-dark)');
        }
    });
});
</script>



<style>
:root {
    --rk-comp-dark: #1e293b;
    --rk-comp-brand: #3b82f6;
    --rk-comp-wet: #8b5cf6;     /* Fiolet dla Anhydrytu (masa, pojemność) */
    --rk-comp-wet-light: #f5f3ff;
    --rk-comp-dry: #10b981;     /* Zielony dla Suchego (lekkość, eko) */
    --rk-comp-dry-light: #ecfdf5;
    --rk-comp-text: #475569;
    --rk-comp-border: #e2e8f0;
    --rk-comp-bg: #ffffff;
}

.rk-comp-wrap {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-comp-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(59, 130, 246, 0.1);
    border: 1px solid #bfdbfe;
    overflow: hidden;
}

/* Nagłówek i Tekst SEO */
.rk-comp-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-comp-border);
}

.rk-comp-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-comp-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-comp-text {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-comp-text);
    margin: 0;
}

.rk-comp-text a {
    color: var(--rk-comp-brand);
    font-weight: 700;
    text-decoration: none;
    box-shadow: inset 0 -2px 0 #bfdbfe;
    transition: background 0.3s, box-shadow 0.3s;
}

.rk-comp-text a:hover {
    background: #dbeafe;
    box-shadow: inset 0 -10px 0 #bfdbfe;
}

/* Interaktywny Komparator */
.rk-comp-interactive {
    padding: 40px 45px;
}

.rk-comp-interactive h3 {
    text-align: center;
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-comp-dark);
    margin: 0 0 30px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* Przełącznik Systemów (Taby) */
.rk-comp-tabs {
    display: flex;
    background: #f1f5f9;
    padding: 8px;
    border-radius: 16px;
    margin-bottom: 40px;
    gap: 8px;
}

.rk-comp-tab {
    flex: 1;
    text-align: center;
    padding: 16px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-comp-tab.active[data-system="wet"] {
    background: #ffffff;
    color: var(--rk-comp-wet);
    box-shadow: 0 4px 10px rgba(139, 92, 246, 0.15);
}

.rk-comp-tab.active[data-system="dry"] {
    background: #ffffff;
    color: var(--rk-comp-dry);
    box-shadow: 0 4px 10px rgba(16, 185, 129, 0.15);
}

.rk-tab-icon {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #e2e8f0;
    color: #fff;
    transition: background 0.3s;
}

.rk-comp-tab.active[data-system="wet"] .rk-tab-icon { background: var(--rk-comp-wet); }
.rk-comp-tab.active[data-system="dry"] .rk-tab-icon { background: var(--rk-comp-dry); }

/* Dashboard: SVG i Kafelki Parametrów */
.rk-comp-dashboard {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 30px;
    align-items: start;
}

/* SVG Wizualizacja */
.rk-svg-panel {
    background: #ffffff;
    border: 1px solid var(--rk-comp-border);
    border-radius: 16px;
    padding: 20px;
    text-align: center;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-svg-stage {
    width: 100%;
    max-width: 180px;
}

.anim-thickness { transition: height 0.4s ease, y 0.4s ease, fill 0.4s ease; }
.anim-weight-text { transition: opacity 0.3s; }
.anim-scale { transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); transform-origin: 100px 150px; }

/* Grid Kafelków (Zastępstwo Tabeli) */
.rk-comp-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-param-card {
    background: #ffffff;
    border: 1px solid var(--rk-comp-border);
    border-radius: 14px;
    padding: 18px 20px;
    transition: all 0.3s ease;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-param-card h4 {
    margin: 0 0 6px 0;
    font-size: 11px;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 0.5px;
}

.rk-param-val {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-comp-dark);
    margin-bottom: 4px;
    transition: color 0.3s;
}

.rk-param-norm {
    font-size: 11px;
    color: #64748b;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 4px;
}

.rk-param-norm::before {
    content: '';
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: #cbd5e1;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-comp-header, .rk-comp-interactive { padding: 30px 25px; }
    .rk-comp-dashboard { grid-template-columns: 1fr; }
    .rk-comp-tabs { flex-direction: column; }
    .rk-svg-panel { margin-bottom: 20px; }
}
@media (max-width: 480px) {
    .rk-comp-grid { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#article-porownanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/"
    },
    "headline": "Porównanie parametrów systemów podłogowych w domu pasywnym",
    "description": "Szczegółowe zestawienie parametrów technicznych: wylewka anhydrytowa kontra system suchy. Analiza przewodności cieplnej, grubości zabudowy i wagi stropu.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#dataset-porownanie",
    "name": "Zestawienie Parametrów: System Mokry vs System Suchy",
    "description": "Tabela analityczna zestawiająca kluczowe różnice fizyczne pomiędzy systemami grzewczymi stosowanymi w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wylewka anhydrytowa ogrzewanie podłogowe",
      "system suchy ogrzewania podłogowego",
      "przewodność cieplna lambda",
      "bezwładność cieplna posadzki",
      "waga systemu ogrzewania podłogowego"
    ],
    "measurementTechnique": "Kompilacja danych laboratoryjnych ITB, wytycznych producentów oraz normy europejskiej PN-EN 1264 w odniesieniu do wydajności termicznej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "System Mokry (Anhydryt): Przewodność 1,8 W/(mK), Waga ~120 kg/m2, Grubość 55-65 mm, Bezwładność wysoka (3-5 h).",
        "System Suchy (Lekki): Przewodność 0,4-0,5 W/(mK), Waga ~30 kg/m2, Grubość 25-30 mm, Bezwładność niska (30-60 min)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#webapp-porownanie",
    "name": "Interaktywny Komparator Systemów Podłogowych",
    "description": "Cyfrowe narzędzie pozwalające inwestorom na wizualne i techniczne porównanie wagi, grubości i bezwładności wylewki mokrej względem lekkiej suchej zabudowy.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript, SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-comp-wrap" id="komparator-app">
    
    <div class="rk-comp-header">
        <h2>Porównanie parametrów systemów w domu pasywnym</h2>
        <p class="rk-comp-text">
            Zrozumienie różnic fizycznych między <a href="https://projekt-ogrzewania.pl/czym-jest-system-mokry-w-wodnym-ogrzewaniu-podlogowym/">systemem mokrym (wylewka anhydrytowa)</a> a <a href="https://projekt-ogrzewania.pl/czym-jest-system-suchy-w-wodnym-ogrzewaniu-podlogowym/">systemem suchym (lekka zabudowa)</a> jest fundamentem poprawnego zaprojektowania ogrzewania dla domu pasywnego. Poniższy interaktywny komparator obrazuje, jak masa, <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplna</a> oraz grubość wpływają na parametry pracy instalacji w świetle normy PN-EN 1264.
        </p>
    </div>

    <div class="rk-comp-interactive">
        <h3>Zestawienie Technologiczne</h3>
        
        <!-- Przełącznik -->
        <div class="rk-comp-tabs" id="rk-tabs">
            <div class="rk-comp-tab active" data-system="wet">
                <div class="rk-tab-icon">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"/></svg>
                </div>
                System Mokry (Anhydryt)
            </div>
            <div class="rk-comp-tab" data-system="dry">
                <div class="rk-tab-icon">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>
                </div>
                System Suchy (Lekki)
            </div>
        </div>

        <div class="rk-comp-dashboard">
            <!-- SVG Wizualizacja Grubości i Wagi -->
            <div class="rk-svg-panel">
                <svg class="rk-svg-stage" viewBox="0 0 200 200">
                    <!-- Szala Wagi -->
                    <path d="M 100 150 L 100 190 M 60 190 L 140 190" stroke="#94a3b8" stroke-width="4" stroke-linecap="round"/>
                    
                    <g class="anim-scale" id="svg-scale">
                        <!-- Podstawa szali -->
                        <path d="M 20 150 L 180 150" stroke="#64748b" stroke-width="4" stroke-linecap="round"/>
                        
                        <!-- Przekrój posadzki na szali -->
                        <rect x="50" y="80" width="100" height="60" fill="var(--rk-comp-wet)" rx="4" id="svg-floor-layer" class="anim-thickness" />
                        
                        <!-- Rury -->
                        <circle cx="70" cy="120" r="6" fill="#ffffff" />
                        <circle cx="100" cy="120" r="6" fill="#ffffff" />
                        <circle cx="130" cy="120" r="6" fill="#ffffff" />

                        <!-- Etykieta wagi -->
                        <rect x="75" y="40" width="50" height="24" rx="12" fill="#1e293b" />
                        <text x="100" y="56" text-anchor="middle" fill="#ffffff" font-size="12" font-weight="bold" id="svg-weight-text">120 kg</text>
                        <!-- Linia wskazująca -->
                        <line x1="100" y1="64" x2="100" y2="80" stroke="#1e293b" stroke-width="2" />
                    </g>
                </svg>
            </div>

            <!-- Karty Danych (Zastępują Tabelę) -->
            <div class="rk-comp-grid">
                <div class="rk-param-card">
                    <h4>Przewodność cieplna (λ)</h4>
                    <div class="rk-param-val" id="val-lambda" style="color: var(--rk-comp-wet);">1,8 W/(m·K)</div>
                    <div class="rk-param-norm">PN-EN 1264-4</div>
                </div>
                <div class="rk-param-card">
                    <h4>Wysokość zabudowy</h4>
                    <div class="rk-param-val" id="val-height">55–65 mm</div>
                    <div class="rk-param-norm">Dane producenta</div>
                </div>
                <div class="rk-param-card">
                    <h4>Bezwładność cieplna</h4>
                    <div class="rk-param-val" id="val-inertia">Wysoka (3-5 h)</div>
                    <div class="rk-param-norm">Badania ITB</div>
                </div>
                <div class="rk-param-card">
                    <h4>Waga systemu</h4>
                    <div class="rk-param-val" id="val-weight">~100–120 kg/m²</div>
                    <div class="rk-param-norm">Obciążenia stropu</div>
                </div>
                <div class="rk-param-card" style="grid-column: 1 / -1;">
                    <h4>Max. Temp. Zasilania</h4>
                    <div class="rk-param-val" id="val-temp" style="color: #ef4444;">55°C (niezalecana)</div>
                    <div class="rk-param-norm">PN-EN 1264</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe bez tagów H
    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('komparator-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 16px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano Renderowanie</div>
                    <div style="color: #cbd5e1; font-size: 14px; line-height: 1.6;">
                        Interaktywna tabela porównawcza jest objęta prawami autorskimi serwisu Projekt-Ogrzewania.pl. Uruchomienie na nieautoryzowanej domenie zostało przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Komparatora
    const tabs = document.querySelectorAll('.rk-comp-tab');
    
    // SVG Elements
    const svgLayer = document.getElementById('svg-floor-layer');
    const svgWeight = document.getElementById('svg-weight-text');
    const svgScale = document.getElementById('svg-scale');

    // DOM Cards
    const valLambda = document.getElementById('val-lambda');
    const valHeight = document.getElementById('val-height');
    const valInertia = document.getElementById('val-inertia');
    const valWeight = document.getElementById('val-weight');
    const valTemp = document.getElementById('val-temp');

    function updateCard(element, htmlContent, color = 'var(--rk-comp-dark)') {
        element.style.opacity = '0';
        setTimeout(() => {
            element.innerHTML = htmlContent;
            element.style.color = color;
            element.style.opacity = '1';
        }, 150);
    }

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            // Reset active state
            tabs.forEach(t => t.classList.remove('active'));
            this.classList.add('active');

            const system = this.getAttribute('data-system');

            if (system === 'wet') {
                // SVG Update (Ciężki/Mokry)
                svgLayer.setAttribute('height', '60');
                svgLayer.setAttribute('y', '80');
                svgLayer.setAttribute('fill', 'var(--rk-comp-wet)');
                svgScale.style.transform = 'rotate(5deg) translateY(5px)';
                
                svgWeight.style.opacity = '0';
                setTimeout(() => {
                    svgWeight.textContent = '120 kg';
                    svgWeight.style.opacity = '1';
                }, 150);

                // Cards Update
                updateCard(valLambda, '1,8 W/(m·K)', 'var(--rk-comp-wet)');
                updateCard(valHeight, '55–65 mm');
                updateCard(valInertia, 'Wysoka (3-5 h)');
                updateCard(valWeight, '~100–120 kg/m²');
                updateCard(valTemp, '55°C (niezalecana)', '#ef4444');
                
            } else {
                // SVG Update (Lekki/Suchy)
                svgLayer.setAttribute('height', '30');
                svgLayer.setAttribute('y', '110'); // Obniżamy żeby rury były w środku
                svgLayer.setAttribute('fill', 'var(--rk-comp-dry)');
                svgScale.style.transform = 'rotate(-5deg) translateY(-5px)';
                
                svgWeight.style.opacity = '0';
                setTimeout(() => {
                    svgWeight.textContent = '30 kg';
                    svgWeight.style.opacity = '1';
                }, 150);

                // Cards Update
                updateCard(valLambda, '0,4–0,5 W/(m·K)', 'var(--rk-comp-dry)');
                updateCard(valHeight, '25–30 mm');
                updateCard(valInertia, 'Niska (30-60 min)');
                updateCard(valWeight, '~25–30 kg/m²');
                updateCard(valTemp, '45°C', 'var(--rk-comp-dry)');
            }
        });
    });

    // Inicjalizacja wizualna szali
    setTimeout(() => {
        svgScale.style.transform = 'rotate(5deg) translateY(5px)';
    }, 100);
});
</script>



<style>
:root {
    --rk-algo-dark: #0f172a;
    --rk-algo-brand: #0284c7;
    --rk-algo-brand-light: #e0f2fe;
    --rk-algo-accent: #0ea5e9;
    --rk-algo-blueprint: #1e293b; /* Tło projektu inżynierskiego */
    --rk-algo-line: #38bdf8; /* Kreska na projekcie */
    --rk-algo-text: #475569;
    --rk-algo-border: #cbd5e1;
    --rk-algo-bg: #ffffff;
}

.rk-algo-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-algo-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Część Tekstowa - Algorytm */
.rk-algo-content {
    padding: 45px 50px 20px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-algo-border);
}

.rk-algo-content h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-algo-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-algo-desc {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-algo-text);
    margin: 0 0 25px 0;
}

.rk-algo-desc a {
    color: var(--rk-algo-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-algo-desc a:hover {
    background: var(--rk-algo-brand-light);
    border-color: var(--rk-algo-brand);
}

/* Stylizowane kroki algorytmu */
.rk-algo-steps {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
    margin-bottom: 25px;
}

.rk-step-card {
    background: #ffffff;
    border: 1px solid var(--rk-algo-border);
    border-radius: 12px;
    padding: 16px 20px;
    position: relative;
    padding-left: 55px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    transition: transform 0.3s, border-color 0.3s;
}

.rk-step-card:hover {
    transform: translateY(-2px);
    border-color: var(--rk-algo-accent);
}

.rk-step-num {
    position: absolute;
    left: 15px;
    top: 15px;
    width: 28px;
    height: 28px;
    background: var(--rk-algo-brand-light);
    color: var(--rk-algo-brand);
    font-weight: 900;
    font-size: 14px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-step-card h4 {
    margin: 0 0 5px 0;
    font-size: 14px;
    color: var(--rk-algo-dark);
    font-weight: 800;
}

.rk-step-card p {
    margin: 0;
    font-size: 12.5px;
    color: var(--rk-algo-text);
    line-height: 1.5;
}

.rk-math {
    display: inline-block;
    background: #f1f5f9;
    padding: 2px 6px;
    border-radius: 4px;
    font-family: 'Courier New', Courier, monospace;
    font-weight: 600;
    color: var(--rk-algo-dark);
    border: 1px solid #e2e8f0;
}

/* Sekcja Interaktywna - Blueprint */
.rk-algo-interactive {
    padding: 0;
    display: grid;
    grid-template-columns: 320px 1fr;
}

/* Panel Kontrolny */
.rk-controls-panel {
    background: #f8fafc;
    padding: 35px 30px;
    border-right: 1px solid var(--rk-algo-border);
}

.rk-controls-panel h3 {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-algo-dark);
    margin: 0 0 25px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-control-group {
    margin-bottom: 25px;
}

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

.rk-control-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-algo-text);
    text-transform: uppercase;
}

.rk-control-value {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-algo-brand);
}

.rk-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 6px;
    border-radius: 3px;
    background: #cbd5e1;
    outline: none;
}

.rk-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-algo-brand);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.15);
    transition: transform 0.1s;
}

.rk-slider::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

/* Wyniki Obliczeń w panelu */
.rk-result-box {
    background: #ffffff;
    border: 1px solid var(--rk-algo-border);
    border-radius: 12px;
    padding: 15px;
    margin-top: 30px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-result-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}
.rk-result-item:last-child { margin-bottom: 0; padding-top: 10px; border-top: 1px dashed var(--rk-algo-border); }

.rk-result-title { font-size: 12px; color: var(--rk-algo-text); font-weight: 700; }
.rk-result-val { font-size: 18px; font-weight: 900; color: var(--rk-algo-dark); }
.rk-result-val.highlight { color: var(--rk-algo-brand); font-size: 22px; }

/* SVG Blueprint */
.rk-blueprint-panel {
    background: var(--rk-algo-blueprint);
    position: relative;
    padding: 30px;
    display: flex;
    justify-content: center;
    align-items: center;
    background-image: 
        linear-gradient(rgba(255,255,255,0.05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,0.05) 1px, transparent 1px);
    background-size: 20px 20px;
}

.rk-svg-blueprint {
    width: 100%;
    max-width: 350px;
    height: auto;
    filter: drop-shadow(0 10px 15px rgba(0,0,0,0.3));
}

@keyframes drawPipe {
    to { stroke-dashoffset: 0; }
}

.blueprint-text {
    fill: #94a3b8;
    font-family: monospace;
    font-size: 10px;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-algo-content { padding: 30px 25px; }
    .rk-algo-steps { grid-template-columns: 1fr; }
    .rk-algo-interactive { grid-template-columns: 1fr; }
    .rk-controls-panel { border-right: none; border-bottom: 1px solid var(--rk-algo-border); }
    .rk-blueprint-panel { padding: 40px 20px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Kalkulator algorytmu doboru rozstawu rur w domu pasywnym",
    "description": "Profesjonalny 6-etapowy algorytm obliczania gęstości strumienia cieplnego (q) i doboru rozstawu rur podłogowych na podstawie normy PN-EN 12831.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-algorytm",
    "name": "Zmienne Obliczeniowe Algorytmu Doboru Rozstawu Rur",
    "description": "Zestawienie zmiennych fizycznych wykorzystywanych w procesie projektowania instalacji płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne W",
      "gęstość strumienia cieplnego q",
      "temperatura zasilania T_z",
      "rozstaw rur dobór",
      "algorytm projektowania ogrzewania"
    ],
    "measurementTechnique": "Algorytm oparty o wzór Q = q * F_g oraz wytyczne strumienia z normy PN-EN 1264 z zachowaniem optymalnej różnicy temperatur Delta T = 5K.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Wskazanie standardu izolacji budynku q (W/m2).",
        "Krok 2: Wskazanie powierzchni grzewczej pomieszczenia.",
        "Krok 3: Obliczenie całkowitej mocy projektowej (Q_obl).",
        "Krok 4: Wyznaczenie rozstawu (b) na podstawie gęstości strumienia cieplnego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-algorytm",
    "name": "Interaktywny Symulator Projektowy (Blueprint)",
    "description": "Aplikacja webowa symulująca pracę inżyniera. Po wprowadzeniu standardu energetycznego i powierzchni (m2), system wylicza moc (W) i wykreśla układ pętli grzewczych na wirtualnym planie pokoju.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript, SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-algo-container" id="algorytm-app">
    
    <div class="rk-algo-content">
        <h2>Kalkulator algorytmu doboru rozstawu rur</h2>
        <p class="rk-algo-desc">
            Aby poprawnie zaprojektować instalację w domu pasywnym, nie możesz opierać się na intuicji. Podążaj za poniższym ścisłym algorytmem, który stosuję w moich projektach, bazując na wytycznych normatywnych oraz <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">charakterystyce zasilania pomp ciepła</a>.
        </p>
        
        <div class="rk-algo-steps">
            <div class="rk-step-card">
                <div class="rk-step-num">1</div>
                <h4>Zapotrzebowanie (q)</h4>
                <p>Wyznacz standard izolacji budynku <span class="rk-math">q [W/m²]</span> na podstawie normy <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">PN-EN 12831</a>. Dla domów pasywnych to zazwyczaj 10-15 W/m².</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">2</div>
                <h4>Obciążenie całkowite (Q_obl)</h4>
                <p>Pomnóż wskaźnik przez powierzchnię grzejną: <span class="rk-math">Q = q · F_g</span>. Wynik podajemy w Watach [W].</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">3</div>
                <h4>Różnica temperatur (Delta T)</h4>
                <p>Przyjmij różnicę między zasilaniem a powrotem. Dla pomp ciepła optymalnie <span class="rk-math">Delta T = 5K</span>.</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">4</div>
                <h4>Średnia temp. wody (t_m)</h4>
                <p>Oblicz na wzorze: <span class="rk-math">t_m = T_z - (Delta T / 2)</span>, gdzie T_z to temp. zasilania.</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">5</div>
                <h4>Weryfikacja strumienia</h4>
                <p>Skorzystaj ze wzoru <span class="rk-math">q = B · a_i · Delta t_ln</span> sprawdzając współczynnik przejmowania ciepła.</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">6</div>
                <h4>Dobór rozstawu (b)</h4>
                <p>Na podstawie <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">oporu cieplnego okładziny</a> (np. R = 0,02 dla płytek) i wartości <i>q</i>, dobierz rozstaw rur <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">z katalogu</a>.</p>
            </div>
        </div>
    </div>

    <div class="rk-algo-interactive">
        <!-- Lewy Panel Kontrolny -->
        <div class="rk-controls-panel">
            <h3>Wprowadź dane</h3>
            
            <div class="rk-control-group">
                <div class="rk-control-header">
                    <span class="rk-control-label">Standard budynku (q)</span>
                    <span class="rk-control-value"><span id="val-in-q-unit">15</span> W/m²</span>
                </div>
                <input type="range" min="10" max="60" step="1" value="15" class="rk-slider" id="slider-q-unit" aria-label="Wskaźnik zapotrzebowania cieplnego budynku">
            </div>

            <div class="rk-control-group">
                <div class="rk-control-header">
                    <span class="rk-control-label">Powierzchnia (F_g)</span>
                    <span class="rk-control-value"><span id="val-in-area">20</span> m²</span>
                </div>
                <input type="range" min="10" max="50" step="1" value="20" class="rk-slider" id="slider-area" aria-label="Powierzchnia pomieszczenia">
            </div>

            <div class="rk-result-box">
                <div class="rk-result-item">
                    <span class="rk-result-title">Delta T (złożenie):</span>
                    <span class="rk-result-val">5K</span>
                </div>
                <div class="rk-result-item">
                    <span class="rk-result-title">Całkowita moc (Q_obl):</span>
                    <span class="rk-result-val"><span id="out-q-total">300</span> W</span>
                </div>
                <div class="rk-result-item">
                    <span class="rk-result-title">Sugerowany rozstaw:</span>
                    <span class="rk-result-val highlight" id="out-spacing">co 20 cm</span>
                </div>
            </div>
        </div>

        <!-- Prawy Panel SVG Blueprint -->
        <div class="rk-blueprint-panel">
            <svg class="rk-svg-blueprint" viewBox="0 0 300 300" id="svg-blueprint">
                <!-- Zarys pokoju z wymiarami -->
                <rect x="30" y="30" width="240" height="240" fill="none" stroke="#475569" stroke-width="3"/>
                <text x="150" y="20" class="blueprint-text" text-anchor="middle">WYMIAR: <tspan id="svg-text-area">20</tspan> m2</text>
                
                <!-- Grupa na dynamiczne rysowanie rur -->
                <g id="svg-pipe-layer" fill="none" stroke="var(--rk-algo-line)" stroke-width="4" stroke-linejoin="round" stroke-linecap="round">
                    <!-- Rury wygeneruje JS -->
                </g>

                <!-- Legenda w rogu -->
                <rect x="160" y="230" width="100" height="30" fill="rgba(15,23,42,0.8)" rx="4"/>
                <text x="210" y="249" class="blueprint-text" text-anchor="middle" fill="#38bdf8" font-weight="bold">Q = <tspan id="svg-text-q-total">300</tspan> W</text>
            </svg>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('algorytm-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #38bdf8; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #38bdf8;">[ SYSTEM BLOCKED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        ERROR: Unauthorized Domain Execution.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Moduł "Blueprint Algorithm" jest własnością intelektualną serwisu Projekt-Ogrzewania.pl.<br>Wykonanie skryptów zostało przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Kalkulatora i Rysowania
    const sliderQUnit = document.getElementById('slider-q-unit');
    const sliderArea = document.getElementById('slider-area');
    
    const valInQUnit = document.getElementById('val-in-q-unit');
    const valInArea = document.getElementById('val-in-area');
    
    const outQTotal = document.getElementById('out-q-total');
    const outSpacing = document.getElementById('out-spacing');
    
    const svgLayer = document.getElementById('svg-pipe-layer');
    const svgTextArea = document.getElementById('svg-text-area');
    const svgTextQTotal = document.getElementById('svg-text-q-total');

    // Funkcja generująca ścieżkę meandrową dla SVG
    // density = ilość pętli w pionie
    function generateMeanderPath(density) {
        const startX = 50;
        const startY = 50;
        const width = 200;
        const height = 200;
        const step = height / density;
        
        let path = `M ${startX} ${startY}`;
        
        for(let i=0; i<density; i++) {
            const currentY = startY + (i * step);
            // Kreska w prawo lub w lewo
            if(i % 2 === 0) {
                path += ` L ${startX + width} ${currentY}`;
                if(i < density -1) path += ` L ${startX + width} ${currentY + step}`;
            } else {
                path += ` L ${startX} ${currentY}`;
                if(i < density -1) path += ` L ${startX} ${currentY + step}`;
            }
        }
        return path;
    }

    function updateBlueprint() {
        const qUnit = parseInt(sliderQUnit.value);
        const area = parseInt(sliderArea.value);
        
        // Aktualizacja inputów DOM
        valInQUnit.textContent = qUnit;
        valInArea.textContent = area;
        svgTextArea.textContent = area;

        // Obliczenie Całkowitej Mocy Q = q * F_g
        const qTotal = qUnit * area;
        outQTotal.textContent = qTotal;
        svgTextQTotal.textContent = qTotal;

        // Logika doboru rozstawu uzależniona od standardu budynku (q)
        let spacingText = "";
        let pipeLines = 5;

        if (qUnit <= 18) {
            spacingText = "co 20 cm";
            pipeLines = 6;
            outSpacing.style.color = "var(--rk-algo-brand)";
        } else if (qUnit > 18 && qUnit <= 35) {
            spacingText = "co 15 cm";
            pipeLines = 10;
            outSpacing.style.color = "#8b5cf6"; // Fiolet
        } else {
            spacingText = "co 10 cm";
            pipeLines = 16;
            outSpacing.style.color = "#ef4444"; // Czerwony - gęsty rozstaw
        }

        outSpacing.textContent = spacingText;

        // Rysowanie animowanej ścieżki SVG z resetem animacji
        const newPath = generateMeanderPath(pipeLines);
        
        // Dodanie stylu inline wewnątrz SVG z wymuszeniem dłuższego dasharray chroni przed urywaniem gęstych ścieżek
        svgLayer.innerHTML = `<path d="${newPath}" stroke-dasharray="6000" stroke-dashoffset="6000" style="animation: drawPipe 2s ease-out forwards;"/>`;
    }

    // Nasłuchiwacze
    sliderQUnit.addEventListener('input', updateBlueprint);
    sliderArea.addEventListener('input', updateBlueprint);

    // Init
    updateBlueprint();
});
</script>



<style>
:root {
    --rk-err-dark: #0f172a;
    --rk-err-red: #ef4444;       /* Kolor awarii */
    --rk-err-red-bg: #fef2f2;
    --rk-err-warn: #f59e0b;      /* Ostrzeżenie / Ciepło */
    --rk-err-cold: #3b82f6;      /* Mostki cieplne */
    --rk-err-border: #cbd5e1;
    --rk-err-text: #475569;
    --rk-err-bg: #ffffff;
    --rk-err-panel: #f8fafc;
}

.rk-err-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, 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 #fca5a5;
    overflow: hidden;
}

/* Sekcja Treści */
.rk-err-content {
    padding: 45px 50px 25px;
    background: linear-gradient(135deg, #fef2f2 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-err-border);
}

.rk-err-content h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-err-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-err-desc {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-err-text);
    margin: 0;
}

.rk-err-desc a {
    color: var(--rk-err-red);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #fecaca;
    transition: all 0.3s;
}

.rk-err-desc a:hover {
    background: var(--rk-err-red-bg);
    border-color: var(--rk-err-red);
}

/* Interaktywny Skaner Błędów */
.rk-err-interactive {
    display: grid;
    grid-template-columns: 350px 1fr;
    background: var(--rk-err-bg);
}

/* Menu Błędów (Lewy panel) */
.rk-err-menu {
    background: var(--rk-err-panel);
    padding: 30px;
    border-right: 1px solid var(--rk-err-border);
}

.rk-err-menu h3 {
    font-size: 14px;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1px;
    margin: 0 0 20px 0;
    font-weight: 800;
}

.rk-err-btn {
    display: flex;
    align-items: flex-start;
    gap: 15px;
    width: 100%;
    background: #ffffff;
    border: 1px solid var(--rk-err-border);
    padding: 16px;
    border-radius: 12px;
    margin-bottom: 12px;
    cursor: pointer;
    text-align: left;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-err-btn:hover {
    border-color: #fca5a5;
    box-shadow: 0 4px 6px rgba(239, 68, 68, 0.05);
}

.rk-err-btn.active {
    background: var(--rk-err-red-bg);
    border-color: var(--rk-err-red);
    box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);
}

.rk-err-num {
    width: 28px;
    height: 28px;
    flex-shrink: 0;
    background: #e2e8f0;
    color: #64748b;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 900;
    font-size: 14px;
    transition: all 0.3s;
}

.rk-err-btn.active .rk-err-num {
    background: var(--rk-err-red);
    color: #ffffff;
}

.rk-err-title {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-err-dark);
    margin: 0;
    line-height: 1.4;
}

/* Prawy Panel - Diagnoza i SEO Tekst */
.rk-err-dashboard {
    padding: 30px;
    display: flex;
    flex-direction: column;
}

.rk-diag-card {
    background: #ffffff;
    border-radius: 16px;
    padding: 30px;
    border: 1px solid var(--rk-err-red);
    box-shadow: 0 10px 15px -3px rgba(239, 68, 68, 0.1);
    height: 100%;
    display: flex;
    flex-direction: column;
}

.rk-diag-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 1px solid #f1f5f9;
}

.rk-diag-tag {
    background: var(--rk-err-red);
    color: #ffffff;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-diag-cost {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-err-dark);
}

.rk-diag-text {
    font-size: 16px;
    color: var(--rk-err-dark);
    font-weight: 700;
    line-height: 1.6;
    margin: 0 0 20px 0;
}

/* Nowa sekcja pod długi ogon SEO */
.rk-diag-seo-box {
    background: #f8fafc;
    border-radius: 12px;
    padding: 20px;
    border: 1px solid var(--rk-err-border);
    flex-grow: 1;
}

.rk-diag-subtitle {
    font-size: 13px;
    text-transform: uppercase;
    color: #64748b;
    font-weight: 800;
    letter-spacing: 0.5px;
    margin: 0 0 10px 0;
}

.rk-diag-seo-text {
    font-size: 14.5px;
    color: var(--rk-err-text);
    line-height: 1.7;
    margin: 0;
}

.rk-diag-seo-text strong {
    color: var(--rk-err-dark);
}

/* Ochrona przed skokami podczas animacji JS */
.anim-wrapper {
    transition: opacity 0.3s ease;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-err-content { padding: 30px 25px; }
    .rk-err-interactive { grid-template-columns: 1fr; }
    .rk-err-menu { border-right: none; border-bottom: 1px solid var(--rk-err-border); padding: 25px; }
    .rk-err-dashboard { padding: 25px; }
    .rk-diag-header { flex-direction: column; align-items: flex-start; gap: 10px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#article-bledy-pasywne",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/"
    },
    "headline": "Najczęstsze błędy w projektowaniu ogrzewania dla domów pasywnych",
    "description": "Zestawienie 6 kosztownych błędów w instalacjach płaszczyznowych: przewymiarowanie pomp ciepła, brak projektów hydraulicznych, mostki termiczne, błędna krzywa grzewcza, zła izolacja na gruncie i niewłaściwe panele.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#dataset-bledy",
    "name": "Szczegółowa Analiza 6 Krytycznych Błędów Projektowych",
    "description": "Baza danych analizująca skutki finansowe i termodynamiczne w przypadku odstępstw od normy projektowej w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jak uniknąć taktowania pompy ciepła",
      "przewymiarowanie ogrzewania podłogowego skutki",
      "brak projektu podłogówki konsekwencje",
      "jak poprawnie wykonać izolację brzegową dylatację",
      "za wysoka temperatura na piecu do podłogówki",
      "ile styropianu pod ogrzewanie podłogowe na gruncie",
      "jakie panele na ogrzewanie podłogowe w domu pasywnym"
    ],
    "measurementTechnique": "Analiza awaryjności systemów hydraulicznych (szumy, taktowanie sprężarki) oraz termowizyjna detekcja strat ciepła na dylatacjach brzegowych i posadzkach na gruncie.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Błąd 1: Pompa 8 kW zamiast 3 kW. Skutek: Taktowanie i zniszczenie sprężarki.",
        "Błąd 2: Układanie rur co 10 cm na oko. Skutek: Brak możliwości rotametrowania i szumy w instalacji.",
        "Błąd 3: Brak dylatacji brzegowej. Skutek: Liniowe mostki termiczne i utrata 15-20% energii.",
        "Błąd 4: Krzywa grzewcza 35-40°C. Skutek: Ekstremalne przegrzewanie i dyskomfort termiczny.",
        "Błąd 5: Zbyt cienki styropian na gruncie (np. 10 cm). Skutek: Ucieczka energii do gruntu.",
        "Błąd 6: Panele o wysokim oporze cieplnym. Skutek: Blokada termiczna i konieczność podnoszenia zasilania pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#webapp-bledy",
    "name": "Wizualizator Awarii i Błędów (Karta Diagnostyczna)",
    "description": "Interaktywna aplikacja diagnostyczna szczegółowo analizująca skutki 6 najczęstszych błędów instalacyjnych w domach pasywnych wraz z zaleceniami optymalizacyjnymi długiego ogona.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-err-container" id="error-scanner-app">
    
    <div class="rk-err-content">
        <h2>Najczęstsze błędy w projektowaniu dla domów pasywnych</h2>
        <p class="rk-err-desc">
            Błędy w standardzie pasywnym są bezlitośnie kosztowne, ponieważ tak zaizolowany budynek nie "wybacza" nadmiaru energii. Od <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">braku dokumentacji technicznej</a> po zły dobór mocy źródła ciepła – poznaj sześć pułapek, które mogą zrujnować Twoją inwestycję i komfort życia.
        </p>
    </div>

    <div class="rk-err-interactive">
        
        <!-- Panel Wyboru Błędów -->
        <div class="rk-err-menu">
            <h3>Skaner Diagnostyczny</h3>
            
            <button class="rk-err-btn active" data-err="1">
                <div class="rk-err-num">1</div>
                <div class="rk-err-title">Przewymiarowanie pompy ciepła</div>
            </button>
            
            <button class="rk-err-btn" data-err="2">
                <div class="rk-err-num">2</div>
                <div class="rk-err-title">Brak projektu hydraulicznego</div>
            </button>
            
            <button class="rk-err-btn" data-err="3">
                <div class="rk-err-num">3</div>
                <div class="rk-err-title">Niewłaściwa izolacja krawędziowa</div>
            </button>
            
            <button class="rk-err-btn" data-err="4">
                <div class="rk-err-num">4</div>
                <div class="rk-err-title">Zbyt wysoka temperatura zasilania</div>
            </button>

            <!-- Nowe buttony (Długi Ogon SEO) -->
            <button class="rk-err-btn" data-err="5">
                <div class="rk-err-num">5</div>
                <div class="rk-err-title">Zbyt cienka izolacja na gruncie</div>
            </button>

            <button class="rk-err-btn" data-err="6">
                <div class="rk-err-num">6</div>
                <div class="rk-err-title">Niewłaściwy dobór okładziny podłogowej</div>
            </button>
        </div>

        <!-- Prawy Panel - Zoptymalizowany pod Tekst / SEO -->
        <div class="rk-err-dashboard">
            <div class="rk-diag-card">
                <div class="anim-wrapper" id="diag-wrapper">
                    <div class="rk-diag-header">
                        <div class="rk-diag-tag" id="diag-tag">ZAGROŻENIE AWARIĄ</div>
                        <div class="rk-diag-cost" id="diag-cost">Straty: 15 000 PLN+</div>
                    </div>
                    
                    <p class="rk-diag-text" id="diag-text">
                        Montaż <a href='https://projekt-ogrzewania.pl/pompa-ciepla/' style='color:var(--rk-err-red); text-decoration:underline;'>pompy ciepła</a> o mocy 8 kW w domu potrzebującym zaledwie 3 kW prowadzi do taktowania sprężarki i jej zniszczenia w ciągu 3-4 lat.
                    </p>

                    <div class="rk-diag-seo-box">
                        <h4 class="rk-diag-subtitle">Analiza techniczna i skutki</h4>
                        <p class="rk-diag-seo-text" id="diag-seo-text">
                            Zastanawiasz się <strong>jak uniknąć taktowania pompy ciepła</strong>? Kluczem jest rzetelne przeliczenie OZC. Skutki przewymiarowania pompy ciepła w domu pasywnym są fatalne – urządzenie generuje za dużo energii w zbyt krótkim czasie, co zmusza automatykę do ciągłego odcinania zasilania. Precyzyjny <strong>dobór mocy pompy do OZC</strong> eliminuje ten problem, wydłużając żywotność sprężarki i drastycznie obniżając roczne koszty rachunków za prąd.
                        </p>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('error-scanner-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #ef4444;">[ SYSTEM SECURED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Błąd licencji: Nieautoryzowana domena.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Kod Skanera Błędów Instalacyjnych należy do Projekt-Ogrzewania.pl.<br>Kopiowanie i wykorzystywanie bez zgody jest zabronione.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Baza danych błędów z tekstami pod długi ogon (SEO)
    const errorData = {
        "1": {
            tag: "ZAGROŻENIE AWARIĄ",
            cost: "Koszty: 15 000 PLN+",
            text: "Montaż <a href='https://projekt-ogrzewania.pl/pompa-ciepla/' style='color:var(--rk-err-red); text-decoration:underline;'>pompy ciepła</a> o mocy 8 kW w domu potrzebującym zaledwie 3 kW prowadzi do taktowania sprężarki i jej zniszczenia w ciągu 3-4 lat.",
            seoText: "Zastanawiasz się <strong>jak uniknąć taktowania pompy ciepła</strong>? Kluczem jest rzetelne przeliczenie OZC. Skutki przewymiarowania pompy ciepła w domu pasywnym są fatalne – urządzenie generuje za dużo energii w zbyt krótkim czasie, co zmusza automatykę do ciągłego odcinania zasilania. Precyzyjny <strong>dobór mocy pompy do OZC</strong> eliminuje ten problem, wydłużając żywotność sprężarki i drastycznie obniżając roczne koszty rachunków za prąd."
        },
        "2": {
            tag: "BŁĄD HYDRAULICZNY",
            cost: "Szumy i dyskomfort",
            text: "Brak projektu sprawia, że instalatorzy kładą rury \"na oko\" (najczęściej co 10 cm wszędzie). Skutkuje to ogromnymi oporami i brakiem możliwości regulacji na rozdzielaczu.",
            seoText: "Jakie są główne <strong>konsekwencje braku projektu ogrzewania podłogowego</strong>? Inwestorzy często pytają, <strong>dlaczego podłogówka szumi</strong>. Wynika to z faktu, że zbyt gęsty rozstaw rur co 10 cm w małych pomieszczeniach wymusza stosowanie dławienia, a to zaburza hydraulikę całego układu. Brak projektu uniemożliwia wyliczenie oporów, przez co nie wiesz, <strong>jak zrównoważyć przepływy na rotametrach</strong>. Efektem jest przegrzana sypialnia i niedogrzana łazienka."
        },
        "3": {
            tag: "MOSTKI TERMICZNE",
            cost: "Straty energii: 15-20%",
            text: "Brak lub złe wykonanie izolacji brzegowej przy ścianach zewnętrznych w domu pasywnym generuje potężne liniowe mostki termiczne.",
            seoText: "Brak wiedzy o tym, <strong>jak poprawnie wykonać dylatację brzegową</strong> podłogówki, to prosta droga do wyrzucania pieniędzy w błoto. Płyta grzewcza musi pracować pracować swobodnie. Zbyt cienka <strong>pianka brzegowa do podłogówki</strong> sprawia, że wylewka dotyka muru, co tworzy <strong>mostki termiczne przy ścianach zewnętrznych</strong>. Ciepło z posadzki ucieka wprost w fundamenty, drastycznie podnosząc straty energetyczne budynku i niwecząc cały nakład pracy na ocieplenie pasywne."
        },
        "4": {
            tag: "KRYTYCZNE PRZEGRZEWANIE",
            cost: "Dyskomfort termiczny",
            text: "Ustawienie krzywej grzewczej na poziomie typowym dla budynków starszych (np. 35-40°C) powoduje, że podłoga staje się gorąca i nieprzyjemna.",
            seoText: "W budownictwie energooszczędnym <strong>za wysoka temperatura zasilania podłogówki</strong> daje natychmiastowe objawy – podłoga wręcz parzy, a powietrze staje się przesuszone. Kluczowe jest pytanie, <strong>jaka krzywa grzewcza do domu pasywnego</strong> jest odpowiednia? Prawidłowo zaprojektowany system powinien pracować na parametrach nie wyższych niż 28-32°C. Jeśli ignorujemy te wartości, <strong>przegrzewanie pomieszczeń z pompą ciepła</strong> staje się codziennością, a nasza instalacja działa ze zrujnowanym współczynnikiem wydajności COP."
        },
        "5": {
            tag: "STRATY DO GRUNTU",
            cost: "Ciągła ucieczka energii",
            text: "Zastosowanie standardowych 10-15 cm styropianu pod wylewką na gruncie w domu pasywnym powoduje stałą ucieczkę ciepła w dół, zamiast do wnętrza budynku.",
            seoText: "Błędem o nieodwracalnych skutkach na etapie stanu surowego jest ignorowanie tego, <strong>ile styropianu pod ogrzewanie podłogowe na gruncie</strong> należy ułożyć w standardzie energooszczędnym. W domach pasywnych absolutnym minimum jest 20-25 cm izolacji o bardzo niskim współczynniku przewodzenia ciepła. Zbyt cienki <strong>styropian podłogowy EPS 100 lub EPS 200</strong> sprawia, że pompa ciepła zamiast w pełni ogrzewać salon, bezproduktywnie ogrzewa fundamenty i ziemię pod budynkiem. To bezpośrednio przekłada się na wyższe <strong>koszty ogrzewania pompą ciepła zimą</strong>."
        },
        "6": {
            tag: "BLOKADA TERMICZNA",
            cost: "Spadek wydajności układu",
            text: "Położenie grubych paneli z podkładem o wysokim oporze cieplnym w domu pasywnym sprawia, że przy zasilaniu rzędu 30°C ciepło nie przebije się efektywnie do pomieszczenia.",
            seoText: "Wybierając materiały wykończeniowe do salonu czy sypialni, inwestorzy często pytają, <strong>jakie panele na ogrzewanie podłogowe w domu pasywnym</strong> będą najlepsze. Zastosowanie okładziny o łącznym oporze cieplnym powyżej 0,15 (m²·K)/W drastycznie obniża efektywność całego systemu hydraulicznego. Aby zachować niską temperaturę zasilania pompy ciepła (co warunkuje jej najwyższy wskaźnik COP), należy wybierać <strong>panele winylowe SPC na podłogówkę</strong> lub klasyczne płytki ceramiczne. Zbyt gruby, gąbczasty <strong>podkład pod panele na ogrzewanie podłogowe</strong> zadziała jak niechciany izolator, zmuszając pompę do nieekonomicznej pracy na wyższych parametrach i zwiększając zużycie prądu."
        }
    };

    // 3. Logika zmiany treści
    const btns = document.querySelectorAll('.rk-err-btn');
    const diagWrapper = document.getElementById('diag-wrapper');
    const diagTag = document.getElementById('diag-tag');
    const diagCost = document.getElementById('diag-cost');
    const diagText = document.getElementById('diag-text');
    const diagSeoText = document.getElementById('diag-seo-text');

    function updateDashboard(errId) {
        // Płynne zniknięcie sekcji
        diagWrapper.style.opacity = '0';

        setTimeout(() => {
            // Podmiana danych
            const data = errorData[errId];
            diagTag.textContent = data.tag;
            diagCost.textContent = data.cost;
            diagText.innerHTML = data.text;
            diagSeoText.innerHTML = data.seoText;

            // Pojawienie się tekstu
            diagWrapper.style.opacity = '1';
        }, 200);
    }

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Unikaj przeładowania, jeśli kliknięto w ten sam przycisk
            if(this.classList.contains('active')) return;

            // Zmiana stanu przycisków
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // Aktualizacja
            const errId = this.getAttribute('data-err');
            updateDashboard(errId);
        });
    });
});
</script>



<style>
:root {
    --rk-imp-dark: #0f172a;
    --rk-imp-brand: #0284c7;
    --rk-imp-brand-light: #f0f9ff;
    --rk-imp-accent: #38bdf8;
    --rk-imp-warn: #f59e0b;
    --rk-imp-eco: #10b981;
    --rk-imp-red: #ef4444;
    --rk-imp-border: #e2e8f0;
    --rk-imp-text: #475569;
    --rk-imp-bg: #ffffff;
}

.rk-imp-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-imp-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Część Tekstowa / SEO */
.rk-imp-content {
    padding: 45px 50px 30px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-imp-border);
}

.rk-imp-content h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-imp-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-imp-desc {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-imp-text);
    margin: 0 0 15px 0;
}

.rk-imp-desc strong {
    color: var(--rk-imp-dark);
}

.rk-imp-desc a {
    color: var(--rk-imp-brand);
    font-weight: 700;
    text-decoration: none;
    box-shadow: inset 0 -2px 0 #bae6fd;
    transition: all 0.3s;
}

.rk-imp-desc a:hover {
    background: var(--rk-imp-brand-light);
    box-shadow: inset 0 -10px 0 #bae6fd;
}

.rk-imp-grid-text {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 25px;
    margin-top: 30px;
}

.rk-imp-box {
    background: #f8fafc;
    border: 1px solid var(--rk-imp-border);
    padding: 20px;
    border-radius: 12px;
}

.rk-imp-box h4 {
    margin: 0 0 10px 0;
    color: var(--rk-imp-brand);
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

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

/* Interaktywny Symulator */
.rk-imp-interactive {
    padding: 40px 50px;
    display: grid;
    grid-template-columns: 320px 1fr;
    gap: 40px;
    background: #ffffff;
}

/* Panel Kontrolny */
.rk-imp-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-imp-controls h3 {
    margin: 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-imp-dark);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-ctrl-group {
    background: #f8fafc;
    border: 1px solid var(--rk-imp-border);
    padding: 20px;
    border-radius: 16px;
}

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

.rk-ctrl-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-imp-text);
}

.rk-ctrl-val {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-imp-warn);
}

/* Suwaki i Toggla */
.rk-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #cbd5e1;
    outline: none;
}
.rk-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: #ffffff;
    border: 4px solid var(--rk-imp-warn);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    transition: transform 0.1s;
}
.rk-slider::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Switch Toggle */
.rk-switch-wrap {
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.rk-switch {
    position: relative;
    width: 56px;
    height: 30px;
    background: #cbd5e1;
    border-radius: 30px;
    cursor: pointer;
    transition: background 0.3s;
}
.rk-switch.active { background: var(--rk-imp-warn); }
.rk-switch-knob {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 24px;
    height: 24px;
    background: #fff;
    border-radius: 50%;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
.rk-switch.active .rk-switch-knob { transform: translateX(26px); }

/* Dashboard SVG + Wyniki */
.rk-imp-dashboard {
    display: flex;
    gap: 30px;
}

.rk-svg-room {
    flex: 1;
    background: #f1f5f9;
    border-radius: 16px;
    border: 1px dashed var(--rk-imp-border);
    padding: 20px;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
}

.rk-svg-rotameter {
    width: 100px;
    background: #ffffff;
    border: 1px solid var(--rk-imp-border);
    border-radius: 16px;
    padding: 15px;
    display: flex;
    flex-direction: column;
    align-items: center;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-rota-title {
    font-size: 10px;
    font-weight: 800;
    color: var(--rk-imp-text);
    text-transform: uppercase;
    margin-bottom: 10px;
    text-align: center;
}

/* Animacje SVG */
.anim-person { transition: opacity 0.3s ease; }
.anim-tv { transition: fill 0.3s ease, filter 0.3s ease; }
.anim-heat-glow { transition: opacity 0.3s ease, r 0.3s ease; }
.anim-float { transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); }

/* Kafelki Wynikowe */
.rk-result-metrics {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-top: 20px;
}

.rk-metric-card {
    background: #ffffff;
    border: 1px solid var(--rk-imp-border);
    padding: 15px;
    border-radius: 12px;
}
.rk-metric-card.highlight {
    border-color: var(--rk-imp-eco);
    background: #ecfdf5;
}

.rk-metric-card h5 { margin: 0 0 5px 0; font-size: 11px; color: var(--rk-imp-text); text-transform: uppercase; }
.rk-metric-card .val { font-size: 22px; font-weight: 900; color: var(--rk-imp-dark); }
.rk-metric-card.highlight .val { color: var(--rk-imp-eco); }

/* Mocne CTA */
.rk-imp-cta-box {
    background: var(--rk-imp-dark);
    padding: 45px 50px;
    text-align: center;
}

.rk-imp-cta-box h3 {
    color: #ffffff;
    font-size: 24px;
    font-weight: 900;
    margin: 0 0 15px 0;
}

.rk-imp-cta-box p {
    color: #94a3b8;
    font-size: 16px;
    margin: 0 auto 30px;
    max-width: 600px;
    line-height: 1.6;
}

.rk-btn-massive {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    background: var(--rk-imp-brand);
    color: #ffffff !important;
    padding: 18px 36px;
    border-radius: 14px;
    font-size: 18px;
    font-weight: 800;
    text-decoration: none !important;
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.5);
    transition: all 0.3s;
    border: 2px solid transparent;
}

.rk-btn-massive:hover {
    background: #0369a1;
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(2, 132, 199, 0.6);
    border-color: #7dd3fc;
}

@media (max-width: 768px) {
    .rk-imp-content, .rk-imp-interactive, .rk-imp-cta-box { padding: 30px 25px; }
    .rk-imp-grid-text { grid-template-columns: 1fr; }
    .rk-imp-interactive { grid-template-columns: 1fr; gap: 30px; }
    .rk-imp-dashboard { flex-direction: column; }
    .rk-svg-rotameter { width: 100%; flex-direction: row; justify-content: space-around; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-wplyw",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Jak dom pasywny wpływa na projekt ogrzewania podłogowego i OZC?",
    "description": "Dlaczego wskaźniki W/m2 'z sufitu' niszczą instalację. Analiza zysków bytowych, precyzyjnych przepływomierzy i doboru energooszczędnej pompy obiegowej.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-wplyw",
    "name": "Zestawienie Zysków Bytowych i Oporów Hydraulicznych",
    "description": "Baza danych określająca wpływ aktywności domowników na realne obciążenie cieplne oraz wymagany przepływ czynnika grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie na ciepło dla każdego pomieszczenia",
      "zyski ciepła od nasłonecznienia dom pasywny",
      "precyzyjne przepływomierze podłogówki",
      "kalkulator doboru pompy obiegowej",
      "obliczenia OZC dla podłogówki"
    ],
    "measurementTechnique": "Dynamiczna estymacja spadku zapotrzebowania grzewczego (W) w oparciu o sumowanie zysków od ludzi (100W/osoba) i elektroniki domowej, redukująca wymagany przepływ na rotametrach.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "OZC: W domu pasywnym 3 osoby i telewizor generują ~500W, pokrywając do 50% zapotrzebowania.",
        "Hydraulika: Niskie zapotrzebowanie wymusza rotametry o małym zakresie 0,5–2,5 l/min.",
        "Pompa obiegowa: Konieczność precyzyjnego doboru, aby zużycie prądu P < 20-30 W."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-wplyw",
    "name": "Symulator Bilansu Pasywnego i Hydrauliki",
    "description": "Interaktywne narzędzie wizualizujące, jak zyski ciepła od ludzi i elektroniki automatycznie dławią potrzebę grzewczą podłogi i obniżają przepływ wskaźnika na rotametrze.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript, SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-imp-container" id="impact-simulator-app">
    
    <div class="rk-imp-content">
        <h2>Jak to wpływa na projekt ogrzewania podłogowego?</h2>
        <p class="rk-imp-desc">
            Projektowanie dla domu pasywnego wymusza całkowitą zmianę podejścia do OZC. Nie można posługiwać się wskaźnikami W/m² wyciągniętymi "z sufitu". Projektant musi otrzymać <strong>wyniki obliczeń <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">zapotrzebowania na ciepło dla każdego pomieszczenia</a> z osobna</strong>. W przeciwnym razie system będzie skazany na porażkę.
        </p>

        <div class="rk-imp-grid-text">
            <div class="rk-imp-box">
                <h4>Zyski Bytowe w OZC</h4>
                <p>W <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">obliczeniach OZC</a> musimy uwzględniać zyski od nasłonecznienia i urządzeń. W domu pasywnym 3 osoby i włączony telewizor to już ~500 W darmowej mocy grzewczej, co może pokryć nawet 50% zapotrzebowania w danym momencie!</p>
            </div>
            <div class="rk-imp-box">
                <h4>Precyzja Hydrauliczna</h4>
                <p>Niska moc to mały przepływ. Projektant musi wyliczyć opory tak, aby stosować <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">precyzyjne przepływomierze podłogówki</a> (zakres 0,5–2,5 l/min). Niezbędny jest też ścisły <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulator doboru pompy obiegowej</a>, by jej pobór prądu nie przekraczał 20-30 W.</p>
            </div>
        </div>
    </div>

    <div class="rk-imp-interactive">
        
        <!-- Panel Kontrolny -->
        <div class="rk-imp-controls">
            <h3>Symuluj Zyski Pasywne</h3>
            
            <div class="rk-ctrl-group">
                <div class="rk-ctrl-header">
                    <span class="rk-ctrl-label">Liczba osób w salonie</span>
                    <span class="rk-ctrl-val"><span id="val-people">0</span></span>
                </div>
                <input type="range" min="0" max="4" step="1" value="0" class="rk-slider" id="slider-people">
                <div style="font-size:11px; color:#94a3b8; margin-top:8px;">1 osoba = ~100W zysku</div>
            </div>

            <div class="rk-ctrl-group">
                <div class="rk-ctrl-header">
                    <span class="rk-ctrl-label">Telewizor / Elektronika</span>
                    <span class="rk-ctrl-val" id="val-tv-text" style="color:#94a3b8;">Wyłączone</span>
                </div>
                <div class="rk-switch-wrap">
                    <span style="font-size:12px; color:#64748b;">(~200W zysku)</span>
                    <div class="rk-switch" id="toggle-tv">
                        <div class="rk-switch-knob"></div>
                    </div>
                </div>
            </div>

            <div class="rk-result-metrics">
                <div class="rk-metric-card highlight">
                    <h5>Darmowe Zyski</h5>
                    <div class="val">+<span id="out-gains">0</span> W</div>
                </div>
                <div class="rk-metric-card">
                    <h5>Wymagana Moc Posadzki</h5>
                    <div class="val"><span id="out-power">1000</span> W</div>
                </div>
            </div>
        </div>

        <!-- Dashboard SVG -->
        <div class="rk-imp-dashboard">
            <!-- Pokój SVG -->
            <div class="rk-svg-room">
                <svg viewBox="0 0 200 200" style="width:100%; height:auto;">
                    <!-- Pokój -->
                    <rect x="10" y="10" width="180" height="180" fill="none" stroke="#cbd5e1" stroke-width="4" rx="8"/>
                    <!-- Łuna ciepła -->
                    <circle cx="100" cy="100" r="0" fill="rgba(245, 158, 11, 0.15)" id="svg-heat-glow" class="anim-heat-glow"/>
                    
                    <!-- Telewizor -->
                    <rect x="70" y="20" width="60" height="10" fill="#475569" rx="2"/>
                    <rect x="60" y="30" width="80" height="40" fill="#94a3b8" rx="4" id="svg-tv" class="anim-tv"/>
                    
                    <!-- Ludziki (4 sztuki ukryte domyślnie) -->
                    <g fill="#475569" id="person-1" class="anim-person" opacity="0">
                        <circle cx="50" cy="130" r="10"/>
                        <rect x="40" y="145" width="20" height="30" rx="4"/>
                    </g>
                    <g fill="#475569" id="person-2" class="anim-person" opacity="0">
                        <circle cx="85" cy="140" r="10"/>
                        <rect x="75" y="155" width="20" height="30" rx="4"/>
                    </g>
                    <g fill="#475569" id="person-3" class="anim-person" opacity="0">
                        <circle cx="120" cy="135" r="10"/>
                        <rect x="110" y="150" width="20" height="30" rx="4"/>
                    </g>
                    <g fill="#475569" id="person-4" class="anim-person" opacity="0">
                        <circle cx="155" cy="145" r="10"/>
                        <rect x="145" y="160" width="20" height="30" rx="4"/>
                    </g>
                </svg>
            </div>

            <!-- Rotametr SVG -->
            <div class="rk-svg-rotameter">
                <div class="rk-rota-title">Rotametr<br>(Przepływ)</div>
                <svg viewBox="0 0 60 160" style="height:140px;">
                    <!-- Rurka -->
                    <path d="M 20 20 L 40 20 L 35 140 L 25 140 Z" fill="#f1f5f9" stroke="#94a3b8" stroke-width="2"/>
                    <!-- Skala -->
                    <line x1="15" y1="30" x2="20" y2="30" stroke="#64748b" stroke-width="1.5"/>
                    <line x1="15" y1="60" x2="20" y2="60" stroke="#64748b" stroke-width="1.5"/>
                    <line x1="15" y1="90" x2="20" y2="90" stroke="#64748b" stroke-width="1.5"/>
                    <line x1="15" y1="120" x2="20" y2="120" stroke="#64748b" stroke-width="1.5"/>
                    <text x="5" y="34" font-size="10" fill="#64748b">2.5</text>
                    <text x="5" y="124" font-size="10" fill="#64748b">0.5</text>
                    
                    <!-- Pływak -->
                    <g id="svg-float" class="anim-float" transform="translate(0, 0)">
                        <polygon points="22,30 38,30 35,40 25,40" fill="#ef4444"/>
                    </g>
                </svg>
                <div style="font-size:14px; font-weight:900; color:var(--rk-imp-dark); margin-top:10px;">
                    <span id="out-flow">2.5</span> <span style="font-size:10px;">l/min</span>
                </div>
            </div>
        </div>
    </div>

    <!-- MOCNE CTA -->
    <div class="rk-imp-cta-box">
        <h3>Nie zgaduj. Powierz OZC inżynierom.</h3>
        <p>
            Błędy w obliczeniach zapotrzebowania i hydrauliki kosztują dziesiątki tysięcy złotych po wylaniu posadzki. Wybierz rozwiązanie, które gwarantuje bezpieczeństwo i najwyższy współczynnik COP dla Twojej pompy ciepła.
        </p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-btn-massive">
            ZAMÓW PROFESJONALNY PROJEKT OGRZEWANIA
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
        </a>
    </div>

</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe bez tagów H
    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('impact-simulator-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #ef4444;">[ SYSTEM SECURED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Błąd licencji: Nieautoryzowana domena.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Kod Symulatora Bilansu należy do Projekt-Ogrzewania.pl. Wykonanie przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora
    const sliderPeople = document.getElementById('slider-people');
    const toggleTv = document.getElementById('toggle-tv');
    
    // UI Values
    const valPeople = document.getElementById('val-people');
    const valTvText = document.getElementById('val-tv-text');
    const outGains = document.getElementById('out-gains');
    const outPower = document.getElementById('out-power');
    const outFlow = document.getElementById('out-flow');
    
    // SVG Elements
    const svgTv = document.getElementById('svg-tv');
    const svgHeatGlow = document.getElementById('svg-heat-glow');
    const svgFloat = document.getElementById('svg-float');
    const persons = [
        document.getElementById('person-1'),
        document.getElementById('person-2'),
        document.getElementById('person-3'),
        document.getElementById('person-4')
    ];

    let isTvOn = false;
    const basePower = 1000; // Bazowe zapotrzebowanie salonu W
    const maxFlow = 2.5; // Max l/min
    const minFlow = 0.5; // Min l/min

    function updateSimulation() {
        const peopleCount = parseInt(sliderPeople.value);
        valPeople.textContent = peopleCount;

        // Obliczanie zysków
        const peopleGain = peopleCount * 100; // 100W na osobę
        const tvGain = isTvOn ? 200 : 0; // 200W z TV
        const totalGain = peopleGain + tvGain;

        // Zapotrzebowanie (nie mniej niż 0)
        let reqPower = basePower - totalGain;
        if (reqPower < 0) reqPower = 0;

        outGains.textContent = totalGain;
        outPower.textContent = reqPower;

        // Obliczanie Przepływu (Liniowa interpolacja)
        // Jeśli reqPower = 1000 -> 2.5 l/min
        // Jeśli reqPower = 0 -> 0.0 l/min (ale dla rotametru min to 0.5)
        let flow = (reqPower / basePower) * maxFlow;
        if (flow < minFlow) flow = minFlow;
        outFlow.textContent = flow.toFixed(1);

        // --- Aktualizacja SVG ---
        
        // 1. Ludzie (pojawiają się)
        persons.forEach((p, index) => {
            p.style.opacity = index < peopleCount ? '1' : '0';
            p.style.fill = index < peopleCount ? 'var(--rk-imp-warn)' : '#475569';
        });

        // 2. TV
        if (isTvOn) {
            svgTv.style.fill = '#fde047'; // Jasny ekran
            svgTv.style.filter = 'drop-shadow(0 0 10px rgba(253, 224, 71, 0.8))';
            valTvText.textContent = "Włączone";
            valTvText.style.color = "var(--rk-imp-warn)";
        } else {
            svgTv.style.fill = '#94a3b8'; // Zgaszony
            svgTv.style.filter = 'none';
            valTvText.textContent = "Wyłączone";
            valTvText.style.color = "#94a3b8";
        }

        // 3. Łuna ciepła
        // R zależy od totalGain (max 600W)
        const glowRadius = (totalGain / 600) * 100;
        svgHeatGlow.setAttribute('r', glowRadius);
        svgHeatGlow.style.opacity = glowRadius > 0 ? '1' : '0';

        // 4. Rotametr (Pływak)
        // translateY: 0 to góra (2.5 l/min), 90 to dół (0.5 l/min)
        // Odwrócona proporcja
        const flowPercent = (flow - minFlow) / (maxFlow - minFlow); // 1.0 = max, 0.0 = min
        const floatY = (1 - flowPercent) * 90; // max Y = 90
        svgFloat.style.transform = `translateY(${floatY}px)`;
    }

    // Nasłuchiwacze
    sliderPeople.addEventListener('input', updateSimulation);
    
    toggleTv.addEventListener('click', () => {
        isTvOn = !isTvOn;
        toggleTv.classList.toggle('active', isTvOn);
        updateSimulation();
    });

    // Init
    updateSimulation();
});
</script>



<style>
:root {
    --rk-quote-primary: #0f172a;
    --rk-quote-accent: #0284c7;
    --rk-quote-accent-light: #e0f2fe;
    --rk-quote-danger: #ef4444;
    --rk-quote-passive: #10b981;
    --rk-quote-bg: #f8fafc;
    --rk-quote-border: #e2e8f0;
}

.rk-expert-wrapper {
    max-width: 950px;
    margin: 50px auto 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
}

.rk-expert-header {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin-bottom: 25px;
}

.rk-expert-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-quote-primary);
    margin: 0;
}

.rk-expert-container {
    background: #ffffff;
    border-radius: 24px;
    padding: 35px 40px;
    display: flex;
    gap: 30px;
    align-items: flex-start;
    border: 1px solid var(--rk-quote-border);
    box-shadow: 0 20px 40px -15px rgba(2, 132, 199, 0.1);
    position: relative;
    overflow: hidden;
}

/* Dekoracyjne tło */
.rk-expert-container::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 6px; height: 100%;
    background: linear-gradient(to bottom, var(--rk-quote-accent), #38bdf8);
}

.rk-expert-container::after {
    content: '”';
    position: absolute;
    top: -20px;
    right: 20px;
    font-family: serif;
    font-size: 140px;
    color: var(--rk-quote-bg);
    line-height: 1;
    z-index: 0;
}

/* Animowane zdjęcie */
.rk-expert-photo-wrap {
    flex-shrink: 0;
    width: 110px;
    height: 110px;
    position: relative;
    z-index: 1;
}

.rk-expert-photo-ring {
    position: absolute;
    top: -5px; left: -5px; right: -5px; bottom: -5px;
    border-radius: 50%;
    border: 2px dashed var(--rk-quote-accent);
    animation: spinRing 12s linear infinite;
}

@keyframes spinRing {
    100% { transform: rotate(360deg); }
}

.rk-expert-photo {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    object-position: center top;
    border: 4px solid #ffffff;
    box-shadow: 0 8px 15px rgba(0,0,0,0.1);
    position: relative;
    z-index: 2;
}

.rk-expert-badge-icon {
    position: absolute;
    bottom: -5px;
    right: -5px;
    background: var(--rk-quote-accent);
    color: #ffffff;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.4);
    z-index: 3;
}

/* Treść cytatu */
.rk-expert-content {
    flex-grow: 1;
    position: relative;
    z-index: 1;
}

.rk-expert-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-quote-accent);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 12px;
    background: var(--rk-quote-accent-light);
    padding: 4px 12px;
    border-radius: 20px;
}

.rk-expert-text {
    font-size: 17px;
    line-height: 1.7;
    color: var(--rk-quote-primary);
    font-style: italic;
    margin: 0 0 15px 0;
    font-weight: 500;
}

.rk-expert-text strong {
    color: var(--rk-quote-accent);
    font-weight: 800;
}

.rk-expert-text a {
    color: var(--rk-quote-primary);
    text-decoration: underline;
    text-decoration-color: var(--rk-quote-accent);
    text-underline-offset: 3px;
    font-weight: 700;
    transition: color 0.3s;
}

.rk-expert-text a:hover {
    color: var(--rk-quote-accent);
}

.rk-expert-signature {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: #64748b;
    border-top: 1px solid var(--rk-quote-border);
    padding-top: 15px;
    margin-top: 15px;
}

/* Interaktywny Panel Ukryty */
.rk-expert-interactive {
    margin-top: 20px;
}

.rk-expert-btn {
    background: #ffffff;
    border: 2px solid var(--rk-quote-border);
    color: var(--rk-quote-primary);
    padding: 10px 20px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    transition: all 0.3s ease;
}

.rk-expert-btn:hover {
    border-color: var(--rk-quote-accent);
    color: var(--rk-quote-accent);
    background: var(--rk-quote-accent-light);
}

.rk-expert-btn svg {
    transition: transform 0.3s;
}

.rk-expert-btn.active svg {
    transform: rotate(180deg);
}

.rk-expert-data-panel {
    display: none;
    margin-top: 15px;
    padding: 20px;
    background: var(--rk-quote-bg);
    border-radius: 12px;
    border: 1px dashed var(--rk-quote-border);
    animation: fadeInDown 0.4s ease forwards;
}

.rk-expert-data-panel.active {
    display: grid;
    grid-template-columns: 100px 1fr 1fr 1fr;
    gap: 15px;
    align-items: center;
}

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

.rk-data-svg-box {
    display: flex;
    justify-content: center;
    align-items: center;
}

.rk-data-svg {
    width: 60px;
    height: 60px;
    filter: drop-shadow(0 4px 6px rgba(16, 185, 129, 0.2));
}

.anim-pulse-target {
    transform-origin: center;
    animation: targetPulse 2s infinite alternate ease-in-out;
}

@keyframes targetPulse {
    0% { transform: scale(0.9); opacity: 0.8; stroke: var(--rk-quote-accent); }
    100% { transform: scale(1.1); opacity: 1; stroke: var(--rk-quote-passive); }
}

.rk-data-stat {
    text-align: center;
    background: #ffffff;
    padding: 15px;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    border: 1px solid transparent;
    transition: border-color 0.3s;
}

.rk-data-stat:hover {
    border-color: var(--rk-quote-accent-light);
}

.rk-data-val {
    display: block;
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-quote-accent);
    margin-bottom: 5px;
}

.rk-data-lab {
    font-size: 11px;
    color: #64748b;
    text-transform: uppercase;
    font-weight: 700;
}

@media (max-width: 768px) {
    .rk-expert-container { flex-direction: column; text-align: center; padding: 30px 25px; align-items: center; }
    .rk-expert-header h2 { font-size: 22px; text-align: center; }
    .rk-expert-container::before { width: 100%; height: 6px; }
    .rk-expert-data-panel.active { grid-template-columns: 1fr; }
    .rk-data-svg-box { display: none; /* Hide icon on small mobile to save space */ }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-cytat",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Ekspercki punkt widzenia: Precyzja w standardzie pasywnym",
    "description": "Opinia inżyniera HVAC na temat konsekwencji braku rzetelnych obliczeń OZC i projektowania instalacji ogrzewania podłogowego na oko w budownictwie pasywnym.",
    "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/",
      "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": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Budownictwo pasywne nie wybacza inżynierskiej arogancji. Kopiowanie schematów ze starych domów i układanie rur 'na oko' to absolutna gwarancja przegrzewania pomieszczeń oraz morderczego taktowania pompy ciepła. Jeśli opierasz się na zgadywaniu, zamiast zamówić rzetelny projekt, niszczysz cały sens finansowy energooszczędnej inwestycji.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "Inżynier HVAC & Projektant",
      "url": "https://projekt-ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ],
      "worksFor": {
        "@type": "Organization",
        "name": "Projekt-Ogrzewania.pl"
      }
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-cytat",
    "name": "Krytyczne parametry projektowe dla podłogówki pasywnej",
    "description": "Zestawienie inżynierskich wartości bazowych wymaganych do zachowania stabilności termicznej w budownictwie o ekstremalnie niskim zapotrzebowaniu na energię.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie cieplne domu pasywnego W/m2",
      "skutki braku projektu ogrzewania podłogowego",
      "projekt z obliczeniami OZC a projekt z głowy",
      "taktowanie pompy ciepła w nowym domu",
      "optymalny rozstaw rur 15-20 cm"
    ],
    "measurementTechnique": "Określenie krytycznych limitów mocy i przepływu zapobiegających przegrzewaniu izolowanych brył budynków.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zapotrzebowanie (q): Poniżej 15 W/m2",
        "Rozstaw rur bazowy: Od 15 cm do 20 cm",
        "Temperatura zasilania: Maksymalnie 28 - 32°C"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-cytat",
    "name": "Interaktywny Panel Ekspercki: Parametry Pasywne",
    "description": "Interfejs rozwijany przez użytkownika wyświetlający twarde dane liczbowe wynikające z norm i obliczeń OZC przytoczonych przez inżyniera.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-expert-wrapper" id="rk-expert-quote-app">
    <div class="rk-expert-header">
        <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="var(--rk-quote-accent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
        <h3>Ekspercki punkt widzenia</h3>
    </div>
    
    <div class="rk-expert-container">
        <div class="rk-expert-photo-wrap">
            <div class="rk-expert-photo-ring"></div>
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski, Inżynier HVAC" class="rk-expert-photo" loading="lazy">
            <div class="rk-expert-badge-icon">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            </div>
        </div>
        
        <div class="rk-expert-content">
            <span class="rk-expert-label">
                <svg width="14" height="14" 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>
                Ostrzeżenie przed "Instalatorską Intuicją"
            </span>
            <p class="rk-expert-text">
                "Budownictwo pasywne nie wybacza inżynierskiej arogancji. Kopiowanie schematów ze starych domów i układanie rur w gęstym rozstawie to absolutna gwarancja nieznośnego przegrzewania pomieszczeń oraz morderczego taktowania pompy ciepła. Zastanawiasz się, <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-glowy-vs-projekt-z-obliczeniami-ile-mozesz-stracic-na-bledach/">ile możesz stracić na błędach robiąc projekt z głowy</a>? Jeśli nie opierasz swojego systemu na <a href="https://projekt-ogrzewania.pl/czy-do-ogrzewania-podlogowego-potrzebny-jest-projekt/">rzetelnym projekcie ogrzewania z wyliczeniem OZC</a> do jednego Wata, niszczysz cały finansowy i technologiczny sens energooszczędnej inwestycji."
            </p>
            <span class="rk-expert-signature">— Robert Kucharski, Inżynier HVAC Projekt-Ogrzewania.pl</span>
            
            <div class="rk-expert-interactive">
                <button class="rk-expert-btn" id="toggleDataBtn">
                    Rozwiń parametry krytyczne
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </button>
                
                <div class="rk-expert-data-panel" id="expertDataPanel">
                    <div class="rk-data-svg-box">
                        <svg class="rk-data-svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
                            <circle cx="12" cy="12" r="10" class="anim-pulse-target"></circle>
                            <circle cx="12" cy="12" r="6"></circle>
                            <circle cx="12" cy="12" r="2"></circle>
                        </svg>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val" style="color: var(--rk-quote-passive);">&lt; 15 W/m²</span>
                        <span class="rk-data-lab">Max. Zapotrzebowanie</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val">15 - 20 cm</span>
                        <span class="rk-data-lab">Optymalny Rozstaw</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val" style="color: var(--rk-quote-danger);">32 °C</span>
                        <span class="rk-data-lab">Krytyczne Zasilanie</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #f8fafc; border-radius: 16px; margin-top: 20px; font-family: sans-serif;">
            <p style="font-size: 14px; font-weight: bold; color: #0f172a; margin-top:0;">Parametry graniczne weryfikacji (Robert Kucharski):</p>
            <ul style="font-size: 14px; color: #475569; margin-bottom:0;">
                <li>Zapotrzebowanie na moc: Poniżej 15 W/m²</li>
                <li>Optymalny rozstaw rur: Od 15 cm do 20 cm</li>
                <li>Krytyczna maksymalna temperatura zasilania: 32 °C</li>
            </ul>
        </div>
    </noscript>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi - brak nagłówków H-tagów w alercie)
    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-expert-quote-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fef2f2; color: #dc2626; border-radius: 20px; border: 2px dashed #ef4444;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Blokada bezpieczeństwa</div>
                    <div style="font-size: 14px; color: #7f1d1d;">Cytat inżynierski jest chroniony prawem autorskim serwisu Projekt-Ogrzewania.pl.</div>
                </div>
            `;
            // Usuwamy resztę styli z kontenera by nie zepsuć wyglądu komunikatu
            container.style.borderLeft = 'none';
            container.style.background = 'transparent';
            container.style.boxShadow = 'none';
            return;
        }
    }

    // 2. Interakcja z panelem danych
    const toggleBtn = document.getElementById('toggleDataBtn');
    const dataPanel = document.getElementById('expertDataPanel');

    if (toggleBtn && dataPanel) {
        toggleBtn.addEventListener('click', function() {
            this.classList.toggle('active');
            dataPanel.classList.toggle('active');
            
            if(this.classList.contains('active')) {
                this.innerHTML = `Zwiń parametry krytyczne <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            } else {
                this.innerHTML = `Rozwiń parametry krytyczne <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            }
        });
    }
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-brand: #0284c7;
    --rk-cs-accent: #38bdf8;
    --rk-cs-passive: #10b981; /* Kolor sukcesu/pasywny */
    --rk-cs-standard: #f59e0b; /* Kolor ostrzegawczy/standard */
    --rk-cs-cold: #3b82f6; /* Zima/Móz */
    --rk-cs-bg: #ffffff;
    --rk-cs-panel: #f8fafc;
    --rk-cs-border: #cbd5e1;
    --rk-cs-text: #475569;
}

.rk-cs-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-cs-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.12);
    border: 1px solid #bae6fd;
    overflow: hidden;
    box-sizing: border-box;
}

.rk-cs-wrapper * {
    box-sizing: inherit;
}

/* ================= HEADER I METRYCZKA ================= */
.rk-cs-header {
    background: linear-gradient(135deg, var(--rk-cs-dark) 0%, #1e293b 100%);
    color: #ffffff;
    padding: 45px 50px 35px;
    position: relative;
}

.rk-cs-header::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background: radial-gradient(circle at 90% 10%, rgba(56, 189, 248, 0.15) 0%, transparent 50%);
    pointer-events: none;
}

.rk-cs-badge {
    display: inline-block;
    background: rgba(56, 189, 248, 0.15);
    border: 1px solid rgba(56, 189, 248, 0.3);
    color: var(--rk-cs-accent);
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 11px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
}

.rk-cs-header h2 {
    font-size: 30px;
    font-weight: 900;
    margin: 0 0 30px 0;
    line-height: 1.2;
    letter-spacing: -0.5px;
}

.rk-cs-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.rk-cs-stat-item {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 18px 20px;
    border-radius: 14px;
    backdrop-filter: blur(8px);
    display: flex;
    flex-direction: column;
}

.rk-cs-stat-item span.label {
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 800;
    margin-bottom: 6px;
    letter-spacing: 0.5px;
}

.rk-cs-stat-item span.value {
    font-size: 18px;
    font-weight: 900;
    color: #ffffff;
}

/* ================= OPIS WYZWANIA ================= */
.rk-cs-body {
    padding: 40px 50px 10px;
    background: #ffffff;
}

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

.rk-cs-story a {
    color: var(--rk-cs-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-cs-story a:hover {
    background: #e0f2fe;
    border-color: var(--rk-cs-brand);
}

.rk-cs-author {
    display: inline-flex;
    align-items: center;
    gap: 15px;
    background: #f8fafc;
    border: 1px solid var(--rk-cs-border);
    padding: 15px 25px;
    border-radius: 100px;
    margin-bottom: 30px;
}

.rk-cs-author img {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    object-fit: cover;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}

.rk-cs-author-info p {
    margin: 0;
    font-size: 13px;
    color: var(--rk-cs-text);
    line-height: 1.4;
}

.rk-cs-author-info strong {
    color: var(--rk-cs-dark);
    font-weight: 800;
    display: block;
    font-size: 15px;
}

/* ================= SYMULATOR INTERAKTYWNY ================= */
.rk-cs-interactive {
    padding: 0 50px 45px;
}

.rk-sim-box {
    background: var(--rk-cs-panel);
    border: 1px solid var(--rk-cs-border);
    border-radius: 20px;
    padding: 30px;
}

.rk-sim-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 30px;
    border-bottom: 1px solid #e2e8f0;
    padding-bottom: 20px;
}

.rk-sim-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-cs-dark);
    margin: 0;
}

/* Toggle App Style */
.rk-toggle-app {
    display: flex;
    background: #e2e8f0;
    border-radius: 12px;
    padding: 4px;
    position: relative;
    width: 300px; /* Sztywna szerokość dla stabilności */
}

.rk-toggle-btn {
    flex: 1;
    text-align: center;
    padding: 10px 15px;
    font-size: 12px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    z-index: 2;
    transition: color 0.3s;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    white-space: nowrap; /* Zabezpieczenie przed łamaniem tekstu */
}

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

.rk-toggle-slider {
    position: absolute;
    top: 4px;
    left: 4px;
    height: calc(100% - 8px);
    width: calc(50% - 4px);
    background: var(--rk-cs-passive);
    border-radius: 8px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background 0.4s;
    box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}

/* Dashboard SVG i Wyniki */
.rk-sim-dashboard {
    display: grid;
    grid-template-columns: minmax(240px, 1fr) 1.2fr;
    gap: 25px;
    align-items: stretch;
}

/* SVG Animacje */
.rk-svg-viewport {
    background: #ffffff;
    border: 1px solid var(--rk-cs-border);
    border-radius: 16px;
    padding: 20px;
    position: relative;
    overflow: hidden;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
    display: flex;
    justify-content: center;
    align-items: center;
}

.svg-snow { fill: #bae6fd; animation: snowfall linear infinite; }
.svg-heat-loss { fill: none; stroke-linecap: round; stroke-width: 4; transition: opacity 0.5s, stroke 0.5s; }

/* Stan: Pasywny */
.state-passive .svg-heat-loss { stroke: var(--rk-cs-passive); opacity: 0.2; animation: floatUp 3s infinite ease-in-out; }
.state-passive .svg-wall { stroke: var(--rk-cs-passive); stroke-width: 8; transition: stroke-width 0.5s; }
.state-passive .svg-therm-fill { fill: var(--rk-cs-passive); height: 60px; y: 40; transition: all 0.5s; }

/* Stan: Standard */
.state-standard .svg-heat-loss { stroke: var(--rk-cs-standard); opacity: 1; animation: floatUp 1s infinite ease-in-out; }
.state-standard .svg-wall { stroke: #94a3b8; stroke-width: 4; transition: stroke-width 0.5s; }
.state-standard .svg-therm-fill { fill: var(--rk-cs-standard); height: 90px; y: 10; transition: all 0.5s; }

@keyframes snowfall {
    0% { transform: translateY(-20px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(120px); opacity: 0; }
}

@keyframes floatUp {
    0% { transform: translateY(10px); }
    100% { transform: translateY(-20px); }
}

/* Wyniki (Kafelki) - PANZER CSS (Zabezpieczone przed globalnymi stylami motywu) */
.rk-sim-metrics {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-metric-card {
    background: #ffffff;
    border: 1px solid var(--rk-cs-border);
    padding: 16px 20px;
    border-radius: 14px;
    transition: border-color 0.3s;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    text-align: left;
}

.rk-metric-card h4 {
    margin: 0 0 6px 0;
    font-size: 11px;
    color: var(--rk-cs-text);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    line-height: 1.3;
    word-break: normal;
}

.rk-metric-val {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-cs-dark);
    margin: 0 0 4px 0;
    line-height: 1.1;
    white-space: nowrap; /* Zapobiega łamaniu wartości */
}

.rk-metric-sub {
    font-size: 12px;
    color: #94a3b8;
    font-weight: 600;
    margin: 0;
    line-height: 1.3;
}

.val-highlight { transition: color 0.3s; }
.state-passive .val-highlight { color: var(--rk-cs-passive); }
.state-standard .val-highlight { color: var(--rk-cs-standard); }

/* Responsywność */
@media (max-width: 768px) {
    .rk-cs-header { padding: 35px 25px; }
    .rk-cs-stats { grid-template-columns: 1fr 1fr; }
    .rk-cs-body { padding: 30px 25px 10px; }
    .rk-cs-interactive { padding: 0 25px 35px; }
    .rk-sim-box { padding: 20px; }
    .rk-sim-header { flex-direction: column; gap: 15px; align-items: stretch; text-align: center; }
    .rk-toggle-app { width: 100%; display: flex; }
    .rk-sim-dashboard { grid-template-columns: 1fr; gap: 20px; }
}
@media (max-width: 480px) {
    .rk-sim-metrics { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU"
    },
    "headline": "Case Study: Optymalizacja ogrzewania podłogowego w domu pasywnym (Zakopane)",
    "description": "Inżynieryjna analiza projektu instalacji podłogowej w domu pasywnym w Zakopanem. Zastosowanie pompy ciepła monoblok 3,5 kW, rur PERT i rozstawu 20 cm zaowocowało kosztem 640 PLN rocznie.",
    "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/",
      "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": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU#dataset-casestudy",
    "name": "Wyniki OZC i Koszty Eksploatacji - Dom Pasywny Zakopane 2025",
    "description": "Zestawienie parametrów wejściowych i wyników eksploatacyjnych dla budynku o pow. 162m2 zlokalizowanego w III strefie klimatycznej (-20°C).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "koszty ogrzewania pompą ciepła w górach",
      "projekt podłogówki do domu pasywnego",
      "średnia temperatura zasilania podłogówki",
      "rozstaw rur 20 cm ogrzewanie podłogowe",
      "pompa ciepła monoblok 3.5 kW"
    ],
    "measurementTechnique": "Monitoring rzeczywistego zużycia energii elektrycznej pompy ciepła w sezonie grzewczym 2025/2026 w odniesieniu do projektu OZC 1,94 kW.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zapotrzebowanie na moc (OZC): 1,94 kW przy -20°C na zewnątrz.",
        "System: Pompa ciepła monoblok 3,5 kW, rura PERT/AL/PERT 16x2,0 mm.",
        "Parametry zasilania: Średnia sezonowa temperatura Tz = 27,4°C.",
        "Roczny koszt ogrzewania: 640 PLN."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU#webapp-casestudy",
    "name": "Symulator Efektywności Termicznej (Pasywny vs Standard)",
    "description": "Interaktywny panel zestawiający wizualnie straty ciepła i roczne koszty ogrzewania w ekstremalnych warunkach zimowych dla dwóch standardów budowlanych.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-cs-wrapper" id="case-study-app">
    
    <div class="rk-cs-header">
        <div class="rk-cs-badge">Case Study z placu budowy</div>
        <h2>Inwestycja Stanisława, Zakopane</h2>
        
        <div class="rk-cs-stats">
            <div class="rk-cs-stat-item">
                <span class="label">Termin</span>
                <span class="value">Listopad 2025</span>
            </div>
            <div class="rk-cs-stat-item">
                <span class="label">Lokalizacja</span>
                <span class="value">Strefa III (-20°C)</span>
            </div>
            <div class="rk-cs-stat-item">
                <span class="label">Powierzchnia</span>
                <span class="value">162 m²</span>
            </div>
            <div class="rk-cs-stat-item">
                <span class="label">Wynikowy Koszt</span>
                <span class="value" style="color: var(--rk-cs-accent);">640 PLN / rok</span>
            </div>
        </div>
    </div>

    <div class="rk-cs-body">
        <div class="rk-cs-author">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" loading="lazy">
            <div class="rk-cs-author-info">
                <strong>Robert Kucharski</strong>
                <p>Nadzór Inżynierski HVAC</p>
            </div>
        </div>

        <p class="rk-cs-story">
            W listopadzie 2025 roku zakończyłem nadzór inżynierski nad <a href="https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/">projektem podłogówki do domu pasywnego</a> dla Pana Stanisława w Zakopanem. Wyzwaniem była wymagająca, III strefa klimatyczna. Budynek o powierzchni 162 m² został wykonany w rygorystycznej technologii (ściany U=0,09 W/(m²·K)). Realne zapotrzebowanie na moc grzewczą w najzimniejszym dniu zimy (-20°C) wyniosło zaledwie <strong>1,94 kW</strong> dla całego obiektu.
        </p>
        <p class="rk-cs-story">
            Zastosowaliśmy <a href="https://projekt-ogrzewania.pl/rura-pert-do-ogrzewania-podlogowego/">rurę PERT/AL/PERT</a> 16x2,0 mm w rzadkim, ale tu idealnym <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawie rur 20 cm</a> w strefach bytowych. Zintegrowaliśmy to z automatyką pogodową i <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompą ciepła typu monoblok 3,5 kW</a>. Efekt? <strong>Średnia temperatura zasilania podłogówki</strong> w sezonie wyniosła zaledwie 27,4°C, co zagwarantowało <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/">koszty ogrzewania pompą ciepła w górach</a> na poziomie rewelacyjnych 640 PLN rocznie.
        </p>
    </div>

    <div class="rk-cs-interactive">
        <div class="rk-sim-box state-passive" id="rk-sim-container">
            
            <div class="rk-sim-header">
                <h3 class="rk-sim-title">Symulator Efektywności Termicznej</h3>
                <div class="rk-toggle-app">
                    <div class="rk-toggle-slider" id="rk-toggle-slider"></div>
                    <div class="rk-toggle-btn active" id="btn-passive">Dom Pasywny</div>
                    <div class="rk-toggle-btn" id="btn-standard">Dom Standard</div>
                </div>
            </div>

            <div class="rk-sim-dashboard">
                
                <!-- Wizualizacja SVG (Zima) -->
                <div class="rk-svg-viewport">
                    <svg viewBox="0 0 200 150" style="width:100%; max-width:200px; height:auto;">
                        <!-- Tło / Śnieg (generowany w js) -->
                        <g id="snow-layer"></g>

                        <!-- Budynek -->
                        <path class="svg-wall" d="M 40 130 L 40 70 L 100 30 L 160 70 L 160 130 Z" fill="#f8fafc" stroke-linejoin="round"/>
                        
                        <!-- Rury Grzewcze -->
                        <circle cx="70" cy="120" r="5" fill="#ef4444"/>
                        <circle cx="100" cy="120" r="5" fill="#ef4444"/>
                        <circle cx="130" cy="120" r="5" fill="#ef4444"/>

                        <!-- Uciekające Ciepło -->
                        <path class="svg-heat-loss" d="M 100 80 Q 110 50 100 20"/>
                        <path class="svg-heat-loss" d="M 70 80 Q 80 50 70 20" style="animation-delay: 0.3s;"/>
                        <path class="svg-heat-loss" d="M 130 80 Q 140 50 130 20" style="animation-delay: 0.6s;"/>

                        <!-- Termometr Zewnętrzny (-20C) -->
                        <rect x="10" y="40" width="10" height="60" rx="5" fill="#e2e8f0" stroke="#cbd5e1"/>
                        <rect x="12" y="80" width="6" height="20" rx="3" fill="#3b82f6"/>
                        <text x="15" y="35" font-size="10" font-weight="bold" fill="#3b82f6" text-anchor="middle">-20°C</text>

                        <!-- Termometr Wewnętrzny -->
                        <rect x="175" y="40" width="10" height="60" rx="5" fill="#e2e8f0" stroke="#cbd5e1"/>
                        <rect x="177" y="40" width="6" height="60" rx="3" class="svg-therm-fill"/>
                        <text x="180" y="35" font-size="10" font-weight="bold" fill="#ef4444" text-anchor="middle">21°C</text>
                    </svg>
                </div>

                <!-- Kafelki Wyników z zabezpieczeniem (flex-direction: column) -->
                <div class="rk-sim-metrics">
                    <div class="rk-metric-card">
                        <h4>Moc Projektowa (OZC)</h4>
                        <div class="rk-metric-val val-highlight" id="val-ozc">1.94 kW</div>
                        <div class="rk-metric-sub">Zapotrzebowanie przy -20°C</div>
                    </div>
                    <div class="rk-metric-card">
                        <h4>Śr. Temp. Zasilania</h4>
                        <div class="rk-metric-val val-highlight" id="val-temp">27.4°C</div>
                        <div class="rk-metric-sub">Idealne dla pompy ciepła</div>
                    </div>
                    <div class="rk-metric-card">
                        <h4>Rozstaw Rur PEX/PERT</h4>
                        <div class="rk-metric-val val-highlight" id="val-spacing">co 20 cm</div>
                        <div class="rk-metric-sub">Oszczędność materiału</div>
                    </div>
                    <div class="rk-metric-card">
                        <h4>Roczny Koszt Ogrzewania</h4>
                        <div class="rk-metric-val val-highlight" id="val-cost">640 PLN</div>
                        <div class="rk-metric-sub">W rachunkach za prąd</div>
                    </div>
                </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Domain Lock
    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('case-study-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #ef4444;">[ UNAUTHORIZED ACCESS ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Brak licencji na wyświetlanie zawartości.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Moduł Case Study stanowi własność intelektualną Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Generowanie śniegu w SVG
    const snowLayer = document.getElementById('snow-layer');
    let snowHtml = '';
    for(let i=0; i<15; i++) {
        const cx = Math.random() * 200;
        const delay = Math.random() * 3;
        const dur = 2 + Math.random() * 2;
        const r = 1 + Math.random() * 1.5;
        snowHtml += `<circle cx="${cx}" cy="-10" r="${r}" class="svg-snow" style="animation-delay: ${delay}s; animation-duration: ${dur}s;"/>`;
    }
    snowLayer.innerHTML = snowHtml;

    // 3. Logika Przełącznika
    const btnPassive = document.getElementById('btn-passive');
    const btnStandard = document.getElementById('btn-standard');
    const slider = document.getElementById('rk-toggle-slider');
    const container = document.getElementById('rk-sim-container');

    // Wartości DOM
    const valOzc = document.getElementById('val-ozc');
    const valTemp = document.getElementById('val-temp');
    const valSpacing = document.getElementById('val-spacing');
    const valCost = document.getElementById('val-cost');

    function animateValue(element, start, end, suffix, duration) {
        let startTimestamp = null;
        const step = (timestamp) => {
            if (!startTimestamp) startTimestamp = timestamp;
            const progress = Math.min((timestamp - startTimestamp) / duration, 1);
            const easeProgress = progress * (2 - progress);
            const current = start + (end - start) * easeProgress;
            
            if(Number.isInteger(end)) {
                element.textContent = Math.round(current) + suffix;
            } else {
                element.textContent = current.toFixed(2) + suffix;
            }
            
            if (progress < 1) {
                window.requestAnimationFrame(step);
            }
        };
        window.requestAnimationFrame(step);
    }

    btnPassive.addEventListener('click', () => {
        // UI Update
        btnStandard.classList.remove('active');
        btnPassive.classList.add('active');
        slider.style.transform = 'translateX(0)';
        slider.style.background = 'var(--rk-cs-passive)';
        
        container.classList.remove('state-standard');
        container.classList.add('state-passive');

        // Text & Animations
        valSpacing.textContent = 'co 20 cm';
        animateValue(valOzc, 8.5, 1.94, ' kW', 800);
        animateValue(valTemp, 38.0, 27.4, '°C', 800);
        animateValue(valCost, 3200, 640, ' PLN', 1000);
    });

    btnStandard.addEventListener('click', () => {
        // UI Update
        btnPassive.classList.remove('active');
        btnStandard.classList.add('active');
        slider.style.transform = 'translateX(100%)';
        slider.style.background = 'var(--rk-cs-standard)';
        
        container.classList.remove('state-passive');
        container.classList.add('state-standard');

        // Text & Animations
        valSpacing.textContent = 'co 10 cm';
        animateValue(valOzc, 1.94, 8.5, ' kW', 800);
        animateValue(valTemp, 27.4, 38.0, '°C', 800);
        animateValue(valCost, 640, 3200, ' PLN', 1000);
    });
});
</script>



<style>
:root {
    --rk-faq-dark: #0f172a;
    --rk-faq-brand: #0284c7;
    --rk-faq-brand-light: #f0f9ff;
    --rk-faq-accent: #38bdf8;
    --rk-faq-eco: #10b981;
    --rk-faq-warn: #f59e0b;
    --rk-faq-cold: #3b82f6;
    --rk-faq-border: #e2e8f0;
    --rk-faq-text: #475569;
    --rk-faq-bg: #ffffff;
    --rk-faq-panel: #f8fafc;
}

.rk-faq-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-faq-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(2, 132, 199, 0.1);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Nagłówek Sekcji */
.rk-faq-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, var(--rk-faq-dark) 0%, #1e293b 100%);
    text-align: center;
}

.rk-faq-header h2 {
    font-size: 28px;
    font-weight: 900;
    color: #ffffff;
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-faq-header p {
    font-size: 16px;
    color: #94a3b8;
    max-width: 700px;
    margin: 0 auto;
    line-height: 1.6;
}

/* Interaktywny Akordeon */
.rk-faq-body {
    padding: 40px 45px;
    background: var(--rk-faq-panel);
}

.rk-accordion-item {
    background: #ffffff;
    border: 1px solid var(--rk-faq-border);
    border-radius: 16px;
    margin-bottom: 20px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    overflow: hidden;
    transition: border-color 0.3s, box-shadow 0.3s;
}

.rk-accordion-item.active {
    border-color: var(--rk-faq-brand);
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.15);
}

/* Przycisk Pytania */
.rk-accordion-btn {
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 24px 30px;
    background: transparent;
    border: none;
    cursor: pointer;
    font-family: inherit;
    text-align: left;
}

.rk-accordion-title {
    font-size: 17px;
    font-weight: 800;
    color: var(--rk-faq-dark);
    line-height: 1.4;
    padding-right: 20px;
    transition: color 0.3s;
}

.rk-accordion-item.active .rk-accordion-title {
    color: var(--rk-faq-brand);
}

.rk-accordion-icon {
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--rk-faq-brand-light);
    color: var(--rk-faq-brand);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.rk-accordion-item.active .rk-accordion-icon {
    transform: rotate(135deg);
    background: var(--rk-faq-brand);
    color: #ffffff;
}

/* Rozwijana Treść */
.rk-accordion-content-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s ease-out;
}

.rk-accordion-item.active .rk-accordion-content-wrapper {
    grid-template-rows: 1fr;
}

.rk-accordion-content {
    overflow: hidden;
}

.rk-accordion-inner {
    padding: 0 30px 30px 30px;
    display: grid;
    grid-template-columns: 1fr 140px;
    gap: 30px;
    align-items: center;
    border-top: 1px dashed transparent;
    transition: border-color 0.4s;
}

.rk-accordion-item.active .rk-accordion-inner {
    border-color: var(--rk-faq-border);
    padding-top: 25px;
}

/* Tekst i Linki SEO */
.rk-faq-text {
    font-size: 15.5px;
    line-height: 1.8;
    color: var(--rk-faq-text);
    margin: 0;
}

.rk-faq-text strong {
    color: var(--rk-faq-dark);
}

.rk-faq-text a {
    color: var(--rk-faq-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-faq-text a:hover {
    background: var(--rk-faq-brand-light);
    border-color: var(--rk-faq-brand);
}

/* Mini Infografiki SVG wewnątrz FAQ */
.rk-faq-svg-box {
    width: 100%;
    height: 120px;
    background: #f8fafc;
    border-radius: 12px;
    border: 1px solid var(--rk-faq-border);
    display: flex;
    justify-content: center;
    align-items: center;
}

.rk-faq-svg { width: 80%; height: auto; }

/* Animacje Q1, Q2, Q3 (Istniejące) */
.anim-heat-glow { opacity: 0; transform: translateY(10px); transition: all 0.8s ease; }
.rk-accordion-item.active .anim-heat-glow { opacity: 1; transform: translateY(0); animation: pulseHeat 2s infinite alternate; }

.anim-evoh { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 1s ease-in-out; }
.rk-accordion-item.active .anim-evoh { stroke-dashoffset: 0; }

.anim-panel { transform: translateY(-20px); opacity: 0; transition: all 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); }
.rk-accordion-item.active .anim-panel { transform: translateY(0); opacity: 1; }

/* Animacje Q4, Q5 (Nowe) */
.anim-reku-arrow { opacity: 0; transition: opacity 0.5s; }
.rk-accordion-item.active .anim-reku-arrow { opacity: 1; animation: flowReku 2s infinite linear; }
.anim-flake { transform-origin: center; opacity: 0; transition: opacity 0.5s; }
.rk-accordion-item.active .anim-flake { opacity: 1; animation: spinFlake 4s infinite linear; }

@keyframes pulseHeat {
    0% { filter: drop-shadow(0 -5px 5px rgba(245, 158, 11, 0.2)); }
    100% { filter: drop-shadow(0 -15px 15px rgba(245, 158, 11, 0.6)); }
}
@keyframes flowReku {
    0% { stroke-dashoffset: 20; }
    100% { stroke-dashoffset: 0; }
}
@keyframes spinFlake {
    100% { transform: rotate(360deg); }
}

@media (max-width: 768px) {
    .rk-faq-header, .rk-faq-body { padding: 30px 25px; }
    .rk-accordion-btn { padding: 20px; }
    .rk-accordion-inner { grid-template-columns: 1fr; padding: 0 20px 20px 20px; gap: 20px; }
    .rk-accordion-title { font-size: 15px; }
    .rk-faq-svg-box { height: 100px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Sekcja FAQ – Najczęstsze pytania o podłogówkę w domu pasywnym",
    "description": "Techniczne odpowiedzi eksperta: podłogówka jako jedyne źródło ciepła, rury PEX vs PERT, panele na ogrzewaniu, wpływ rekuperacji oraz chłodzenie płaszczyznowe.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy ogrzewanie podłogowe w domu pasywnym może być jedynym źródłem ciepła?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Absolutnie tak. Kluczem do sukcesu jest profesjonalnie wykonane projektowe obciążenie cieplne (OZC). W domach o ekstremalnie niskim zapotrzebowaniu energetycznym (często poniżej 15 kWh/(m2·rok)), prawidłowo zaprojektowana instalacja ogrzewania płaszczyznowego bez problemu pokryje straty ciepła, nawet gdy temperatura na zewnątrz spada poniżej -20°C."
        }
      },
      {
        "@type": "Question",
        "name": "Jaką rurę do ogrzewania podłogowego wybrać: PEX czy PERT?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "W przypadku domów pasywnych, gdzie zasilanie pompy ciepła oscyluje wokół 28-32°C, rura wielowarstwowa PERT/AL/PERT jest wyborem optymalnym i wystarczającym. Najważniejszym parametrem jest obecność bariery antydyfuzyjnej EVOH zgodnej z normą DIN 4726, która skutecznie blokuje przenikanie tlenu do zładu wody."
        }
      },
      {
        "@type": "Question",
        "name": "Czy można kłaść panele na ogrzewanie podłogowe w domu pasywnym?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Oczywiście, ale wymaga to precyzji projektowej. Całkowity opór cieplny okładziny (paneli wraz z podkładem) nie może przekraczać 0,15 (m2·K)/W. W praktyce najlepiej sprawdzają się cienkie panele winylowe SPC na podłogówkę oraz dedykowane podkłady o dużej gęstości."
        }
      },
      {
        "@type": "Question",
        "name": "Jak wentylacja mechaniczna z rekuperacją współpracuje z podłogówką?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "W budownictwie pasywnym rekuperacja jest niezbędna do prawidłowego działania podłogówki. Eliminując grawitacyjne straty ciepła, drastycznie obniża zapotrzebowanie energetyczne budynku. Pozwala to na obniżenie temperatury zasilania z pompy ciepła, co maksymalizuje współczynnik COP."
        }
      },
      {
        "@type": "Question",
        "name": "Czy ogrzewaniem podłogowym można chłodzić dom pasywny latem?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak, chłodzenie płaszczyznowe przy użyciu rewersyjnej pompy ciepła to świetne rozwiązanie. Wymaga jednak ścisłej kontroli tzw. punktu rosy w ogrzewaniu podłogowym. Automatyka musi dbać o to, by zbyt niska temperatura wody (ok. 18°C) nie wywołała kondensacji wilgoci na posadzce."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-faq",
    "name": "Baza Wiedzy: Parametry Techniczne Podłogówki w Budownictwie Pasywnym",
    "description": "Zestawienie wytycznych instalacyjnych obejmujące ogrzewanie, chłodzenie i współpracę z rekuperatorem.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podłogówka jedyne źródło ciepła zimą",
      "jaką rurę do ogrzewania podłogowego wybrać",
      "bariera antydyfuzyjna EVOH",
      "panele winylowe SPC na podłogówkę",
      "wpływ rekuperacji na ogrzewanie podłogowe",
      "chłodzenie płaszczyznowe podłogówką pompą ciepła",
      "punkt rosy w ogrzewaniu podłogowym"
    ],
    "measurementTechnique": "Weryfikacja parametrów projektowych OZC, wymagań dyfuzyjnych normy DIN 4726, oporu cieplnego R < 0,15 m2K/W oraz kontroli punktu kondensacji pary wodnej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wydajność: Samodzielne pokrycie OZC przy mrozach -20°C.",
        "Technologia rur: PERT vs PEX z warunkiem szczelności tlenowej EVOH.",
        "Rezystancja: Limit izolacyjności podłogi do 0,15 m2K/W.",
        "Efektywność: Obniżenie OZC przez odzysk ciepła z wentylacji.",
        "Chłodzenie: Ochrona okładziny przed wilgocią poprzez kontrolę punktu rosy."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-faq",
    "name": "Interaktywny Przewodnik Techniczny (FAQ HVAC)",
    "description": "Aplikacja webowa typu akordeon, wzbogacona o dynamicznie renderowane grafiki wektorowe SVG, służąca do edukacji inwestorów w zakresie projektowania nowoczesnych instalacji HVAC.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-faq-container" id="faq-interactive-app">
    
    <div class="rk-faq-header">
        <h2>Sekcja FAQ – Najczęstsze pytania inwestorów</h2>
        <p>Wątpliwości na etapie stanu surowego to norma. Zobacz, jak inżynieria HVAC odpowiada na 5 najważniejszych pytań dotyczących standardu pasywnego.</p>
    </div>

    <div class="rk-faq-body">
        
        <!-- Pytanie 1 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Czy ogrzewanie podłogowe w domu pasywnym może być jedynym źródłem ciepła?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            Absolutnie tak. Kluczem do sukcesu jest profesjonalnie wyliczone <strong><a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne (OZC)</a></strong>. W domach o ekstremalnie niskim zapotrzebowaniu energetycznym (często poniżej 15 kWh na m2 rocznie), prawidłowo zaprojektowana <strong>instalacja ogrzewania płaszczyznowego</strong> bez problemu pokryje straty budynku, nawet gdy temperatura na zewnątrz spada poniżej -20°C. Podłogówka eliminuje konieczność montowania dodatkowych grzejników czy mat elektrycznych, co znacząco obniża koszty inwestycyjne.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <path d="M10 80 L 90 80" stroke="#cbd5e1" stroke-width="4" stroke-linecap="round"/>
                                <circle cx="30" cy="70" r="6" fill="#ef4444"/>
                                <circle cx="50" cy="70" r="6" fill="#ef4444"/>
                                <circle cx="70" cy="70" r="6" fill="#ef4444"/>
                                <!-- Animowana łuna ciepła -->
                                <path class="anim-heat-glow" d="M 20 60 Q 50 10 80 60" fill="none" stroke="#f59e0b" stroke-width="4" stroke-linecap="round"/>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 2 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Jaką rurę do ogrzewania podłogowego wybrać: PEX czy PERT?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            W przypadku domów pasywnych, gdzie zasilanie oscyluje wokół 28-32°C, <strong><a href="https://projekt-ogrzewania.pl/rura-pert-do-ogrzewania-podlogowego/">rura wielowarstwowa PERT/AL/PERT</a></strong> jest wyborem optymalnym. Jej największą zaletą jest wysoka elastyczność i łatwość układania gęstych pętli w porównaniu do sztywniejszych rur <strong><a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">PEX/AL/PEX</a></strong>. Najważniejszym parametrem, na który musisz zwrócić uwagę przed zakupem, jest obecność bariery antydyfuzyjnej EVOH. Zgodnie z normą <strong><a href="https://projekt-ogrzewania.pl/norma-din-4726-w-ogrzewaniu-podlogowym/">DIN 4726</a></strong>, warstwa ta skutecznie blokuje przenikanie cząsteczek tlenu do zładu wody, chroniąc pompę ciepła i stalowe rozdzielacze przed korozją.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <!-- Warstwy rury -->
                                <circle cx="50" cy="50" r="30" fill="none" stroke="#cbd5e1" stroke-width="6"/>
                                <circle cx="50" cy="50" r="24" fill="none" stroke="#94a3b8" stroke-width="4"/>
                                <circle cx="50" cy="50" r="20" fill="none" stroke="#10b981" stroke-width="4" class="anim-evoh"/>
                                <circle cx="50" cy="50" r="16" fill="none" stroke="#e2e8f0" stroke-width="4"/>
                                <text x="50" y="54" font-size="10" font-weight="bold" fill="#0f172a" text-anchor="middle">O2 STOP</text>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 3 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Czy można kłaść panele na ogrzewanie podłogowe w domu pasywnym?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            Oczywiście, ale wymaga to ogromnej precyzji projektowej. Zgodnie z inżynierskimi wytycznymi, całkowity <strong><a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">opór cieplny okładziny (R)</a></strong> (czyli suma oporu paneli i podkładu) nie może przekraczać 0,15 (m2·K)/W. W praktyce instalatorskiej najlepiej sprawdzają się cienkie <strong>panele winylowe SPC na podłogówkę</strong> oraz dedykowane podkłady mineralne o wysokiej gęstości. Pamiętaj, że <strong><a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">zastosowanie grubych paneli laminowanych</a></strong> wymusi podniesienie krzywej grzewczej na piecu o około 2 do 3°C względem płytek gresowych.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <!-- Beton z rurą -->
                                <rect x="10" y="70" width="80" height="20" fill="#cbd5e1" rx="2"/>
                                <circle cx="50" cy="80" r="5" fill="#ef4444"/>
                                <!-- Podkład i Panel -->
                                <g class="anim-panel">
                                    <rect x="10" y="55" width="80" height="6" fill="#f59e0b" opacity="0.8"/>
                                    <rect x="10" y="40" width="80" height="10" fill="#8b5cf6" rx="1"/>
                                    <path d="M 50 35 L 50 15 M 45 20 L 50 15 L 55 20" stroke="#8b5cf6" stroke-width="2" fill="none"/>
                                </g>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 4 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Jak wentylacja z rekuperacją współpracuje z podłogówką?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            W budownictwie pasywnym <strong>wentylacja mechaniczna z odzyskiem ciepła (rekuperacja)</strong> jest systemem nierozerwalnie związanym z niskotemperaturowym ogrzewaniem. Eliminując potężne grawitacyjne straty ciepła (tzw. wywiewanie ciepłego powietrza przez komin), rekuperator drastycznie obniża zapotrzebowanie budynku. Pozytywny <strong><a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">wpływ rekuperacji na ogrzewanie podłogowe</a></strong> polega na tym, że instalacja grzewcza może pracować stabilnie na bardzo niskich parametrach zasilania, co bezpośrednio maksymalizuje wydajność (COP) pompy ciepła.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <!-- Wymiennik -->
                                <polygon points="50,20 80,50 50,80 20,50" fill="none" stroke="#94a3b8" stroke-width="3"/>
                                <!-- Przepływ zimnego -> gorącego -->
                                <path class="anim-reku-arrow" d="M 20 50 L 80 50" stroke="#ef4444" stroke-width="4" stroke-linecap="round" stroke-dasharray="5 5"/>
                                <!-- Przepływ zużytego -> zimnego -->
                                <path class="anim-reku-arrow" d="M 50 20 L 50 80" stroke="#3b82f6" stroke-width="4" stroke-linecap="round" stroke-dasharray="5 5"/>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 5 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Czy ogrzewaniem podłogowym można skutecznie chłodzić dom latem?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            Tak, <strong>chłodzenie płaszczyznowe podłogówką</strong> przy użyciu rewersyjnej pompy ciepła to doskonałe, darmowe źródło komfortu na upalne dni. Instalacja tłoczy wtedy w posadzkę wodę o temperaturze około 18-20°C. Głównym wyzwaniem inżynieryjnym jest jednak ominięcie <strong><a href="https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/">punktu rosy w ogrzewaniu podłogowym</a></strong>. Zbyt niska temperatura czynnika doprowadzi do kondensacji i wytrącenia się kropel wody na posadzce. Wymaga to integracji odpowiednich termostatów ściennych z czujnikami wilgotności.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <rect x="10" y="80" width="80" height="10" fill="#cbd5e1" rx="2"/>
                                <circle cx="50" cy="85" r="3" fill="#3b82f6"/> <!-- Zimna woda -->
                                <!-- Płatek śniegu obracający się -->
                                <g class="anim-flake" stroke="#3b82f6" stroke-width="2" stroke-linecap="round">
                                    <line x1="50" y1="20" x2="50" y2="60" />
                                    <line x1="30" y1="40" x2="70" y2="40" />
                                    <line x1="35" y1="25" x2="65" y2="55" />
                                    <line x1="35" y1="55" x2="65" y2="25" />
                                </g>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe bez użycia H-tagów
    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('faq-interactive-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #0284c7; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #0284c7;">[ MODULE LOCKED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Autoryzacja domeny nie powiodła się.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Aplikacja interaktywnego FAQ jest przypisana do licencji Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Akordeonu (Z jednym otwartym na raz)
    const accordionItems = document.querySelectorAll('.rk-accordion-item');

    accordionItems.forEach(item => {
        const btn = item.querySelector('.rk-accordion-btn');
        
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');

            // Zamknij inne
            accordionItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.rk-accordion-btn').setAttribute('aria-expanded', 'false');
            });

            // Przełącz
            if (!isActive) {
                item.classList.add('active');
                btn.setAttribute('aria-expanded', 'true');
            }
        });
    });

    // Otwarcie pierwszego
    if(accordionItems.length > 0) {
        accordionItems[0].classList.add('active');
        accordionItems[0].querySelector('.rk-accordion-btn').setAttribute('aria-expanded', 'true');
    }
});
</script>



<style>
:root {
    --rk-pas-dark: #0f172a;
    --rk-pas-brand: #2563eb;
    --rk-pas-brand-light: #eff6ff;
    --rk-pas-eco: #059669;
    --rk-pas-eco-light: #ecfdf5;
    --rk-pas-warn: #dc2626;
    --rk-pas-warn-light: #fef2f2;
    --rk-pas-text: #334155;
    --rk-pas-border: #cbd5e1;
    --rk-pas-bg: #ffffff;
}

.rk-pas-container {
    max-width: 900px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-pas-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(37, 99, 235, 0.1);
    border: 1px solid #e2e8f0;
    overflow: hidden;
}

/* Nagłówek */
.rk-pas-header {
    background: linear-gradient(145deg, var(--rk-pas-dark) 0%, #1e293b 100%);
    padding: 40px 30px;
    text-align: center;
    color: #fff;
}

.rk-pas-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    color: #f8fafc;
    line-height: 1.3;
}

.rk-pas-quote {
    font-size: 18px;
    font-style: italic;
    color: #94a3b8;
    max-width: 700px;
    margin: 0 auto;
    line-height: 1.6;
}

.rk-pas-quote strong {
    color: #38bdf8;
    font-weight: 700;
}

/* Interfejs Przełącznika */
.rk-pas-interactive {
    padding: 40px 30px;
    background: #f8fafc;
    border-bottom: 1px solid var(--rk-pas-border);
}

.rk-pas-controls {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 20px;
    margin-bottom: 30px;
}

.rk-pas-controls h3 {
    margin: 0;
    font-size: 20px;
    color: var(--rk-pas-dark);
}

/* Toggle Switch w stylu App */
.rk-toggle-wrapper {
    display: flex;
    align-items: center;
    gap: 15px;
    background: #fff;
    padding: 10px 20px;
    border-radius: 99px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
    border: 1px solid var(--rk-pas-border);
}

.rk-toggle-label {
    font-weight: 700;
    font-size: 15px;
    color: #64748b;
    transition: color 0.3s;
}

.rk-toggle-label.active-warn { color: var(--rk-pas-warn); }
.rk-toggle-label.active-eco { color: var(--rk-pas-eco); }

.rk-switch {
    position: relative;
    width: 64px;
    height: 32px;
    background: var(--rk-pas-warn);
    border-radius: 32px;
    cursor: pointer;
    transition: background 0.4s;
}

.rk-switch.pro-mode {
    background: var(--rk-pas-eco);
}

.rk-switch-thumb {
    position: absolute;
    top: 4px;
    left: 4px;
    width: 24px;
    height: 24px;
    background: #fff;
    border-radius: 50%;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

.rk-switch.pro-mode .rk-switch-thumb {
    transform: translateX(32px);
}

/* Wyświetlacz i SVG */
.rk-pas-display {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: center;
    background: #fff;
    padding: 30px;
    border-radius: 16px;
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.05);
}

.rk-svg-stage {
    width: 100%;
    max-width: 250px;
    margin: 0 auto;
    display: block;
}

/* Animacje SVG */
.wave-path {
    fill: none;
    stroke-width: 4;
    stroke-linecap: round;
    transition: stroke 0.5s, transform 0.5s;
}

.state-error .wave-path { stroke: var(--rk-pas-warn); animation: overheat 0.8s infinite alternate; }
.state-pro .wave-path { stroke: var(--rk-pas-eco); animation: stableHeat 3s infinite linear; }

@keyframes overheat {
    0% { transform: translateY(0) scaleY(1); opacity: 0.8; }
    100% { transform: translateY(-10px) scaleY(1.2); opacity: 1; }
}

@keyframes stableHeat {
    0% { transform: translateY(0); opacity: 0.6; }
    50% { transform: translateY(-5px); opacity: 0.9; }
    100% { transform: translateY(0); opacity: 0.6; }
}

.house-outline {
    fill: none;
    stroke: var(--rk-pas-dark);
    stroke-width: 3;
    stroke-linejoin: round;
}

/* Kafelki Danych (Grid) */
.rk-data-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-data-card {
    background: #f8fafc;
    border: 1px solid var(--rk-pas-border);
    padding: 15px;
    border-radius: 12px;
    text-align: center;
    transition: all 0.3s;
}

.rk-data-card h4 {
    margin: 0 0 5px 0;
    font-size: 13px;
    color: #64748b;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-data-card .rk-value {
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-pas-dark);
    margin-bottom: 5px;
}

.rk-data-card p {
    margin: 0;
    font-size: 12px;
    color: var(--rk-pas-text);
}

/* CTA */
.rk-pas-cta {
    padding: 40px 30px;
    text-align: center;
    background: #fff;
}

.rk-pas-cta p {
    font-size: 16px;
    color: var(--rk-pas-text);
    max-width: 650px;
    margin: 0 auto 25px;
    line-height: 1.6;
}

.rk-pas-cta a {
    color: var(--rk-pas-brand);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.rk-btn {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    background: var(--rk-pas-brand);
    color: #ffffff !important; /* Wymuszony biały kolor tekstu i ikony */
    padding: 16px 32px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 16px;
    text-decoration: none !important;
    transition: all 0.3s;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.4);
}

.rk-btn:hover {
    background: #1d4ed8;
    color: #ffffff !important; /* Zabezpieczenie przed zmianą koloru po najechaniu */
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(37, 99, 235, 0.5);
}

@media (max-width: 768px) {
    .rk-pas-display { grid-template-columns: 1fr; text-align: center; }
    .rk-data-grid { grid-template-columns: 1fr; }
    .rk-toggle-wrapper { flex-direction: column; gap: 10px; border-radius: 16px; padding: 15px; }
    .rk-switch { transform: rotate(90deg); margin: 10px 0; }
    .rk-pas-header h2 { font-size: 24px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Podsumowanie: Precyzja to Twój największy zysk w budownictwie pasywnym",
    "description": "Zrozum różnicę między intuicyjnym montażem a precyzyjnym inżynierskim projektem instalacji grzewczej. Optymalizacja rozstawu rur i izolacji EPS 200.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset",
    "name": "Porównanie Parametrów: System Pasywny vs Błędy Wykonawcze",
    "description": "Baza danych przedstawiająca realne skutki przewymiarowania instalacji podłogowej, w tym nadmierne temperatury zasilania i koszty eksploatacyjne.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projekt ogrzewania podłogowego dom pasywny",
      "rozstaw rur 15 cm a 10 cm",
      "grubość styropianu EPS 200",
      "temperatura zasilania pompy ciepła",
      "obliczenia OZC dla podłogówki"
    ],
    "measurementTechnique": "Analiza symulacyjna oparta na normie PN-EN 12831 wykazująca różnice w temperaturze zasilania i stabilności cieplnej podłogi.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rozstaw rur 10 cm: Powoduje nadmiar mocy, przegrzewanie i niepotrzebne koszty rur.",
        "Rozstaw rur 15-20 cm: Wymaga projektu, zapewnia niskie zasilanie (do 32°C) i stabilną pracę pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp",
    "name": "Interaktywny Symulator Komfortu Pasywnego",
    "description": "Narzędzie internetowe demonstrujące wpływ precyzyjnego inżynierskiego rozstawu rur i izolacji na parametry pracy instalacji ogrzewania podłogowego.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-pas-container" id="pasywny-sum-app">
    
    <div class="rk-pas-header">
        <h2>Efektywność wymaga inżynierskiej precyzji</h2>
        <p class="rk-pas-quote">
            W domu pasywnym instalacja grzewcza ma być niemal "niewidoczna" dla zmysłów i portfela. <strong>Zbyt gęsty rozstaw rur i wysoka temperatura zasilania to najszybsza droga do katastrofy termicznej.</strong>
        </p>
    </div>

    <div class="rk-pas-interactive">
        <div class="rk-pas-controls">
            <h3>Sprawdź wpływ projektu na działanie instalacji</h3>
            <div class="rk-toggle-wrapper">
                <span class="rk-toggle-label active-warn" id="lbl-amateur">Wykonawstwo "Na oko"</span>
                <div class="rk-switch" id="pas-toggle">
                    <div class="rk-switch-thumb"></div>
                </div>
                <span class="rk-toggle-label" id="lbl-pro">Projekt Inżynierski (OZC)</span>
            </div>
        </div>

        <div class="rk-pas-display">
            <!-- Animacja SVG -->
            <div class="rk-svg-container state-error" id="svg-state">
                <svg class="rk-svg-stage" viewBox="0 0 200 200">
                    <!-- Podstawa / Wylewka -->
                    <rect x="20" y="160" width="160" height="20" fill="#cbd5e1" rx="4"/>
                    <!-- Rury (dynamiczne wypełnienie w JS) -->
                    <g id="svg-pipes">
                        <circle cx="50" cy="170" r="6" fill="#ef4444"/>
                        <circle cx="80" cy="170" r="6" fill="#ef4444"/>
                        <circle cx="110" cy="170" r="6" fill="#ef4444"/>
                        <circle cx="140" cy="170" r="6" fill="#ef4444"/>
                    </g>
                    <!-- Fale Ciepła -->
                    <path class="wave-path" d="M 50 140 Q 60 100 50 60" />
                    <path class="wave-path" d="M 100 140 Q 110 100 100 60" style="animation-delay: 0.2s" />
                    <path class="wave-path" d="M 150 140 Q 160 100 150 60" style="animation-delay: 0.4s" />
                    <!-- Zarys Domu -->
                    <path class="house-outline" d="M 20 160 L 20 80 L 100 20 L 180 80 L 180 160" />
                </svg>
            </div>

            <!-- Dynamiczne Dane -->
            <div class="rk-data-grid">
                <div class="rk-data-card" id="card-spacing">
                    <h4>Rozstaw Rur</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">co 10 cm</div>
                    <p>Zbędny wydatek na materiał, trudne rotametrowanie.</p>
                </div>
                <div class="rk-data-card" id="card-temp">
                    <h4>Temp. Zasilania</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">> 40°C</div>
                    <p>Spadek COP pompy ciepła, przegrzewanie salonu.</p>
                </div>
                <div class="rk-data-card" id="card-eps">
                    <h4>Izolacja Posadzki</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">EPS 100</div>
                    <p>Niewystarczający opór cieplny do gruntu.</p>
                </div>
                <div class="rk-data-card" id="card-cost">
                    <h4>Koszty Roczne</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">Wyższe o 35%</div>
                    <p>Energia tracona przez niestabilność układu.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-pas-cta">
        <p>
            Decyzja o <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstawie rur co 10 czy 15 cm</a> oraz doborze grubości <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">styropianu EPS podłogowego</a> nie może być dziełem przypadku. W standardzie pasywnym nawet <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">niska temperatura zasilania (rzędu 30-35°C)</a> wymaga idealnego zbilansowania w dokumentacji.
        </p>
        <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/" class="rk-btn">
            ZAMÓW PROJEKT OGRZEWANIA DO DOMU PASYWNEGO
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
        </a>
    </div>

</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft)
    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('pasywny-sum-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 20px; 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: 10px; text-transform: uppercase;">Ochrona Własności Intelektualnej</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 550px; margin: 0 auto; line-height: 1.6;">
                        Kontener interaktywny i warstwa JSON-LD należą do portalu Projekt-Ogrzewania.pl. Uruchomienie skryptu na tej domenie zostało zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Toggle)
    const toggle = document.getElementById('pas-toggle');
    const lblAmateur = document.getElementById('lbl-amateur');
    const lblPro = document.getElementById('lbl-pro');
    const svgState = document.getElementById('svg-state');
    const svgPipes = document.getElementById('svg-pipes');
    
    // Kafelki
    const cardSpacing = document.getElementById('card-spacing');
    const cardTemp = document.getElementById('card-temp');
    const cardEps = document.getElementById('card-eps');
    const cardCost = document.getElementById('card-cost');

    let isPro = false;

    toggle.addEventListener('click', () => {
        isPro = !isPro;
        
        if(isPro) {
            // Styl przełącznika
            toggle.classList.add('pro-mode');
            lblAmateur.classList.remove('active-warn');
            lblPro.classList.add('active-eco');
            
            // Styl SVG
            svgState.classList.remove('state-error');
            svgState.classList.add('state-pro');
            svgPipes.innerHTML = `
                <circle cx="60" cy="170" r="6" fill="#059669"/>
                <circle cx="100" cy="170" r="6" fill="#059669"/>
                <circle cx="140" cy="170" r="6" fill="#059669"/>
            `; // 3 rury zamiast 4 (szerszy rozstaw)

            // Aktualizacja Danych
            updateCard(cardSpacing, 'co 15-20 cm', 'var(--rk-pas-eco)', 'Idealny balans zysków ciepła i oporów.');
            updateCard(cardTemp, '28°C - 32°C', 'var(--rk-pas-eco)', 'Optymalny COP dla pomp ciepła i komfortu.');
            updateCard(cardEps, 'EPS 200', 'var(--rk-pas-eco)', 'Minimalne straty do gruntu (R > 6,0).');
            updateCard(cardCost, 'Zoptymalizowane', 'var(--rk-pas-eco)', 'Grzanie ciągłe, bez zjawiska taktowania sprężarki.');
            
        } else {
            // Styl przełącznika
            toggle.classList.remove('pro-mode');
            lblPro.classList.remove('active-eco');
            lblAmateur.classList.add('active-warn');

            // Styl SVG
            svgState.classList.remove('state-pro');
            svgState.classList.add('state-error');
            svgPipes.innerHTML = `
                <circle cx="50" cy="170" r="6" fill="#ef4444"/>
                <circle cx="80" cy="170" r="6" fill="#ef4444"/>
                <circle cx="110" cy="170" r="6" fill="#ef4444"/>
                <circle cx="140" cy="170" r="6" fill="#ef4444"/>
            `; // 4 rury (gęsty rozstaw)

            // Aktualizacja Danych
            updateCard(cardSpacing, 'co 10 cm', 'var(--rk-pas-warn)', 'Zbędny wydatek na materiał, trudne rotametrowanie.');
            updateCard(cardTemp, '> 40°C', 'var(--rk-pas-warn)', 'Spadek COP pompy ciepła, przegrzewanie salonu.');
            updateCard(cardEps, 'EPS 100', 'var(--rk-pas-warn)', 'Niewystarczający opór cieplny do gruntu.');
            updateCard(cardCost, 'Wyższe o 35%', 'var(--rk-pas-warn)', 'Energia tracona przez niestabilność układu.');
        }
    });

    function updateCard(card, valueText, color, descText) {
        const valElement = card.querySelector('.rk-value');
        const descElement = card.querySelector('p');
        
        valElement.style.opacity = '0';
        descElement.style.opacity = '0';
        
        setTimeout(() => {
            valElement.textContent = valueText;
            valElement.style.color = color;
            descElement.textContent = descText;
            
            valElement.style.opacity = '1';
            descElement.style.opacity = '1';
        }, 150);
    }
});
</script>



<style>
:root {
    --dl-pas-primary: #0f172a;
    --dl-pas-accent: #10b981; /* Szmaragdowa zieleń - Eco/Pasywny */
    --dl-pas-accent-dark: #047857;
    --dl-pas-bg: #f8fafc;
    --dl-pas-border: #e2e8f0;
    --dl-pas-text: #334155;
    --dl-pas-white: #ffffff;
    --dl-pas-muted: #64748b;
}

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

.rk-pas-dl-container * {
    box-sizing: inherit;
}

/* NAGŁÓWEK SEKCI */
.dl-pas-header {
    background: linear-gradient(135deg, var(--dl-pas-primary) 0%, #1e293b 100%);
    padding: 45px 50px;
    color: var(--dl-pas-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    overflow: hidden;
}

/* Subtelny wzór geometryczny w tle nagłówka */
.dl-pas-header::before {
    content: '';
    position: absolute;
    top: -50%; right: -10%;
    width: 300px; height: 300px;
    background: radial-gradient(circle, rgba(16, 185, 129, 0.15) 0%, transparent 70%);
    border-radius: 50%;
    pointer-events: none;
}

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

.dl-pas-badge {
    display: inline-block;
    background: rgba(16, 185, 129, 0.2);
    border: 1px solid rgba(16, 185, 129, 0.4);
    color: #6ee7b7;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 11px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.dl-pas-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 12px 0;
    line-height: 1.2;
    letter-spacing: -0.5px;
}

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

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

.dl-pas-pdf-icon {
    width: 90px;
    height: auto;
    filter: drop-shadow(0 15px 25px rgba(0,0,0,0.4));
    animation: floatPasIcon 3.5s infinite ease-in-out alternate;
}

@keyframes floatPasIcon {
    from { transform: translateY(0) rotate(0deg); }
    to { transform: translateY(-12px) rotate(-3deg); }
}

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

.dl-pas-preview {
    flex: 1;
    background: var(--dl-pas-bg);
    border: 1px solid var(--dl-pas-border);
    border-radius: 16px;
    padding: 12px;
    position: relative;
    cursor: zoom-in;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.4s;
}

.dl-pas-preview:hover {
    transform: scale(1.03) translateY(-5px);
    box-shadow: 0 20px 30px -10px rgba(16, 185, 129, 0.15);
}

.dl-pas-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}

.dl-pas-zoom-hint {
    position: absolute;
    bottom: 25px;
    right: 25px;
    background: rgba(15, 23, 42, 0.85);
    color: white;
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 700;
    backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    gap: 6px;
    pointer-events: none;
}

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

.dl-pas-list {
    list-style: none;
    padding: 0;
    margin: 0 0 35px 0;
}

.dl-pas-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 16px;
    font-size: 15px;
    font-weight: 600;
    color: var(--dl-pas-text);
    line-height: 1.5;
}

.dl-pas-check {
    width: 22px;
    height: 22px;
    color: var(--dl-pas-accent);
    flex-shrink: 0;
    margin-top: 2px;
}

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

.dl-pas-btn:hover {
    background: var(--dl-pas-accent-dark);
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(16, 185, 129, 0.6);
    border-color: #6ee7b7;
}

.dl-pas-btn svg {
    transition: transform 0.3s;
}

.dl-pas-btn:hover svg {
    transform: translateY(3px);
}

/* STOPKA MODUŁU I SEO */
.dl-pas-footer {
    padding: 25px 50px;
    background: var(--dl-pas-bg);
    border-top: 1px solid var(--dl-pas-border);
}

.dl-pas-seo-text {
    font-size: 14px;
    color: var(--dl-pas-muted);
    line-height: 1.6;
    margin: 0 0 15px 0;
}

.dl-pas-seo-text strong {
    color: var(--dl-pas-primary);
}

.dl-pas-footer a {
    color: var(--dl-pas-accent-dark);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px solid transparent;
    transition: border-color 0.3s;
}

.dl-pas-footer a:hover {
    border-color: var(--dl-pas-accent-dark);
}

.dl-pas-copyright {
    font-size: 12px;
    color: #94a3b8;
    text-align: center;
    margin: 0;
    padding-top: 15px;
    border-top: 1px dashed #cbd5e1;
}

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Jak osiągnąć maksymalną efektywność energetyczną? Infografika dla domów pasywnych",
    "description": "Pobierz inżynierski schemat projektowania ogrzewania podłogowego. Dowiedz się, jak połączyć rekuperację z pompą ciepła i zredukować zużycie energii o 90%.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-pasywny",
    "name": "Parametry techniczne ogrzewania w standardzie pasywnym",
    "description": "Zestawienie zużycia energii, optymalnych temperatur zasilania pompy ciepła oraz krytycznych błędów projektowych w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie na energię w domu pasywnym",
      "temperatura zasilania pompy ciepła w domu pasywnym",
      "współpraca podłogówki z rekuperacją",
      "błędy w projektowaniu ogrzewania podłogowego",
      "temperatura podłogi norma"
    ],
    "measurementTechnique": "Analiza porównawcza zużycia energii (kWh/m²) dla domów tradycyjnych i pasywnych oraz kalibracja krzywej grzewczej pompy ciepła.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zapotrzebowanie energetyczne: Spadek z 80-120 kWh/m² do 5-15 kWh/m² rocznie.",
        "Parametry zasilania: Optymalny zakres 26-32°C dla maksymalnego COP pompy ciepła.",
        "Krytyczne błędy: Przewymiarowanie mocy pompy, słaba izolacja krawędziowa, brak bilansu cieplnego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#download-hub-pasywny",
    "name": "Centrum Pobierania: Standard Pasywny",
    "description": "Interaktywny moduł pozwalający na podgląd w wysokiej rozdzielczości oraz pobranie technicznej infografiki w formacie PDF.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-pas-dl-container" id="app-pas-dl">
    
    <div class="dl-pas-header">
        <div class="dl-pas-header-content">
            <div class="dl-pas-badge">Kompendium Inżynierskie</div>
            <h2>Ogrzewanie w Domu Pasywnym</h2>
            <p>Pobierz autorską infografikę i uniknij najdroższych błędów instalacyjnych. Poznaj parametry, które redukują koszty eksploatacji nawet o 90%.</p>
        </div>
        <div class="dl-pas-header-visual">
            <svg class="dl-pas-pdf-icon" 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="#10b981" stroke="#ffffff" stroke-width="1.5"/>
                <path d="M14 2V8H20" fill="#6ee7b7" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
                <text x="6.5" y="17" fill="white" font-size="6" font-weight="900" font-family="sans-serif">PDF</text>
            </svg>
        </div>
    </div>

    <div class="dl-pas-workspace">
        
        <div class="dl-pas-preview" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.webp', '_blank')" role="button" aria-label="Powiększ infografikę">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.webp" alt="Infografika: Projektowanie ogrzewania podłogowego w domach pasywnych" class="dl-pas-img" loading="lazy">
            <div class="dl-pas-zoom-hint">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                Powiększ grafikę
            </div>
        </div>

        <div class="dl-pas-info">
            <ul class="dl-pas-list">
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" 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>
                    <span>Analiza porównawcza zużycia energii: <strong>Dom Tradycyjny vs Pasywny</strong>.</span>
                </li>
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" 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>
                    <span>Zestawienie optymalnych temperatur (zasilanie: 26-32°C).</span>
                </li>
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" 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>
                    <span>Czarna lista: <strong>Krytyczne błędy</strong> (taktowanie pompy, słaba izolacja).</span>
                </li>
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" 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>
                    <span>Wpływ rekuperacji na obniżenie kosztów eksploatacji.</span>
                </li>
            </ul>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.pdf" class="dl-pas-btn" target="_blank" rel="noopener">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                POBIERZ INFOGRAFIKĘ (PDF)
            </a>
        </div>

    </div>

    <div class="dl-pas-footer">
        <p class="dl-pas-seo-text">
            Inwestorzy planujący nowoczesną budowę często pytają, jak wyeliminować błędy u samego źródła. Nasza infografika pokazuje, jak prawidłowo zestawić <strong>niskie zapotrzebowanie na energię w domu pasywnym</strong> (zaledwie 5-15 kWh/m² rocznie) z precyzyjną pracą systemu grzewczego. Dowiesz się z niej, dlaczego <strong>temperatura zasilania pompy ciepła w domu pasywnym</strong> nie powinna przekraczać 32°C oraz jak niezbędna jest <strong>współpraca podłogówki z rekuperacją</strong>.
        </p>
        <p class="dl-pas-seo-text">
            Chcesz uniknąć ryzyka, że Twoja pompa ciepła będzie ulegać taktowaniu? Zadbaj o precyzję przed rozpoczęciem prac. <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zleć profesjonalny projekt OZC i ogrzewania podłogowego</a> naszym inżynierom.
        </p>
        <p class="dl-pas-copyright">
            © 2026 Projekt-Ogrzewania.pl | Udostępnianie materiałów edukacyjnych dozwolone z zachowaniem linku do źródła.
        </p>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // --- OCHRONA DOMENOWA (Brak nagłówków H-tag w alercie) ---
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowed.includes(domain)) {
        const container = document.getElementById('app-pas-dl');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fef2f2; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 900; color: #991b1b; margin-bottom: 10px; text-transform: uppercase;">Odmowa Dostępu</div>
                    <p style="color: #b91c1c; font-size: 14px; margin: 0; line-height: 1.5;">Moduł "Centrum Pobierania" oraz załączone pliki PDF są własnością intelektualną Projekt-Ogrzewania.pl. Uruchomienie na nieautoryzowanej domenie zostało zablokowane.</p>
                </div>
            `;
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/">Projektowanie ogrzewania podłogowego w domach pasywnych.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Czy ogrzewanie podłogowe jest zdrowe?</title>
		<link>https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/</link>
					<comments>https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 13 Oct 2024 18:24:56 +0000</pubDate>
				<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Porady dla domu]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Rozwiązania ekologiczne]]></category>
		<category><![CDATA[Technologia w budownictwie]]></category>
		<category><![CDATA[Zdrowie alergików]]></category>
		<category><![CDATA[Zdrowie i komfort]]></category>
		<category><![CDATA[alergie]]></category>
		<category><![CDATA[ciepło]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[ekologia]]></category>
		<category><![CDATA[energia]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[zdrowie]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=1387</guid>

					<description><![CDATA[<p>Ogrzewanie podłogowe zyskuje coraz większą popularność, nie tylko ze względu na wygodę i estetykę, ale także z uwagi na jego wpływ na zdrowie. Dzięki równomiernemu rozkładowi ciepła, ogrzewanie podłogowe zapewnia komfort cieplny, ogranicza unoszenie się kurzu i poprawia jakość powietrza w pomieszczeniach. To idealne rozwiązanie dla alergików oraz osób dbających o zdrowie. Dowiedz się, jakie korzyści zdrowotne niesie za sobą podłogówka i czy warto w nią zainwestować. Zapraszamy do lektury!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/">Czy ogrzewanie podłogowe jest zdrowe?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ogrzewanie podłogowe staje się coraz popularniejszym rozwiązaniem w polskich domach. Komfort, równomierne rozprowadzanie ciepła oraz estetyka to tylko niektóre z zalet, które przyciągają inwestorów. Jednakże wielu z nas zadaje sobie pytanie: czy ogrzewanie podłogowe jest zdrowe? W niniejszym artykule postaramy się dokładnie omówić wpływ tego rodzaju ogrzewania na nasze zdrowie, uwzględniając jego zalety i ewentualne wady. Jeżeli szukasz rzetelnych informacji i zastanawiasz się, czy ogrzewanie podłogowe będzie właściwym wyborem dla Twojego domu, koniecznie czytaj dalej.</p>



<h2 class="wp-block-heading">Zalety ogrzewania podłogowego pod kątem zdrowia.</h2>



<p class="wp-block-paragraph">Jednym z kluczowych argumentów przemawiających za ogrzewaniem podłogowym jest jego pozytywny wpływ na zdrowie domowników, zwłaszcza w porównaniu do tradycyjnych grzejników. <strong><a href="https://projekt-ogrzewania.pl/category/ogrzewanie-podlogowe/">Ogrzewanie podłogowe</a> działa poprzez równomierne promieniowanie ciepła</strong>, które rozchodzi się z podłogi ku górze, tworząc przyjemny klimat wewnątrz pomieszczeń. Taki sposób rozprowadzania ciepła zapewnia <strong>jednorodną temperaturę</strong> w całym wnętrzu, bez tworzenia nagłych różnic, które mogą być niekorzystne dla organizmu.</p>



<p class="wp-block-paragraph">Kolejnym istotnym aspektem jest <strong>niższa cyrkulacja kurzu</strong>. W tradycyjnych systemach grzewczych, powietrze jest zmuszone do krążenia wokół grzejników, co powoduje, że unoszą się w nim drobinki kurzu. To może być problematyczne, zwłaszcza dla alergików i astmatyków. Ogrzewanie podłogowe nie wymusza intensywnej cyrkulacji powietrza, co sprawia, że w pomieszczeniu jest mniej kurzu i alergenów. Dzięki temu osoby zmagające się z problemami układu oddechowego mogą odczuwać znaczną ulgę.</p>



<h2 class="wp-block-heading">Komfort cieplny a zdrowie.</h2>



<p class="wp-block-paragraph">Komfort cieplny ma niebagatelne znaczenie dla zdrowia i dobrego samopoczucia. Ogrzewanie podłogowe zapewnia <strong>równomierne ogrzewanie całej powierzchni podłogi</strong>, co jest szczególnie korzystne dla osób starszych, które często skarżą się na zimne stopy i trudności z utrzymaniem ciepła. Dzięki temu, że temperatura podłogi jest wyższa niż w przypadku klasycznego ogrzewania, organizm człowieka nie musi nadmiernie wydatkować energii na utrzymanie optymalnej temperatury ciała, co z kolei wpływa na ogólny stan zdrowia.</p>



<p class="wp-block-paragraph">Badania pokazują, że <strong>utrzymanie stałej temperatury</strong> w pomieszczeniu może przyczyniać się do zmniejszenia napięcia mięśniowego oraz zapobiegać bólom stawów. Warto również zauważyć, że ogrzewanie podłogowe pozwala na utrzymanie niższej temperatury powietrza, co jest zdrowsze dla błon śluzowych dróg oddechowych i zapobiega ich nadmiernemu wysychaniu.</p>



<h2 class="wp-block-heading">Ogrzewanie podłogowe a problemy zdrowotne &#8211; mity i fakty.</h2>



<p class="wp-block-paragraph">Wokół ogrzewania podłogowego narosło wiele mitów, które często odstraszają potencjalnych użytkowników. Jednym z nich jest przekonanie, że podłogówka może powodować problemy z krążeniem. <strong>W rzeczywistości temperatura podłogi w dobrze zaprojektowanym systemie ogrzewania podłogowego nie przekracza 29-32 stopni Celsjusza</strong>, co jest wartością w pełni bezpieczną dla ludzkiego organizmu. Systemy te są projektowane tak, aby zapewnić optymalne warunki cieplne, które nie wpływają negatywnie na zdrowie naczyń krwionośnych.</p>



<p class="wp-block-paragraph">Kolejny mit dotyczy rzekomego wysuszania powietrza przez ogrzewanie podłogowe. To nieprawda. Podłogówka działa na zasadzie <strong>niskotemperaturowego promieniowania</strong>, które w żaden sposób nie przyczynia się do obniżania wilgotności powietrza. Wręcz przeciwnie, w odróżnieniu od grzejników, które często powodują przesuszenie powietrza, ogrzewanie podłogowe pozwala na utrzymanie bardziej optymalnego poziomu wilgoci w pomieszczeniu.</p>



<h2 class="wp-block-heading">Zdrowie a efektywność energetyczna</h2>



<p class="wp-block-paragraph">Ogrzewanie podłogowe jest również zdrowym wyborem z punktu widzenia efektywności energetycznej. Dzięki <strong>lepszemu rozkładowi ciepła</strong> i możliwości utrzymania niższej temperatury w całym pomieszczeniu, możemy zredukować zużycie energii, co wpływa pozytywnie na środowisko. Lepsze zarządzanie energią przekłada się również na <strong>zmniejszenie ilości zanieczyszczeń</strong> emitowanych do atmosfery, co bezpośrednio wpływa na nasze zdrowie – oddychamy czystszym powietrzem, a to jest kluczowe dla funkcjonowania układu oddechowego.</p>



<h2 class="wp-block-heading">Jak odpowiednio zaprojektować ogrzewanie podłogowe?</h2>



<p class="wp-block-paragraph">Aby ogrzewanie podłogowe przynosiło korzyści zdrowotne, należy zadbać o jego prawidłowy projekt i instalację. Kluczem do sukcesu jest <strong><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">dobrze zaprojektowana instalacja</a></strong>, dostosowana do potrzeb konkretnego budynku i jego mieszkańców. Właściwe rozplanowanie systemu, wybór odpowiednich materiałów oraz współpraca z profesjonalnym wykonawcą są niezbędne, aby uzyskać optymalne rezultaty.</p>



<p class="wp-block-paragraph">Jeżeli zastanawiasz się, jak zaprojektować swoje ogrzewanie podłogowe, warto skorzystać z pomocy specjalistów. Więcej informacji na ten temat znajdziesz na stronie naszego <a href="https://projekt-ogrzewania.pl/blog/">bloga</a> – specjaliści z doświadczeniem pomogą Ci dobrać najlepsze rozwiązania, uwzględniając zarówno Twoje potrzeby, jak i możliwości techniczne budynku.</p>



<h2 class="wp-block-heading">Podsumowanie &#8211; czy warto zainwestować w ogrzewanie podłogowe?</h2>



<p class="wp-block-paragraph">Podsumowując, <strong>ogrzewanie podłogowe jest zdrowym rozwiązaniem</strong> zarówno dla dorosłych, jak i dzieci. Wpływa pozytywnie na komfort cieplny, eliminuje problem unoszenia się kurzu oraz zapewnia bardziej naturalne warunki ogrzewania. To idealny wybór dla osób cierpiących na alergie, problemy z krążeniem czy dolegliwości związane z bólami stawów.</p>



<p class="wp-block-paragraph">Odpowiednio zaprojektowane ogrzewanie podłogowe może przyczynić się do poprawy jakości życia oraz zapewnić oszczędności energetyczne. Aby dowiedzieć się więcej o możliwościach zastosowania ogrzewania podłogowego i jego zaletach zdrowotnych, zapraszamy na <a href="https://projekt-ogrzewania.pl/">stronę Projekt Ogrzewania</a>, gdzie znajdziesz pełen zakres informacji na ten temat.</p>



<figure class="wp-block-embed aligncenter is-type-wp-embed is-provider-projekt-ogrzewania wp-block-embed-projekt-ogrzewania"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="9zpkU8Ls9Y"><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Projekt instalacji ogrzewania podłogowego &#8211; podłogówki</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8222;Projekt instalacji ogrzewania podłogowego &#8211; podłogówki&#8221; &#8212; Projekt Ogrzewania" src="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/embed/#?secret=16nqlaNaI8#?secret=9zpkU8Ls9Y" data-secret="9zpkU8Ls9Y" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/">Czy ogrzewanie podłogowe jest zdrowe?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
