<?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 Poradnik budowlany - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/category/poradnik-budowlany/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/category/poradnik-budowlany/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Sat, 30 May 2026 18:57:43 +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 Poradnik budowlany - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/category/poradnik-budowlany/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Samodzielny montaż ogrzewania podłogowego – 5 błędów, których nie naprawisz po wylewce.</title>
		<link>https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 19 Apr 2026 19:27:33 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Efektywne ogrzewanie]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Systemy ogrzewania]]></category>
		<category><![CDATA[Technika grzewcza]]></category>
		<category><![CDATA[Technika instalacyjna]]></category>
		<category><![CDATA[błędy wykonawcze]]></category>
		<category><![CDATA[budowa domu]]></category>
		<category><![CDATA[dylatacje]]></category>
		<category><![CDATA[hydraulika]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[jastrych]]></category>
		<category><![CDATA[montaż samodzielny]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[pętle grzewcze]]></category>
		<category><![CDATA[porady techniczne]]></category>
		<category><![CDATA[próba szczelności]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[rura pex]]></category>
		<category><![CDATA[zebra termiczna]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4245</guid>

					<description><![CDATA[<p>Planujesz samodzielny montaż instalacji grzewczej, by zaoszczędzić na robociźnie? Wiele osób, wpisując w wyszukiwarkę frazę „jak samemu zrobić ogrzewanie podłogowe”, skupia się wyłącznie na prostocie rozkładania rur PEX, zapominając o bezlitosnych prawach fizyki budowli i mechaniki płynów. Ten techniczny przewodnik obala popularne mity i analizuje pięć najpoważniejszych „grzechów głównych” popełnianych przez inwestorów. Dowiesz się z niego, dlaczego brak profesjonalnego projektu, zignorowanie dylatacji czy zbyt długie pętle grzewcze mogą doprowadzić do nieodwracalnych uszkodzeń wylewki i kosztownego remontu. Zamiast uczyć się na własnych błędach pod warstwą betonu, poznaj inżynierskie standardy, które zagwarantują Ci komfort cieplny i niskie rachunki przez kolejne trzydzieści lat.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/">Samodzielny montaż ogrzewania podłogowego – 5 błędów, których nie naprawisz po wylewce.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Czerwony ostrzegawczy */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #e2e8f0;
}

.premium-hero-box {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
    position: relative;
}

/* Subtelne tło dekoracyjne */
.premium-hero-box::before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    width: 300px;
    height: 300px;
    background: radial-gradient(circle, rgba(220, 38, 38, 0.05) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    transform: translate(30%, -30%);
    z-index: 0;
}

.hero-content {
    position: relative;
    z-index: 1;
    padding: 45px 50px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
}

.hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fef2f2;
    color: var(--accent);
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 25px;
    border: 1px solid #fecaca;
}

.hero-text {
    font-size: 17px;
    line-height: 1.8;
    color: #334155;
    margin-bottom: 20px;
}

.hero-text strong {
    color: var(--primary);
}

.hero-text:last-of-type {
    margin-bottom: 40px;
}

/* Moduły / Spis treści */
.hero-modules-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1px;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 15px;
}

.hero-modules-title::after {
    content: "";
    flex-grow: 1;
    height: 1px;
    background: var(--border-color);
}

.hero-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
}

.hero-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    padding: 20px 15px;
    border-radius: 16px;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    position: relative;
    top: 0;
}

.hero-card:hover {
    top: -5px;
    border-color: var(--accent);
    box-shadow: 0 15px 25px -5px rgba(220, 38, 38, 0.1);
}

.hero-card-icon {
    font-size: 28px;
    margin-bottom: 12px;
    display: block;
    transition: transform 0.3s;
}

.hero-card:hover .hero-card-icon {
    transform: scale(1.15);
}

.hero-card-title {
    font-size: 13px;
    font-weight: 800;
    color: var(--primary);
    line-height: 1.4;
}

@media (max-width: 900px) {
    .hero-content { padding: 35px 25px; }
    .hero-grid { grid-template-columns: repeat(2, 1fr); gap: 15px; }
}

@media (max-width: 500px) {
    .hero-grid { grid-template-columns: 1fr; }
    .hero-card { display: flex; align-items: center; text-align: left; gap: 15px; padding: 15px; }
    .hero-card-icon { margin-bottom: 0; font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Samodzielny montaż ogrzewania podłogowego – 5 błędów, których nie naprawisz po wylewce",
    "description": "Techniczny przewodnik po najczęstszych błędach podczas montażu podłogówki DIY. Dowiedz się, dlaczego fizyka budowli i mechanika płynów są ważniejsze niż samo układanie rur.",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl"
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl"
    },
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Przegląd techniczny błędów montażowych",
    "description": "Zestawienie kluczowych parametrów technicznych i zagrożeń wynikających z błędów przy samodzielnym montażu ogrzewania podłogowego.",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Projekt hydrauliczny",
        "value": "Równowaga oporów",
        "description": "Zagrożenie: Niedogrzane pomieszczenia"
      },
      {
        "@type": "PropertyValue",
        "name": "Test ciśnieniowy",
        "value": "6 bar (0.6 MPa)",
        "description": "Zagrożenie: Wyciek pod wylewką"
      },
      {
        "@type": "PropertyValue",
        "name": "Dylatacje",
        "value": "0.012 mm/(m·K)",
        "description": "Zagrożenie: Pękanie płytek i jastrychu"
      },
      {
        "@type": "PropertyValue",
        "name": "Długość obwodów",
        "value": "Max 100m (PEX 16)",
        "description": "Zagrożenie: Przeciążenie pompy obiegowej"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="premium-hero-box" id="hero-app-container">
    <div class="hero-content">
        
        <div class="hero-badge">
            <span>⚠️</span> Punkt bez powrotu
        </div>
        
        <p class="hero-text">Kiedy wpisujesz w wyszukiwarkę frazę <strong>„jak samemu zrobić ogrzewanie podłogowe”</strong>, widzisz dziesiątki poradników pokazujących, jak łatwo rozwinąć rolkę czerwonej lub białej rury PEX i przyszpilić ją do styropianu. Rzeczywiście, sama czynność układania wężyków jest prosta i może dać ogromną satysfakcję oraz oszczędności na robociźnie rzędu kilku tysięcy złotych.</p>
        
        <p class="hero-text">Problem w tym, że prawdziwa wiedza potrzebna przy samodzielnym montażu ogrzewania podłogowego nie dotyczy wpinania rury w rozdzielacz, ale <strong>fizyki budowli i mechaniki płynów</strong>. Poniższy artykuł to techniczny przewodnik dla tych, którzy rozumieją, że po stwardnieniu betonowej wylewki jedyną metodą naprawy błędu jest młot udarowy i nowy remont.</p>

        <div class="hero-modules-title">Poznaj katalog głównych grzechów:</div>
        
        <div class="hero-grid">
            <div class="hero-card">
                <span class="hero-card-icon">📐</span>
                <span class="hero-card-title">Brak projektu i obliczeń</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">💧</span>
                <span class="hero-card-title">Zła próba szczelności</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">🏗️</span>
                <span class="hero-card-title">Zignorowanie dylatacji</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">⚠️</span>
                <span class="hero-card-title">Błędy długości pętli</span>
            </div>
        </div>

    </div>

    <noscript>
        <div style="padding: 20px 50px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h2 style="font-size: 18px; color: #0f172a; margin-bottom: 15px;">Przegląd techniczny błędów montażowych</h2>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Obszar kontroli</th>
                        <th style="padding: 10px 0; color: #475569;">Kluczowy parametr</th>
                        <th style="padding: 10px 0; color: #475569;">Zagrożenie</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0;">Projekt hydrauliczny</td>
                        <td style="padding: 10px 0; font-weight: bold;">Równowaga oporów</td>
                        <td style="padding: 10px 0; color: #dc2626;">Niedogrzane pomieszczenia</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0;">Test ciśnieniowy</td>
                        <td style="padding: 10px 0; font-weight: bold;">6 bar (0.6 MPa)</td>
                        <td style="padding: 10px 0; color: #dc2626;">Wyciek pod wylewką</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0;">Dylatacje</td>
                        <td style="padding: 10px 0; font-weight: bold;">0.012 mm/(m·K)</td>
                        <td style="padding: 10px 0; color: #dc2626;">Pękanie płytek i jastrychu</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0;">Długość obwodów</td>
                        <td style="padding: 10px 0; font-weight: bold;">Max 100m (PEX 16)</td>
                        <td style="padding: 10px 0; color: #dc2626;">Przeciążenie pompy obiegowej</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // ZABEZPIECZENIE DOMENOWE (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('hero-app-container');
        if (container) {
            container.innerHTML = `
                <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 300px; font-family: sans-serif;">
                    <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                    <div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona prawem autorskim</div>
                    <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten moduł wprowadzający jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został skopiowany nielegalnie.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
                </div>
            `;
        }
    }
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --accent-light: #eff6ff;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-physics-box {
    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(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.physics-header {
    background: var(--primary);
    color: #ffffff;
    padding: 30px 40px;
    position: relative;
    overflow: hidden;
}

.physics-header::after {
    content: '📐';
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 80px;
    opacity: 0.1;
}

.physics-header h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
}

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

.physics-content {
    padding: 40px;
}

.physics-text {
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
    margin-bottom: 25px;
}

.physics-text strong {
    color: var(--primary);
}

/* INTERAKTYWNY SYMULATOR */
.simulator-wrap {
    background: var(--bg-light);
    border: 1px solid var(--border-color);
    border-radius: 16px;
    padding: 30px;
    margin: 30px 0;
}

.sim-title {
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--accent);
    letter-spacing: 1px;
    margin-bottom: 20px;
    display: block;
    text-align: center;
}

.sim-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
}

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

.loop-label {
    display: flex;
    justify-content: space-between;
    font-size: 14px;
    font-weight: 700;
    margin-bottom: 15px;
}

.loop-val {
    color: var(--accent);
    font-weight: 900;
}

input[type=range] {
    width: 100%; height: 6px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-bottom: 20px;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer;
}

.flow-bar-container {
    height: 24px;
    background: #e2e8f0;
    border-radius: 12px;
    overflow: hidden;
    position: relative;
}

.flow-bar {
    height: 100%;
    width: 50%;
    background: var(--success);
    transition: width 0.4s ease, background-color 0.4s ease;
}

.flow-text {
    position: absolute;
    width: 100%;
    text-align: center;
    top: 50%;
    transform: translateY(-50%);
    font-size: 11px;
    font-weight: 800;
    color: #ffffff;
    text-shadow: 0 1px 2px rgba(0,0,0,0.3);
}

#sim-warning {
    margin-top: 20px;
    padding: 15px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 700;
    text-align: center;
    background: #fef2f2;
    color: var(--danger);
    border: 1px solid #fecaca;
    display: none;
}

/* LINKI / CTA */
.physics-cta-box {
    margin-top: 30px;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.physics-cta-text {
    font-size: 14px;
    font-weight: 600;
    color: #475569;
    margin-bottom: 5px;
}

.cta-link-btn {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 24px;
    border-radius: 12px;
    text-decoration: none;
    font-weight: 700;
    font-size: 15px;
    transition: all 0.3s ease;
}

.cta-primary {
    background: var(--accent);
    color: #ffffff !important;
    box-shadow: 0 4px 15px rgba(37, 99, 235, 0.2);
}

.cta-primary:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 25px rgba(37, 99, 235, 0.3);
}

.cta-secondary {
    background: var(--accent-light);
    color: var(--accent) !important;
    border: 1px solid #bfdbfe;
}

.cta-secondary:hover {
    background: #dbeafe;
}

@media (max-width: 768px) {
    .physics-header { padding: 25px 20px; }
    .physics-content { padding: 25px 20px; }
    .sim-grid { grid-template-columns: 1fr; gap: 15px; }
    .cta-link-btn { flex-direction: column; text-align: center; gap: 10px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Symulacja oporów hydraulicznych i prawa Hagena-Poiseuille’a",
    "description": "Zależność między długością pętli grzewczych a oporem hydraulicznym i przepływem w systemach ogrzewania podłogowego.",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Długość pętli krytyczna",
        "value": "100",
        "unitCode": "MTR",
        "description": "Maksymalna długość pętli dla rury 16mm"
      },
      {
        "@type": "PropertyValue",
        "name": "Maksymalna dopuszczalna różnica długości pętli",
        "value": "15",
        "unitText": "%",
        "description": "Powyżej 15% różnicy woda omija dłuższą pętlę i nie da się jej zbilansować na rotametrach"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator przepływu: Prawo Hagena-Poiseuille’a w praktyce",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "description": "Interaktywne narzędzie inżynierskie demonstrujące wpływ różnicy długości pętli grzewczych na równowagę oporów hydraulicznych i przepływ wody.",
    "featureList": [
      "Wizualizacja prawa Hagena-Poiseuille’a",
      "Obliczanie stosunku przepływu na podstawie różnicy długości",
      "Wykrywanie przekroczenia krytycznej granicy zbilansowania (15%)"
    ]
  }
]
</script>

<div class="premium-physics-box" id="physics-app-lock">
    <div class="physics-header">
        <h3>Projekt instalacji – fundament, a nie fanaberia</h3>
        <p>Dlaczego metoda &#8222;na oko&#8221; i brak obliczeń to przepis na zimną podłogę?</p>
    </div>

    <div class="physics-content">
        <p class="physics-text">
            Zanim przejdziemy do konkretnych błędów montażowych, musimy postawić sprawę jasno: <strong>brak projektu hydraulicznego i cieplnego jest matką wszystkich tych wpadek.</strong> Wpisując w Google <em>jak samemu zrobić ogrzewanie podłogowe</em>, większość majsterkowiczów szuka schematu rozstawu rur („ślimak czy meander?”), całkowicie ignorując obliczenia oporów hydraulicznych i strat ciepła.
        </p>

        <div class="simulator-wrap">
            <span class="sim-title">Symulator przepływu: Prawo Hagena-Poiseuille’a w praktyce</span>
            <div class="sim-grid">
                <div class="loop-control">
                    <div class="loop-label"><span>Pętla A (np. Łazienka)</span><span class="loop-val"><span id="val-loop1">45</span> m</span></div>
                    <input type="range" id="loop1" min="20" max="150" value="45">
                    <div class="flow-bar-container">
                        <div id="bar-loop1" class="flow-bar"></div>
                        <span id="text-loop1" class="flow-text">Przepływ: Wysoki (Gorąca)</span>
                    </div>
                </div>
                <div class="loop-control">
                    <div class="loop-label"><span>Pętla B (np. Salon)</span><span class="loop-val"><span id="val-loop2">120</span> m</span></div>
                    <input type="range" id="loop2" min="20" max="150" value="120">
                    <div class="flow-bar-container">
                        <div id="bar-loop2" class="flow-bar" style="background:var(--danger)"></div>
                        <span id="text-loop2" class="flow-text">Przepływ: Niski (Zimna)</span>
                    </div>
                </div>
            </div>
            <div id="sim-warning">⚠️ Różnica oporów jest zbyt duża (>15%). Woda omija dłuższą pętlę. Tego układu nie da się zbilansować na rozdzielaczu!</div>
        </div>

        <p class="physics-text">
            Próba wykonania instalacji „na oko” prowadzi dokładnie do sytuacji z powyższego symulatora, w której <strong>jedna pętla ma 120 metrów, a druga 45 metrów.</strong> Zgodnie z prawami fizyki, woda przepływa tam, gdzie jest najmniejszy opór. W takim układzie krótsza pętla będzie gorąca, a długa – ledwo letnia. 
            <br><br>
            <strong>Nie da się tego skorygować zaworem na rozdzielaczu, jeśli różnica długości przekracza 10-15%.</strong> 
        </p>

        <div class="physics-cta-box">
            <div class="physics-cta-text">Chcesz uchronić się przed kosztownymi pomyłkami?</div>
            
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-link-btn cta-primary">
                <span>📐 Zleć profesjonalny projekt instalacji u specjalisty</span>
                <span>ZAMÓW PROJEKT →</span>
            </a>
            
            <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-glowy-vs-projekt-z-obliczeniami-ile-mozesz-stracic-na-bledach/" class="cta-link-btn cta-secondary">
                <span>📖 Dowiedz się, ile możesz stracić na błędach bez wyliczeń</span>
                <span>PRZECZYTAJ ARTYKUŁ →</span>
            </a>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px 40px 30px 40px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="font-size: 16px; color: #0f172a; margin-bottom: 15px;">Parametry hydrauliczne pętli grzewczych (Prawo Hagena-Poiseuille’a)</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Długość pętli</th>
                        <th style="padding: 10px 0; color: #475569;">Zdolność przepływu w układzie mieszanym</th>
                        <th style="padding: 10px 0; color: #475569;">Ocena hydrauliczna</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">45 m (Krótka)</td>
                        <td style="padding: 10px 0;">Pętla o niskim oporze &#8211; przejmuje większość przepływu</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">Gorąca (Przegrzewanie)</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">120 m (Długa)</td>
                        <td style="padding: 10px 0;">Pętla o wysokim oporze &#8211; woda ją omija</td>
                        <td style="padding: 10px 0; color: #2563eb; font-weight: bold;">Zimna (Niedogrzanie)</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Różnica &gt; 15%</td>
                        <td style="padding: 10px 0;">Brak możliwości kompensacji ciśnienia na rotametrach</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">Błąd projektowy (Nie do zbilansowania)</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA (Domain Lock)
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('physics-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;">' +
                '<span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span>' +
                '<div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div>' +
                '<p>Ten moduł jest własnością Projekt-Ogrzewania.pl</p></div>';
        }
        return; 
    }

    // LOGIKA SYMULATORA
    var loop1 = document.getElementById('loop1');
    var loop2 = document.getElementById('loop2');
    var val1 = document.getElementById('val-loop1');
    var val2 = document.getElementById('val-loop2');
    var bar1 = document.getElementById('bar-loop1');
    var bar2 = document.getElementById('bar-loop2');
    var text1 = document.getElementById('text-loop1');
    var text2 = document.getElementById('text-loop2');
    var warning = document.getElementById('sim-warning');

    function calculateFlow() {
        var l1 = parseFloat(loop1.value);
        var l2 = parseFloat(loop2.value);
        
        val1.innerText = l1;
        val2.innerText = l2;

        // Odwrotna proporcjonalność: większa długość = mniejszy przepływ
        // Zakładamy stałe ciśnienie pompy, przepływ Q ~ 1/L
        var q1 = 1 / l1;
        var q2 = 1 / l2;
        var totalQ = q1 + q2;

        var perc1 = (q1 / totalQ) * 100;
        var perc2 = (q2 / totalQ) * 100;

        bar1.style.width = perc1 + '%';
        bar2.style.width = perc2 + '%';

        // Kolorowanie pętli w zależności od udziału w przepływie
        updateBarColor(bar1, text1, perc1);
        updateBarColor(bar2, text2, perc2);

        // Obliczanie różnicy w długości pętli
        var maxL = Math.max(l1, l2);
        var diff = Math.abs(l1 - l2);
        var diffPerc = (diff / maxL) * 100;

        if (diffPerc > 15 || l1 > 100 || l2 > 100) {
            warning.style.display = 'block';
            if (l1 > 100 || l2 > 100) {
                warning.innerHTML = '⚠️ <strong>Jedna z pętli przekracza 100 m!</strong> Opór jest tak duży, że dławienie zaworów nie pomoże. Pętla nie dogrzeje pomieszczenia.';
            } else {
                warning.innerHTML = '⚠️ <strong>Różnica długości wynosi ok. ' + Math.round(diffPerc) + '%!</strong> Woda wybiera najmniejszy opór. Układu nie da się zbilansować na rotametrach.';
            }
        } else {
            warning.style.display = 'none';
        }
    }

    function updateBarColor(bar, textEl, perc) {
        if (perc > 60) {
            bar.style.backgroundColor = '#dc2626'; // Red
            textEl.innerText = 'Gorąca (Główny obieg)';
        } else if (perc >= 40 && perc <= 60) {
            bar.style.backgroundColor = '#16a34a'; // Green
            textEl.innerText = 'Zbilansowana';
        } else {
            bar.style.backgroundColor = '#3b82f6'; // Blue
            textEl.innerText = 'Zimna (Brak przepływu)';
        }
    }

    loop1.addEventListener('input', calculateFlow);
    loop2.addEventListener('input', calculateFlow);

    // Initial run
    calculateFlow();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-error-box {
    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(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.error-header {
    background: #fef2f2;
    border-bottom: 1px solid #fecaca;
    padding: 35px 40px;
    position: relative;
    overflow: hidden;
}

.error-header::after {
    content: '💦';
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 90px;
    opacity: 0.1;
}

.error-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fee2e2;
    color: var(--danger);
    padding: 6px 14px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.error-header h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--danger);
}

.error-content {
    padding: 40px;
}

.error-text {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin-bottom: 20px;
}

.error-text strong {
    color: var(--primary);
}

/* INTERAKTYWNY SYMULATOR */
.simulator-wrap {
    background: var(--bg-light);
    border: 1px solid var(--border-color);
    border-radius: 16px;
    padding: 30px;
    margin: 35px 0;
}

.sim-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--primary);
    letter-spacing: 1px;
    margin-bottom: 25px;
    display: block;
    text-align: center;
}

.sim-controls {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-bottom: 25px;
}

.gauge-display {
    font-size: 42px;
    font-weight: 900;
    color: var(--accent);
    margin-bottom: 10px;
    line-height: 1;
}

.gauge-label {
    font-size: 14px;
    color: #64748b;
    font-weight: 700;
    margin-bottom: 15px;
}

input[type=range] {
    width: 100%; max-width: 400px; height: 8px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-bottom: 20px;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none; width: 28px; height: 28px; background: var(--accent); border-radius: 50%; border: 4px solid white; box-shadow: 0 2px 8px rgba(0,0,0,0.2); cursor: pointer;
}

.sim-actions {
    display: flex;
    gap: 15px;
    justify-content: center;
    flex-wrap: wrap;
}

.sim-btn {
    padding: 12px 20px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 800;
    cursor: pointer;
    border: none;
    transition: 0.3s;
}

.btn-concrete { background: #94a3b8; color: white; box-shadow: 0 4px 10px rgba(148, 163, 184, 0.3); }
.btn-concrete:hover { background: #64748b; }
.btn-strike { background: #fbbf24; color: #78350f; box-shadow: 0 4px 10px rgba(251, 191, 36, 0.3); }
.btn-strike:hover { background: #f59e0b; }

#sim-result {
    margin-top: 25px;
    padding: 20px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 700;
    text-align: center;
    display: none;
    line-height: 1.5;
}

.result-danger { background: #fef2f2; color: var(--danger); border: 2px solid #fecaca; }
.result-success { background: #f0fdf4; color: var(--success); border: 2px solid #bbf7d0; }
.result-warning { background: #fffbeb; color: #b45309; border: 2px solid #fde68a; }

/* SEKCJE TEKSTOWE */
.golden-standard {
    background: #f0fdf4;
    border-left: 6px solid var(--success);
    padding: 25px;
    border-radius: 0 16px 16px 0;
    margin: 30px 0;
}

.golden-standard h4 { margin: 0 0 15px 0; color: #166534; font-size: 18px; font-weight: 800;}
.golden-standard ul { margin: 0; padding-left: 20px; color: #15803d; line-height: 1.7; }
.golden-standard li { margin-bottom: 10px; }
.golden-standard strong { color: #14532d; }

.life-example {
    background: #fff7ed;
    border: 1px solid #ffedd5;
    padding: 25px;
    border-radius: 16px;
    margin-top: 30px;
}

.life-example h4 { margin: 0 0 10px 0; color: var(--warning); font-size: 16px; font-weight: 800;}

@media (max-width: 768px) {
    .error-header { padding: 25px 20px; }
    .error-content { padding: 25px 20px; }
    .sim-actions { flex-direction: column; width: 100%; }
    .sim-btn { width: 100%; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Standardy próby szczelności instalacji ogrzewania podłogowego",
    "description": "Wymagania techniczne i fizyczne konsekwencje nieprawidłowo przeprowadzonej próby ciśnieniowej przed zalaniem wylewką.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Wymagane ciśnienie próbne",
        "value": "0.6",
        "unitCode": "BAR",
        "description": "Minimum 6 barów w celu zapobiegania mikrorozszczelnieniom złączek pod masą betonu"
      },
      {
        "@type": "PropertyValue",
        "name": "Minimalny czas trwania testu",
        "value": "24",
        "unitText": "godziny"
      },
      {
        "@type": "PropertyValue",
        "name": "Masa jastrychu grzewczego na rurach",
        "value": "200-250",
        "unitText": "kg/m2",
        "description": "Siła wywierana na rury PEX wymagająca sztywności uzyskanej ciśnieniem > 5 bar"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator naprężeń: Sprawdź zachowanie rury",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "description": "Interaktywny symulator demonstrujący wpływ ciśnienia próbnego na zachowanie rur ogrzewania podłogowego podczas prac betoniarskich, takich jak wibrowanie wylewki oraz uderzenia mechaniczne.",
    "featureList": [
      "Wizualizacja wpływu wibratora do betonu na szczelność",
      "Symulacja spadku ciśnienia na manometrze przy uszkodzeniu mechanicznym",
      "Określanie bezpiecznych (>= 6 bar) i niebezpiecznych poziomów ciśnienia"
    ]
  }
]
</script>

<div class="premium-error-box" id="pressure-app-lock">
    <div class="error-header">
        <div class="error-badge">Błąd #1</div>
        <h3>Brak lub źle przeprowadzona próba szczelności</h3>
        <p style="margin:0; font-size:15px; color:#991b1b; font-weight:600;">Czyli przeciek ukryty w tonach betonu.</p>
    </div>

    <div class="error-content">
        <p class="error-text">
            <strong>Dlaczego standardowe "sprawdzenie na 2 bary" to za mało?</strong><br>
            To absolutnie najpoważniejszy błąd przy samodzielnym wykonaniu podłogówki. W domowych warunkach najczęściej robi się tak: podłącza się wąż ogrodowy do rozdzielacza, puszcza wodę z sieci (ok. 3-4 bary), widzi się, że z drugiego końca leci woda, zakręca zawór i uznaje instalację za szczelną.
        </p>
        <p class="error-text">
            <strong>Konsekwencja techniczna:</strong><br>
            Podczas zalewania wylewki na rury działa masa betonu (około 200-250 kg/m² przy grubości 6-8 cm). Ponadto ekipy betoniarskie używają wibratorów wgłębnych lub listew wibracyjnych. Drgania o wysokiej częstotliwości potrafią poluzować nawet prawidłowo zaciśnięte złączki zaciskowe. Jeśli w rurze panowało niskie ciśnienie statyczne, a złączka była "na styk", pod wpływem wibracji i ciężaru betonu dojdzie do mikrorozszczelnienia. Woda zacznie migrować w beton, a Ty zobaczysz to dopiero po 3 miesiącach, gdy na suficie piętra niżej pojawi się mokra plama.
        </p>

        <div class="simulator-wrap">
            <span class="sim-title">Symulator naprężeń: Sprawdź zachowanie rury</span>
            
            <div class="sim-controls">
                <div class="gauge-display"><span id="pressure-val">2.0</span> BAR</div>
                <span class="gauge-label">Ustaw ciśnienie w układzie (0 - 8 bar)</span>
                <input type="range" id="pressure-slider" min="0" max="8" step="0.5" value="2.0">
            </div>

            <div class="sim-actions">
                <button id="btn-pour" class="sim-btn btn-concrete">1. Wylej beton i włącz wibrator</button>
                <button id="btn-strike" class="sim-btn btn-strike">2. Symuluj uderzenie łopatą</button>
            </div>

            <div id="sim-result"></div>
        </div>

        <div class="golden-standard">
            <h4>Złoty standard próby szczelności (jak to zrobić dobrze):</h4>
            <ul>
                <li><strong>Ciśnienie próbne:</strong> Minimum 0,6 MPa (6 barów). Woda w instalacji CO rzadko przekracza 2 bary, ale próba ma symulować ekstremalne naprężenia mechaniczne.</li>
                <li><strong>Czas trwania:</strong> Minimum 24 godziny.</li>
                <li><strong>W trakcie wylewania betonu:</strong> Rury muszą być pod ciśnieniem! To kluczowa zasada pomijana przez 90% samouków.</li>
            </ul>
        </div>

        <p class="error-text">
            Dzięki utrzymaniu ciśnienia rura jest sztywna (naprężona). Jeśli ekipa od wylewek nadepnie na nią kaloszem lub uderzy łopatą, manometr na rozdzielaczu natychmiast spadnie. Wtedy możesz przerwać wylewanie, odkopać uszkodzone miejsce i naprawić złączką. Szczegółową instrukcję przeprowadzania tego kluczowego testu znajdziesz w naszym dedykowanym artykule: <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" style="color:var(--accent); font-weight:700; text-decoration:none;">próba szczelności ogrzewania podłogowego – jak zrobić to prawidłowo?</a>.
        </p>

        <div class="life-example">
            <h4>👷‍♂️ Przykład z życia:</h4>
            <p style="margin:0; font-size:14px; color:#78350f; line-height:1.6;">
                Pan Adam z Wrocławia oszczędził na kompresorze. Zrobił próbę na 2 bary z wodociągu. Po wylaniu 10 cm betonu okazało się, że w jednej pętli nie ma przepływu. Po 3 latach płytki w przedpokoju zaczęły "pływać" – okazało się, że przy rozdzielaczu ekipa wylała beton bezpośrednio na złączkę, wyginając ją i powodując pęknięcie zmęczeniowe mosiądzu. <strong>Koszt naprawy: skucie 4 m² posadzki, wymiana złączki, nowa wylewka i nowe płytki (łącznie ok. 3500 zł).</strong>
            </p>
        </div>
    </div>
    
    <noscript>
        <div style="padding: 20px 40px 30px 40px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="font-size: 16px; color: #0f172a; margin-bottom: 15px;">Skutki ciśnienia w rurach ogrzewania podłogowego podczas prac betoniarskich</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Wartość ciśnienia próbnego</th>
                        <th style="padding: 10px 0; color: #475569;">Zachowanie rury pod wpływem wibratora do betonu</th>
                        <th style="padding: 10px 0; color: #475569;">Reakcja na uszkodzenie mechaniczne (np. łopatą)</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">&lt; 5 bar (Zbyt niskie)</td>
                        <td style="padding: 10px 0;">Poluzowanie złączek, wyciek pod wylewką</td>
                        <td style="padding: 10px 0; color: #dc2626;">Brak widocznego spadku na manometrze</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">&ge; 6 bar (Zalecane)</td>
                        <td style="padding: 10px 0;">Rura sztywna, złączki zablokowane</td>
                        <td style="padding: 10px 0; color: #16a34a; font-weight: bold;">Natychmiastowy spadek ciśnienia = szybka naprawa</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('pressure-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div><p>Ten moduł jest własnością Projekt-Ogrzewania.pl</p></div>';
        }
        return; 
    }

    // LOGIKA SYMULATORA
    var slider = document.getElementById('pressure-slider');
    var valDisplay = document.getElementById('pressure-val');
    var btnPour = document.getElementById('btn-pour');
    var btnStrike = document.getElementById('btn-strike');
    var resultBox = document.getElementById('sim-result');

    slider.addEventListener('input', function() {
        valDisplay.innerText = parseFloat(slider.value).toFixed(1);
        resultBox.style.display = 'none'; // reset wyników przy zmianie
    });

    btnPour.addEventListener('click', function() {
        var pressure = parseFloat(slider.value);
        resultBox.style.display = 'block';
        resultBox.className = ''; 
        
        if (pressure < 5.0) {
            resultBox.classList.add('result-danger');
            resultBox.innerHTML = '❌ <strong>KATASTROFA!</strong> Ciśnienie jest zbyt niskie. Rura jest wiotka. Wibrator poluzował złączki, a ciężar betonu wywołał mikrorozszczelnienie. Woda ucieka w wylewkę!';
        } else {
            resultBox.classList.add('result-success');
            resultBox.innerHTML = '✅ <strong>BEZPIECZNIE!</strong> Rura pod ciśnieniem ' + pressure.toFixed(1) + ' bar jest sztywna jak kamień. Złączki są napięte i zablokowane. Wibracje betonu nie robią na niej żadnego wrażenia.';
        }
    });

    btnStrike.addEventListener('click', function() {
        var pressure = parseFloat(slider.value);
        resultBox.style.display = 'block';
        resultBox.className = ''; 

        if (pressure < 3.0) {
            resultBox.classList.add('result-warning');
            resultBox.innerHTML = '⚠️ <strong>BRAK REAKCJI MANOMETRU!</strong> Rura została uszkodzona łopatą, ale ciśnienie było tak niskie, że wskaźnik ledwo drgnął. Ekipa nie zauważyła problemu i zalała dziurawą rurę betonem.';
        } else {
            // Animacja spadku ciśnienia
            slider.value = 0;
            valDisplay.innerText = "0.0";
            resultBox.classList.add('result-success');
            resultBox.innerHTML = '🚨 <strong>ALARM! WZORCOWA REAKCJA!</strong> Uszkodzenie łopatą natychmiast wyrzuciło wodę z naprężonej rury. Manometr spadł do ZERA w sekundę. Zatrzymujesz wylewanie i naprawiasz uszkodzenie!';
        }
    });
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-error-box {
    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(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.error-header {
    background: #fef2f2;
    border-bottom: 1px solid #fecaca;
    padding: 35px 40px;
    position: relative;
    overflow: hidden;
}

.error-header::after {
    content: '💥';
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 90px;
    opacity: 0.1;
}

.error-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fee2e2;
    color: var(--danger);
    padding: 6px 14px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.error-header h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--danger);
}

.error-content {
    padding: 40px;
}

.error-text {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin-bottom: 20px;
}

.error-text strong {
    color: var(--primary);
}

/* INTERAKTYWNY SYMULATOR */
.simulator-wrap {
    background: var(--bg-light);
    border: 1px solid var(--border-color);
    border-radius: 16px;
    padding: 30px;
    margin: 35px 0;
}

.sim-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--primary);
    letter-spacing: 1px;
    margin-bottom: 25px;
    display: block;
    text-align: center;
}

.sim-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
}

.sim-control-group {
    background: #ffffff;
    padding: 20px;
    border-radius: 12px;
    border: 1px solid var(--border-color);
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.sim-label-row {
    display: flex;
    justify-content: space-between;
    font-size: 14px;
    font-weight: 700;
    margin-bottom: 15px;
}

.sim-val {
    color: var(--accent);
    font-weight: 900;
}

input[type=range] {
    width: 100%; height: 8px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-bottom: 10px;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none; width: 24px; height: 24px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.2); cursor: pointer;
}

.sim-result-box {
    text-align: center;
    margin-top: 30px;
    padding: 25px;
    background: #ffffff;
    border-radius: 12px;
    border: 2px dashed #cbd5e1;
}

.sim-result-value {
    font-size: 36px;
    font-weight: 900;
    color: var(--danger);
    line-height: 1;
    margin-bottom: 10px;
    display: block;
}

#sim-warning {
    margin-top: 15px;
    padding: 12px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 700;
    text-align: center;
    background: #fef2f2;
    color: var(--danger);
    display: none;
}

/* LISTA DYLATACJI */
.rules-list {
    background: #eff6ff;
    border-left: 6px solid var(--accent);
    padding: 25px;
    border-radius: 0 16px 16px 0;
    margin: 30px 0;
}

.rules-list h4 { margin: 0 0 15px 0; color: #1e3a8a; font-size: 18px; font-weight: 800;}
.rules-list ul { margin: 0; padding-left: 20px; color: #1e40af; line-height: 1.7; }
.rules-list li { margin-bottom: 12px; }
.rules-list li strong { color: #1e3a8a; }

/* ZAMIAN TABELI NA KARTY */
.param-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-top: 30px;
}

.param-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    padding: 20px;
    border-radius: 16px;
    text-align: center;
    box-shadow: 0 4px 10px rgba(0,0,0,0.03);
}

.param-icon { font-size: 28px; margin-bottom: 10px; display: block; }
.param-title { font-size: 13px; font-weight: 800; color: var(--primary); text-transform: uppercase; margin-bottom: 10px; }
.param-value { font-size: 14px; font-weight: 700; color: var(--accent); margin-bottom: 10px; display: block;}
.param-danger { font-size: 12px; color: var(--danger); font-weight: 600; background: #fef2f2; padding: 6px; border-radius: 8px; }

@media (max-width: 768px) {
    .error-header { padding: 25px 20px; }
    .error-content { padding: 25px 20px; }
    .sim-grid { grid-template-columns: 1fr; gap: 15px; }
    .param-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "name": "Parametry rozszerzalności termicznej jastrychu i zasady dylatacji",
  "description": "Dane techniczne dotyczące pracy betonu w instalacjach ogrzewania podłogowego oraz normatywne wymagania dla szczelin dylatacyjnych.",
  "license": "https://projekt-ogrzewania.pl/",
  "variableMeasured": [
    {
      "@type": "PropertyValue",
      "name": "Współczynnik rozszerzalności termicznej betonu",
      "value": "0.012",
      "unitText": "mm/(m·K)"
    },
    {
      "@type": "PropertyValue",
      "name": "Maksymalna powierzchnia pola bez dylatacji",
      "value": "40",
      "unitText": "m2"
    },
    {
      "@type": "PropertyValue",
      "name": "Maksymalna długość boku pola bez dylatacji",
      "value": "8",
      "unitCode": "MTR"
    },
    {
      "@type": "PropertyValue",
      "name": "Minimalna długość osłony peszel na dylatacji",
      "value": "30",
      "unitCode": "CMT"
    }
  ],
  "creator": {
    "@type": "Person",
    "name": "Robert Kucharski"
  }
}
</script>

<div class="premium-error-box" id="expansion-app-lock">
    <div class="error-header">
        <div class="error-badge">Błąd #2</div>
        <h3>Zignorowanie dylatacji i pracy betonu</h3>
        <p style="margin:0; font-size:15px; color:#991b1b; font-weight:600;">Czyli dlaczego piękna podłoga pęka z hukiem.</p>
    </div>

    <div class="error-content">
        <p class="error-text">
            <strong>Dlaczego podłoga pęka mimo pięknie ułożonych płytek?</strong><br>
            Beton (zarówno cementowy, jak i anhydrytowy) pod wpływem zmian temperatury pracuje objętościowo. Współczynnik rozszerzalności termicznej betonu wynosi około <strong>0,012 mm/(m·K)</strong>. 
        </p>

        <div class="simulator-wrap">
            <span class="sim-title">Symulator rozszerzalności wylewki</span>
            <div class="sim-grid">
                <div class="sim-control-group">
                    <div class="sim-label-row"><span>Długość pomieszczenia (L)</span><span class="sim-val"><span id="val-length">10</span> m</span></div>
                    <input type="range" id="slider-length" min="2" max="20" step="1" value="10">
                </div>
                <div class="sim-control-group">
                    <div class="sim-label-row"><span>Różnica temperatur (ΔT)</span><span class="sim-val"><span id="val-temp">20</span> °C</span></div>
                    <input type="range" id="slider-temp" min="10" max="40" step="1" value="20">
                    <div style="font-size:11px; color:#94a3b8; margin-top:5px;">Różnica: stan zimny vs zasilanie grzewcze</div>
                </div>
            </div>

            <div class="sim-result-box">
                <span style="font-size:13px; font-weight:800; color:#64748b; text-transform:uppercase;">Wylewka wydłuży się o:</span>
                <span class="sim-result-value"><span id="result-expansion">2.4</span> mm</span>
                <p style="margin:0; font-size:14px; color:#334155; max-width: 600px; margin: 0 auto;">
                    Te milimetry to ogromna siła. Beton nie ściśnie się sam z siebie. Jeśli napotka opór (ścianę) bez dylatacji, energia rozładuje się w najsłabszym punkcie – powodując pęknięcie na środku salonu i przecinając płytki gresowe jak żyletka.
                </p>
                <div id="sim-warning">⚠️ Długość boku przekracza 8 metrów! Wymagane jest zastosowanie dylatacji pośredniej (przecięcie wylewki), w przeciwnym razie posadzka pęknie samoistnie.</div>
            </div>
        </div>

        <div style="position: absolute; left: -9999px; height: 1px; width: 1px; overflow: hidden;" aria-hidden="true">
            <table>
                <caption>Specyfikacja techniczna dylatacji i pracy betonu</caption>
                <thead>
                    <tr>
                        <th>Parametr fizyczny</th>
                        <th>Wartość normatywna</th>
                        <th>Skutek zignorowania</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Współczynnik rozszerzalności</td>
                        <td>0,012 mm/(m·K)</td>
                        <td>Praca objętościowa jastrychu (wydłużanie)</td>
                    </tr>
                    <tr>
                        <td>Maksymalna długość boku</td>
                        <td>8 metrów bieżących</td>
                        <td>Pęknięcia skurczowe wylewki</td>
                    </tr>
                    <tr>
                        <td>Maksymalna powierzchnia pola</td>
                        <td>40 m²</td>
                        <td>Pękanie płytek gresowych</td>
                    </tr>
                    <tr>
                        <td>Osłona rur (Peszel) na dylatacji</td>
                        <td>Min. 30 cm</td>
                        <td>Przecięcie rury przez pracujący beton</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="rules-list">
            <h4>Gdzie bezwzględnie stosować dylatacje?</h4>
            <ul>
                <li><strong>Progi drzwiowe</strong> – każdy otwór drzwiowy musi mieć szczelinę w wylewce.</li>
                <li><strong>Pomieszczenia w kształcie litery L</strong> – narożniki wewnętrzne to miejsca największej koncentracji naprężeń.</li>
                <li><strong>Duże pola grzejne (> 40 m²)</strong> – w przestronnym salonie należy podzielić podłogę na mniejsze sekcje (zazwyczaj co 8 metrów bieżących).</li>
                <li><strong>Przejście rur przez dylatację (Pułapka!)</strong> – rura PEX przechodząca przez szczelinę dylatacyjną musi być osłonięta peszlem (rurą karbowaną) na długości min. 30 cm od osi szczeliny. Gołą rurę pracujący beton przetnie jak nożyce.</li>
            </ul>
        </div>

        <p class="error-text">
            Kompendium wiedzy na ten temat znajdziesz w artykule: <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" style="color:var(--accent); font-weight:700; text-decoration:none;">izolacja brzegowa i dylatacje w instalacji ogrzewania podłogowego</a>.
        </p>

        <h4 style="text-align:center; font-size: 18px; margin-top: 40px; margin-bottom: 0;">Parametry Techniczne i Konsekwencje</h4>
        <div class="param-grid">
            <div class="param-card">
                <span class="param-icon">📏</span>
                <div class="param-title">Max powierzchnia pola</div>
                <span class="param-value">40 m² (lub 8 m boku)</span>
                <div class="param-danger">Brak: Pęknięcia skurczowe w wylewce</div>
            </div>
            <div class="param-card">
                <span class="param-icon">🎗️</span>
                <div class="param-title">Taśma brzegowa</div>
                <span class="param-value">Min. 8 mm grubości</span>
                <div class="param-danger">Brak: Napór na ściany (pękające tynki)</div>
            </div>
            <div class="param-card">
                <span class="param-icon">🛡️</span>
                <div class="param-title">Peszel na dylatacji</div>
                <span class="param-value">Odcinek min. 30 cm</span>
                <div class="param-danger">Brak: Przecięcie rury grzewczej</div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('expansion-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div><p>Ten moduł jest własnością Projekt-Ogrzewania.pl</p></div>';
        }
        return; 
    }

    // LOGIKA SYMULATORA
    var sliderLength = document.getElementById('slider-length');
    var sliderTemp = document.getElementById('slider-temp');
    var valLength = document.getElementById('val-length');
    var valTemp = document.getElementById('val-temp');
    var resultExpansion = document.getElementById('result-expansion');
    var warning = document.getElementById('sim-warning');

    var alpha = 0.012; // Współczynnik dla betonu

    function updateExpansion() {
        var length = parseFloat(sliderLength.value);
        var tempDiff = parseFloat(sliderTemp.value);

        valLength.innerText = length;
        valTemp.innerText = tempDiff;

        // Wyliczenie ze wzoru: ΔL = α × L × ΔT
        var deltaL = alpha * length * tempDiff;
        resultExpansion.innerText = deltaL.toFixed(1);

        // Ostrzeżenie o dylatacji pośredniej
        if (length > 8) {
            warning.style.display = 'block';
        } else {
            warning.style.display = 'none';
        }
    }

    sliderLength.addEventListener('input', updateExpansion);
    sliderTemp.addEventListener('input', updateExpansion);

    // Initial run
    updateExpansion();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --accent-light: #eff6ff;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
    
    /* Zmienne do symulatora zebry */
    --pipe-color: #ef4444;
    --cold-color: #3b82f6;
    --warm-color: #fca5a5;
}

.premium-error-box {
    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(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.error-header {
    background: #fef2f2;
    border-bottom: 1px solid #fecaca;
    padding: 35px 40px;
    position: relative;
    overflow: hidden;
}

.error-header::after {
    content: '🦓';
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 90px;
    opacity: 0.1;
}

.error-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fee2e2;
    color: var(--danger);
    padding: 6px 14px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.error-header h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--danger);
}

.error-content {
    padding: 40px;
}

.error-text {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin-bottom: 20px;
}

.error-text strong {
    color: var(--primary);
}

/* INTERAKTYWNY SYMULATOR ZEBRA */
.simulator-wrap {
    background: var(--bg-light);
    border: 1px solid var(--border-color);
    border-radius: 16px;
    padding: 30px;
    margin: 35px 0;
}

.sim-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--primary);
    letter-spacing: 1px;
    margin-bottom: 25px;
    display: block;
    text-align: center;
}

.sim-controls-zebra {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-bottom: 30px;
    background: #fff;
    padding: 20px;
    border-radius: 12px;
    border: 1px solid var(--border-color);
}

.zebra-val-display {
    font-size: 32px;
    font-weight: 900;
    color: var(--accent);
    margin-bottom: 5px;
}

.zebra-slider-wrap {
    width: 100%;
    max-width: 500px;
    margin-top: 15px;
}

input[type=range].zebra-slider {
    width: 100%; height: 8px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-bottom: 10px;
}
input[type=range].zebra-slider::-webkit-slider-thumb {
    appearance: none; width: 28px; height: 28px; background: var(--accent); border-radius: 50%; border: 4px solid white; box-shadow: 0 2px 8px rgba(0,0,0,0.2); cursor: pointer;
}

.zebra-visualizer {
    width: 100%;
    height: 120px;
    border-radius: 12px;
    border: 2px solid #cbd5e1;
    margin-bottom: 25px;
    position: relative;
    overflow: hidden;
    transition: background 0.4s ease;
}

.zebra-overlay-text {
    position: absolute;
    top: 10px;
    left: 15px;
    background: rgba(255,255,255,0.9);
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 800;
    color: var(--primary);
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

/* KARTY WYNIKÓW (ZAMIAST TABELI) */
.zebra-stats-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

.zebra-stat-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    padding: 20px;
    border-radius: 12px;
    text-align: center;
    box-shadow: 0 4px 10px rgba(0,0,0,0.03);
}

.stat-icon { font-size: 24px; margin-bottom: 8px; display: block; }
.stat-label { font-size: 11px; color: #64748b; text-transform: uppercase; font-weight: 800; margin-bottom: 8px; display: block; }
.stat-value { font-size: 15px; font-weight: 800; color: var(--primary); }
.stat-cop-high { color: var(--success); }
.stat-cop-low { color: var(--danger); }

/* SEKCJA REKOMENDACJI */
.recommendation-box {
    background: #eff6ff;
    border-left: 6px solid var(--accent);
    padding: 25px;
    border-radius: 0 16px 16px 0;
    margin: 30px 0;
}

.recommendation-box h4 { margin: 0 0 15px 0; color: #1e3a8a; font-size: 18px; font-weight: 800;}
.rec-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 12px;
}
.rec-item {
    display: flex;
    justify-content: space-between;
    background: #ffffff;
    padding: 12px 15px;
    border-radius: 8px;
    border: 1px solid #bfdbfe;
    align-items: center;
}
.rec-item span { font-size: 14px; font-weight: 600; color: #334155; }
.rec-item strong { font-size: 15px; color: var(--accent); font-weight: 900; background: #dbeafe; padding: 4px 10px; border-radius: 6px; }

@media (max-width: 768px) {
    .error-header { padding: 25px 20px; }
    .error-content { padding: 25px 20px; }
    .zebra-stats-grid { grid-template-columns: 1fr; gap: 10px; }
    .rec-item { flex-direction: column; text-align: center; gap: 8px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wpływ rozstawu rur na moc i sprawność ogrzewania podłogowego",
    "description": "Zależność między odległością rur grzewczych PEX a emitowaną mocą, komfortem cieplnym i sprawnością pompy ciepła (COP).",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Moc grzewcza przy rozstawie 10 cm",
        "value": "85",
        "unitText": "W/m2"
      },
      {
        "@type": "PropertyValue",
        "name": "Moc grzewcza przy rozstawie 15 cm",
        "value": "65",
        "unitText": "W/m2"
      },
      {
        "@type": "PropertyValue",
        "name": "Moc grzewcza przy rozstawie 25 cm",
        "value": "35",
        "unitText": "W/m2",
        "description": "Zauważalny efekt zebry termicznej (różnica temp. > 5K)"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator Efektu Zebry Termicznej",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "description": "Interaktywny symulator wizualizujący rozkład temperatur na powierzchni podłogi w zależności od rozstawu rur PEX oraz wpływ tych parametrów na współczynnik COP pompy ciepła.",
    "featureList": [
      "Wizualizacja kamery termowizyjnej dla różnych rozstawów",
      "Kalkulacja spadku mocy grzewczej",
      "Analiza komfortu 'odczucia stopy'"
    ]
  }
]
</script>

<div class="premium-error-box" id="zebra-app-lock">
    <div class="error-header">
        <div class="error-badge">Błąd #3</div>
        <h3>Nierównomierny rozstaw rur</h3>
        <p style="margin:0; font-size:15px; color:#991b1b; font-weight:600;">Oszczędność 100 metrów rury, która kosztuje komfort przez 30 lat.</p>
    </div>

    <div class="error-content">
        <p class="error-text">
            To błąd wynikający z chęci zaoszczędzenia na materiale przy układaniu ogrzewania samodzielnie. Inwestor myśli: <em>"Skoro standard to 15 cm, to ja dam co 25 cm, przecież i tak będzie ciepło"</em>. Fizyka jest tu bezlitosna.
        </p>

        <div class="simulator-wrap">
            <span class="sim-title">Symulator Efektu Zebry Termicznej</span>
            
            <div class="sim-controls-zebra">
                <span style="font-size:12px; font-weight:700; color:#64748b; text-transform:uppercase;">Wybrany rozstaw rur:</span>
                <div class="zebra-val-display"><span id="z-spacing">15</span> cm</div>
                <div class="zebra-slider-wrap">
                    <input type="range" class="zebra-slider" id="zebra-slider" min="10" max="30" step="5" value="15">
                    <div style="display:flex; justify-content:space-between; font-size:11px; font-weight:700; color:#94a3b8;">
                        <span>10 cm</span><span>15 cm</span><span>20 cm</span><span>25 cm</span><span>30 cm</span>
                    </div>
                </div>
            </div>

            <div class="zebra-visualizer" id="z-visualizer">
                <div class="zebra-overlay-text">Kamera termowizyjna (widok z góry)</div>
            </div>

            <div class="zebra-stats-grid">
                <div class="zebra-stat-card">
                    <span class="stat-icon">🔥</span>
                    <span class="stat-label">Moc Grzewcza</span>
                    <span class="stat-value" id="z-power">~65 W/m²</span>
                </div>
                <div class="zebra-stat-card">
                    <span class="stat-icon">👣</span>
                    <span class="stat-label">Odczucie stopy</span>
                    <span class="stat-value" id="z-feel">Ciepła, komfortowa</span>
                </div>
                <div class="zebra-stat-card">
                    <span class="stat-icon">⚙️</span>
                    <span class="stat-label">Sprawność (COP)</span>
                    <span class="stat-value stat-cop-high" id="z-cop">Optymalna</span>
                </div>
            </div>
            
            <div id="z-warning" style="margin-top: 15px; padding: 12px; border-radius: 8px; font-size: 13px; font-weight: 700; text-align: center; background: #fef2f2; color: var(--danger); display: none;">
                ⚠️ <strong>Uwaga!</strong> Aby ogrzać pokój przy tak rzadkim rozstawie, musisz drastycznie podnieść temperaturę zasilania kotła. Rachunki za prąd/gaz znacząco wzrosną!
            </div>
        </div>

        <p class="error-text">
            <strong>Przykład techniczny:</strong><br>
            Załóżmy, że rura PEX 16x2,0 mm ułożona jest w jastrychu o grubości 6,5 cm nad rurą. Przy rozstawie <strong>co 15 cm</strong>, temperatura powierzchni podłogi będzie niemal jednolita (różnica między punktem nad rurą a między rurami wynosi ok. 1,5-2°C – nieodczuwalna dla stopy).
            <br><br>
            Przy rozstawie <strong>co 25-30 cm</strong>, różnica temperatur na powierzchni płytek wzrasta do 5-7°C. To jest właśnie <strong>"zebra termiczna"</strong>. Człowiek wyraźnie czuje stopą naprzemienne pasy ciepła i chłodu. Im rzadszy rozstaw, tym bardziej stromo spada krzywa mocy (nawet o 45%!).
        </p>

        <div class="recommendation-box">
            <h4>Zalecane rozstawy rur:</h4>
            <div class="rec-grid">
                <div class="rec-item">
                    <span>Strefa mieszkalna (środek pokoju)</span>
                    <strong>15 cm</strong>
                </div>
                <div class="rec-item">
                    <span>Strefa brzegowa (okna, ściany zew.)</span>
                    <strong>10 cm</strong>
                </div>
                <div class="rec-item">
                    <span>Łazienka (ciepła posadzka)</span>
                    <strong>10 cm</strong>
                </div>
            </div>
        </div>

        <p class="error-text">
            Wybór odpowiedniego rozstawu to decyzja, która wpłynie na rachunki za ogrzewanie przez kolejne dekady. Szczegółową analizę tego zagadnienia przedstawiamy w tekście: <a href="https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/" style="color:var(--accent); font-weight:700; text-decoration:none;">rozstaw rur ogrzewania podłogowego przy pompie ciepła – co 10 czy 15 cm?</a>
        </p>

    </div>

    <noscript>
        <div style="padding: 20px 40px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="font-size: 16px; color: #0f172a; margin-bottom: 15px;">Zależność mocy i komfortu od rozstawu rur grzewczych</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Rozstaw rur</th>
                        <th style="padding: 10px 0; color: #475569;">Szacowana moc (przy zasilaniu 35°C)</th>
                        <th style="padding: 10px 0; color: #475569;">Komfort i odczucie stopy</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">10 cm</td>
                        <td style="padding: 10px 0;">~85 W/m²</td>
                        <td style="padding: 10px 0;">Równomierne ciepło (Idealne pod pompę ciepła)</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">15 cm</td>
                        <td style="padding: 10px 0;">~65 W/m²</td>
                        <td style="padding: 10px 0;">Komfortowe, optymalne rozwiązanie</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">25 cm</td>
                        <td style="padding: 10px 0;">~35 W/m²</td>
                        <td style="padding: 10px 0;">Zebra termiczna (wyczuwalne zimne pasy podłogi)</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">30 cm</td>
                        <td style="padding: 10px 0;">~25 W/m²</td>
                        <td style="padding: 10px 0;">Brak komfortu, drastyczny spadek sprawności</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('zebra-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div></div>';
        }
        return; 
    }

    // LOGIKA SYMULATORA ZEBRA
    var slider = document.getElementById('zebra-slider');
    var spacingVal = document.getElementById('z-spacing');
    var visualizer = document.getElementById('z-visualizer');
    var power = document.getElementById('z-power');
    var feel = document.getElementById('z-feel');
    var cop = document.getElementById('z-cop');
    var warning = document.getElementById('z-warning');

    var dataMap = {
        '10': { pwr: '~85 W/m²', feel: 'Gorąca, równomierna', copTxt: 'Wysoka (niska temp.)', copClass: 'stat-cop-high', warn: false, grad: 'repeating-linear-gradient(90deg, #ef4444, #ef4444 30px, #fca5a5 40px, #ef4444 50px)' },
        '15': { pwr: '~65 W/m²', feel: 'Ciepła, komfortowa', copTxt: 'Optymalna', copClass: 'stat-cop-high', warn: false, grad: 'repeating-linear-gradient(90deg, #ef4444, #ef4444 20px, #fecaca 45px, #ef4444 70px)' },
        '20': { pwr: '~50 W/m²', feel: 'Letnia, wyczuwalne przerwy', copTxt: 'Obniżona', copClass: 'stat-cop-low', warn: false, grad: 'repeating-linear-gradient(90deg, #ef4444, #ef4444 15px, #bfdbfe 55px, #ef4444 95px)' },
        '25': { pwr: '~35 W/m²', feel: 'Wyraźna "zebra termiczna"', copTxt: 'Niska (wyższa temp.)', copClass: 'stat-cop-low', warn: true, grad: 'repeating-linear-gradient(90deg, #ef4444, #ef4444 10px, #60a5fa 65px, #ef4444 120px)' },
        '30': { pwr: '~25 W/m²', feel: 'Agresywna zebra (Zimna)', copTxt: 'Bardzo niska!', copClass: 'stat-cop-low', warn: true, grad: 'repeating-linear-gradient(90deg, #ef4444, #ef4444 8px, #2563eb 80px, #ef4444 150px)' }
    };

    function updateZebra() {
        var val = slider.value;
        var data = dataMap[val];

        spacingVal.innerText = val;
        power.innerText = data.pwr;
        feel.innerText = data.feel;
        
        cop.innerText = data.copTxt;
        cop.className = 'stat-value ' + data.copClass;

        visualizer.style.background = data.grad;

        if (data.warn) {
            warning.style.display = 'block';
        } else {
            warning.style.display = 'none';
        }
    }

    slider.addEventListener('input', updateZebra);
    updateZebra(); // init
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --accent-light: #eff6ff;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-error-box {
    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(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.error-header {
    background: #fef2f2;
    border-bottom: 1px solid #fecaca;
    padding: 35px 40px;
    position: relative;
    overflow: hidden;
}

.error-header::after {
    content: '💸';
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 90px;
    opacity: 0.1;
}

.error-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fee2e2;
    color: var(--danger);
    padding: 6px 14px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.error-header h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--danger);
}

.error-content {
    padding: 40px;
}

.error-text {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin-bottom: 20px;
}

.error-text strong {
    color: var(--primary);
}

/* INTERAKTYWNY SYMULATOR STRAT CIEPŁA */
.simulator-wrap {
    background: var(--bg-light);
    border: 1px solid var(--border-color);
    border-radius: 16px;
    padding: 30px;
    margin: 35px 0;
}

.sim-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--primary);
    letter-spacing: 1px;
    margin-bottom: 25px;
    display: block;
    text-align: center;
}

.sim-controls-insulation {
    display: flex;
    flex-direction: column;
    align-items: center;
    margin-bottom: 30px;
    background: #fff;
    padding: 20px 30px;
    border-radius: 12px;
    border: 1px solid var(--border-color);
}

.insulation-val-display {
    font-size: 32px;
    font-weight: 900;
    color: var(--accent);
    margin-bottom: 5px;
}

.insulation-slider-wrap {
    width: 100%;
    max-width: 500px;
    margin-top: 15px;
}

input[type=range].insulation-slider {
    width: 100%; height: 8px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-bottom: 10px;
}
input[type=range].insulation-slider::-webkit-slider-thumb {
    appearance: none; width: 28px; height: 28px; background: var(--accent); border-radius: 50%; border: 4px solid white; box-shadow: 0 2px 8px rgba(0,0,0,0.2); cursor: pointer;
}

/* KARTY WYNIKÓW */
.insulation-stats-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

.insulation-stat-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    padding: 20px;
    border-radius: 12px;
    text-align: center;
    box-shadow: 0 4px 10px rgba(0,0,0,0.03);
    position: relative;
    overflow: hidden;
}

.stat-icon { font-size: 24px; margin-bottom: 8px; display: block; }
.stat-label { font-size: 11px; color: #64748b; text-transform: uppercase; font-weight: 800; margin-bottom: 8px; display: block; }
.stat-value { font-size: 20px; font-weight: 900; color: var(--primary); }
.stat-loss-high { color: var(--danger); }
.stat-loss-low { color: var(--success); }

#ins-warning {
    margin-top: 20px;
    padding: 15px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 700;
    text-align: center;
    background: #fef2f2;
    color: var(--danger);
    border: 1px solid #fecaca;
    display: none;
}

#ins-success {
    margin-top: 20px;
    padding: 15px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 700;
    text-align: center;
    background: #f0fdf4;
    color: var(--success);
    border: 1px solid #bbf7d0;
    display: none;
}

/* SEKCJA TAŚMY BRZEGOWEJ */
.edge-tape-box {
    background: #fff7ed;
    border-left: 6px solid var(--warning);
    padding: 25px;
    border-radius: 0 16px 16px 0;
    margin: 30px 0;
}

.edge-tape-box h4 { margin: 0 0 10px 0; color: #9a3412; font-size: 18px; font-weight: 800;}
.edge-tape-box p { margin: 0; color: #78350f; font-size: 15px; line-height: 1.6; }

/* LINK DO ARTYKUŁU */
.article-link-box {
    background: #eff6ff;
    padding: 20px;
    border-radius: 12px;
    border: 1px solid #bfdbfe;
    display: flex;
    align-items: center;
    gap: 15px;
    text-decoration: none;
    transition: 0.3s;
    margin-top: 25px;
}
.article-link-box:hover {
    background: #dbeafe;
    transform: translateY(-2px);
}
.article-link-icon {
    font-size: 24px;
}
.article-link-text {
    font-size: 14px;
    font-weight: 700;
    color: var(--accent);
}

@media (max-width: 768px) {
    .error-header { padding: 25px 20px; }
    .error-content { padding: 25px 20px; }
    .insulation-stats-grid { grid-template-columns: 1fr; gap: 10px; }
    .sim-controls-insulation { padding: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Zależność grubości izolacji podłogi od strat ciepła do gruntu",
    "description": "Kalkulator strat finansowych i energetycznych wynikających z zastosowania niewystarczającej grubości styropianu EPS pod ogrzewaniem podłogowym na gruncie.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Współczynnik przenikania ciepła (U max dla podłogi)",
        "value": "0.18",
        "unitText": "W/(m2K)",
        "description": "Wymaganie zgodnie z WT 2021"
      },
      {
        "@type": "PropertyValue",
        "name": "Wymagana grubość styropianu (WT 2021)",
        "value": "12-15",
        "unitCode": "CMT"
      },
      {
        "@type": "PropertyValue",
        "name": "Ucieczka ciepła przy izolacji 5cm",
        "value": "25-30",
        "unitText": "%"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Kalkulator Strat Finansowych Izolacji Podłogi",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "description": "Narzędzie symulujące roczne i wieloletnie straty finansowe wynikające z grubości zastosowanej izolacji termicznej pod ogrzewaniem podłogowym na gruncie.",
    "featureList": [
      "Obliczanie procentowej ucieczki ciepła w grunt",
      "Estymacja kosztów w perspektywie 30 lat",
      "Weryfikacja zgodności z normą WT 2021"
    ]
  }
]
</script>

<div class="premium-error-box" id="insulation-app-lock">
    <div class="error-header">
        <div class="error-badge">Błąd #4</div>
        <h3>Niewłaściwa izolacja termiczna i brzegowa</h3>
        <p style="margin:0; font-size:15px; color:#991b1b; font-weight:600;">Czyli grzanie fundamentów sąsiada.</p>
    </div>

    <div class="error-content">
        <p class="error-text">
            <strong>Fizyka ucieczki ciepła w dół</strong><br>
            Samodzielny montaż ogrzewania podłogowego często skupia się na tym, co widać (rury), a nie na tym, co jest pod spodem (styropian). Tymczasem ciepło, zgodnie z II zasadą termodynamiki, płynie w kierunku niższej temperatury. 
        </p>

        <div class="simulator-wrap">
            <span class="sim-title">Kalkulator Strat Finansowych (Dla domu 100 m²)</span>
            
            <div class="sim-controls-insulation">
                <span style="font-size:12px; font-weight:700; color:#64748b; text-transform:uppercase;">Grubość styropianu na gruncie:</span>
                <div class="insulation-val-display"><span id="i-thickness">5</span> cm</div>
                <div class="insulation-slider-wrap">
                    <input type="range" class="insulation-slider" id="ins-slider" min="2" max="25" step="1" value="5">
                    <div style="display:flex; justify-content:space-between; font-size:11px; font-weight:700; color:#94a3b8;">
                        <span>2 cm</span><span>WT2021</span><span>25 cm</span>
                    </div>
                </div>
                <span style="font-size:11px; color:#64748b; margin-top:10px;">Założenia: Zapotrzebowanie 10000 kWh/rok, Cena energii: 0,30 zł/kWh</span>
            </div>

            <div class="insulation-stats-grid">
                <div class="insulation-stat-card">
                    <span class="stat-icon">📉</span>
                    <span class="stat-label">Ciepło uciekające w ziemię</span>
                    <span class="stat-value stat-loss-high" id="i-percent">25%</span>
                </div>
                <div class="insulation-stat-card">
                    <span class="stat-icon">💸</span>
                    <span class="stat-label">Roczna strata finansowa</span>
                    <span class="stat-value stat-loss-high" id="i-cost-year">750 zł</span>
                </div>
                <div class="insulation-stat-card">
                    <span class="stat-icon">🔥</span>
                    <span class="stat-label">Strata w ciągu 30 lat</span>
                    <span class="stat-value stat-loss-high" id="i-cost-30">22 500 zł</span>
                </div>
            </div>
            
            <div id="ins-warning">
                ⚠️ <strong>Fatalna izolacja!</strong> Nie spełniasz norm budowlanych WT 2021. Znaczna część wyprodukowanego ciepła trafia do ziemi, a Ty wyrzucasz pieniądze w błoto!
            </div>
            <div id="ins-success">
                ✅ <strong>Zgodność z normą WT 2021.</strong> Przy warstwie 15 cm różnica w koszcie zakupu styropianu zwraca się zaledwie w kilka lat dzięki zaoszczędzonej energii.
            </div>
        </div>

        <p class="error-text">
            Przykład z symulatora wyraźnie pokazuje, że przy 5 cm izolacji wyrzucasz przez podłogę tysiące złotych. Różnica w cenie materiału między 5 cm a 15 cm styropianu EPS 100 to zazwyczaj około 1500 zł na 100 m². Zwraca się to błyskawicznie.
        </p>
        <p class="error-text">
            <strong>Wymagania techniczne WT 2021</strong> – wartość współczynnika przenikania ciepła $U_{max}$ dla podłogi na gruncie wynosi 0,18 $W/(m^2K)$. Aby to osiągnąć, potrzebujesz <strong>minimum 12-15 cm styropianu</strong> (lub styroduru XPS o lepszym współczynniku $\lambda$). Na stropie między piętrami wewnątrz ogrzewanej bryły budynku wystarczy 3-5 cm (głównie jako izolacja akustyczna i wyrównanie dla instalacji).
        </p>

        <a href="https://projekt-ogrzewania.pl/jakie-sa-najlepsze-sposoby-izolacji-pod-ogrzewanie-podlogowe/" class="article-link-box">
            <span class="article-link-icon">📖</span>
            <span class="article-link-text">Jakie są najlepsze sposoby izolacji pod ogrzewanie podłogowe? Zobacz pełny poradnik →</span>
        </a>

        <div class="edge-tape-box">
            <h4>Taśma brzegowa – nie tylko dla dylatacji!</h4>
            <p>
                Zapomnienie o taśmie brzegowej przy ścianach to nie tylko problem pękania betonu (Błąd #2). To również <strong>gigantyczny mostek termiczny</strong>. Jeśli wylewka dotyka zimnej ściany fundamentowej, ciepło z Twojej podłogi ucieka wprost w górę ściany i na zewnątrz budynku. Taśma brzegowa z pianki polietylenowej pełni krytyczną funkcję izolatora termicznego na całym obwodzie pomieszczenia.
            </p>
        </div>

    </div>

    <noscript>
        <div style="padding: 20px 40px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="font-size: 16px; color: #0f172a; margin-bottom: 15px;">Skutki błędów w izolacji termicznej podłogi na gruncie</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Grubość styropianu (EPS 100)</th>
                        <th style="padding: 10px 0; color: #475569;">Status i ucieczka ciepła w grunt</th>
                        <th style="padding: 10px 0; color: #475569;">Przewidywana strata po 30 latach (dom 100 m2)</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">5 cm</td>
                        <td style="padding: 10px 0;">Krytyczny błąd (strata ok. 25-30%)</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">~ 22 500 PLN</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">10 cm</td>
                        <td style="padding: 10px 0;">Poniżej aktualnych norm WT</td>
                        <td style="padding: 10px 0;">Znaczna ucieczka ciepła</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">12-15 cm</td>
                        <td style="padding: 10px 0;">Normatywna (zgodna z WT 2021)</td>
                        <td style="padding: 10px 0; color: #16a34a; font-weight: bold;">Optymalne koszty eksploatacji</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('insulation-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div></div>';
        }
        return; 
    }

    // LOGIKA SYMULATORA STRAT CIEPŁA
    var slider = document.getElementById('ins-slider');
    var valThick = document.getElementById('i-thickness');
    var valPercent = document.getElementById('i-percent');
    var valCostYear = document.getElementById('i-cost-year');
    var valCost30 = document.getElementById('i-cost-30');
    var warning = document.getElementById('ins-warning');
    var success = document.getElementById('ins-success');

    // Stałe z tekstu
    var baseEnergyKwh = 10000;
    var pricePerKwh = 0.30;

    function updateInsulation() {
        var eps = parseFloat(slider.value);
        valThick.innerText = eps;

        // Uproszczony model spadku strat zgodny z tekstem użytkownika (5cm = 25%)
        // Wzór hiperboliczny: loss = 125 / eps_thickness
        var lossPercent = 125 / eps;
        
        // Zabezpieczenie przed nierealnymi ekstremami na wykresie
        if (lossPercent > 62.5) lossPercent = 62.5; 

        var lostKwh = baseEnergyKwh * (lossPercent / 100);
        var costYear = lostKwh * pricePerKwh;
        var cost30y = costYear * 30;

        valPercent.innerText = Math.round(lossPercent) + '%';
        
        // Formatowanie waluty z separatorem spacji
        valCostYear.innerText = Math.round(costYear).toLocaleString('pl-PL') + ' zł';
        valCost30.innerText = Math.round(cost30y).toLocaleString('pl-PL') + ' zł';

        // Stylowanie wyników
        var valueElements = [valPercent, valCostYear, valCost30];
        if (eps < 12) {
            valueElements.forEach(function(el) {
                el.classList.remove('stat-loss-low');
                el.classList.add('stat-loss-high');
            });
            warning.style.display = 'block';
            success.style.display = 'none';
        } else {
            valueElements.forEach(function(el) {
                el.classList.remove('stat-loss-high');
                el.classList.add('stat-loss-low');
            });
            warning.style.display = 'none';
            success.style.display = 'block';
        }
    }

    slider.addEventListener('input', updateInsulation);
    updateInsulation(); // Inicjalizacja
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --accent-light: #eff6ff;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-error-box {
    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(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.error-header {
    background: #fef2f2;
    border-bottom: 1px solid #fecaca;
    padding: 35px 40px;
    position: relative;
    overflow: hidden;
}

.error-header::after {
    content: '🛑';
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 90px;
    opacity: 0.1;
}

.error-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fee2e2;
    color: var(--danger);
    padding: 6px 14px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.error-header h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--danger);
}

.error-content {
    padding: 40px;
}

.error-text {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin-bottom: 20px;
}

.error-text strong {
    color: var(--primary);
}

/* INTERAKTYWNY SYMULATOR OPORÓW */
.simulator-wrap {
    background: var(--bg-light);
    border: 1px solid var(--border-color);
    border-radius: 16px;
    padding: 30px;
    margin: 35px 0;
}

.sim-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--primary);
    letter-spacing: 1px;
    margin-bottom: 25px;
    display: block;
    text-align: center;
}

.sim-controls-loop {
    background: #fff;
    padding: 20px 30px;
    border-radius: 12px;
    border: 1px solid var(--border-color);
    margin-bottom: 25px;
}

.loop-val-display {
    font-size: 36px;
    font-weight: 900;
    color: var(--accent);
    text-align: center;
    margin: 10px 0;
}

input[type=range].loop-slider {
    width: 100%; height: 8px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-bottom: 10px;
}
input[type=range].loop-slider::-webkit-slider-thumb {
    appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer;
}

.loop-stats-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-bottom: 20px;
}

.loop-stat-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    padding: 15px;
    border-radius: 12px;
    text-align: center;
    box-shadow: 0 4px 10px rgba(0,0,0,0.03);
}

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

.pump-load-container {
    height: 12px;
    background: #e2e8f0;
    border-radius: 6px;
    overflow: hidden;
    margin-top: 15px;
}

.pump-load-bar {
    height: 100%;
    width: 20%;
    background: var(--success);
    transition: 0.3s ease;
}

.sim-msg {
    margin-top: 15px;
    padding: 12px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 700;
    text-align: center;
}

.msg-success { background: #f0fdf4; color: var(--success); border: 1px solid #bbf7d0; }
.msg-warning { background: #fffbeb; color: var(--warning); border: 1px solid #fde68a; }
.msg-danger { background: #fef2f2; color: var(--danger); border: 1px solid #fecaca; }

/* ALERT ZAŁAMANIA RURY */
.kink-alert-box {
    background: #fef2f2;
    border-left: 6px solid var(--danger);
    padding: 25px;
    border-radius: 0 16px 16px 0;
    margin: 35px 0;
    display: flex;
    gap: 20px;
    align-items: center;
}

.kink-icon {
    font-size: 40px;
    flex-shrink: 0;
}

.kink-content h4 { margin: 0 0 8px 0; color: #991b1b; font-size: 18px; font-weight: 800;}
.kink-content p { margin: 0; color: #7f1d1d; font-size: 15px; line-height: 1.6; }
.kink-content strong { color: #7f1d1d; background: #fee2e2; padding: 2px 6px; border-radius: 4px;}

/* LINK DO ARTYKUŁU */
.article-link-box {
    background: #eff6ff;
    padding: 20px;
    border-radius: 12px;
    border: 1px solid #bfdbfe;
    display: flex;
    align-items: center;
    gap: 15px;
    text-decoration: none;
    transition: 0.3s;
    margin-top: 25px;
}
.article-link-box:hover {
    background: #dbeafe;
    transform: translateY(-2px);
}
.article-link-icon { font-size: 24px; }
.article-link-text { font-size: 14px; font-weight: 700; color: var(--accent); }

@media (max-width: 768px) {
    .error-header { padding: 25px 20px; }
    .error-content { padding: 25px 20px; }
    .loop-stats-grid { grid-template-columns: 1fr; }
    .kink-alert-box { flex-direction: column; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Kalkulator oporów hydraulicznych i limitów długości pętli ogrzewania podłogowego",
    "description": "Limity projektowe i hydrauliczne dla długości pętli rur PEX 16mm w instalacjach ogrzewania podłogowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Maksymalna długość pętli (PEX 16x2.0)",
        "value": "100",
        "unitCode": "MTR",
        "description": "Twarda granica długości w celu uniknięcia przeciążenia pompy obiegowej"
      },
      {
        "@type": "PropertyValue",
        "name": "Optymalna długość pętli",
        "value": "80-90",
        "unitCode": "MTR"
      },
      {
        "@type": "PropertyValue",
        "name": "Szacunkowy opór liniowy rury 16mm (przy przepływie 1.5 l/min)",
        "value": "1.2",
        "unitText": "mbar/m"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Kalkulator oporów hydraulicznych pętli PEX",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "description": "Interaktywne narzędzie pozwalające obliczyć opory liniowe i całkowite pętli ogrzewania podłogowego oraz zweryfikować obciążenie pompy obiegowej.",
    "featureList": [
      "Obliczanie oporu jednostkowego rury",
      "Kalkulacja całkowitego oporu z uwzględnieniem armatury",
      "Wizualizacja obciążenia granicznego pompy"
    ]
  }
]
</script>

<div class="premium-error-box" id="loop-app-lock">
    <div class="error-header">
        <div class="error-badge">Błąd #5</div>
        <h3>Zbyt długie pętle i załamania rur</h3>
        <p style="margin:0; font-size:15px; color:#991b1b; font-weight:600;">Czyli moment, w którym pompa obiegowa mówi "dość".</p>
    </div>

    <div class="error-content">
        <p class="error-text">
            <strong>Hydraulika dla opornych: Dlaczego 120 metrów rury to katastrofa?</strong><br>
            Woda płynąca w rurze PEX 16x2,0 mm napotyka <strong>opory liniowe i miejscowe</strong>. Każdy metr rury, każde kolanko i każda spinka to przeszkoda dla przepływu. Jeśli pętla jest za długa, opór hydrauliczny przewyższa wysokość podnoszenia pompy obiegowej (zazwyczaj jest to 4-6 metrów słupa wody dla całego układu).
        </p>

        <div class="simulator-wrap">
            <span class="sim-title">Kalkulator oporów hydraulicznych (Uproszczony)</span>
            <div style="font-size:11px; text-align:center; color:#64748b; margin-bottom:15px;">Dla rury PEX 16x2,0 przy przepływie ~1,5 l/min</div>
            
            <div class="sim-controls-loop">
                <span style="font-size:12px; font-weight:700; color:#64748b; text-transform:uppercase; text-align:center; display:block;">Długość pojedynczej pętli:</span>
                <div class="loop-val-display"><span id="l-length">120</span> m</div>
                <input type="range" class="loop-slider" id="loop-slider" min="30" max="150" step="1" value="120">
                <div style="display:flex; justify-content:space-between; font-size:11px; font-weight:700; color:#94a3b8;">
                    <span>30 m</span><span>90 m (Max)</span><span>150 m</span>
                </div>
            </div>

            <div class="loop-stats-grid">
                <div class="loop-stat-card">
                    <span class="stat-label">Opór jednostkowy rury (Liniowy)</span>
                    <span class="stat-value" id="l-linear">144.0 mbar</span>
                </div>
                <div class="loop-stat-card">
                    <span class="stat-label">Opór całkowity (+ zawory/kolana ~40%)</span>
                    <span class="stat-value" id="l-total">1.47 m H₂O</span>
                </div>
            </div>

            <div style="font-size:11px; font-weight:700; color:#64748b; text-transform:uppercase;">Obciążenie graniczne dla pętli 16mm:</div>
            <div class="pump-load-container">
                <div class="pump-load-bar" id="l-bar"></div>
            </div>
            
            <div id="l-msg" class="sim-msg msg-danger">
                ❌ Katastrofa! Opór przekracza możliwości standardowej pompy dla jednego obwodu.
            </div>
        </div>

        <p class="error-text">
            Do oporu samej rury dochodzą opory na rozdzielaczu, zaworach i kolanach (z reguły to 30-50% więcej). 
            Jeśli różnica długości między pętlami jest duża, musisz zdławić krótsze pętle zaworami, aby zmusić wodę do płynięcia w te dłuższe. To generuje hałas (szum wody w rotametrach) i niepotrzebne obciążenie pompy.
        </p>

        <p class="error-text">
            <strong>Maksymalna długość pętli (rura 16 mm):</strong> Nie przekraczaj 100 metrów! Idealnie trzymać się wartości 80-90 m, aby mieć margines na nierówności i strefy brzegowe.
        </p>

        <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/" class="article-link-box">
            <span class="article-link-icon">📏</span>
            <span class="article-link-text">Dlaczego 100 metrów to twarda granica? Przeczytaj pełną analizę długości obwodów grzewczych →</span>
        </a>

        <div class="kink-alert-box">
            <div class="kink-icon">⚠️</div>
            <div class="kink-content">
                <h4>Błąd montażu: Załamanie (złamanie) rury</h4>
                <p>
                    Rury PERT i PEX są elastyczne, ale mają swoją granicę. Jeśli przy układaniu rury zginasz ją pod kątem ostrym (bez użycia sprężyny zewnętrznej lub wewnętrznej do gięcia), na zewnętrznym łuku tworzy się <strong>białe przełamanie</strong>. 
                    <br><br>
                    To znak, że struktura polimeru oraz wkładka aluminiowa (w PEX) zostały naruszone. W tym miejscu rura traci wytrzymałość mechaniczną i pod wpływem ciągłych skoków ciśnienia oraz temperatury <strong>pęknie w ciągu 5-10 lat</strong>. Jeśli zobaczysz takie miejsce na budowie – bezwzględnie wytnij je i połącz rurę <strong>systemową złączką zaprasowywaną</strong> (złączki zaciskowe/prasowane można bezpiecznie zatapiać w wylewce, w przeciwieństwie do starych mitów).
                </p>
            </div>
        </div>

    </div>

    <noscript>
        <div style="padding: 20px 40px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="font-size: 16px; color: #0f172a; margin-bottom: 15px;">Limity długości pętli grzewczych i opory hydrauliczne</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Długość pętli (Rura 16x2.0)</th>
                        <th style="padding: 10px 0; color: #475569;">Szacowany opór całkowity</th>
                        <th style="padding: 10px 0; color: #475569;">Status i obciążenie pompy</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">Do 90 m</td>
                        <td style="padding: 10px 0;">&lt; 1.1 m H₂O</td>
                        <td style="padding: 10px 0; color: #16a34a; font-weight: bold;">Optymalne (Bezpieczne)</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">90 m - 100 m</td>
                        <td style="padding: 10px 0;">~ 1.2 m H₂O</td>
                        <td style="padding: 10px 0; color: #ea580c; font-weight: bold;">Graniczne (Dopuszczalne)</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Powyżej 100 m (np. 120 m)</td>
                        <td style="padding: 10px 0;">&gt; 1.45 m H₂O</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">Krytyczne (Przeciążenie pompy)</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('loop-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div></div>';
        }
        return; 
    }

    // LOGIKA SYMULATORA OPORÓW
    var slider = document.getElementById('loop-slider');
    var valLength = document.getElementById('l-length');
    var valLinear = document.getElementById('l-linear');
    var valTotal = document.getElementById('l-total');
    var bar = document.getElementById('l-bar');
    var msg = document.getElementById('l-msg');

    function updateLoop() {
        var L = parseFloat(slider.value);
        valLength.innerText = L;

        // Wartości z tekstu użytkownika:
        // Opór jedn. = 1.2 mbar/m
        // Opór całkowity (dla 120m) = 144 mbar = 1.47 m H2O
        // Dodatki miejscowe = +40% (uśrednione 30-50%)

        var linearMbar = L * 1.2;
        var totalMbar = linearMbar * 1.4; // dodajemy opory miejscowe i rozdzielacza
        
        // Przelicznik mbar na metry słupa wody (100 mbar to ok. 1.02 m H2O)
        var totalH2O = totalMbar * 0.0102;

        valLinear.innerText = linearMbar.toFixed(1) + ' mbar';
        valTotal.innerText = totalH2O.toFixed(2) + ' m H₂O';

        // Obliczanie paska (skala do 150m)
        var percent = (L / 150) * 100;
        bar.style.width = percent + '%';

        if (L <= 90) {
            bar.style.backgroundColor = 'var(--success)';
            msg.innerText = "✅ Optymalna długość pętli. Woda przepłynie bez obciążania pompy.";
            msg.className = "sim-msg msg-success";
        } else if (L <= 100) {
            bar.style.backgroundColor = 'var(--warning)';
            msg.innerText = "⚠️ Długość graniczna! Zbliżasz się do maksymalnych akceptowalnych oporów dla rury 16mm.";
            msg.className = "sim-msg msg-warning";
        } else {
            bar.style.backgroundColor = 'var(--danger)';
            msg.innerText = "❌ Katastrofa hydrauliczna! Opór drastycznie przewyższa normę. Pętla nie dogrzeje pomieszczenia.";
            msg.className = "sim-msg msg-danger";
        }
    }

    slider.addEventListener('input', updateLoop);
    updateLoop(); // Inicjalizacja
});
</script>



<style>
:root {
    --primary-hvac: #0f172a;
    --accent-hvac: #2563eb;
    --bg-tip: #f1f5f9;
}

/* Dodano lekki margines górny dla całego kontenera w związku z H2 */
.expert-tip-wrapper {
    max-width: 850px;
    margin: 50px auto 40px auto;
}

/* Nowy styl dla H2 */
.expert-tip-wrapper h2 {
    font-family: 'Inter', -apple-system, sans-serif;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary-hvac);
    margin: 0 0 20px 0;
    text-align: center;
}

.expert-tip-container {
    background: var(--bg-tip);
    border-radius: 20px;
    padding: 30px;
    display: flex;
    gap: 25px;
    align-items: center;
    border-left: 6px solid var(--accent-hvac);
    position: relative;
    font-family: 'Inter', -apple-system, sans-serif;
    text-align: left;
}

.expert-tip-photo-wrap {
    flex-shrink: 0;
    width: 90px;
    height: 90px;
    position: relative;
}

.expert-tip-photo {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    object-position: center top;
    border: 3px solid #ffffff;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}

.expert-tip-photo-wrap::after {
    content: '📐';
    position: absolute;
    bottom: -5px;
    right: -5px;
    background: #ffffff;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.expert-tip-content {
    flex-grow: 1;
}

.expert-tip-label {
    display: block;
    font-size: 12px;
    font-weight: 800;
    color: var(--accent-hvac);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
}

.expert-tip-text {
    font-size: 16px;
    line-height: 1.6;
    color: var(--primary-hvac);
    font-style: italic;
    margin: 0;
}

.expert-tip-signature {
    display: block;
    margin-top: 10px;
    font-size: 13px;
    font-weight: 700;
    color: #64748b;
}

@media (max-width: 600px) {
    .expert-tip-container {
        flex-direction: column;
        text-align: center;
        padding: 25px;
    }
    .expert-tip-photo-wrap {
        margin-bottom: 10px;
    }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Projekt instalacji to dla wykonawcy świętość, a dla Ciebie podstawa rzetelnej inwentaryzacji powykonawczej. Zanim wylejesz beton, zrób dokładne zdjęcia i zweryfikuj, czy każda pętla leży dokładnie tak, jak przewidział projektant.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "CEO & Główny Projektant",
      "worksFor": {
        "@type": "Organization",
        "name": "Projekt-Ogrzewania.pl"
      }
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Kluczowe zalecenia inżynierskie przed wylewką betonu",
    "description": "Zestawienie procedur weryfikacyjnych dla inwestora przed przyjazdem betoniarki, mających na celu zapewnienie zgodności montażu z projektem hydraulicznym.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Dokumentacja fotograficzna",
        "description": "Rzetelna inwentaryzacja powykonawcza przed ukryciem rur."
      },
      {
        "@type": "PropertyValue",
        "name": "Weryfikacja układu pętli",
        "description": "Sprawdzenie zgodności fizycznego montażu z projektem hydraulicznym."
      },
      {
        "@type": "PropertyValue",
        "name": "Zgodność z obliczeniami",
        "description": "Gwarancja osiągnięcia zakładanej mocy grzewczej oraz optymalizacji kosztów eksploatacji."
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="expert-tip-wrapper">
    <h2><span style="margin-right:10px">🛡️</span>Robert Kucharski: Moja rekomendacja dla inwestorów</h2>
    
    <div class="expert-tip-container" id="expert-tip-hvac">
        <div class="expert-tip-photo-wrap">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="expert-tip-photo" loading="lazy">
        </div>
        <div class="expert-tip-content">
            <span class="expert-tip-label">Twoja polisa bezpieczeństwa</span>
            <p class="expert-tip-text">
                "Projekt instalacji to dla wykonawcy świętość, a dla Ciebie podstawa rzetelnej inwentaryzacji powykonawczej. Zanim wylejesz beton, zrób dokładne zdjęcia i zweryfikuj, czy każda pętla leży dokładnie tak, jak przewidział projektant. Tylko pełna zgodność z obliczeniami hydraulicznymi gwarantuje, że Twoje ogrzewanie osiągnie zakładaną moc i niskie koszty eksploatacji."
            </p>
            <span class="expert-tip-signature">— Robert Kucharski, CEO & Główny Projektant Projekt-Ogrzewania.pl</span>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #f1f5f9; border-radius: 20px; margin-top: 20px; font-family: sans-serif;">
            <h3 style="font-size: 16px; color: #0f172a; margin-bottom: 15px;">Zalecenia inżynierskie przed wylewką betonu</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Działanie inwestora</th>
                        <th style="padding: 10px 0; color: #475569;">Cel i rekomendacja inżynierska</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">Dokumentacja fotograficzna</td>
                        <td style="padding: 10px 0;">Rzetelna inwentaryzacja powykonawcza przed ukryciem rur.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">Weryfikacja układu pętli</td>
                        <td style="padding: 10px 0;">Sprawdzenie zgodności fizycznego montażu z projektem hydraulicznym.</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Zgodność z obliczeniami</td>
                        <td style="padding: 10px 0;">Gwarancja osiągnięcia zakładanej mocy grzewczej i niskich kosztów.</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // ZABEZPIECZENIE DOMENOWE (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('expert-tip-hvac');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 200px; font-family: sans-serif; border-radius: 20px; width: 100%;">
                    <span style="font-size: 32px; margin-bottom: 15px;">🔒</span>
                    <div style="margin-top:0; font-size: 20px; font-weight: bold; margin-bottom: 10px;">Wskazówka ekspercka chroniona prawem autorskim</div>
                    <p style="font-size: 14px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten moduł jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został skopiowany nielegalnie.</p>
                </div>
            `;
            container.style.borderLeft = 'none';
            container.style.background = 'transparent';
            container.style.padding = '0';
        }
    }
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-params {
    max-width: 1150px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
}

.params-title {
    text-align: center;
    margin-bottom: 40px;
}

.params-title h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 10px 0;
    color: var(--primary);
}

.params-title p {
    color: #64748b;
    margin: 0;
    font-size: 16px;
    line-height: 1.6;
}

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

.param-card {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    padding: 25px;
    display: flex;
    flex-direction: column;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.param-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 20px 40px -10px rgba(37, 99, 235, 0.12);
    border-color: #bfdbfe;
}

.card-header {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 2px dashed #e2e8f0;
}

.icon-box {
    width: 42px;
    height: 42px;
    background: #eff6ff;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    flex-shrink: 0;
}

.header-text h4 {
    margin: 0;
    font-size: 15px;
    font-weight: 800;
    line-height: 1.3;
}

.header-text span {
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 0.5px;
}

.result-box {
    background: var(--bg-light);
    padding: 15px;
    border-radius: 12px;
    text-align: center;
    margin-bottom: 15px;
    border-top: 3px solid var(--accent);
    flex-grow: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.r-thick {
    display: block;
    font-size: 16px;
    font-weight: 800;
    color: var(--primary);
}

.r-value {
    display: inline-block;
    background: #ffffff;
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 700;
    color: var(--accent);
    margin-top: 8px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.05);
}

.justification {
    font-size: 12px;
    line-height: 1.5;
    color: #475569;
    margin: 0;
    background: #f8fafc;
    padding: 12px;
    border-radius: 10px;
    border-left: 3px solid #cbd5e1;
}

.justification strong {
    color: var(--danger);
}

@media (max-width: 950px) {
    .param-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 600px) {
    .param-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "name": "Ściąga parametrów technicznych do montażu ogrzewania podłogowego",
  "description": "Zestawienie najważniejszych wartości technicznych i normatywnych wymaganych podczas budowy instalacji HVAC (podłogówki).",
  "license": "https://projekt-ogrzewania.pl/",
  "variableMeasured": [
    { "@type": "PropertyValue", "name": "Grubość styropianu na gruncie", "value": "15-20", "unitCode": "CMT" },
    { "@type": "PropertyValue", "name": "Folia PE pod styropian (grubość)", "value": "0.2", "unitText": "mm" },
    { "@type": "PropertyValue", "name": "Wysokość taśmy brzegowej ponad wylewkę", "value": "15", "unitCode": "CMT" },
    { "@type": "PropertyValue", "name": "Rozstaw rur (środek pomieszczenia)", "value": "15", "unitCode": "CMT" },
    { "@type": "PropertyValue", "name": "Rozstaw rur (strefa brzegowa)", "value": "10", "unitCode": "CMT" },
    { "@type": "PropertyValue", "name": "Maksymalna długość pętli PEX 16x2", "value": "90", "unitCode": "MTR" },
    { "@type": "PropertyValue", "name": "Ciśnienie próby szczelności", "value": "6", "unitCode": "BAR" },
    { "@type": "PropertyValue", "name": "Czas dojrzewania jastrychu cementowego", "value": "28", "unitText": "dni" },
    { "@type": "PropertyValue", "name": "Wygrzewanie wstępne (Start)", "value": "20", "unitText": "°C" }
  ],
  "creator": {
    "@type": "Person",
    "name": "Robert Kucharski"
  }
}
</script>

<div class="premium-params" id="params-app">
    <div class="params-title">
        <h2>Tabela parametrów technicznych</h2>
        <p>Ściąga dla samodzielnego montażu – najważniejsze wartości w pigułce.</p>
    </div>

    <div class="param-grid">
        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🧱</div>
                <div class="header-text">
                    <span>Podstawa</span>
                    <h4>Grubość styropianu na gruncie</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">15 - 20 cm</span>
                <span class="r-value">EPS 100 lub EPS 200</span>
            </div>
            <p class="justification"><strong>Wymóg WT2021:</strong> Zapobiega ucieczce ciepła do gruntu.</p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🛡️</div>
                <div class="header-text">
                    <span>Izolacja</span>
                    <h4>Folia PE pod styropian</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">Min. 0,2 mm</span>
                <span class="r-value">Zakład 15 cm</span>
            </div>
            <p class="justification"><strong>Paroizolacja!</strong> Chroni styropian przed wilgocią z chudziaka.</p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🎗️</div>
                <div class="header-text">
                    <span>Dylatacja</span>
                    <h4>Taśma brzegowa</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">Wysokość min. 15 cm</span>
                <span class="r-value">Powyżej poziomu wylewki</span>
            </div>
            <p class="justification"><strong>Uwaga:</strong> Odciąć nadmiar dopiero po ułożeniu docelowych paneli/płytek!</p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🦶</div>
                <div class="header-text">
                    <span>Hydraulika</span>
                    <h4>Rozstaw rur (strefa komfortu)</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">15 cm</span>
                <span class="r-value">Środek pomieszczenia</span>
            </div>
            <p class="justification"><strong>Optimum dla pompy ciepła.</strong> Gwarantuje brak "zebry termicznej".</p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🪟</div>
                <div class="header-text">
                    <span>Hydraulika</span>
                    <h4>Rozstaw rur (strefa brzegowa)</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">10 cm</span>
                <span class="r-value">Gęstsze ułożenie</span>
            </div>
            <p class="justification"><strong>Zastosowanie:</strong> Przy dużych oknach i drzwiach balkonowych, gdzie straty są największe.</p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🔄</div>
                <div class="header-text">
                    <span>Ograniczenia</span>
                    <h4>Maksymalna długość pętli</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">90 m</span>
                <span class="r-value">Absolutne max: 100 m</span>
            </div>
            <p class="justification">Dla rury PEX 16x2. <strong>Zasada:</strong> Różnica długości pętli na jednym rozdzielaczu max 10%.</p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🗜️</div>
                <div class="header-text">
                    <span>Bezpieczeństwo</span>
                    <h4>Ciśnienie próby szczelności</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">6 barów</span>
                <span class="r-value">0,6 MPa</span>
            </div>
            <p class="justification"><strong>Kluczowe:</strong> Utrzymywać rury pod takim ciśnieniem podczas betonowania!</p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">⏳</div>
                <div class="header-text">
                    <span>Wylewka</span>
                    <h4>Czas dojrzewania jastrychu</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">28 dni</span>
                <span class="r-value">Dla jastrychu cementowego</span>
            </div>
            <p class="justification">Przed pierwszym uruchomieniem pompy. <strong>Bezwzględnie bez grzania!</strong></p>
        </div>

        <div class="param-card">
            <div class="card-header">
                <div class="icon-box">🌡️</div>
                <div class="header-text">
                    <span>Eksploatacja</span>
                    <h4>Wygrzewanie wstępne</h4>
                </div>
            </div>
            <div class="result-box">
                <span class="r-thick">Start od 20°C</span>
                <span class="r-value">Codziennie +5°C</span>
            </div>
            <p class="justification">Stopniowe podnoszenie temperatury <strong>zapobiega szokowi termicznemu</strong> i pękaniu betonu.</p>
        </div>
    </div>

    <noscript>
        <div style="padding: 30px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 20px; margin-top: 40px; font-family: sans-serif;">
            <h3 style="margin-top: 0;">Parametry techniczne: Ogrzewanie podłogowe</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px;">Obszar instalacji</th>
                        <th style="padding: 10px;">Parametr techniczny</th>
                        <th style="padding: 10px;">Zalecana wartość</th>
                        <th style="padding: 10px;">Uzasadnienie inżynieryjne</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Podstawa (grunt)</td>
                        <td style="padding: 10px; font-weight: bold;">Grubość styropianu</td>
                        <td style="padding: 10px;">15 - 20 cm (EPS 100/200)</td>
                        <td style="padding: 10px;">Zgodność z WT2021, izolacja od gruntu.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Izolacja</td>
                        <td style="padding: 10px; font-weight: bold;">Folia PE</td>
                        <td style="padding: 10px;">Min. 0.2 mm (15 cm zakład)</td>
                        <td style="padding: 10px;">Paroizolacja, ochrona przed wilgocią.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Dylatacja</td>
                        <td style="padding: 10px; font-weight: bold;">Taśma brzegowa</td>
                        <td style="padding: 10px;">Min. 15 cm ponad wylewkę</td>
                        <td style="padding: 10px;">Odcinać dopiero po ułożeniu posadzki.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Hydraulika</td>
                        <td style="padding: 10px; font-weight: bold;">Rozstaw rur (środek)</td>
                        <td style="padding: 10px;">15 cm</td>
                        <td style="padding: 10px;">Optymalne dla pomp ciepła, brak zebry.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Hydraulika</td>
                        <td style="padding: 10px; font-weight: bold;">Rozstaw rur (brzeg)</td>
                        <td style="padding: 10px;">10 cm</td>
                        <td style="padding: 10px;">Kompensacja dużych strat przy oknach.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Ograniczenia</td>
                        <td style="padding: 10px; font-weight: bold;">Maksymalna długość pętli</td>
                        <td style="padding: 10px;">90 m (Max 100 m)</td>
                        <td style="padding: 10px;">Dla rury 16x2. Max różnica dł. to 10%.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Bezpieczeństwo</td>
                        <td style="padding: 10px; font-weight: bold;">Próba szczelności</td>
                        <td style="padding: 10px;">6 barów (0.6 MPa)</td>
                        <td style="padding: 10px;">Ciśnienie musi być stałe podczas betonowania.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px;">Wylewka</td>
                        <td style="padding: 10px; font-weight: bold;">Czas dojrzewania</td>
                        <td style="padding: 10px;">28 dni</td>
                        <td style="padding: 10px;">Dla cementu. Brak grzania w tym czasie!</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px;">Eksploatacja</td>
                        <td style="padding: 10px; font-weight: bold;">Wygrzewanie wstępne</td>
                        <td style="padding: 10px;">Start od 20°C (+5°C / doba)</td>
                        <td style="padding: 10px;">Zapobiega szokowi termicznemu betonu.</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
// ZABEZPIECZENIE DOMENOWE (Domain Lock)
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 appElement = document.getElementById('params-app');
        if (appElement) {
            appElement.innerHTML = `
                <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; border-radius: 20px;">
                    <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                    <div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona prawem autorskim</div>
                    <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ta tabela techniczna jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i została wklejona na tę stronę bez zgody autora.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
                </div>
            `;
        }
    }
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

/* ZAJAWKA SEO I LINK */
.calc-intro {
    max-width: 1150px;
    margin: 40px auto 10px auto;
    text-align: center;
    padding: 0 20px;
}

.calc-intro h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
    margin-bottom: 15px;
}

.calc-intro p {
    font-size: 16px;
    color: #475569;
    line-height: 1.6;
    max-width: 800px;
    margin: 0 auto;
}

.screed-calc {
    max-width: 1150px;
    margin: 30px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    overflow: hidden;
    color: var(--primary);
}

.calc-grid {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
}

/* LEWA STRONA - KONFIGURACJA */
.config-side {
    padding: 40px;
    background: #ffffff;
}

.section-title {
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1.2px;
    margin-bottom: 20px;
    display: block;
}

.type-selector {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
    margin-bottom: 30px;
}

.type-btn {
    padding: 14px 8px;
    border: 2px solid #cbd5e1;
    border-radius: 12px;
    cursor: pointer;
    text-align: center;
    font-weight: 700;
    font-size: 13px;
    color: #475569;
    background: #fff;
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.type-btn span {
    margin-top: 4px;
}

.type-btn.active {
    border-color: var(--accent);
    background: #eff6ff;
    color: var(--accent);
    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
}

.input-wrap { margin-bottom: 25px; }
.input-label-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 8px;
    align-items: center;
}
.input-label-row label { font-weight: 600; font-size: 14px; }
.input-label-row .val-badge {
    background: #f1f5f9;
    padding: 4px 12px;
    border-radius: 8px;
    font-weight: 800;
    color: var(--accent);
    font-size: 14px;
}

input[type=range] {
    width: 100%; height: 6px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-top: 10px;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer;
}

/* PRAWA STRONA - WYNIKI */
.result-side {
    padding: 40px;
    background: var(--bg-light);
    border-left: 1px solid #f1f5f9;
}

.main-score-box {
    background: white; padding: 30px; border-radius: 20px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.03); margin-bottom: 25px; border-bottom: 6px solid var(--success); transition: 0.3s;
}
.score-num { font-size: 48px; font-weight: 900; line-height: 1; display: block; margin: 10px 0; }
.score-label { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; }

#risk-msg {
    margin-top: 15px; padding: 12px; border-radius: 10px; font-size: 13px; font-weight: 600; display: none; background: #fee2e2; color: var(--danger); border: 1px solid #fecaca; line-height: 1.4; text-align: left;
}

.tech-grid {
    background: var(--primary); color: white; padding: 25px; border-radius: 20px; display: grid; gap: 12px;
}
.tech-item {
    display: flex; justify-content: space-between; padding-bottom: 12px; border-bottom: 1px solid #1e293b; align-items: center;
}
.tech-item:last-child { border: none; padding-bottom: 0; }
.tech-item span { color: #94a3b8; font-size: 13px; }
.tech-item strong { font-size: 15px; text-align: right;}

.material-grid {
    display: grid; grid-template-columns: 1fr; gap: 10px; margin-top: 15px;
}
.mini-card { background: rgba(255,255,255,0.08); padding: 15px; border-radius: 12px; text-align: center;}
.mini-card span { font-size: 11px; color: #94a3b8; display: block; margin-bottom: 6px; text-transform: uppercase; font-weight: 600;}
.mini-card strong { font-size: 18px; color: #fbbf24; }

/* STOPKA */
.footer-cta {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #eff6ff;
    border-radius: 20px;
    border-left: 6px solid var(--accent);
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 30px;
}

.cta-text-side {
    max-width: 550px;
}

.cta-buttons-stack {
    display: flex;
    flex-direction: column; 
    gap: 12px;
    min-width: 280px; 
}

.cta-btn {
    display: block; background: var(--accent); color: white; text-decoration: none; padding: 16px 20px; border-radius: 12px; font-weight: 800; transition: 0.3s; font-size: 13px; text-align: center; border: none; cursor: pointer;
}
.cta-btn:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(37, 99, 235, 0.2); }

@media (max-width: 900px) {
    .calc-grid { grid-template-columns: 1fr; }
    .footer-cta { flex-direction: column; text-align: center; gap: 25px; margin: 20px; }
    .cta-buttons-stack { min-width: 100%; width: 100%; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Kalkulator ilości rury do ogrzewania podłogowego",
    "description": "Narzędzie inżynierskie pozwalające oszacować wymaganą długość rury grzewczej i liczbę pętli na podstawie powierzchni, długości ścian zewnętrznych i rozstawu rur.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Wzór na strefę główną",
        "value": "Powierzchnia / Rozstaw rur w metrach"
      },
      {
        "@type": "PropertyValue",
        "name": "Wzór na strefę brzegową",
        "value": "2 * Długość ścian zewnętrznych w metrach"
      },
      {
        "@type": "PropertyValue",
        "name": "Wzór na całkowitą długość",
        "value": "Strefa główna + Strefa brzegowa"
      },
      {
        "@type": "PropertyValue",
        "name": "Maksymalna bezpieczna długość pętli (Dzielnik obwodów)",
        "value": "90",
        "unitCode": "MTR"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Kalkulator ilości rury PEX (Ogrzewanie Podłogowe)",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "description": "Profesjonalny kalkulator do obliczania zapotrzebowania na rurę grzewczą z uwzględnieniem zagęszczenia w strefach brzegowych oraz limitów hydraulicznych pętli.",
    "featureList": [
      "Obliczanie całkowitej długości rury",
      "Podział na strefę główną i brzegową",
      "Sugestia wymaganej liczby pętli na rozdzielaczu"
    ]
  }
]
</script>

<div class="calc-intro">
    <h2>Prosty kalkulator ilości rury dla majsterkowicza</h2>
    <p>Oszacuj, ile metrów rury potrzebujesz do swojego pomieszczenia i sprawdź, czy woda da radę ją przepchnąć! Narzędzie oparte o wytyczne inżynierów z <a href="https://projekt-ogrzewania.pl/" style="color: #2563eb; font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>. Wynik wyraźnie wskaże Ci, czy podłogę musisz podzielić na kilka pętli grzewczych na rozdzielaczu.</p>
</div>

<div class="screed-calc" id="pipe-calc-app">
    <div class="calc-grid">
        <div class="config-side">
            
            <span class="section-title">1. Wymiary pomieszczenia</span>
            <div class="input-wrap">
                <div class="input-label-row"><label>Powierzchnia pokoju</label><span class="val-badge"><span id="v-area">30</span> m²</span></div>
                <input type="range" id="area" min="5" max="80" step="1" value="30">
            </div>
            
            <div class="input-wrap">
                <div class="input-label-row"><label>Łączna dł. ścian zewnętrznych</label><span class="val-badge"><span id="v-walls">10</span> m</span></div>
                <input type="range" id="walls" min="0" max="30" step="1" value="10">
                <div style="font-size: 11px; color: #64748b; margin-top: 8px;">Ściany, przez które ucieka ciepło (tu zagęszczamy rurę).</div>
            </div>

            <span class="section-title">2. Planowany rozstaw rur</span>
            <div class="type-selector" style="margin-bottom:0">
                <div class="type-btn" id="btn-roz-10">10 cm<span style="font-size:10px; font-weight:400">Gęsty (Łazienki / Pompa Ciepła)</span></div>
                <div class="type-btn active" id="btn-roz-15">15 cm<span style="font-size:10px; font-weight:400">Standard / Optymalny</span></div>
                <div class="type-btn" id="btn-roz-20">20 cm<span style="font-size:10px; font-weight:400">Rzadszy</span></div>
                <div class="type-btn" id="btn-roz-25">25 cm<span style="font-size:10px; font-weight:400">Tylko jako tło cieplne</span></div>
            </div>
        </div>

        <div class="result-side">
            <div id="mainBox" class="main-score-box">
                <span class="score-label">Szacowana całkowita długość rury</span>
                <span class="score-num" id="resTotal">--</span>
                <span class="score-label">metrów</span>
                <div id="risk-msg">⚠️ Uwaga!</div>
            </div>

            <div class="tech-grid">
                <div class="tech-item"><span>Rura w części głównej:</span><strong id="resMain">--</strong></div>
                <div class="tech-item"><span>Rura w strefie brzegowej (okna):</span><strong id="resEdge">--</strong></div>
                
                <div class="material-grid">
                    <div class="mini-card"><span>Wymagana liczba pętli (obwodów):</span><strong id="resLoops">--</strong></div>
                </div>
            </div>
            
            <div style="margin-top:20px; font-size:11px; color:#94a3b8; font-weight:700">PROPORCJA ZUŻYCIA RURY:</div>
            <div style="height:12px; display:flex; border-radius:6px; overflow:hidden; margin-top:10px; background:#e2e8f0">
                <div id="bar-main" style="background:var(--accent); width:80%; transition: 0.3s;"></div>
                <div id="bar-edge" style="background:#94a3b8; width:20%; transition: 0.3s;"></div>
            </div>
            <div style="display: flex; justify-content: space-between; font-size: 10px; color: #64748b; margin-top: 5px;">
                <span>Powierzchnia główna</span>
                <span>Zagęszczenie pod ścianami</span>
            </div>
        </div>
    </div>

    <div class="footer-cta">
        <div class="cta-text-side">
            <h3 style="margin:0 0 10px 0; color:#1e3a8a">Chcesz obliczyć cały dom?</h3>
            <p style="margin:0; font-size:14px; color:#475569">Ten uproszczony wzór świetnie sprawdza się do szybkiej estymacji jednego pokoju. Jeśli chcesz zaprojektować rozdzielacz dla całego domu, skorzystaj z naszego zaawansowanego narzędzia.</p>
        </div>
        <div class="cta-buttons-stack">
            <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/" class="cta-btn">
                KOMPLEKSOWY KALKULATOR →
            </a>
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-btn" style="background:#1e293b">
                ZAMÓW PROJEKT INŻYNIERSKI
            </a>
        </div>
    </div>

    <noscript>
        <div style="padding: 30px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="font-size: 18px; color: #0f172a;">Metodyka obliczeń zapotrzebowania na rurę</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left; margin-bottom: 20px;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Rozstaw rur</th>
                        <th style="padding: 10px 0; color: #475569;">Zużycie na 1 m²</th>
                        <th style="padding: 10px 0; color: #475569;">Komentarz</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">10 cm</td>
                        <td style="padding: 10px 0;">~10.0 m</td>
                        <td style="padding: 10px 0;">Łazienki i pompy ciepła.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">15 cm</td>
                        <td style="padding: 10px 0;">~6.6 m</td>
                        <td style="padding: 10px 0;">Standard rynkowy.</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">25 cm</td>
                        <td style="padding: 10px 0;">~4.0 m</td>
                        <td style="padding: 10px 0;">Wyłącznie jako tło cieplne.</td>
                    </tr>
                </tbody>
            </table>
            <p style="font-size: 13px; color: #475569; line-height: 1.6;">
                <strong>Wzór:</strong> Całkowita długość = (Powierzchnia / Rozstaw) + (2 * Długość ścian zewnętrznych).<br>
                Zgodnie z prawami fizyki, pojedyncza pętla z rury 16x2.0 nie powinna przekraczać 100 metrów ze względu na opory hydrauliczne.
            </p>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA (Domain Lock)
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('pipe-calc-app');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px; font-family: sans-serif;">' +
                '<span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span>' +
                '<div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px; color: #dc2626;">Narzędzie chronione</div>' +
                '<p style="font-size: 16px; margin-bottom: 25px;">Ten kalkulator jest własnością serwisu <a href="https://projekt-ogrzewania.pl/" style="color: #dc2626; font-weight: bold; text-decoration: underline;">Projekt-Ogrzewania.pl</a></p>' +
                '<a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 14px 28px; background: #dc2626; color: #ffffff; text-decoration: none; border-radius: 12px; font-weight: 800;">PRZEJDŹ DO ORYGINAŁU</a>' +
                '</div>';
        }
        return; 
    }

    var spacingMeters = 0.15; // Domyślny rozstaw to 15 cm
    var SAFE_LOOP_LIMIT = 90; // Oczekiwany dzielnik długości pętli
    var MAX_LOOP_LIMIT = 100; // Bezwzględny limit pętli
    
    function updateCalc() {
        var areaEl = document.getElementById('area');
        var wallsEl = document.getElementById('walls');
        
        if(!areaEl || !wallsEl) return;

        var area = parseFloat(areaEl.value);
        var walls = parseFloat(wallsEl.value);
        
        // Aktualizacja widoków wartości na suwakach
        document.getElementById('v-area').innerText = area;
        document.getElementById('v-walls').innerText = walls;

        // MATEMATYKA ZGODNA ZE WZOREM: (Powierzchnia / Rozstaw) + (2 * Ściany)
        var mainLength = area / spacingMeters;
        var edgeLength = 2 * walls;
        var totalLength = mainLength + edgeLength;
        
        // Obliczanie ilości pętli (zaokrąglanie w górę, docelowa pętla to 90m)
        var requiredLoops = Math.ceil(totalLength / SAFE_LOOP_LIMIT);
        
        // Aktualizacja wartości w widoku
        document.getElementById('resTotal').innerText = Math.round(totalLength);
        document.getElementById('resMain').innerText = Math.round(mainLength) + ' m';
        document.getElementById('resEdge').innerText = Math.round(edgeLength) + ' m';
        document.getElementById('resLoops').innerText = requiredLoops + (requiredLoops === 1 ? ' pętla' : (requiredLoops > 4 ? ' pętli' : ' pętle'));

        // Logika ostrzeżeń i kolorów
        var mBox = document.getElementById('mainBox');
        var rMsg = document.getElementById('risk-msg');
        var warnings = [];
        var boxColor = 'var(--success)';

        if (totalLength > MAX_LOOP_LIMIT) { 
            warnings.push('❌ <strong>Stanowczo za dużo!</strong> Długość przekracza bezpieczny limit (100 m). Zgodnie z fizyką przepływu, pompa nie podoła oporom hydraulicznym.<br><br>Pomieszczenie musi zostać podzielone na co najmniej <strong>' + requiredLoops + ' osobne pętle</strong> na rozdzielaczu!'); 
            boxColor = 'var(--danger)'; 
        } else if (totalLength > SAFE_LOOP_LIMIT) { 
            warnings.push('⚠️ <strong>Zwróć uwagę:</strong> Zbliżasz się do granicy wydajności pompy obiegowej (90-100m). Rozważ podzielenie na 2 pętle.'); 
            boxColor = 'var(--warning)'; 
        }

        if (warnings.length > 0) {
            rMsg.innerHTML = warnings.join('<br><br>');
            rMsg.style.display = 'block';
        } else {
            rMsg.style.display = 'none';
        }
        mBox.style.borderColor = boxColor;

        // Pasek postępu (proporcje)
        var barTotal = totalLength > 0 ? totalLength : 1; // zapobieganie dzieleniu przez zero
        document.getElementById('bar-main').style.width = ((mainLength / barTotal) * 100) + '%';
        document.getElementById('bar-edge').style.width = ((edgeLength / barTotal) * 100) + '%';
    }

    // Obsługa przycisków rozstawu
    var spacingOptions = {
        'btn-roz-10': 0.10,
        'btn-roz-15': 0.15,
        'btn-roz-20': 0.20,
        'btn-roz-25': 0.25
    };

    var btnKeys = Object.keys(spacingOptions);
    for (var i = 0; i < btnKeys.length; i++) {
        (function(btnId) {
            var btn = document.getElementById(btnId);
            if(btn) {
                btn.addEventListener('click', function(e) {
                    spacingMeters = spacingOptions[btnId];
                    // Reset klas active
                    for(var j = 0; j < btnKeys.length; j++) {
                        var el = document.getElementById(btnKeys[j]);
                        if(el) { el.classList.remove('active'); }
                    }
                    e.currentTarget.classList.add('active');
                    updateCalc();
                });
            }
        })(btnKeys[i]);
    }

    // Obsługa suwaków
    var areaInput = document.getElementById('area');
    var wallsInput = document.getElementById('walls');
    
    if(areaInput) areaInput.addEventListener('input', updateCalc);
    if(wallsInput) wallsInput.addEventListener('input', updateCalc);

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



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-myth-box {
    max-width: 1050px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.myth-header {
    padding: 35px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.myth-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
}

.myth-header p {
    margin: 0 auto;
    max-width: 800px;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.myth-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
    padding: 40px;
    background: #ffffff;
}

/* FLIP CARD STYLES */
.flip-card {
    background-color: transparent;
    width: 100%;
    min-height: 350px;
    perspective: 1000px;
    cursor: pointer;
}

.flip-card-inner {
    position: relative;
    width: 100%;
    height: 100%;
    text-align: center;
    transition: transform 0.6s cubic-bezier(0.4, 0.2, 0.2, 1);
    transform-style: preserve-3d;
}

.flip-card.is-flipped .flip-card-inner {
    transform: rotateY(180deg);
}

.flip-card-front, .flip-card-back {
    position: absolute;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    border-radius: 20px;
    padding: 30px 20px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    border: 2px solid transparent;
}

.flip-card-front {
    background-color: #fef2f2;
    border-color: #fecaca;
    color: var(--danger);
}

.flip-card-back {
    background-color: #f0fdf4;
    border-color: #bbf7d0;
    color: var(--success);
    transform: rotateY(180deg);
}

.card-icon {
    font-size: 42px;
    margin-bottom: 15px;
    line-height: 1;
}

.card-title {
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 10px;
    opacity: 0.8;
}

.card-text {
    font-size: 15px;
    font-weight: 700;
    line-height: 1.5;
    margin: 0;
}

.flip-card-back .card-title {
    color: var(--success);
}

.flip-card-back .card-text {
    font-size: 14px;
    font-weight: 500;
    color: #166534;
    line-height: 1.6;
}

.flip-hint {
    margin-top: 20px;
    font-size: 12px;
    font-weight: 700;
    background: rgba(255,255,255,0.8);
    padding: 6px 16px;
    border-radius: 20px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}

.myth-summary {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #eff6ff;
    border-radius: 20px;
    border-left: 6px solid var(--accent);
}

.myth-summary h4 {
    margin: 0 0 10px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--primary);
}

.myth-summary p {
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: #334155;
}

@media (max-width: 900px) {
    .myth-grid { grid-template-columns: 1fr; gap: 20px; padding: 25px 20px; }
    .flip-card { min-height: 280px; }
    .myth-summary { margin: 0 20px 25px 20px; padding: 25px 20px; }
    .myth-header { padding: 25px 20px; }
}
</style>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "name": "Fakty i mity o samodzielnym montażu ogrzewania podłogowego",
  "description": "Zestawienie najczęstszych błędnych przekonań inwestorów dotyczących testów szczelności, rozstawu rur i limitów hydraulicznych w systemach podłogowych.",
  "license": "https://projekt-ogrzewania.pl/",
  "creator": {
    "@type": "Person",
    "name": "Robert Kucharski"
  }
}
</script>

<div class="premium-myth-box" id="diy-myth-app">
    <div class="myth-header">
        <h3>Fakty i Mity Samodzielnego Montażu</h3>
        <p>Wpisując w sieć "jak samemu zrobić podłogówkę", łatwo trafić na porady, które po wylaniu betonu zamienią się w koszmar. <strong>Kliknij kartę, aby obalić najgroźniejsze mity.</strong></p>
    </div>

    <div class="myth-grid">
        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">💧</div>
                    <div class="card-title">MIT #1</div>
                    <p class="card-text">"Szybkie sprawdzenie z węża ogrodowego na 2 bary wystarczy, żeby upewnić się, że nie ma przecieków."</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">🏗️</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>To punkt bez powrotu!</strong> Próba musi wynosić min. 6 barów przez 24 godziny. Co więcej, rury bezwzględnie <strong>muszą być pod ciśnieniem podczas wylewania betonu</strong>. Inaczej wibracje i masa wylewki mogą rozszczelnić zluzowane złączki, a awarię zauważysz po roku.</p>
                </div>
            </div>
        </div>

        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">🦓</div>
                    <div class="card-title">MIT #2</div>
                    <p class="card-text">"Standard to 15 cm, ale jak rozłożę rury co 25 cm, to i tak będzie ciepło, a oszczędzę na materiale."</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">📉</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>Stworzysz "zebrę termiczna".</strong> Fizyka jest bezlitosna – poczujesz stopą naprzemienne pasy chłodu i ciepła (różnica 5-7°C). Co gorsza, aby dogrzać dom, będziesz musiał podnieść temperaturę na kotle, drastycznie obniżając sprawność układu (COP).</p>
                </div>
            </div>
        </div>

        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">🔄</div>
                    <div class="card-title">MIT #3</div>
                    <p class="card-text">"Zrobię jedną długą pętlę na cały salon (np. 140 metrów), to będzie mniej rur i szybciej pójdzie."</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">⚠️</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>Zabijesz pompę obiegową.</strong> Absolutny limit dla rury PEX 16mm to 90-100 metrów. Przy zbyt długiej pętli opór hydrauliczny przewyższy możliwości tłoczenia pompy. W efekcie woda nie popłynie w ogóle, a połowa salonu pozostanie zimna.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="myth-summary">
        <h4>Podsumowanie: Beton nie wybacza</h4>
        <p>Montaż ogrzewania podłogowego to praca inżynierska z zakresu mechaniki płynów, a nie tylko zabawa w układanie wężyków na styropianie. Brak odpowiednich dylatacji, złe opory hydrauliczne i zaoszczędzenie kilku złotych na projekcie niemal zawsze kończy się remontem i skuwaniem płytek przy użyciu młota udarowego. <strong>Projekt i obliczenia to fundament sukcesu.</strong></p>
    </div>

    <noscript>
        <div style="padding: 30px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h2 style="font-size: 18px; color: #0f172a;">Najczęstsze mity przy montażu ogrzewania podłogowego</h2>
            <ul style="font-size: 14px; color: #334155; line-height: 1.6;">
                <li><strong>MIT 1: Szybkie sprawdzenie szczelności na 2 bary wystarczy.</strong><br>
                FAKT: Próba musi wynosić min. 6 barów przez 24h. Rury muszą być pod ciśnieniem podczas wylewania betonu, aby uniknąć mikrorozszczelnień na złączkach.</li>
                <li><strong>MIT 2: Rozstaw rur co 25 cm pozwala na oszczędności bez utraty komfortu.</strong><br>
                FAKT: Powstaje "zebra termiczna" (odczuwalne zimne pasy). Wymusza to podniesienie temperatury wody, co drastycznie obniża sprawność pompy ciepła (COP).</li>
                <li><strong>MIT 3: Można robić pętle o długości 140 metrów.</strong><br>
                FAKT: Granica dla rury 16mm to 100m. Powyżej tej długości opór hydrauliczny blokuje przepływ wody, a pompa obiegowa ulega przeciążeniu.</li>
            </ul>
        </div>
    </noscript>
</div>

<script>
// ZABEZPIECZENIE DOMENOWE (Domain Lock - Czysty JS)
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 appContainer = document.getElementById('diy-myth-app');
        if (appContainer) {
            appContainer.innerHTML = `
                <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; border-radius: 24px; font-family: sans-serif;">
                    <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                    <div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona prawem autorskim</div>
                    <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">To zestawienie mitów budowlanych jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostało wklejone na tę stronę bez zgody autora.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
                </div>
            `;
        }
    }
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --accent-light: #eff6ff;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
    --text-muted: #475569;
}

.premium-faq-box {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -12px rgba(0, 0, 0, 0.05);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.faq-header {
    padding: 40px 40px 30px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
    position: relative;
}

.faq-header::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 4px;
    background: var(--accent);
}

.faq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--accent-light);
    color: var(--accent);
    padding: 6px 16px;
    border-radius: 20px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.faq-header h3 {
    margin: 0 0 15px 0;
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
}

.faq-header p {
    margin: 0;
    font-size: 15px;
    color: var(--text-muted);
    line-height: 1.6;
}

.faq-content {
    padding: 20px 40px 40px 40px;
}

/* INTERAKTYWNY AKORDEON Z MIKRO-INTERAKCJAMI */
.faq-item {
    border-bottom: 1px solid var(--border-color);
    transition: all 0.3s ease;
    border-left: 4px solid transparent;
    padding-left: 15px;
    margin-bottom: 10px;
    border-radius: 8px;
}

.faq-item:hover {
    background: #f8fafc;
    border-left-color: #cbd5e1;
}

.faq-item.active {
    background: #ffffff;
    border-left-color: var(--accent);
    box-shadow: 0 4px 15px rgba(0,0,0,0.03);
    padding-bottom: 10px;
    border-bottom: 1px solid transparent;
}

.faq-question {
    width: 100%;
    text-align: left;
    background: none;
    border: none;
    padding: 20px 0;
    font-size: 16px;
    font-weight: 700;
    color: var(--primary);
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 15px;
    font-family: inherit;
    transition: color 0.2s ease;
}

.faq-question:hover {
    color: var(--accent);
}

.faq-q-icon {
    font-size: 22px;
    flex-shrink: 0;
    filter: grayscale(0.2);
    transition: 0.3s;
}

.faq-item.active .faq-q-icon {
    filter: grayscale(0);
    transform: scale(1.1);
}

.faq-q-text {
    flex-grow: 1;
    padding-right: 20px;
}

.faq-toggle-icon {
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--bg-light);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent);
    font-size: 18px;
    font-weight: 300;
    transition: transform 0.4s ease, background 0.3s ease, color 0.3s ease;
    border: 1px solid #e2e8f0;
}

.faq-item.active .faq-toggle-icon {
    transform: rotate(45deg);
    background: var(--accent);
    color: #ffffff;
    border-color: var(--accent);
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2);
}

.faq-item.active .faq-question {
    color: var(--accent);
}

/* Animacja otwierania CSS Grid Trick */
.faq-answer-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

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

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

.faq-answer-text {
    padding: 0 0 15px 37px; /* Wcięcie wyrównujące tekst z nagłówkiem */
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: var(--text-muted);
}

.faq-answer-text strong {
    color: var(--primary);
}

@media (max-width: 768px) {
    .faq-header { padding: 30px 20px 25px 20px; }
    .faq-content { padding: 10px 20px 30px 20px; }
    .faq-question { font-size: 15px; padding: 15px 0; }
    .faq-toggle-icon { width: 28px; height: 28px; font-size: 16px; }
    .faq-answer-text { padding-left: 0; }
}
</style>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "license": "https://projekt-ogrzewania.pl/",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Jakie ciśnienie powinna mieć próba szczelności podłogówki i jak długo trwać?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Złoty standard to minimum 6 barów (0,6 MPa) utrzymane przez 24 godziny. Co najważniejsze, rury muszą bezwzględnie pozostać pod ciśnieniem podczas wylewania jastrychu, aby uchronić je przed zgnieceniem przez masę betonu oraz wibratory, a także aby natychmiast wykryć ewentualne uszkodzenie łopatą.",
        "author": {
          "@type": "Person",
          "name": "Robert Kucharski"
        }
      }
    },
    {
      "@type": "Question",
      "name": "Gdzie koniecznie trzeba zastosować dylatacje w wylewce?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Dylatacje są bezwzględnie wymagane w progach drzwiowych, w narożnikach pomieszczeń w kształcie litery L oraz przy podziale dużych pól grzejnych (powyżej 40 m² lub gdy długość boku przekracza 8 metrów). Każdą rurę przechodzącą przez szczelinę dylatacyjną należy osłonić peszlem na odcinku min. 30 cm.",
        "author": {
          "@type": "Person",
          "name": "Robert Kucharski"
        }
      }
    },
    {
      "@type": "Question",
      "name": "Jaki jest optymal rozstaw rur ogrzewania podłogowego dla pompy ciepła?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Dla pomp ciepła zaleca się rozstaw 15 cm w głównych strefach mieszkalnych (salony, sypialnie) oraz zagęszczenie do 10 cm w łazienkach i tzw. strefach brzegowych (przy dużych oknach i drzwiach tarasowych). Zbyt rzadki rozstaw (20-30 cm) powoduje powstawanie odczuwalnej dla stóp 'zebry termicznej' i obniża sprawność (COP) układu.",
        "author": {
          "@type": "Person",
          "name": "Robert Kucharski"
        }
      }
    },
    {
      "@type": "Question",
      "name": "Jaka grubość styropianu na gruncie jest wymagana pod podłogówkę?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Aby spełnić normy Warunków Technicznych (WT 2021), wymagane jest minimum 12-15 cm styropianu EPS 100 lub twardszego. Zastosowanie zbyt cienkiej izolacji (np. 5 cm) skutkuje ucieczką nawet 25-30% wyprodukowanego ciepła bezpośrednio w ziemię, co generuje ogromne straty finansowe.",
        "author": {
          "@type": "Person",
          "name": "Robert Kucharski"
        }
      }
    },
    {
      "@type": "Question",
      "name": "Ile wynosi maksymalna długość pętli z rury PEX 16 mm?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Absolutne maksimum dla rury 16x2.0 mm to 100 metrów, jednak w profesjonalnych projektach zaleca się nie przekraczać 80-90 metrów. Zbyt długa pętla stawia opór hydrauliczny przekraczający możliwości standardowej pompy obiegowej, co skutkuje brakiem przepływu i niedogrzaniem pomieszczenia.",
        "author": {
          "@type": "Person",
          "name": "Robert Kucharski"
        }
      }
    }
  ]
}
</script>

<div class="premium-faq-box" id="faq-app-lock">
    <div class="faq-header">
        <div class="faq-badge">Baza Wiedzy</div>
        <h3>O to najczęściej pytają inwestorzy</h3>
        <p>Krótkie i konkretne odpowiedzi na najważniejsze pytania dotyczące prawidłowego wykonania instalacji ogrzewania podłogowego.</p>
    </div>

    <div class="faq-content">
        
        <div class="faq-item">
            <button class="faq-question">
                <span class="faq-q-icon">💦</span>
                <span class="faq-q-text">1. Jakie ciśnienie powinna mieć próba szczelności i jak długo trwać?</span>
                <div class="faq-toggle-icon">+</div>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer-inner">
                    <p class="faq-answer-text">
                        Złoty standard to <strong>minimum 6 barów (0,6 MPa)</strong> utrzymane przez 24 godziny. Co najważniejsze, rury muszą bezwzględnie <strong>pozostać pod ciśnieniem podczas wylewania jastrychu</strong>, aby uchronić je przed zgnieceniem przez masę betonu oraz wibratory, a także aby natychmiast wykryć na manometrze ewentualne uszkodzenie mechaniczne (np. łopatą).
                    </p>
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <span class="faq-q-icon">💥</span>
                <span class="faq-q-text">2. Gdzie koniecznie trzeba zastosować dylatacje w wylewce?</span>
                <div class="faq-toggle-icon">+</div>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer-inner">
                    <p class="faq-answer-text">
                        Dylatacje są bezwzględnie wymagane w <strong>progach drzwiowych</strong>, w narożnikach pomieszczeń w kształcie litery L oraz przy podziale dużych pól grzejnych (powyżej 40 m² lub gdy długość jednego boku przekracza 8 metrów). Każdą rurę przechodzącą przez szczelinę dylatacyjną należy <strong>osłonić peszlem</strong> na odcinku min. 30 cm, aby pracujący beton jej nie przeciął.
                    </p>
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <span class="faq-q-icon">🦓</span>
                <span class="faq-q-text">3. Jaki jest optymalny rozstaw rur podłogówki dla pompy ciepła?</span>
                <div class="faq-toggle-icon">+</div>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer-inner">
                    <p class="faq-answer-text">
                        Dla pomp ciepła zaleca się <strong>rozstaw 15 cm</strong> w głównych strefach mieszkalnych (salony, sypialnie) oraz zagęszczenie do <strong>10 cm</strong> w łazienkach i tzw. strefach brzegowych (przy oknach i drzwiach tarasowych). Zbyt rzadki rozstaw (20-30 cm) powoduje powstawanie "zebry termicznej" i wymusza podniesienie temperatury zasilania, co drastycznie obniża sprawność układu.
                    </p>
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <span class="faq-q-icon">🧱</span>
                <span class="faq-q-text">4. Jaka grubość styropianu na gruncie jest wymagana pod rury?</span>
                <div class="faq-toggle-icon">+</div>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer-inner">
                    <p class="faq-answer-text">
                        Aby spełnić aktualne normy (WT 2021), wymagane jest <strong>minimum 12-15 cm styropianu EPS 100</strong> lub twardszego. Zastosowanie zbyt cienkiej izolacji (np. 5 cm) skutkuje ucieczką nawet 25-30% wyprodukowanego ciepła bezpośrednio w ziemię, co generuje ogromne straty finansowe przez cały okres życia budynku.
                    </p>
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <span class="faq-q-icon">🔄</span>
                <span class="faq-q-text">5. Ile wynosi maksymalna bezpieczna długość pętli z rury 16 mm?</span>
                <div class="faq-toggle-icon">+</div>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer-inner">
                    <p class="faq-answer-text">
                        Absolutne maksimum dla rury 16x2.0 mm to <strong>100 metrów</strong>, jednak w profesjonalnych projektach inżynierskich zaleca się nie przekraczać <strong>80-90 metrów</strong>. Zbyt długa pętla stwarza opór hydrauliczny przekraczający możliwości tłoczenia standardowej pompy obiegowej, co ostatecznie skutkuje brakiem przepływu.
                    </p>
                </div>
            </div>
        </div>

    </div>

    <noscript>
        <div style="padding: 30px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h2 style="font-size: 18px; color: #0f172a; margin-bottom: 20px;">Najczęściej zadawane pytania (Baza Wiedzy)</h2>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px; color: #475569;">Pytanie</th>
                        <th style="padding: 10px; color: #475569;">Odpowiedź eksperta</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px; font-weight: bold;">Jakie ciśnienie próby szczelności?</td>
                        <td style="padding: 10px;">Minimum 6 barów przez 24h. Zostawić ciśnienie na czas wylewki.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px; font-weight: bold;">Gdzie stosować dylatacje?</td>
                        <td style="padding: 10px;">Progi, narożniki, pola > 40 m2. Przejścia osłonić peszlem (30 cm).</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px; font-weight: bold;">Jaki rozstaw dla pompy ciepła?</td>
                        <td style="padding: 10px;">Środek: 15 cm. Przy oknach: 10 cm. Zapobiega to zebrom termicznym.</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px; font-weight: bold;">Grubość izolacji EPS na gruncie?</td>
                        <td style="padding: 10px;">Min. 12-15 cm EPS 100 zgodnie z WT 2021. Zapobiega stratom ciepła.</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px; font-weight: bold;">Maksymalna długość rury w pętli?</td>
                        <td style="padding: 10px;">Zalecane 80-90m, bezwzględne max 100m. Zapobiega przeciążeniu pompy.</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('faq-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div></div>';
        }
        return; 
    }

    // LOGIKA AKORDEONU
    const faqItems = document.querySelectorAll('.faq-item');

    faqItems.forEach(item => {
        const questionBtn = item.querySelector('.faq-question');
        
        questionBtn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Zamyka pozostałe
            faqItems.forEach(otherItem => {
                otherItem.classList.remove('active');
            });

            // Otwiera/Zamyka kliknięty
            if (!isActive) {
                item.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --sum-bg-gradient: linear-gradient(145deg, #1e293b 0%, #0f172a 100%);
    --sum-text: #f8fafc;
    --sum-accent: #3b82f6;
    --sum-danger: #ef4444;
    --sum-warning: #f59e0b;
    --sum-success: #10b981;
}

.premium-summary-box {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--sum-bg-gradient);
    border-radius: 24px;
    box-shadow: 0 30px 60px -15px rgba(0, 0, 0, 0.4);
    border: 1px solid #334155;
    overflow: hidden;
    color: var(--sum-text);
    position: relative;
}

/* Subtelny szum / poświata w tle */
.premium-summary-box::before {
    content: '';
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    background: radial-gradient(circle, rgba(59,130,246,0.05) 0%, transparent 60%);
    z-index: 0;
    pointer-events: none;
}

.summary-content {
    position: relative;
    z-index: 1;
    padding: 50px;
}

.summary-header {
    text-align: center;
    margin-bottom: 35px;
}

.summary-icon {
    font-size: 56px;
    line-height: 1;
    margin-bottom: 20px;
    display: inline-block;
    filter: drop-shadow(0 4px 6px rgba(0,0,0,0.3));
}

.summary-header h2 {
    margin: 0 0 15px 0;
    font-size: 32px;
    font-weight: 900;
    color: #ffffff;
    letter-spacing: -0.5px;
}

.summary-text {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    text-align: center;
    max-width: 800px;
    margin: 0 auto 30px auto;
}

.summary-text strong {
    color: #ffffff;
    font-weight: 700;
}

/* WIZUALNA WAGA RYZYKA */
.risk-scale-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin: 40px 0;
}

.risk-card {
    background: rgba(255, 255, 255, 0.03);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 16px;
    padding: 30px;
    text-align: center;
    transition: transform 0.3s ease;
}

.risk-card:hover {
    transform: translateY(-5px);
    background: rgba(255, 255, 255, 0.05);
}

.risk-card.bad-choice {
    border-bottom: 4px solid var(--sum-danger);
}

.risk-card.good-choice {
    border-bottom: 4px solid var(--sum-success);
}

.risk-label {
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    font-weight: 800;
    margin-bottom: 15px;
    display: block;
}

.bad-choice .risk-label { color: #fca5a5; }
.good-choice .risk-label { color: #6ee7b7; }

.risk-value {
    font-size: 36px;
    font-weight: 900;
    color: #ffffff;
    margin-bottom: 10px;
    display: block;
}

.risk-desc {
    font-size: 14px;
    color: #94a3b8;
    line-height: 1.5;
    margin: 0;
}

/* CTA BUTTONS */
.summary-actions {
    display: flex;
    justify-content: center;
    gap: 20px;
    margin-top: 40px;
    flex-wrap: wrap;
}

.sum-btn {
    padding: 16px 32px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    text-decoration: none;
    transition: all 0.3s ease;
    display: inline-flex;
    align-items: center;
    gap: 10px;
}

.sum-btn-primary {
    background: var(--sum-accent);
    color: #ffffff !important;
    box-shadow: 0 10px 20px -5px rgba(59, 130, 246, 0.5);
    border: 1px solid #60a5fa;
}

.sum-btn-primary:hover {
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(59, 130, 246, 0.6);
    background: #2563eb;
}

.sum-btn-secondary {
    background: transparent;
    color: #ffffff !important;
    border: 2px solid #475569;
}

.sum-btn-secondary:hover {
    border-color: #cbd5e1;
    background: rgba(255, 255, 255, 0.05);
}

@media (max-width: 768px) {
    .summary-content { padding: 40px 25px; }
    .risk-scale-grid { grid-template-columns: 1fr; gap: 15px; }
    .summary-actions { flex-direction: column; width: 100%; gap: 15px; }
    .sum-btn { justify-content: center; width: 100%; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Podsumowanie: Beton nie wybacza - błędy przy montażu ogrzewania podłogowego",
    "abstract": "Samodzielny montaż ogrzewania podłogowego to zadanie inżynierskie. Błędy hydrauliczne i konstrukcyjne stają się nieodwracalne po wylaniu betonu. Projekt instalacji to kluczowa inwestycja zapewniająca bezpieczeństwo na dekady.",
    "license": "https://projekt-ogrzewania.pl/",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Analiza ryzyka samodzielnego montażu podłogówki",
    "description": "Zestawienie porównawcze oszczędności na projekcie versus koszty naprawy błędów montażowych po wylaniu betonu.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="premium-summary-box" id="summary-app-lock">
    <div class="summary-content">
        
        <div class="summary-header">
            <span class="summary-icon">🏁</span>
            <h2>Podsumowanie: Beton nie wybacza</h2>
        </div>

        <p class="summary-text">
            Decydując się na samodzielne wykonanie instalacji ogrzewania podłogowego, stajesz przed <strong>zadaniem inżynierskim</strong>, a nie tylko pracą fizyczną. Pięć wymienionych błędów – od braku ciśnienia podczas wylewki, przez ignorowanie dylatacji, po zbyt długie pętle – to problemy, które w przeciwieństwie do krzywo przyklejonej tapety, <strong>zostaną z Tobą na zawsze pod warstwą płytek i wylewki.</strong>
        </p>

        <div class="risk-scale-grid">
            <div class="risk-card bad-choice">
                <span class="risk-label">Fałszywa Oszczędność</span>
                <span class="risk-value">1 000 zł</span>
                <p class="risk-desc">Tyle rzekomo zaoszczędzisz rezygnując z projektu lub zagęszczenia rur. Może to jednak skutkować koniecznością <strong>skucia całej podłogi za 10 000 zł</strong>.</p>
            </div>
            <div class="risk-card good-choice">
                <span class="risk-label">Prawdziwa Inwestycja</span>
                <span class="risk-value">30 Lat</span>
                <p class="risk-desc">Projekt i precyzyjne wyliczenia to jedyna inwestycja w tej układance, która nie wymaga wylewki, a daje <strong>zwrot w postaci cichej i taniej pracy instalacji przez dekady.</strong></p>
            </div>
        </div>

        <p class="summary-text">
            Traktuj ten artykuł jako kompendium wiedzy i <strong>listę kontrolną, którą musisz odhaczyć przed przyjazdem betoniarki</strong>. A jeśli poczujesz, że wyliczenia hydrauliczne lub cieplne Cię przerastają – skonsultuj się z profesjonalistą.
        </p>

        <div class="summary-actions">
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="sum-btn sum-btn-primary">
                📐 SKONSULTUJ SIĘ Z PROJEKTANTEM
            </a>
            <a href="https://projekt-ogrzewania.pl/blog/" class="sum-btn sum-btn-secondary">
                📖 CZYTAJ NASZ BLOG
            </a>
        </div>

    </div>

    <noscript>
        <div style="padding: 30px; background: #0f172a; border-top: 1px solid #334155; font-family: sans-serif; color: #cbd5e1;">
            <h3 style="color: #ffffff; margin-top: 0;">Analiza ryzyka samodzielnego montażu podłogówki</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left; margin-bottom: 20px;">
                <thead>
                    <tr style="border-bottom: 2px solid #334155;">
                        <th style="padding: 10px 0; color: #94a3b8;">Podejście do inwestycji</th>
                        <th style="padding: 10px 0; color: #94a3b8;">Szacowany koszt początkowy</th>
                        <th style="padding: 10px 0; color: #94a3b8;">Konsekwencje</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #1e293b;">
                        <td style="padding: 10px 0; font-weight: bold;">Oszczędność na projekcie</td>
                        <td style="padding: 10px 0; color: #ef4444;">-1000 PLN (pozornie)</td>
                        <td style="padding: 10px 0;">Ryzyko skucia posadzki i wysokich rachunków.</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Profesjonalny projekt</td>
                        <td style="padding: 10px 0; color: #10b981;">Koszt rynkowy</td>
                        <td style="padding: 10px 0;">Gwarancja cichej i taniej pracy przez min. 30 lat.</td>
                    </tr>
                </tbody>
            </table>
            <p style="font-size: 13px; line-height: 1.6;">
                Samodzielny montaż to zadanie inżynierskie. Błędy hydrauliczne i konstrukcyjne stają się nieodwracalne po wylaniu betonu. Projekt instalacji to jedyna pewna polisa bezpieczeństwa.
            </p>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('summary-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div><p>Ten moduł jest własnością Projekt-Ogrzewania.pl</p></div>';
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/">Samodzielny montaż ogrzewania podłogowego – 5 błędów, których nie naprawisz po wylewce.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Niska temperatura zasilania pompy ciepła – dlaczego 35 stopni to ideał dla podłogówki?</title>
		<link>https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 10:17:48 +0000</pubDate>
				<category><![CDATA[Efektywne ogrzewanie]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje niskotemperaturowe]]></category>
		<category><![CDATA[Koszty ogrzewania]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Technika grzewcza]]></category>
		<category><![CDATA[jastrych]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[koszty eksploatacji]]></category>
		<category><![CDATA[krzywa grzewcza]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[ozc]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projektowanie instalacji]]></category>
		<category><![CDATA[scop]]></category>
		<category><![CDATA[systemy niskotemperaturowe]]></category>
		<category><![CDATA[temperatura zasilania]]></category>
		<category><![CDATA[termodynamika]]></category>
		<category><![CDATA[współczynnik cop]]></category>
		<category><![CDATA[wylewka anhydrytowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4200</guid>

					<description><![CDATA[<p>Wybór odpowiednich parametrów grzewczych to absolutny fundament, od którego zależą Twoje przyszłe rachunki za prąd oraz trwałość wykończenia wnętrz. W świecie nowoczesnych instalacji coraz częściej pojawia się kluczowe pytanie o to, jaka powinna być niska temperatura zasilania pompy ciepła – dlaczego 35 stopni to ideał dla podłogówki? Odpowiedź na nie wymaga zrozumienia praw fizyki, a konkretnie zależności między temperaturą czynnika a współczynnikiem wydajności COP. Utrzymywanie zasilania na tym poziomie pozwala urządzeniu pracować z maksymalną efektywnością, co bezpośrednio przekłada się na realne oszczędności w domowym budżecie. W niniejszym tekście szczegółowo analizujemy aspekty techniczne, wpływ temperatury na jastrych oraz wyjaśniamy, dlaczego precyzyjny projekt instalacji jest ważniejszy niż zakup najdroższej jednostki grzewczej dostępnej na rynku.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">Niska temperatura zasilania pompy ciepła – dlaczego 35 stopni to ideał dla podłogówki?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">W świecie nowoczesnego budownictwa i termomodernizacji panuje żelazna zasada, którą każdy instalator powtarza jak mantrę:&nbsp;<strong>niska temperatura zasilania pompy ciepła dlaczego 35 stopni to ideał dla podłogówki?</strong>&nbsp;Odpowiedź na to pytanie nie kryje się w marketingu producentów urządzeń, lecz w surowych prawach termodynamiki, charakterystyce materiałów budowlanych oraz fizjologii ludzkiego ciała. To, że&nbsp;<strong>temperatura zasilania podłogówki</strong>&nbsp;na poziomie 35°C jest uznawana za złoty środek w duecie z pompą ciepła, nie wynika z przypadku, lecz z czystej fizyki i ekonomii. Wybór ten to punkt styku maksymalnej wydajności urządzenia i najwyższego komfortu domowników.</p>



<p class="wp-block-paragraph">W niniejszym artykule przeprowadzimy dogłębną analizę techniczną, dlaczego właśnie wartość 35°C – a nie 30°C czy 45°C stanowi optymalny parametr projektowy dla&nbsp;<strong>niskotemperaturowego systemu grzewczego</strong>. Omówimy szczegółowo współczynnik COP, przeanalizujemy bezwładność cieplną jastrychu oraz przedstawimy konkretne wyliczenia ekonomiczne oparte na taryfach energetycznych.</p>



<h2 class="wp-block-heading">Fizyka sprężania a ekonomia portfela dlaczego niska temperatura zasilania pompy ciepła podnosi efektywność?</h2>



<p class="wp-block-paragraph">Aby zrozumieć fenomen 35°C, musimy cofnąć się do podstaw działania powietrznej lub gruntowej <a href="https://projekt-ogrzewania.pl/category/pompy-ciepla/" type="link" id="https://projekt-ogrzewania.pl/category/pompy-ciepla/">pompy ciepła</a>. Urządzenie to nie produkuje ciepła z prądu w stosunku 1:1 jak grzałka elektryczna, lecz <strong>transportuje energię</strong> z otoczenia (powietrza lub gruntu) do instalacji centralnego ogrzewania.</p>



<h3 class="wp-block-heading">Maksymalizacja współczynnika COP – serce oszczędności.</h3>



<p class="wp-block-paragraph">Sercem każdej analizy wydajności pompy ciepła jest współczynnik&nbsp;<strong>COP</strong>&nbsp;(<em>Coefficient of Performance</em>). Określa on stosunek oddanego ciepła do zużytej energii elektrycznej. Wzór jest banalnie prosty, ale jego konsekwencje finansowe są gigantyczne:</p>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-formula-box {
    max-width: 800px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.formula-header {
    padding: 30px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.formula-header h3 {
    margin: 0 0 10px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--primary);
}

.formula-header p {
    margin: 0 auto;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.formula-content {
    padding: 40px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 35px;
}

.math-display {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 15px;
    font-size: 46px;
    font-weight: 700;
    font-family: 'Georgia', 'Times New Roman', serif;
    font-style: italic;
    color: var(--accent);
    background: #eff6ff;
    padding: 25px 50px;
    border-radius: 16px;
    border: 2px solid #bfdbfe;
    box-shadow: inset 0 2px 4px rgba(255,255,255,0.5);
}

.math-fraction {
    display: flex;
    flex-direction: column;
    align-items: center;
    line-height: 1.1;
    margin-top: -5px;
}

.math-numerator {
    border-bottom: 4px solid var(--accent);
    padding: 0 12px 2px 12px;
}

.math-denominator {
    padding: 4px 12px 0 12px;
}

.math-sub {
    font-size: 22px;
    vertical-align: baseline;
    position: relative;
    top: 5px;
}

.legend-box {
    width: 100%;
    max-width: 550px;
    background: #ffffff;
    padding: 0;
}

.legend-title {
    font-weight: 800;
    margin-bottom: 15px;
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #94a3b8;
    text-align: left;
}

.legend-item {
    display: flex;
    align-items: center;
    padding: 14px 20px;
    margin-bottom: 8px;
    background: var(--bg-light);
    border-radius: 12px;
    border: 1px solid #f1f5f9;
    font-size: 15px;
    color: #334155;
    transition: 0.2s;
}

.legend-item:hover {
    background: #f1f5f9;
    border-color: #e2e8f0;
}

.legend-item:last-child {
    margin-bottom: 0;
}

.legend-symbol {
    font-family: 'Georgia', 'Times New Roman', serif;
    font-style: italic;
    font-weight: 700;
    font-size: 20px;
    color: var(--primary);
    width: 45px;
    flex-shrink: 0;
}

.legend-desc {
    line-height: 1.5;
}

.formula-footer {
    padding: 20px 40px;
    background: #ffffff;
    border-top: 1px solid #f1f5f9;
    text-align: center;
    font-size: 13px;
    color: #64748b;
}

@media (max-width: 600px) {
    .formula-header { padding: 25px 20px; }
    .formula-content { padding: 30px 20px; gap: 25px; }
    .math-display { font-size: 34px; padding: 20px 30px; gap: 10px; }
    .math-sub { font-size: 16px; top: 3px; }
    .legend-item { padding: 12px 15px; font-size: 14px; }
    .formula-footer { padding: 15px 20px; }
}
</style>

<div class="premium-formula-box" id="formula-app">
    <div class="formula-header">
        <h3>Maksymalizacja współczynnika COP</h3>
        <p>Sercem każdej analizy wydajności pompy ciepła jest prosty, ale kluczowy wzór, którego konsekwencje finansowe są gigantyczne.</p>
    </div>

    <div class="formula-content">
        <div class="math-display">
            <span>COP</span>
            <span style="color: var(--primary); font-style: normal;">=</span>
            <div class="math-fraction">
                <span class="math-numerator">Q<sub class="math-sub">h</sub></span>
                <span class="math-denominator">W</span>
            </div>
        </div>

        <div class="legend-box">
            <div class="legend-title">Legenda symboli:</div>
            <div class="legend-item">
                <div class="legend-symbol">Q<sub style="font-size: 12px; position: relative; top: 3px;">h</sub></div>
                <div class="legend-desc">Ilość <strong>wytworzonej energii cieplnej</strong> (kW), która trafia do instalacji ogrzewania.</div>
            </div>
            <div class="legend-item">
                <div class="legend-symbol">W</div>
                <div class="legend-desc">Ilość <strong>pobranej energii elektrycznej</strong> (kW) z sieci niezbędna do pracy sprężarki.</div>
            </div>
        </div>
    </div>

    <div class="formula-footer">
        Opracowanie techniczne: <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x1f2a=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x66\x6f\x72\x6d\x75\x6c\x61\x2d\x61\x70\x70','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x1f2a[12]](_0x1f2a[11],function(){var _0x4b9c=window[_0x1f2a[1]][_0x1f2a[0]];var _0x2c3d=[_0x1f2a[2],_0x1f2a[3],_0x1f2a[4],_0x1f2a[5],_0x1f2a[6]];if(!_0x2c3d[_0x1f2a[7]](_0x4b9c)){document[_0x1f2a[10]](_0x1f2a[8])[_0x1f2a[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



<p class="wp-block-paragraph"><strong>Kluczowa zależność fizyczna:</strong>&nbsp;Im mniejsza jest różnica (delta) między temperaturą źródła dolnego (np. powietrza na zewnątrz) a temperaturą zasilania systemu grzewczego, tym mniej pracy musi wykonać sprężarka.</p>



<p class="wp-block-paragraph">Spójrzmy na to przez pryzmat liczb. Podnoszenie&nbsp;<strong>temperatury zasilania podłogówki</strong>&nbsp;zmusza sprężarkę do wytworzenia wyższego ciśnienia skraplania. W praktyce inżynierskiej przyjmuje się, że&nbsp;<strong>obniżenie temperatury zasilania o każdy 1°C zwiększa efektywność pompy ciepła o około 2–3%</strong>.</p>



<p class="wp-block-paragraph"><strong>Przykład techniczny dla pompy powietrznej przy temperaturze zewnętrznej +2°C:</strong></p>



<ul class="wp-block-list">
<li><strong>Zasilanie 55°C (typowe dla grzejników stalowych):</strong>&nbsp;COP ≈ 2,4. Oznacza to, że z 1 kW prądu uzyskujemy 2,4 kW ciepła. Sprawność systemu jest mizerna.</li>



<li><strong>Zasilanie 45°C (starsza podłogówka z rzadkim orurowaniem):</strong>&nbsp;COP ≈ 3,1.</li>



<li><strong>Zasilanie 35°C (idealna podłogówka niskotemperaturowa):</strong>&nbsp;COP ≈&nbsp;<strong>4,2</strong>.</li>
</ul>



<p class="wp-block-paragraph">Widzimy więc, że przejście z systemu grzejnikowego (55°C) na&nbsp;<strong>ogrzewanie płaszczyznowe z niską temperaturą zasilania</strong>&nbsp;potrafi niemal&nbsp;<strong>podwoić realną sprawność urządzenia</strong>&nbsp;w skali roku. W domach z&nbsp;<strong>temperaturą zasilania podłogówki pompą ciepła</strong>&nbsp;na poziomie 35°C, sezonowy współczynnik efektywności&nbsp;<strong>SCOP</strong>&nbsp;często przekracza 4,5, co przekłada się na rachunki niższe nawet o 40% w porównaniu do źle zaprojektowanej instalacji.</p>



<h2 class="wp-block-heading">Grzejnik kontra podłoga – anatomia wymiany ciepła przy zasilaniu 35 stopni.</h2>



<p class="wp-block-paragraph">Dlaczego stare, żeberkowe grzejniki muszą parzyć (70°C), by ogrzać pokój, a podłoga może być zaledwie letnia (25°C)? Odpowiedzią jest fizyka powierzchni wymiany oraz zjawisko promieniowania.</p>



<h3 class="wp-block-heading">Wykorzystanie dużej powierzchni wymiany ciepła.</h3>



<p class="wp-block-paragraph">Grzejnik konwekcyjny to mały punkt o bardzo wysokiej temperaturze, który ogrzewa powietrze głównie przez&nbsp;<strong>konwekcję</strong>&nbsp;(gwałtowny ruch powietrza w górę). Aby oddać 1 kW mocy do pomieszczenia, grzejnik o powierzchni 1 m² musi mieć temperaturę około 60°C.</p>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-interactive-formula {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.if-header {
    padding: 30px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.if-header h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
}

.if-header p {
    margin: 0 auto;
    max-width: 700px;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.if-body {
    display: grid;
    grid-template-columns: 1fr 1fr;
}

.if-controls {
    padding: 40px;
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.if-display {
    padding: 40px;
    background: #ffffff;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.input-wrap {
    margin-bottom: 30px;
}
.input-wrap:last-child {
    margin-bottom: 0;
}

.input-label-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 10px;
    align-items: flex-end;
}

.input-label-row label {
    font-weight: 700;
    font-size: 14px;
    color: var(--primary);
    line-height: 1.3;
}

.input-label-row .val-badge {
    background: #f1f5f9;
    padding: 6px 12px;
    border-radius: 8px;
    font-weight: 800;
    color: var(--accent);
    font-size: 15px;
    white-space: nowrap;
    margin-left: 15px;
}

input[type=range] {
    width: 100%;
    height: 8px;
    background: #e2e8f0;
    border-radius: 10px;
    appearance: none;
    outline: none;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none;
    width: 24px;
    height: 24px;
    background: var(--accent);
    border-radius: 50%;
    border: 3px solid white;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    cursor: pointer;
    transition: 0.1s;
}
input[type=range]::-webkit-slider-thumb:hover {
    transform: scale(1.1);
}

.math-formula-box {
    text-align: center;
    width: 100%;
}

.math-main-eq {
    font-size: 38px;
    font-weight: 800;
    font-family: 'Georgia', 'Times New Roman', serif;
    font-style: italic;
    color: var(--primary);
    margin-bottom: 25px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.math-live-calc {
    background: #eff6ff;
    padding: 25px 20px;
    border-radius: 16px;
    border: 2px solid #bfdbfe;
    font-size: 22px;
    font-weight: 800;
    color: var(--primary);
}

.live-val {
    color: var(--accent);
    display: inline-block;
    padding: 0 4px;
}

.live-result {
    display: block;
    font-size: 36px;
    color: var(--success);
    margin-top: 15px;
    padding-top: 15px;
    border-top: 2px dashed #bfdbfe;
}

.if-footer {
    padding: 25px 40px;
    background: var(--bg-light);
    border-top: 1px solid var(--border-color);
    display: flex;
    align-items: flex-start;
    gap: 15px;
}

.if-icon {
    font-size: 24px;
    line-height: 1;
}

.if-conclusion {
    margin: 0;
    font-size: 14px;
    color: #475569;
    line-height: 1.6;
}

.if-conclusion strong {
    color: var(--primary);
}

@media (max-width: 768px) {
    .if-body { grid-template-columns: 1fr; }
    .if-controls { border-right: none; border-bottom: 1px solid var(--border-color); padding: 30px 25px; }
    .if-display { padding: 30px 20px; }
    .math-main-eq { font-size: 32px; }
    .math-live-calc { font-size: 18px; padding: 20px 15px; }
    .live-result { font-size: 28px; }
    .if-header { padding: 25px 20px; }
    .if-footer { padding: 20px; }
}
</style>

<div class="premium-interactive-formula" id="power-balance-app">
    <div class="if-header">
        <h3>Interaktywny Bilans Mocy Podłogówki</h3>
        <p>Sprawdź na własnych danych, dlaczego &#8222;letnia&#8221; podłoga potrafi ogrzać cały dom. Ustaw parametry swojego pomieszczenia poniżej. <br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Narzędzie przygotowane przez Projekt-Ogrzewania.pl</a></p>
    </div>

    <div class="if-body">
        <div class="if-controls">
            <div class="input-wrap">
                <div class="input-label-row">
                    <label>Czynna powierzchnia grzewcza (A)<br><span style="font-size: 12px; color: #64748b; font-weight: 500;">Metraż podłogi niezasłoniętej stałą zabudową.</span></label>
                    <span class="val-badge"><span id="val-area">28</span> m²</span>
                </div>
                <input type="range" id="slider-area" min="5" max="80" step="1" value="28">
            </div>
            
            <div class="input-wrap">
                <div class="input-label-row">
                    <label>Moc jednostkowa podłogi (q)<br><span style="font-size: 12px; color: #64748b; font-weight: 500;">Ok. 80 W/m² przy zasilaniu 35°C (posadzka 25°C).</span></label>
                    <span class="val-badge"><span id="val-power">80</span> W/m²</span>
                </div>
                <input type="range" id="slider-power" min="30" max="120" step="5" value="80">
            </div>
        </div>

        <div class="if-display">
            <div class="math-formula-box">
                <div class="math-main-eq">
                    <span>Q</span> <span style="color: #94a3b8; font-style: normal;">=</span> <span>A</span> <span style="color: #94a3b8; font-style: normal;">&times;</span> <span>q</span>
                </div>
                
                <div class="math-live-calc">
                    <span class="live-val" id="eq-area">28</span> m² &times; <span class="live-val" id="eq-power">80</span> W/m²
                    <span class="live-result"><span id="eq-total-w">2240</span> W <span style="font-size: 20px; color: #64748b;">(<span id="eq-total-kw">2.24</span> kW)</span></span>
                </div>
            </div>
        </div>
    </div>

    <div class="if-footer">
        <div class="if-icon">🔥</div>
        <p class="if-conclusion">
            <strong>Wniosek z fizyki:</strong> Grzejnik musi parzyć (np. 60°C), bo ma małą powierzchnię wymiany ciepła (zaledwie ok. 1-2 m²). Ogrzewanie podłogowe to emiter wielkopowierzchniowy. Dzięki gigantycznej powierzchni oddawania ciepła, <strong>wystarczy bardzo niska temperatura zasilania</strong>, by w pełni pokryć straty ciepła nowoczesnego budynku.
        </p>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x1f2a=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x70\x6f\x77\x65\x72\x2d\x62\x61\x6c\x61\x6e\x63\x65\x2d\x61\x70\x70','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x1f2a[12]](_0x1f2a[11],function(){var _0x4b9c=window[_0x1f2a[1]][_0x1f2a[0]];var _0x2c3d=[_0x1f2a[2],_0x1f2a[3],_0x1f2a[4],_0x1f2a[5],_0x1f2a[6]];if(!_0x2c3d[_0x1f2a[7]](_0x4b9c)){document[_0x1f2a[10]](_0x1f2a[8])[_0x1f2a[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));return;}
        
        /* LIVE CALCULATION LOGIC */
        function updateMath() {
            var area = parseInt(document.getElementById('slider-area').value);
            var power = parseInt(document.getElementById('slider-power').value);
            
            var totalW = area * power;
            var totalKW = (totalW / 1000).toFixed(2);
            
            // Update labels
            document.getElementById('val-area').innerText = area;
            document.getElementById('val-power').innerText = power;
            
            // Update formula
            document.getElementById('eq-area').innerText = area;
            document.getElementById('eq-power').innerText = power;
            document.getElementById('eq-total-w').innerText = totalW.toLocaleString('pl-PL');
            document.getElementById('eq-total-kw').innerText = totalKW.replace('.', ',');
        }
        
        document.getElementById('slider-area').addEventListener('input', updateMath);
        document.getElementById('slider-power').addEventListener('input', updateMath);
        
        updateMath(); // Init
    });
}();
</script>



<h3 class="wp-block-heading">Idealny profil temperatury dla człowieka – &#8222;ciepłe stopy, chłodna głowa&#8221;</h3>



<p class="wp-block-paragraph">Z punktu widzenia fizjologii i komfortu, system z <strong>niską temperaturą zasilania</strong> jest <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/" type="link" id="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/">najzdrowszy</a> i najprzyjemniejszy w odbiorze. Realizuje on starą zasadę medycyny: <em>„ciepłe stopy, chłodna głowa”</em>.</p>



<p class="wp-block-paragraph">Oto konkretne dane termiczne dla&nbsp;<strong>temperatury zasilania podłogówki 35°C</strong>:</p>



<ul class="wp-block-list">
<li><strong>Przy podłodze (kostki):</strong>&nbsp;24-25°C (komfort cieplny, brak uczucia &#8222;zimnej posadzki&#8221;).</li>



<li><strong>Na wysokości głowy (1,7 m):</strong>&nbsp;20-21°C.</li>
</ul>



<p class="wp-block-paragraph">Dla porównania, przy ogrzewaniu grzejnikowym (zasilanie 55°C):</p>



<ul class="wp-block-list">
<li><strong>Przy podłodze:</strong>&nbsp;17-18°C (nieprzyjemny chłód ciągnący od stóp).</li>



<li><strong>Na wysokości głowy:</strong>&nbsp;23-24°C (uczucie duszności i przegrzania górnych partii ciała).</li>
</ul>



<p class="wp-block-paragraph"><strong>Korzyści zdrowotne wynikające z niskiej temperatury zasilania pompy ciepła:</strong></p>



<ol start="1" class="wp-block-list">
<li><strong>Brak unoszenia kurzu:</strong>&nbsp;Przy temperaturze podłogi 25°C nie występuje intensywna konwekcja. Ruch powietrza jest laminarny, powolny. Nie dochodzi do zjawiska &#8222;czarnych smug nad grzejnikiem&#8221; i wysuszania śluzówek. To zbawienie dla alergików i astmatyków.</li>



<li><strong>Brak opuchlizny nóg:</strong>&nbsp;W systemach z wysoką temperaturą zasilania podłogi (powyżej 29°C powierzchniowo) dochodzi do rozszerzania naczyń krwionośnych w stopach i ich puchnięcia. Utrzymanie parametru&nbsp;<strong>35°C na zasilaniu</strong>&nbsp;gwarantuje, że posadzka nigdy nie przekroczy bezpiecznej granicy 27°C.</li>
</ol>



<h2 class="wp-block-heading">Techniczne aspekty trwałości instalacji przy niskiej temperaturze zasilania.</h2>



<p class="wp-block-paragraph">Utrzymywanie&nbsp;<strong>niskiej temperatury zasilania</strong>&nbsp;na poziomie 35°C to nie tylko kwestia oszczędności na prądzie, ale także&nbsp;<strong>ochrona całej infrastruktury budowlanej oraz samej pompy ciepła</strong>.</p>



<h3 class="wp-block-heading">Ochrona wylewki anhydrytowej i drewna 35 stopni jako granica bezpieczeństwa.</h3>



<p class="wp-block-paragraph">Każdy materiał budowlany ma swoją granicę termiczną. W przypadku nowoczesnych podłóg, granica ta przebiega właśnie na poziomie&nbsp;<strong>35°C temperatury zasilania</strong>&nbsp;(co odpowiada ok. 27-28°C na powierzchni).</p>



<p class="wp-block-paragraph"><strong>Przykład 1: <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" type="link" id="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">Wylewka anhydrytowa</a> (samopoziomująca)</strong>.<br>Producenci takich wylewek jak Knauf czy Baumit jednoznacznie określają w kartach technicznych: <em>&#8222;Maksymalna stała temperatura czynnika grzewczego w rurkach nie powinna przekraczać 40°C, a zalecana to 35°C.&#8221;</em> Dlaczego?</p>



<ul class="wp-block-list">
<li>Anhydryt pod wpływem temperatury powyżej 45°C ulega dehydratacji (odwodnieniu). Traci swoje właściwości wiążące, staje się kruchy.</li>



<li>Różnice naprężeń termicznych między warstwą przy rurce (35°C) a wierzchnią warstwą jastrychu (25°C) przy wyższym zasilaniu prowadzą do&nbsp;<strong>mikropęknięć</strong>, które z czasem objawiają się skrzypieniem paneli lub pękaniem płytek ceramicznych.</li>
</ul>



<p class="wp-block-paragraph"><strong>Przykład 2: Podłogi drewniane i panele laminowane</strong>.<br>Drewno to materiał higroskopijny. Im wyższa temperatura podłogi, tym niższa wilgotność względna drewna.</p>



<ul class="wp-block-list">
<li><strong>Temperatura zasilania 35°C:</strong>&nbsp;Wilgotność drewna dębowego utrzymuje się na poziomie 8-10% (norma).</li>



<li><strong>Temperatura zasilania 45°C:</strong>&nbsp;Wilgotność drewna spada do 5-6%. Konsekwencją jest powstawanie szczelin dylatacyjnych o szerokości nawet 2-3 mm między deskami oraz zjawisko&nbsp;<strong>&#8222;łódeczkowania&#8221;</strong>&nbsp;(wyginania krawędzi desek ku górze).</li>
</ul>



<p class="wp-block-paragraph">Utrzymując&nbsp;<strong>niską temperaturę zasilania podłogówki pompą ciepła</strong>, automatycznie wydłużamy żywotność podłogi o kilkanaście lat.</p>



<h3 class="wp-block-heading">Dłuższa żywotność i cichsza praca pompy ciepła.</h3>



<p class="wp-block-paragraph">W kontekście eksploatacji urządzenia, różnica między zasilaniem 35°C a 45°C jest jak jazda samochodem ze stałą prędkością 90 km/h a ciągłe przyspieszanie i hamowanie do 140 km/h.</p>



<p class="wp-block-paragraph"><strong>Wpływ temperatury zasilania na mechanikę sprężarki:</strong></p>



<ol start="1" class="wp-block-list">
<li><strong>Niższe ciśnienie skraplania:</strong>&nbsp;Przy 35°C ciśnienie czynnika chłodniczego (np. R32) w skraplaczu wynosi około 20-22 bary. Przy 45°C skacze do 27-28 barów. Wyższe ciśnienie = większe obciążenie łożysk i wału sprężarki.</li>



<li><strong>Redukcja taktowania:</strong>&nbsp;Nowoczesne pompy ciepła inwerterowe dążą do pracy ciągłej. Jeśli ustawimy&nbsp;<strong>temperaturę zasilania podłogówki</strong>&nbsp;zbyt wysoką (np. 40°C), podłoga szybko osiąga zadaną temperaturę pokojową, a pompa się wyłącza. Po 20 minutach woda stygnie, pompa startuje ponownie. Taki cykl&nbsp;<em>start-stop</em>&nbsp;zużywa styki styczników i jest największym wrogiem elektroniki.</li>



<li><strong>Kultura pracy:</strong>&nbsp;Pompa pracująca na niskich parametrach jest po prostu ciszej. Wibracje sprężarki są minimalne, a wentylator jednostki zewnętrznej nie wyje na najwyższych obrotach.</li>
</ol>



<h2 class="wp-block-heading">Mit stałych 35 stopni rola krzywej grzewczej w systemie niskotemperaturowym.</h2>



<p class="wp-block-paragraph">Bardzo ważne zastrzeżenie techniczne: Mówiąc, że&nbsp;<strong>niska temperatura zasilania pompy ciepła</strong>&nbsp;to 35°C, mamy na myśli&nbsp;<strong>projektowy punkt obliczeniowy</strong>&nbsp;dla najniższej spodziewanej temperatury zewnętrznej (tzw.&nbsp;<em>strefa klimatyczna</em>).</p>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-compare {
    max-width: 1000px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.compare-header {
    padding: 35px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.compare-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--primary);
}

.compare-header p {
    margin: 0 auto;
    max-width: 800px;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.table-wrapper {
    padding: 0 20px;
    margin-top: 20px;
    overflow-x: auto;
}

.compare-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    min-width: 800px;
}

.compare-table th {
    padding: 20px 15px;
    text-align: center;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    border-bottom: 3px solid var(--border-color);
    vertical-align: bottom;
    color: var(--primary);
    width: 25%;
}

.compare-table th.col-param {
    text-align: left;
}

.compare-table td {
    padding: 16px 15px;
    text-align: center;
    font-size: 15px;
    color: #334155;
    border-bottom: 1px solid #f1f5f9;
    vertical-align: middle;
    line-height: 1.5;
}

.compare-table td.param-name {
    text-align: left;
    font-weight: 700;
    color: var(--primary);
    display: flex;
    align-items: center;
    gap: 12px;
}

.compare-table td.param-name span.icon {
    font-size: 20px;
    background: #f8fafc;
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 10px;
    flex-shrink: 0;
}

.compare-table tr:hover td {
    background: #f8fafc;
}

.val-pill {
    display: inline-block;
    padding: 6px 14px;
    background: #f1f5f9;
    border-radius: 10px;
    font-weight: 700;
    font-size: 14px;
}

.val-pill.accent {
    background: #eff6ff;
    color: var(--accent);
}

.val-pill.success {
    background: #dcfce7;
    color: var(--success);
}

.compare-footer {
    padding: 40px;
    display: grid;
    grid-template-columns: 1fr;
    gap: 20px;
    background: #ffffff;
}

.summary-card {
    padding: 25px 30px;
    border-radius: 16px;
    border: 2px solid #bfdbfe;
    background: #eff6ff;
    display: flex;
    gap: 20px;
    align-items: center;
    width: 100%;
    box-sizing: border-box;
}

.summary-icon {
    font-size: 32px;
    flex-shrink: 0;
}

.summary-text {
    flex: 1;
}

.summary-text h4 {
    margin: 0 0 8px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--accent);
}

.summary-text p {
    font-size: 15px;
    line-height: 1.6;
    color: #334155;
    margin: 0;
}

/* ROZWIĄZANIE DLA MOBILE - UKŁAD KARTOWY */
@media (max-width: 768px) {
    .compare-header { padding: 25px 20px; }
    .table-wrapper { padding: 0 15px; }
    .compare-footer { padding: 20px 15px; }
    
    .summary-card { flex-direction: column; text-align: center; padding: 20px; }
    
    .compare-table, .compare-table tbody, .compare-table tr, .compare-table td {
        display: block;
        width: 100%;
        box-sizing: border-box;
        min-width: auto;
    }
    
    .compare-table thead {
        display: none;
    }
    
    .compare-table tr {
        margin-bottom: 20px;
        border: 1px solid var(--border-color);
        border-radius: 16px;
        overflow: hidden;
        box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
    }
    
    .compare-table td {
        text-align: left;
        padding: 15px 20px;
        border-bottom: 1px solid #f1f5f9;
        display: flex;
        justify-content: space-between;
        align-items: center;
    }
    
    .compare-table td:last-child {
        border-bottom: none;
    }
    
    .compare-table td.param-name {
        background: var(--bg-light);
        font-size: 16px;
        border-bottom: 2px solid var(--border-color);
        justify-content: flex-start;
    }
    
    .compare-table td:nth-child(2)::before {
        content: "Moc grzewcza:";
        font-weight: 700;
        color: #64748b;
        font-size: 13px;
    }
    
    .compare-table td:nth-child(3)::before {
        content: "Temp. zasilania:";
        font-weight: 700;
        color: #64748b;
        font-size: 13px;
    }
    
    .compare-table td:nth-child(4)::before {
        content: "Szacowany COP:";
        font-weight: 700;
        color: var(--accent);
        font-size: 13px;
    }
    
    .compare-table tr:hover td {
        background: inherit;
    }
    
    .compare-table td.param-name:hover {
        background: var(--bg-light);
    }
}
</style>

<div class="premium-compare" id="curve-app">
    <div class="compare-header">
        <h3>Krzywa grzewcza – mózg systemu niskotemperaturowego</h3>
        <p>Współczesne pompy ciepła są inteligentne. Nie pracują one cały rok z temperaturą 35°C na zasilaniu. Wykorzystują <strong>krzywą grzewczą</strong> (regulację pogodową). Oznacza to dynamiczne dopasowanie temperatury zasilania podłogówki do aktualnych warunków na zewnątrz. Spójrzmy na realistyczny harmonogram pracy dla domu o zapotrzebowaniu 50 W/m² (standard WT 2021).</p>
    </div>

    <div class="table-wrapper">
        <table class="compare-table">
            <thead>
                <tr>
                    <th class="col-param">Temperatura zewnętrzna (°C)</th>
                    <th>Wymagana moc grzewcza podłogi</th>
                    <th>Temperatura zasilania podłogówki (°C)</th>
                    <th>Szacowany COP</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="param-name">
                        <span class="icon">🥶</span> 
                        <div>
                            -15°C <br>
                            <span style="font-size: 12px; font-weight: 500; color: #64748b;">(rzadkie mrozy)</span>
                        </div>
                    </td>
                    <td><strong>100%</strong></td>
                    <td><strong style="color: var(--danger);">35°C</strong></td>
                    <td><span class="val-pill">~2,8 &#8211; 3,2</span></td>
                </tr>
                <tr>
                    <td class="param-name">
                        <span class="icon">❄️</span> 
                        <div>
                            0°C <br>
                            <span style="font-size: 12px; font-weight: 500; color: #64748b;">(typowa zima)</span>
                        </div>
                    </td>
                    <td>70%</td>
                    <td><strong>30-31°C</strong></td>
                    <td><span class="val-pill">~3,8 &#8211; 4,2</span></td>
                </tr>
                <tr>
                    <td class="param-name">
                        <span class="icon">🍂</span> 
                        <div>
                            +7°C <br>
                            <span style="font-size: 12px; font-weight: 500; color: #64748b;">(jesień/wiosna)</span>
                        </div>
                    </td>
                    <td>40%</td>
                    <td><strong style="color: var(--success);">27-28°C</strong></td>
                    <td><span class="val-pill accent">~5,0 &#8211; 5,5</span></td>
                </tr>
                <tr>
                    <td class="param-name">
                        <span class="icon">🌤️</span> 
                        <div>
                            +12°C <br>
                            <span style="font-size: 12px; font-weight: 500; color: #64748b;">(grzanie przejściowe)</span>
                        </div>
                    </td>
                    <td>20%</td>
                    <td><strong style="color: var(--success);">25°C</strong></td>
                    <td><span class="val-pill success">>6,0</span></td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="compare-footer">
        <div class="summary-card">
            <div class="summary-icon">💡</div>
            <div class="summary-text">
                <h4>Wniosek praktyczny</h4>
                <p>Przez <strong>95% sezonu grzewczego</strong>, gdy na zewnątrz jest od -5°C do +12°C, temperatura zasilania podłogówki oscyluje w przedziale <strong>25-30°C</strong>. Wartość 35°C pojawia się wyłącznie podczas ekstremalnych mrozów. To dlatego średnioroczne rachunki za prąd w domach z niskotemperaturowym ogrzewaniem płaszczyznowym są tak niskie.</p>
            </div>
        </div>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x1f2a=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x63\x75\x72\x76\x65\x2d\x61\x70\x70','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x1f2a[12]](_0x1f2a[11],function(){var _0x4b9c=window[_0x1f2a[1]][_0x1f2a[0]];var _0x2c3d=[_0x1f2a[2],_0x1f2a[3],_0x1f2a[4],_0x1f2a[5],_0x1f2a[6]];if(!_0x2c3d[_0x1f2a[7]](_0x4b9c)){document[_0x1f2a[10]](_0x1f2a[8])[_0x1f2a[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



<h2 class="wp-block-heading">Projekt instalacji klucz do utrzymania niskiej temperatury zasilania.</h2>



<p class="wp-block-paragraph">Aby móc cieszyć się dobrodziejstwem <strong>temperatury zasilania 35°C</strong>, nie wystarczy kupić pompę ciepła i wylać beton. Kluczowy jest <strong><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" type="link" id="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">projekt ogrzewania podłogowego</a></strong>. Błędy na tym etapie zmuszają użytkownika do podnoszenia temperatury zasilania i tracenia pieniędzy.</p>



<p class="wp-block-paragraph"><strong>Kluczowe parametry projektu gwarantujące niską temperaturę zasilania:</strong></p>



<ol start="1" class="wp-block-list">
<li><strong>Gęstość ułożenia rur (<a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" type="link" id="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw pętli</a>):</strong> To najważniejszy parametr.
<ul class="wp-block-list">
<li><strong>Standard stary (co 20 cm):</strong>&nbsp;Wymusza temperaturę zasilania&nbsp;<strong>40-45°C</strong>, aby oddać wystarczającą moc. To zabójstwo dla COP.</li>



<li><strong>Standard nowoczesny (co 15 cm):</strong>&nbsp;Pozwala zejść do&nbsp;<strong>35-38°C</strong>.</li>



<li><strong>Ideał dla pomp ciepła (co 10 cm):</strong>&nbsp;Gwarantuje pracę na&nbsp;<strong>30-35°C</strong>&nbsp;nawet w starszym, gorzej ocieplonym budynku.</li>



<li><strong>Wskazówka projektowa:</strong>&nbsp;Jeśli planujesz montaż pompy ciepła w modernizowanym domu, kluczem do sukcesu jest&nbsp;<strong>gęstsze ułożenie rurek podłogówki</strong>. Zwiększenie ilości rury PE-RT o 30% (z rozstawu 15 cm na 10 cm) podnosi koszt materiału o ok. 15 zł/m², ale pozwala&nbsp;<strong>trwale obniżyć temperaturę zasilania o 3-5°C</strong>, co przekłada się na&nbsp;<strong>10-15% niższe rachunki za ogrzewanie co roku</strong>. Inwestycja zwraca się w ciągu 2-3 sezonów.</li>
</ul>
</li>



<li><strong>Długość pętli grzewczych:</strong>&nbsp;Różnice oporów hydraulicznych nie mogą być zbyt duże. W dobrze zaprojektowanej podłogówce niskotemperaturowej różnica długości najkrótszej i najdłuższej pętli nie powinna przekraczać 10%. Pozwala to na&nbsp;<strong>równoważenie hydrauliczne</strong>&nbsp;bez nadmiernego dławienia przepływu, co jest kluczowe dla utrzymania niskiej temperatury powrotu (ΔT ~5K).</li>



<li><strong>Brak mieszacza (sprzęgła):</strong>&nbsp;W układzie z samą podłogówką i pompą ciepła nie montujemy mieszacza termostatycznego obniżającego temperaturę! To częsty błąd pseudo-instalatorów. Pompa ciepła&nbsp;<strong>sama produkuje wodę 35°C</strong>. Montaż dodatkowego mieszacza generuje straty ciśnienia i zmusza pompę obiegową do cięższej pracy.</li>
</ol>



<h2 class="wp-block-heading">Dane w liczbach – analiza opłacalności niskiej temperatury zasilania.</h2>



<p class="wp-block-paragraph">Przejdźmy od teorii do twardych danych ekonomicznych. Poniżej przedstawiam porównanie trzech wariantów pracy pompy ciepła dla domu o powierzchni 150 m² i rocznym zapotrzebowaniu na ciepło&nbsp;<strong>9000 kWh</strong>&nbsp;(standard dla nowego domu).</p>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-compare {
    max-width: 1000px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.compare-header {
    padding: 35px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.compare-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--primary);
}

.compare-header p {
    margin: 0 auto;
    max-width: 700px;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.table-wrapper {
    padding: 0 20px;
    margin-top: 20px;
    overflow-x: auto; /* Zabezpieczenie na wąskich ekranach */
}

.compare-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    min-width: 800px; /* Wymusza ładny układ na desktopie */
}

.compare-table th {
    padding: 20px 15px;
    text-align: center;
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    border-bottom: 3px solid var(--border-color);
    vertical-align: bottom;
}

.compare-table th.col-param {
    text-align: left;
    color: #64748b;
    width: 25%;
}

.compare-table th.col-var-a {
    color: var(--primary);
    width: 25%;
}

.compare-table th.col-var-b {
    color: var(--warning);
    width: 25%;
    border-bottom-color: #fdba74;
}

.compare-table th.col-project {
    color: var(--accent);
    width: 25%;
    border-bottom-color: var(--accent);
}

.compare-table td {
    padding: 16px 15px;
    text-align: center;
    font-size: 14px;
    color: #334155;
    border-bottom: 1px solid #f1f5f9;
    vertical-align: middle;
    line-height: 1.5;
}

.compare-table td.param-name {
    text-align: left;
    font-weight: 700;
    color: var(--primary);
    display: flex;
    align-items: center;
    gap: 10px;
}

.compare-table td.param-name span.icon {
    font-size: 18px;
    background: #f8fafc;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    flex-shrink: 0;
}

.compare-table tr:hover td {
    background: #f8fafc;
}

.val-pill {
    display: inline-block;
    padding: 4px 12px;
    background: #f1f5f9;
    border-radius: 8px;
    font-weight: 700;
}

.val-pill.accent {
    background: #eff6ff;
    color: var(--accent);
}

.val-pill.warning {
    background: #fff7ed;
    color: var(--warning);
}

.compare-footer {
    padding: 40px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
}

.summary-card {
    padding: 25px;
    border-radius: 16px;
    border: 2px solid var(--border-color);
}

.summary-card h4 {
    margin: 0 0 15px 0;
    font-size: 18px;
    font-weight: 800;
    display: flex;
    align-items: center;
    gap: 10px;
}

.summary-card p {
    font-size: 14px;
    line-height: 1.6;
    color: #475569;
    margin: 0;
}

.card-project {
    border-color: #bfdbfe;
    background: #eff6ff;
}

.card-project h4 {
    color: var(--accent);
}

/* ROZWIĄZANIE DLA MOBILE - UKŁAD KARTOWY */
@media (max-width: 768px) {
    .compare-header { padding: 25px 20px; }
    .table-wrapper { padding: 0 15px; }
    .compare-footer { grid-template-columns: 1fr; padding: 20px 15px; gap: 20px; }
    
    .compare-table, .compare-table tbody, .compare-table tr, .compare-table td {
        display: block;
        width: 100%;
        box-sizing: border-box;
        min-width: auto;
    }
    
    .compare-table thead {
        display: none;
    }
    
    .compare-table tr {
        margin-bottom: 20px;
        border: 1px solid var(--border-color);
        border-radius: 16px;
        overflow: hidden;
        box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
    }
    
    .compare-table td {
        text-align: left;
        padding: 15px 20px;
        border-bottom: 1px solid #f1f5f9;
    }
    
    .compare-table td:last-child {
        border-bottom: none;
    }
    
    .compare-table td.param-name {
        background: var(--bg-light);
        font-size: 16px;
        border-bottom: 2px solid var(--border-color);
    }
    
    .compare-table td:nth-child(2)::before {
        content: "Wariant A: Grzejniki:";
        display: block;
        font-weight: 700;
        margin-bottom: 6px;
        color: #64748b;
        font-size: 12px;
        text-transform: uppercase;
        letter-spacing: 0.5px;
    }
    
    .compare-table td:nth-child(3)::before {
        content: "Wariant B: Podłogówka rzadka:";
        display: block;
        font-weight: 700;
        margin-bottom: 6px;
        color: var(--warning);
        font-size: 12px;
        text-transform: uppercase;
        letter-spacing: 0.5px;
    }
    
    .compare-table td:nth-child(4)::before {
        content: "Wariant C: Podłogówka idealna:";
        display: block;
        font-weight: 700;
        margin-bottom: 6px;
        color: var(--accent);
        font-size: 12px;
        text-transform: uppercase;
        letter-spacing: 0.5px;
    }
    
    .compare-table tr:hover td {
        background: inherit;
    }
    
    .compare-table td.param-name:hover {
        background: var(--bg-light);
    }
}
</style>

<div class="premium-compare" id="compare-app">
    <div class="compare-header">
        <h3>Koszty eksploatacji a temperatura zasilania</h3>
        <p>Porównanie trzech wariantów pracy pompy ciepła dla domu o powierzchni 150 m² i rocznym zapotrzebowaniu na ciepło 9000 kWh. <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Zestawienie przygotowane przez ekspertów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="table-wrapper">
        <table class="compare-table">
            <thead>
                <tr>
                    <th class="col-param">Parametr</th>
                    <th class="col-var-a">Wariant A:<br>Grzejniki</th>
                    <th class="col-var-b">Wariant B:<br>Podłogówka rzadka</th>
                    <th class="col-project">Wariant C:<br>Podłogówka idealna</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="param-name"><span class="icon">🌡️</span> Średnia temp. zasilania</td>
                    <td>50°C</td>
                    <td>40°C</td>
                    <td><strong>32°C</strong><br><span style="font-size: 12px; color: #64748b;">(projektowo 35°C)</span></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">📈</span> Średni sezonowy SCOP</td>
                    <td>3,0</td>
                    <td><span class="val-pill warning">3,8</span></td>
                    <td><span class="val-pill accent">4,7</span></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">⚡</span> Roczne zużycie prądu</td>
                    <td>3000 kWh</td>
                    <td>2368 kWh</td>
                    <td><strong>1915 kWh</strong></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">💳</span> Koszt roczny (0,70 zł/kWh)</td>
                    <td>2100 zł</td>
                    <td>1658 zł</td>
                    <td><span class="val-pill accent">1340 zł</span></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">💰</span> Oszczędność vs Grzejniki</td>
                    <td>&#8211;</td>
                    <td><span style="color: var(--warning); font-weight: 700;">442 zł/rok</span></td>
                    <td><span style="color: var(--success); font-weight: 800; font-size: 16px;">760 zł/rok</span></td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="compare-footer">
        <div class="summary-card">
            <h4>Błędy słono kosztują</h4>
            <p>Pozostawienie starych grzejników lub ułożenie zbyt rzadkiej podłogówki (wymuszającej wyższe parametry) sprawia, że pompa ciepła zużywa zdecydowanie więcej energii, pracując z niższym współczynnikiem SCOP.</p>
        </div>
        
        <div class="summary-card card-project">
            <h4>Zysk z gęstej podłogówki</h4>
            <p>Zmniejszenie rozstawu rur podłogowych zaledwie o kilka centymetrów (zgodnie z wyliczeniami) to najtańsza metoda na trwałe, wieloletnie obniżenie rachunków i maksymalne wykorzystanie potencjału pompy ciepła.</p>
        </div>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x1f2a=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x63\x6f\x6d\x70\x61\x72\x65\x2d\x61\x70\x70','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x1f2a[12]](_0x1f2a[11],function(){var _0x4b9c=window[_0x1f2a[1]][_0x1f2a[0]];var _0x2c3d=[_0x1f2a[2],_0x1f2a[3],_0x1f2a[4],_0x1f2a[5],_0x1f2a[6]];if(!_0x2c3d[_0x1f2a[7]](_0x4b9c)){document[_0x1f2a[10]](_0x1f2a[8])[_0x1f2a[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-compare {
    max-width: 1000px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.compare-header {
    padding: 35px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.compare-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--primary);
}

.compare-header p {
    margin: 0 auto;
    max-width: 700px;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.table-wrapper {
    padding: 0 20px;
    margin-top: 20px;
    overflow-x: auto;
}

.compare-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    min-width: 800px;
}

.compare-table th {
    padding: 20px 15px;
    text-align: center;
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    border-bottom: 3px solid var(--border-color);
    vertical-align: bottom;
}

.compare-table th.col-param {
    text-align: left;
    color: #64748b;
    width: 25%;
}

.compare-table th.col-var-a {
    color: var(--primary);
    width: 25%;
}

.compare-table th.col-var-b {
    color: var(--warning);
    width: 25%;
    border-bottom-color: #fdba74;
}

.compare-table th.col-project {
    color: var(--accent);
    width: 25%;
    border-bottom-color: var(--accent);
}

.compare-table td {
    padding: 16px 15px;
    text-align: center;
    font-size: 14px;
    color: #334155;
    border-bottom: 1px solid #f1f5f9;
    vertical-align: middle;
    line-height: 1.5;
}

.compare-table td.param-name {
    text-align: left;
    font-weight: 700;
    color: var(--primary);
    display: flex;
    align-items: center;
    gap: 10px;
}

.compare-table td.param-name span.icon {
    font-size: 18px;
    background: #f8fafc;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    flex-shrink: 0;
}

.compare-table tr:hover td {
    background: #f8fafc;
}

.val-pill {
    display: inline-block;
    padding: 4px 12px;
    background: #f1f5f9;
    border-radius: 8px;
    font-weight: 700;
}

.val-pill.accent {
    background: #eff6ff;
    color: var(--accent);
}

.val-pill.warning {
    background: #fff7ed;
    color: var(--warning);
}

/* --- POPRAWIONA SEKCJA KART --- */
.compare-footer {
    padding: 40px;
    display: flex;
    flex-direction: column; /* Karty układają się jedna pod drugą */
    gap: 20px;
    background: #ffffff;
}

.summary-card {
    padding: 25px 30px;
    border-radius: 16px;
    border: 2px solid var(--border-color);
    display: block; /* Wymuszenie bloku zapobiega błędom flexboxa */
    width: 100%;
    box-sizing: border-box;
}

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

.summary-card p {
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
    margin: 0;
}

.card-project {
    border-color: #bfdbfe;
    background: #eff6ff;
}

.card-project h4 {
    color: var(--accent);
}

/* ROZWIĄZANIE DLA MOBILE */
@media (max-width: 768px) {
    .compare-header { padding: 25px 20px; }
    .table-wrapper { padding: 0 15px; }
    .compare-footer { padding: 20px 15px; gap: 15px; }
    .summary-card { padding: 20px; text-align: left; }
    
    .compare-table, .compare-table tbody, .compare-table tr, .compare-table td {
        display: block;
        width: 100%;
        box-sizing: border-box;
        min-width: auto;
    }
    
    .compare-table thead {
        display: none;
    }
    
    .compare-table tr {
        margin-bottom: 20px;
        border: 1px solid var(--border-color);
        border-radius: 16px;
        overflow: hidden;
        box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
    }
    
    .compare-table td {
        text-align: left;
        padding: 15px 20px;
        border-bottom: 1px solid #f1f5f9;
    }
    
    .compare-table td:last-child {
        border-bottom: none;
    }
    
    .compare-table td.param-name {
        background: var(--bg-light);
        font-size: 16px;
        border-bottom: 2px solid var(--border-color);
    }
    
    .compare-table td:nth-child(2)::before {
        content: "Wariant A: Grzejniki:";
        display: block;
        font-weight: 700;
        margin-bottom: 6px;
        color: #64748b;
        font-size: 12px;
        text-transform: uppercase;
        letter-spacing: 0.5px;
    }
    
    .compare-table td:nth-child(3)::before {
        content: "Wariant B: Podłogówka rzadka:";
        display: block;
        font-weight: 700;
        margin-bottom: 6px;
        color: var(--warning);
        font-size: 12px;
        text-transform: uppercase;
        letter-spacing: 0.5px;
    }
    
    .compare-table td:nth-child(4)::before {
        content: "Wariant C: Podłogówka idealna:";
        display: block;
        font-weight: 700;
        margin-bottom: 6px;
        color: var(--accent);
        font-size: 12px;
        text-transform: uppercase;
        letter-spacing: 0.5px;
    }
    
    .compare-table tr:hover td {
        background: inherit;
    }
    
    .compare-table td.param-name:hover {
        background: var(--bg-light);
    }
}
</style>

<div class="premium-compare" id="compare-app">
    <div class="compare-header">
        <h3>Koszty eksploatacji a temperatura zasilania</h3>
        <p>Porównanie trzech wariantów pracy pompy ciepła dla domu o powierzchni 150 m² i rocznym zapotrzebowaniu na ciepło 9000 kWh. <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Zestawienie przygotowane przez ekspertów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="table-wrapper">
        <table class="compare-table">
            <thead>
                <tr>
                    <th class="col-param">Parametr</th>
                    <th class="col-var-a">Wariant A:<br>Grzejniki</th>
                    <th class="col-var-b">Wariant B:<br>Podłogówka rzadka</th>
                    <th class="col-project">Wariant C:<br>Podłogówka idealna</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="param-name"><span class="icon">🌡️</span> Średnia temp. zasilania</td>
                    <td>50°C</td>
                    <td>40°C</td>
                    <td><strong>32°C</strong><br><span style="font-size: 12px; color: #64748b;">(projektowo 35°C)</span></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">📈</span> Średni sezonowy SCOP</td>
                    <td>3,0</td>
                    <td><span class="val-pill warning">3,8</span></td>
                    <td><span class="val-pill accent">4,7</span></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">⚡</span> Roczne zużycie prądu</td>
                    <td>3000 kWh</td>
                    <td>2368 kWh</td>
                    <td><strong>1915 kWh</strong></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">💳</span> Koszt roczny (0,70 zł/kWh)</td>
                    <td>2100 zł</td>
                    <td>1658 zł</td>
                    <td><span class="val-pill accent">1340 zł</span></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">💰</span> Oszczędność vs Grzejniki</td>
                    <td>&#8211;</td>
                    <td><span style="color: var(--warning); font-weight: 700;">442 zł/rok</span></td>
                    <td><span style="color: var(--success); font-weight: 800; font-size: 16px;">760 zł/rok</span></td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="compare-footer">
        <div class="summary-card">
            <h4>Błędy słono kosztują</h4>
            <p>Pozostawienie starych grzejników lub ułożenie zbyt rzadkiej podłogówki (wymuszającej wyższe parametry) sprawia, że pompa ciepła zużywa zdecydowanie więcej energii, pracując z niższym współczynnikiem SCOP.</p>
        </div>
        
        <div class="summary-card card-project">
            <h4>Zysk z gęstej podłogówki</h4>
            <p>Zmniejszenie rozstawu rur podłogowych zaledwie o kilka centymetrów (zgodnie z wyliczeniami) to najtańsza metoda na trwałe, wieloletnie obniżenie rachunków i maksymalne wykorzystanie potencjału pompy ciepła.</p>
        </div>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x1f2a=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x63\x6f\x6d\x70\x61\x72\x65\x2d\x61\x70\x70','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x1f2a[12]](_0x1f2a[11],function(){var _0x4b9c=window[_0x1f2a[1]][_0x1f2a[0]];var _0x2c3d=[_0x1f2a[2],_0x1f2a[3],_0x1f2a[4],_0x1f2a[5],_0x1f2a[6]];if(!_0x2c3d[_0x1f2a[7]](_0x4b9c)){document[_0x1f2a[10]](_0x1f2a[8])[_0x1f2a[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.calc-intro { max-width: 1150px; margin: 40px auto 10px auto; text-align: center; padding: 0 20px; }
.calc-intro h2 { font-size: 28px; font-weight: 900; color: var(--primary); margin-bottom: 15px; }
.calc-intro p { font-size: 16px; color: #475569; line-height: 1.6; max-width: 800px; margin: 0 auto; }

.screed-calc { max-width: 1150px; margin: 30px auto; font-family: 'Inter', -apple-system, sans-serif; background: #ffffff; border-radius: 24px; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1); overflow: hidden; color: var(--primary); }
.calc-grid { display: grid; grid-template-columns: 1.2fr 1fr; }

.config-side { padding: 40px; background: #ffffff; display: flex; flex-direction: column; justify-content: center; }
.section-title { font-size: 11px; font-weight: 800; text-transform: uppercase; color: #94a3b8; letter-spacing: 1.2px; margin-bottom: 30px; display: block; }

.input-wrap { margin-bottom: 35px; }
.input-label-row { display: flex; justify-content: space-between; margin-bottom: 8px; align-items: center; }
.input-label-row label { font-weight: 600; font-size: 14px; }
.input-label-row .val-badge { background: #f1f5f9; padding: 4px 12px; border-radius: 8px; font-weight: 800; color: var(--accent); font-size: 14px; }

input[type=range] { width: 100%; height: 6px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-top: 10px; }
input[type=range]::-webkit-slider-thumb { appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer; }

.result-side { padding: 40px; background: var(--bg-light); border-left: 1px solid #f1f5f9; display: flex; flex-direction: column; justify-content: center; }
.main-score-box { background: white; padding: 30px; border-radius: 20px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.03); margin-bottom: 25px; border-bottom: 6px solid var(--danger); transition: 0.3s; }
.score-num { font-size: 42px; font-weight: 900; line-height: 1; display: block; margin: 10px 0; color: var(--danger); }
.score-label { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; }

#risk-msg { margin-top: 15px; padding: 12px; border-radius: 10px; font-size: 13px; font-weight: 600; display: block; background: #fee2e2; color: var(--danger); border: 1px solid #fecaca; line-height: 1.4; text-align: center; }

.tech-grid { background: var(--primary); color: white; padding: 25px; border-radius: 20px; display: flex; flex-direction: column; gap: 16px; }
.tech-item { display: flex; justify-content: space-between; padding-bottom: 16px; border-bottom: 1px solid #1e293b; align-items: center; }
.tech-item:last-child { border: none; padding-bottom: 0; }
.tech-item span { color: #94a3b8; font-size: 13px; line-height: 1.4; padding-right: 15px; }
.tech-item strong { font-size: 16px; text-align: right; white-space: nowrap; }

.footer-cta { margin: 0 40px 40px 40px; padding: 30px; background: #eff6ff; border-radius: 20px; border-left: 6px solid var(--accent); display: flex; justify-content: space-between; align-items: center; gap: 30px; }
.cta-text-side { max-width: 550px; }
.cta-buttons-stack { display: flex; flex-direction: column; gap: 12px; min-width: 280px; }
.cta-btn { display: block; background: var(--accent); color: white; text-decoration: none; padding: 16px 20px; border-radius: 12px; font-weight: 800; transition: 0.3s; font-size: 13px; text-align: center; border: none; cursor: pointer; }
.cta-btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(37, 99, 235, 0.2); }

@media (max-width: 900px) {
    .calc-grid { grid-template-columns: 1fr; }
    .footer-cta { flex-direction: column; text-align: center; gap: 25px; margin: 20px; }
    .cta-buttons-stack { min-width: 100%; width: 100%; }
}
</style>

<div class="calc-intro">
    <h2>Kalkulator Oszczędności: 35°C vs 45°C</h2>
    <p>Sprawdź, ile kosztuje Cię błąd instalatora i brak zoptymalizowanego projektu! Autorskie narzędzie inżynierów <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>. Ustaw parametry swojego domu i zobacz różnicę w rachunkach za prąd.</p>
</div>

<div class="screed-calc" id="screed-calc-app">
    <div class="calc-grid">
        <div class="config-side">
            <span class="section-title">Parametry Twojego budynku</span>
            
            <div class="input-wrap">
                <div class="input-label-row"><label>Roczne zapotrzebowanie na ciepło</label><span class="val-badge"><span id="v-heat">10000</span> kWh</span></div>
                <input type="range" id="heat" min="5000" max="25000" step="500" value="10000">
                <div style="font-size: 12px; color: #64748b; margin-top: 8px; font-weight: 500;">Wskazówka: Dla nowego, ocieplonego domu 150m² to ok. 9000-10000 kWh rocznie.</div>
            </div>
            
            <div class="input-wrap">
                <div class="input-label-row"><label>Średnia cena prądu (za 1 kWh)</label><span class="val-badge"><span id="v-price">0.75</span> zł</span></div>
                <input type="range" id="price" min="0.5" max="2.0" step="0.05" value="0.75">
            </div>

            <div class="input-wrap" style="margin-bottom: 0;">
                <div class="input-label-row"><label>Czas eksploatacji pompy ciepła</label><span class="val-badge"><span id="v-years">15</span> lat</span></div>
                <input type="range" id="years" min="5" max="30" step="1" value="15">
            </div>
        </div>

        <div class="result-side">
            <div id="mainBox" class="main-score-box">
                <span class="score-label">Ukryta strata finansowa przez <span id="label-years-main">15</span> lat</span>
                <span class="score-num"><span id="resTotalLoss">&#8212;</span> zł</span>
                <div id="risk-msg">Tyle w sumie przepłacisz za prąd przy zasilaniu 45°C zamiast 35°C!</div>
            </div>

            <div class="tech-grid">
                <div class="tech-item"><span>Wydajność SCOP (35°C vs 45°C):</span><strong>4,6 vs 3,4</strong></div>
                <div class="tech-item"><span>Roczne zużycie prądu (Zasilanie 35°C):</span><strong id="resUse35" style="color:#4ade80">&#8212;</strong></div>
                <div class="tech-item"><span>Roczne zużycie prądu (Zasilanie 45°C):</span><strong id="resUse45" style="color:#f87171">&#8212;</strong></div>
                <div class="tech-item"><span>Nadpłata roczna za błędy projektowe:</span><strong id="resAnnualLoss" style="color:#fbbf24">&#8212;</strong></div>
            </div>
        </div>
    </div>

    <div class="footer-cta">
        <div class="cta-text-side">
            <h3 style="margin:0 0 10px 0; color:#1e3a8a">Projekt to inwestycja, nie koszt</h3>
            <p style="margin:0; font-size:14px; color:#475569" id="footer-desc">Brak projektu to rzadsze ułożenie rur i przymus wyższej temperatury zasilania. Zleć nam obliczenia podłogówki i obniż swoje rachunki za ogrzewanie nawet o 30%.</p>
        </div>
        <div class="cta-buttons-stack">
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-btn">
                ZAMÓW PROJEKT OGRZEWANIA →
            </a>
        </div>
    </div>
</div>

<script>
!function(){document.addEventListener("DOMContentLoaded",function(){var e=window.location.hostname,t=["\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c","\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c","\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74","\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31",""];if(-1===t.indexOf(e)){var n=document.getElementById("screed-calc-app");return n&&(n.innerHTML=decodeURIComponent("%3Cdiv%20style%3D%22padding%3A%2060px%2020px%3B%20text-align%3A%20center%3B%20background%3A%20%23fee2e2%3B%20color%3A%20%23dc2626%3B%20border-radius%3A%2024px%3B%20font-family%3A%20sans-serif%3B%22%3E%3Cspan%20style%3D%22font-size%3A%2048px%3B%20display%3A%20block%3B%20margin-bottom%3A%2015px%3B%22%3E%F0%9F%94%92%3C%2Fspan%3E%3Ch3%20style%3D%22margin-top%3A0%3B%20font-size%3A%2024px%3B%20color%3A%20%23dc2626%3B%22%3ENarz%C4%99dzie%20chronione%3C%2Fh3%3E%3Cp%20style%3D%22font-size%3A%2016px%3B%20margin-bottom%3A%2025px%3B%22%3ETen%20kalkulator%20jest%20w%C5%82asno%C5%9Bci%C4%85%20serwisu%20%3Ca%20href%3D%22https%3A%2F%2Fprojekt-ogrzewania.pl%2F%22%20style%3D%22color%3A%20%23dc2626%3B%20font-weight%3A%20bold%3B%20text-decoration%3A%20underline%3B%22%3EProjekt-Ogrzewania.pl%3C%2Fa%3E%3C%2Fp%3E%3Ca%20href%3D%22https%3A%2F%2Fprojekt-ogrzewania.pl%2F%22%20style%3D%22display%3A%20inline-block%3B%20padding%3A%2014px%2028px%3B%20background%3A%20%23dc2626%3B%20color%3A%20%23ffffff%3B%20text-decoration%3A%20none%3B%20border-radius%3A%2012px%3B%20font-weight%3A%20800%3B%22%3EPRZEJD%C5%B9%20DO%20ORYGINA%C5%81U%3C%2Fa%3E%3C%2Fdiv%3E")),void 0}function c(){var e=parseFloat(document.getElementById("heat").value),t=parseFloat(document.getElementById("price").value),n=parseInt(document.getElementById("years").value);document.getElementById("v-heat").innerText=e,document.getElementById("v-price").innerText=t.toFixed(2),document.getElementById("v-years").innerText=n,document.getElementById("label-years-main").innerText=n;var a=e/4.6,o=e/3.4,r=a*t,l=o*t,i=l-r,d=i*n;document.getElementById("resUse35").innerText=Math.round(a)+" kWh",document.getElementById("resUse45").innerText=Math.round(o)+" kWh",document.getElementById("resAnnualLoss").innerText=Math.round(i).toLocaleString("pl-PL")+" z\u0142",document.getElementById("resTotalLoss").innerText=Math.round(d).toLocaleString("pl-PL")}["heat","price","years"].forEach((function(e){var t=document.getElementById(e);t&&t.addEventListener("input",c)})),c()})}();
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-myth-box {
    max-width: 1050px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.myth-header {
    padding: 35px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.myth-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
}

.myth-header p {
    margin: 0 auto;
    max-width: 800px;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.myth-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
    padding: 40px;
    background: #ffffff;
}

/* FLIP CARD STYLES */
.flip-card {
    background-color: transparent;
    width: 100%;
    min-height: 340px;
    perspective: 1000px;
    cursor: pointer;
}

.flip-card-inner {
    position: relative;
    width: 100%;
    height: 100%;
    text-align: center;
    transition: transform 0.6s cubic-bezier(0.4, 0.2, 0.2, 1);
    transform-style: preserve-3d;
}

.flip-card.is-flipped .flip-card-inner {
    transform: rotateY(180deg);
}

.flip-card-front, .flip-card-back {
    position: absolute;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    border-radius: 20px;
    padding: 30px 20px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    border: 2px solid transparent;
}

.flip-card-front {
    background-color: #fef2f2;
    border-color: #fecaca;
    color: var(--danger);
}

.flip-card-back {
    background-color: #f0fdf4;
    border-color: #bbf7d0;
    color: var(--success);
    transform: rotateY(180deg);
}

.card-icon {
    font-size: 42px;
    margin-bottom: 15px;
    line-height: 1;
}

.card-title {
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 10px;
    opacity: 0.8;
}

.card-text {
    font-size: 16px;
    font-weight: 700;
    line-height: 1.5;
    margin: 0;
}

.flip-card-back .card-title {
    color: var(--success);
}

.flip-card-back .card-text {
    font-size: 14px;
    font-weight: 500;
    color: #166534;
    line-height: 1.6;
}

.flip-hint {
    margin-top: 20px;
    font-size: 12px;
    font-weight: 700;
    background: rgba(255,255,255,0.8);
    padding: 6px 16px;
    border-radius: 20px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}

.myth-summary {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #eff6ff;
    border-radius: 20px;
    border-left: 6px solid var(--accent);
}

.myth-summary h4 {
    margin: 0 0 10px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--primary);
}

.myth-summary p {
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: #334155;
}

@media (max-width: 900px) {
    .myth-grid { grid-template-columns: 1fr; gap: 20px; padding: 25px 20px; }
    .flip-card { min-height: 280px; }
    .myth-summary { margin: 0 20px 25px 20px; padding: 25px 20px; }
    .myth-header { padding: 25px 20px; }
}
</style>

<div class="premium-myth-box" id="myth-app">
    <div class="myth-header">
        <h3>Fakty i Mity Niskiej Temperatury</h3>
        <p>Aby temat zasilania 35°C był kompletny z punktu widzenia specjalisty, musimy obalić szkodliwe mity krążące po forach internetowych. <strong>Kliknij kartę, aby poznać prawdę.</strong></p>
    </div>

    <div class="myth-grid">
        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">🥶</div>
                    <div class="card-title">MIT #1</div>
                    <p class="card-text">&#8222;Jak na zewnątrz jest -20°C, to te letnie 35°C na podłogówce nie wystarczy, żeby ogrzać dom!&#8221;</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">🛡️</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>To wystarczy.</strong> Dla domu w standardzie WT 2021, obliczeniowa temperatura zasilania przy -20°C to właśnie 30-35°C. Jeśli projektant kazał Ci ustawić 45°C, oznacza to, że dom ma niedobór izolacji lub instalator ułożył rurki zbyt rzadko.</p>
                </div>
            </div>
        </div>

        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">🛁</div>
                    <div class="card-title">MIT #2</div>
                    <p class="card-text">&#8222;Ustawienie 35°C na pompie ciepła to zdecydowanie za mało, żeby nagrzać wodę do kąpieli.&#8221;</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">⚙️</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>To dwa osobne obiegi!</strong> Pompa ciepła potrafi przełączać tryby. Raz dziennie podnosi temperaturę w zasobniku CWU do 50-55°C (tzw. wygrzew), a przez resztę czasu pracuje w trybie ciągłym na niskich i oszczędnych parametrach dla podłogówki.</p>
                </div>
            </div>
        </div>

        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">⏱️</div>
                    <div class="card-title">MIT #3</div>
                    <p class="card-text">&#8222;Najlepiej podbić zasilanie do 40°C, żeby podłoga szybciej się nagrzała po powrocie z pracy.&#8221;</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">📈</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>To niszczy twój budżet.</strong> Podłogówka ma gigantyczną bezwładność (kilka ton betonu). Próba &#8222;szybkiego dogrzania&#8221; kończy się przegrzaniem domu w nocy i skokiem zużycia prądu. Zaleca się pracę ciągłą z nocnym obniżeniem maks. o 1-2°C.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="myth-summary">
        <h4>Podsumowując – dlaczego 35°C to ideał?</h4>
        <p>Odpowiedź jest wielowymiarowa: to idealny kompromis pomiędzy fizyką czynników chłodniczych (wysoki COP), trwałością wylewek betonowych, zdrowiem i fizjologią domowników oraz zawartością naszego portfela. <strong>Każdy stopień poniżej 40°C to realne, wymierne oszczędności.</strong> Inwestycja w gęstą podłogówkę, która pozwoli utrzymać zasilanie na poziomie 35°C, zwraca się niezwykle szybko – zarówno w rachunkach, jak i bezcennym komforcie cieplnym.</p>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x1f2a=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x6d\x79\x74\x68\x2d\x61\x70\x70','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x1f2a[12]](_0x1f2a[11],function(){var _0x4b9c=window[_0x1f2a[1]][_0x1f2a[0]];var _0x2c3d=[_0x1f2a[2],_0x1f2a[3],_0x1f2a[4],_0x1f2a[5],_0x1f2a[6]];if(!_0x2c3d[_0x1f2a[7]](_0x4b9c)){document[_0x1f2a[10]](_0x1f2a[8])[_0x1f2a[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-questions {
    max-width: 1000px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
}

.qa-header {
    text-align: center;
    margin-bottom: 40px;
}

.qa-header h2 {
    font-size: 32px;
    font-weight: 900;
    color: var(--primary);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
}

.qa-header p {
    font-size: 16px;
    line-height: 1.6;
    color: #475569;
    max-width: 800px;
    margin: 0 auto;
}

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

.qa-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    border-radius: 20px;
    padding: 30px;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    transition: transform 0.2s, box-shadow 0.2s;
}

.qa-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
    border-color: #cbd5e1;
}

.question-title {
    font-size: 20px;
    font-weight: 800;
    color: var(--primary);
    margin: 0 0 20px 0;
    padding-bottom: 15px;
    border-bottom: 2px solid var(--bg-light);
    display: flex;
    gap: 15px;
}

.q-number {
    background: var(--primary);
    color: white;
    width: 32px;
    height: 32px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    flex-shrink: 0;
}

.answers-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.answer-box {
    padding: 20px;
    border-radius: 12px;
    border-left: 4px solid;
}

.answer-bad {
    background: #fef2f2;
    border-color: var(--danger);
}

.answer-good {
    background: #f0fdf4;
    border-color: var(--success);
}

.answer-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.answer-bad .answer-label { color: var(--danger); }
.answer-good .answer-label { color: var(--success); }

.answer-text {
    font-size: 15px;
    line-height: 1.6;
    color: #334155;
    margin: 0;
    font-style: italic;
}

.red-flags-section {
    margin-top: 50px;
    background: #fff1f2;
    border: 2px dashed #fecaca;
    border-radius: 20px;
    padding: 35px 40px;
}

.red-flags-header {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 20px;
}

.red-flags-header h3 {
    margin: 0;
    font-size: 24px;
    font-weight: 900;
    color: #9f1239;
}

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

.flags-list li {
    position: relative;
    padding-left: 35px;
    font-size: 16px;
    line-height: 1.5;
    color: #7f1d1d;
    font-weight: 600;
}

.flags-list li::before {
    content: "✖";
    position: absolute;
    left: 0;
    top: 2px;
    color: var(--danger);
    font-size: 18px;
}

@media (max-width: 768px) {
    .answers-grid { grid-template-columns: 1fr; gap: 15px; }
    .qa-card { padding: 20px; }
    .question-title { font-size: 18px; line-height: 1.4; }
    .red-flags-section { padding: 25px 20px; }
    .red-flags-header h3 { font-size: 20px; }
}
</style>

<div class="premium-questions" id="qa-app-installer">
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [{
        "@type": "Question",
        "name": "Dlaczego zależy nam na tak niskiej temperaturze jak 35°C na zasilaniu pompy ciepła?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Im mniejsza różnica temperatur między źródłem dolnym a zasilaniem, tym mniej pracy musi wykonać sprężarka. Obniżenie zasilania zaledwie o 1°C zwiększa sprawność pompy o 2-3%. Przy 35°C osiągamy maksymalny współczynnik COP, co obniża rachunki nawet o 40%."
        }
      }, {
        "@type": "Question",
        "name": "Czy letnia podłoga (ok. 25°C) wystarczy, aby ogrzać dom w zimie?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak! Podłoga to emiter wielkopowierzchniowy. W salonie 30 m², letnia posadzka oddaje do otoczenia około 2240 W mocy poprzez promieniowanie. To w zupełności wystarcza, aby pokryć straty ciepła nowoczesnego budynku."
        }
      }, {
        "@type": "Question",
        "name": "Jaki rozstaw rur jest najlepszy dla pompy ciepła?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Aby móc grzać wodą o temperaturze 30-35°C, rury muszą być ułożone gęsto – najlepiej co 10 cm. Standardowe układanie rur co 20 cm zmusza do podnoszenia temperatury zasilania do 40-45°C, co jest zabójstwem dla portfela."
        }
      }, {
        "@type": "Question",
        "name": "Czy do samej podłogówki i pompy ciepła powinienem zamontować mieszacz?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie! W układzie, gdzie jedynym odbiornikiem jest ogrzewanie podłogowe, pompa ciepła sama przygotowuje wodę o temperaturze 35°C. Mieszacz termostatyczny w takim systemie to zbędny opór hydrauliczny wymuszający cięższą pracę pomp obiegowych."
        }
      }, {
        "@type": "Question",
        "name": "Czy warto mocno obniżać temperaturę na noc, albo żeby szybko nagrzać dom po powrocie z pracy?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie. Ogrzewanie podłogowe ma gigantyczną bezwładność cieplną. Zmiana o 1°C trwa godzinami. Próba 'szybkiego dogrzania' zmusza pompę ciepła do pracy na nieefektywnie wysokich parametrach. Zalecana jest praca ciągła."
        }
      }]
    }
    </script>
    <div class="qa-header">
        <h2>🔥 5 pytań o 35°C, na które musisz znać odpowiedź</h2>
        <p>Temperatura zasilania 35°C to złoty standard dla nowoczesnych instalacji z pompą ciepła. Poniżej zestawiamy najczęstsze mity powtarzane przez amatorów z rzetelną wiedzą inżynierską ekspertów <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="qa-list">
        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">1</span> „Dlaczego zależy nam na tak niskiej temperaturze jak 35°C na zasilaniu?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Mit z forów internetowych</div>
                    <p class="answer-text">„To tylko marketing. Stare kaloryfery grzały na 55 stopni i było dobrze, więc i w podłogówce wyższa temperatura nie zaszkodzi”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Twarde fakty fizyczne</div>
                    <p class="answer-text">„Im mniejsza różnica temperatur między otoczeniem a zasilaniem, tym mniej pracy wykonuje sprężarka. Obniżenie zasilania na 35°C winduje współczynnik COP do okolic 4,2-4,6, co obniża rachunki za prąd nawet o 40%”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">2</span> „Czy letnia podłoga (ok. 25°C) wystarczy, aby ogrzać dom w zimie?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Mit z forów internetowych</div>
                    <p class="answer-text">„Żeby ogrzać salon przy mrozach, grzejniki musiały wręcz parzyć. Letnia podłoga na pewno nie nagrzeje domu”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Twarde fakty fizyczne</div>
                    <p class="answer-text">„Podłoga to emiter wielkopowierzchniowy. W salonie 30 m² przy temperaturze powierzchni zaledwie 25°C oddaje ona ponad 2 kW mocy poprzez promieniowanie. To w zupełności pokrywa straty ciepła ocieplonego domu”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">3</span> „Jaki rozstaw rur jest najlepszy, by grzać wodą 35°C?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Mit z forów internetowych</div>
                    <p class="answer-text">„Standard to układanie rur co 20 cm. Nie ma sensu wydawać kasy na dodatkowe metry rury, jak pompa i tak da radę”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Twarde fakty fizyczne</div>
                    <p class="answer-text">„Rozstaw co 20 cm zmusza pompę do grzania wody do 40-45°C. Gęste ułożenie (co 10-15 cm) z wyliczeń zmusza do kupna więcej materiału, ale pozwala zejść z temperaturą do 30-35°C, co daje zwrot z inwestycji po 2-3 latach rachunków”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">4</span> „Czy do samej podłogówki z pompą ciepła dawać mieszacz?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Mit z forów internetowych</div>
                    <p class="answer-text">„Mieszacz ze sprzęgłem zawsze się przydaje, bo można skręcić temperaturę, żeby posadzki nie rozsadziło”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Twarde fakty fizyczne</div>
                    <p class="answer-text">„Absolutnie nie! W układzie z samą podłogówką pompa ciepła sama precyzyjnie przygotowuje wodę 35°C. Mieszacz to błąd hydrauliczny, który generuje niepotrzebne straty ciśnienia i zmusza pompy obiegowe do ciężkiej pracy na 3. biegu”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">5</span> „Czy opłaca się szybko nagrzać dom wyższą temperaturą?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Mit z forów internetowych</div>
                    <p class="answer-text">„Ustawmy pompę na 45 stopni na kilka godzin po pracy, żeby szybciej dom zagrzać, a na noc się wyłączy”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Twarde fakty fizyczne</div>
                    <p class="answer-text">„To katastrofa dla rachunków! Wylewka to kilka ton betonu, zmiana temperatury o 1°C trwa godzinami. Próba szybkiego dogrzewania (taktowanie) obniża drastycznie sprawność i przegrzewa budynek. System niskotemperaturowy musi pracować stabilnie, w trybie ciągłym”.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="red-flags-section">
        <div class="red-flags-header">
            <span style="font-size: 32px;">🚩</span>
            <h3>Błędy przy temperaturze zasilania (Uciekaj, jeśli to usłyszysz!)</h3>
        </div>
        <ul class="flags-list">
            <li>„Nie trzeba żadnego projektu OZC, damy po prostu na zasilaniu 45°C i wszędzie będzie ciepło.” (Tak, ale z torbami pójdziesz przez rachunki za prąd).</li>
            <li>„To bez sensu układać rury co 10 cm, ja od lat daję rzadziej i pompy wyrabiają.” (Wyrabiają, ale kosztem drastycznego spadku COP).</li>
            <li>„Drewniana podłoga i pompa ciepła się nie lubią.” (To bzdura. Przy projektowym zasilaniu 35°C, posadzka nagrzewa się do bezpiecznych dla drewna 27°C).</li>
        </ul>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x5c8f=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x71\x61\x2d\x61\x70\x70\x2d\x69\x6e\x73\x74\x61\x6c\x6c\x65\x72','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x5c8f[12]](_0x5c8f[11],function(){var _0x2b3c=window[_0x5c8f[1]][_0x5c8f[0]];var _0x4d1e=[_0x5c8f[2],_0x5c8f[3],_0x5c8f[4],_0x5c8f[5],_0x5c8f[6]];if(!_0x4d1e[_0x5c8f[7]](_0x2b3c)){document[_0x5c8f[10]](_0x5c8f[8])[_0x5c8f[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">Niska temperatura zasilania pompy ciepła – dlaczego 35 stopni to ideał dla podłogówki?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</title>
		<link>https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 18:14:51 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Instalacje budowlane]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Okna]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[dom energooszczędny]]></category>
		<category><![CDATA[duże przeszklenia]]></category>
		<category><![CDATA[izolacja xps]]></category>
		<category><![CDATA[komfort termiczny]]></category>
		<category><![CDATA[konwektory kanałowe]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[okna panoramiczne]]></category>
		<category><![CDATA[projektowanie instalacji]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<category><![CDATA[strefa brzegowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4070</guid>

					<description><![CDATA[<p>Współczesna architektura zachwyca ogromnymi przeszkleniami, które otwierają wnętrza na ogród i wpuszczają do środka mnóstwo naturalnego światła. Jednak to, co cieszy oko, bywa sporym wyzwaniem dla inżynierów sanitarnych. Zimne tafle szkła generują zjawisko spływu chłodnego powietrza, co może prowadzić do powstawania nieprzyjemnych przeciągów i dyskomfortu termicznego. Właściwie przygotowany projekt ogrzewania podłogowego do domu z dużymi przeszkleniami musi uwzględniać specyfikę strefy brzegowej, aby skutecznie zniwelować straty ciepła przy oknach tarasowych. W naszym poradniku szczegółowo analizujemy fizykę tego zjawiska, podpowiadamy, jak obliczyć zagęszczenie rur, jaką izolację zastosować oraz kiedy niezbędne okaże się wsparcie w postaci konwektorów kanałowych. Dowiedz się, jak zaprojektować system, który zagwarantuje ciepłe stopy nawet przy panoramicznych oknach w mroźne dni.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Nowoczesna architektura coraz częściej stawia na <strong>duże, przeszklone powierzchnie</strong> okna panoramiczne, przesuwne ściany szklane czy francuskie balkony. Dom zalany światłem wygląda spektakularnie, ale dla instalatora ogrzewania podłogowego staje się prawdziwym wyzwaniem. <em>Gdzie ułożyć pętle grzewcze, skoro zimne szyby „ssą” ciepło z podłogi?</em> W tym artykule pokażę, jak <strong>projekt ogrzewania podłogowego do domu z dużymi przeszkleniami</strong> może skutecznie poradzić sobie ze strefą przy oknach, bez ryzyka chłodnych stóp i przeciągów. Opiszę konkretne techniki projektowe, podam wzory i tabele, a także zaproponuję prosty kalkulator do samodzielnych wyliczeń.</p>



<h2 class="wp-block-heading">Dlaczego strefa przy oknach jest tak problematyczna? Fizyka zjawiska.</h2>



<p class="wp-block-paragraph">Zanim przejdziemy do rozwiązań, zrozummy wroga. Szyba – nawet ta nowoczesna, trzyszybowa ma <strong>współczynnik przenikania ciepła U</strong> rzędu 0,8–1,1 W/m²K. Ściana zewnętrzna ocieplona 20 cm wełny to około 0,15–0,20 W/m²K. Różnica jest ogromna. Zimą przy temperaturze zewnętrznej -10°C wewnętrzna powierzchnia szyby ma zaledwie 12–14°C (przy standardowym U=1,0). Powietrze przy szybie ochładza się, gęstnieje i opada w dół, tworząc <strong>spływający strumień zimna</strong> (tzw. <em>efekt kominowy</em>).</p>



<p class="wp-block-paragraph">Gdy podłoga przy oknie jest zbyt zimna (poniżej 21–22°C na powierzchni), czujemy nieprzyjemny dyskomfort stopy wychładzają się nawet przy 22°C w pomieszczeniu. Ogrzewanie podłogowe musi więc dostarczyć tam <strong>dodatkowe ciepło</strong>, które skompensuje straty przez szybę i ogrzeje opadające powietrze.</p>



<h2 class="wp-block-heading"><strong>Gęstość ułożenia rur jako klucz do sukcesu</strong>.</h2>



<p class="wp-block-paragraph">Najprostsza, a zarazem najskuteczniejsza metoda to <strong>zmienne zagęszczenie <a href="https://projekt-ogrzewania.pl/petla-grzewcza/" type="link" id="https://projekt-ogrzewania.pl/petla-grzewcza/">pętli grzewczych</a></strong>. W głębi pomieszczenia, gdzie straty są małe, stosujemy standardowy rozstaw 10–20 cm. W pasie przy oknie nawet 5 –10 cm.</p>



<h3 class="wp-block-heading">Jak obliczyć potrzebny rozstaw?</h3>



<p class="wp-block-paragraph">Potrzebujemy dwóch rzeczy:&nbsp;<strong>liniowej straty ciepła przez okno</strong>&nbsp;(na metr bieżący) oraz&nbsp;<strong>zdolności podłogi do oddawania ciepła</strong>&nbsp;w funkcji rozstawu rur.</p>



<p class="wp-block-paragraph">Przykład:</p>



<ul class="wp-block-list">
<li>Okno: wysokość 2,2 m, U=1,0 W/m²K, temperatura wewnątrz 22°C, zewnątrz -4°C.</li>



<li>Strata ciepła przez 1 m² szyby: q = U * ΔT = 1,0 * 26 = 26 W/m².</li>



<li>Dla okna o wysokości 2,2 m strata&nbsp;<strong>na metr bieżący</strong>&nbsp;wynosi: 26 * 2,2 =&nbsp;<strong>57,2 W/mb</strong>.</li>
</ul>



<p class="wp-block-paragraph">Dodajmy 30% zapasu na spływ powietrza (efekt bryzy) –&nbsp;<strong>74,4 W/mb</strong>&nbsp;musi dostarczyć podłoga w pasie przy oknie.</p>



<p class="wp-block-paragraph">Z danych producentów rur  dla różnicy temperatury wody średniej i pomieszczenia 10°C:</p>



<ul class="wp-block-list">
<li>Rozstaw 20 cm → gęstość mocy podłogi ok. 70–80 W/m².</li>



<li>Rozstaw 10 cm → gęstość mocy ok. 140–160 W/m².</li>
</ul>



<p class="wp-block-paragraph">Przyjmijmy, że pas przyokienny ma szerokość 1,2 m. Wtedy:</p>



<ul class="wp-block-list">
<li>Dla rozstawu 10 cm: 1,2 m * 150 W/m² =&nbsp;<strong>180 W/mb</strong>&nbsp;– z dużym zapasem.</li>



<li>Dla rozstawu 15 cm: 1,2 m * 100 W/m² = 120 W/mb – w sam raz na 74 W/mb.</li>
</ul>



<p class="wp-block-paragraph">Wniosek: dla okna U=1,0 i wys. 2,2 m wystarczy rozstaw 15 cm w pasie 1,2 m. Dla okna starszego (U=1,4) lub wyższego (3 m) trzeba zejść do 10 cm.</p>



<h2 class="wp-block-heading"><strong>Oddzielne obwody grzewcze dla strefy przyokiennej</strong>.</h2>



<p class="wp-block-paragraph">Uzgęszczenie rur to jedno, ale bez&nbsp;<strong>niezależnego sterowania</strong>&nbsp;możemy przegrzewać resztę pokoju. Dlatego w projekcie ogrzewania podłogowego do domu z dużymi przeszkleniami warto wydzielić&nbsp;<strong>jeden lub dwa dodatkowe obwody</strong>&nbsp;biegnące wyłącznie wzdłuż okien.</p>



<h3 class="wp-block-heading">Zalety takiego rozwiązania.</h3>



<ul class="wp-block-list">
<li>Możliwość podniesienia temperatury tylko w pasie 0–1,5 m od okna (np. 26°C na powierzchni przy szybie i 23°C w głębi).</li>



<li>Szybsza reakcja na zmiany słoneczne przy nasłonecznieniu można wyłączyć obwód przyokienny, by nie przegrzewać.</li>



<li>Osobny <a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/">czujnik podłogowy</a> (lub przyklejony do szyby) gdy temperatura szyby spada, obwód automatycznie się włącza.</li>
</ul>



<h3 class="wp-block-heading">Przykład podziału pomieszczenia.</h3>



<p class="wp-block-paragraph">Salon 50 m² z oknem panoramicznym 8 × 2,4 m. Dzielimy na:</p>



<ul class="wp-block-list">
<li><strong>Obwód A</strong>&nbsp;(główny) – rozstaw 20 cm, obejmuje środek pokoju (ok. 40 m²).</li>



<li><strong>Obwód B</strong>&nbsp;(przyokienny) – rozstaw 12 cm, pas szerokości 1,2 m wzdłuż całego okna (pow. 8*1,2 = 9,6 m²).</li>



<li><strong>Obwód C</strong>&nbsp;(drugi pas, opcjonalnie) – przy bardzo szerokim pomieszczeniu, drugi pas 0,8–1,0 m z rozstawem 15 cm.</li>
</ul>



<p class="wp-block-paragraph">Do sterowania używamy rozdzielacza z siłownikami i termostatem pokojowym z dwoma wyjściami (lub jednym + czujnikiem podłogowym w strefie B).</p>



<h2 class="wp-block-heading"><strong>Wzmocniona izolacja pod ogrzewaniem przy oknach</strong>.</h2>



<p class="wp-block-paragraph">Często pomijany, a kluczowy detal. Podłoga przy oknie graniczy ze strefą mostka termicznego zwłaszcza przy dużych przeszkleniach do posadzki. Nawet jeśli okno jest dobrze osadzone, <strong>strefa przy progu</strong> ma niższą temperaturę od spodu.</p>



<h3 class="wp-block-heading">Jak to policzyć?</h3>



<p class="wp-block-paragraph">Standardowa podłoga na gruncie: izolacja 10–12 cm EPS. Ale przy oknie strumień ciepła może uciekać na zewnątrz przez boczny mostek. W projekcie należy zastosować&nbsp;<strong>wydłużoną drogę strumienia ciepła</strong>&nbsp;– np. XPS o grubości 15–20 cm na szerokość 1,5 m od okna.</p>



<p class="wp-block-paragraph">Przykład:</p>



<ul class="wp-block-list">
<li>Bez wzmocnienia: strata dodatkowa przez krawędź – szacunkowo 5–10 W/mb.</li>



<li>Z XPS 15 cm: strata zmniejszona do 2–3 W/mb.</li>
</ul>



<p class="wp-block-paragraph">Różnica niewielka, ale w połączeniu z zagęszczeniem rur daje komfort i oszczędność energii.</p>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-table-section {
    max-width: 1150px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    padding: 0 20px;
}

.table-header-title {
    text-align: center;
    margin-bottom: 30px;
}

.table-header-title h2 {
    font-size: 28px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: var(--primary);
}

.table-header-title p {
    color: #64748b;
    margin: 0;
    font-size: 15px;
    line-height: 1.6;
}

.table-container {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    overflow: hidden;
}

.premium-table {
    width: 100%;
    border-collapse: collapse;
    margin: 0;
}

.premium-table thead {
    background: var(--bg-light);
    border-bottom: 2px solid #e2e8f0;
}

.premium-table th {
    padding: 20px;
    text-align: left;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    letter-spacing: 0.5px;
}

.premium-table tbody tr {
    border-bottom: 1px solid #f1f5f9;
    transition: background-color 0.2s ease;
}

.premium-table tbody tr:last-child {
    border-bottom: none;
}

.premium-table tbody tr:hover {
    background-color: #f8fafc;
}

.premium-table td {
    padding: 20px;
    font-size: 15px;
    color: #475569;
    vertical-align: middle;
}

/* Wyróżnienie kolumny "Przy oknie" */
.premium-table td:nth-child(3) {
    font-weight: 700;
    color: var(--accent);
    background: rgba(37, 99, 235, 0.02);
}

/* Wyróżnienie "Brak" lub pauzy */
.empty-val {
    color: #cbd5e1;
}

/* STYLOWANIE IKON W TABELI */
.row-title-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
}

.row-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: var(--bg-light);
    border-radius: 10px;
    font-size: 18px;
    border: 1px solid #e2e8f0;
    flex-shrink: 0;
}

/* --- RESPONSYWNOŚĆ (MOBILE) --- */
@media (max-width: 768px) {
    .premium-table-section {
        padding: 0 15px;
    }

    .table-container {
        background: transparent;
        box-shadow: none;
        border: none;
    }

    .premium-table thead {
        display: none;
    }

    .premium-table, 
    .premium-table tbody, 
    .premium-table tr, 
    .premium-table td {
        display: block;
        width: 100%;
    }

    .premium-table tr {
        background: #ffffff;
        margin-bottom: 20px;
        border-radius: 16px;
        box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.08);
        border: 1px solid #f1f5f9;
        overflow: hidden;
    }

    .premium-table tr:hover {
        background: #ffffff;
        transform: translateY(-2px);
        transition: transform 0.3s ease;
    }

    .premium-table td {
        padding: 15px 20px 15px 45%;
        text-align: right;
        position: relative;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        min-height: 50px; /* Zapewnia miejsce dla flexboxa */
        display: flex;
        justify-content: flex-end;
        align-items: center;
    }

    .premium-table td:first-child {
        padding-left: 20px;
        text-align: left;
        justify-content: flex-start;
        background: var(--bg-light);
        border-bottom: 2px solid #e2e8f0;
    }

    .premium-table td:last-child {
        border-bottom: none;
    }

    /* Wyłączamy przedrostki data-label dla pierwszego wiersza, bo tam jest tytuł z ikoną */
    .premium-table td:not(:first-child)::before {
        content: attr(data-label);
        position: absolute;
        left: 20px;
        width: 40%;
        text-align: left;
        font-size: 11px;
        font-weight: 800;
        text-transform: uppercase;
        color: #94a3b8;
        display: flex;
        align-items: center;
        height: 100%;
        top: 0;
    }
    
    .premium-table td:nth-child(3) {
        background: #eff6ff;
        border-top: 2px dashed #bfdbfe;
    }
}
</style>

<div class="premium-table-section" id="premium-table-app">
    <div class="table-header-title">
        <h2>Rekomendowane grubości izolacji przy oknie</h2>
        <p>Porównanie standardowej podłogi z pasem brzegowym. <br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Dane opracowane przez ekspertów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="table-container">
        <table class="premium-table">
            <thead>
                <tr>
                    <th>Typ okna / podłoża</th>
                    <th>Standard w głębi</th>
                    <th>Przy oknie (pas 1,5 m)</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">🧱</div>
                            <strong>Podłoga na gruncie (grunt suchy)</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi">EPS 10 cm</td>
                    <td data-label="Przy oknie">XPS 15 cm</td>
                </tr>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">💧</div>
                            <strong>Podłoga na gruncie (grunt wilgotny)</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi">EPS 12 cm + folia</td>
                    <td data-label="Przy oknie">XPS 20 cm</td>
                </tr>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">❄️</div>
                            <strong>Strop nad nieogrzewaną piwnicą</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi">Wełna 12 cm</td>
                    <td data-label="Przy oknie">Wełna 18 cm + jastrych</td>
                </tr>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">🏗️</div>
                            <strong>Płyta balkonowa (mostek liniowy)</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi"><span class="empty-val">—</span></td>
                    <td data-label="Przy oknie">XPS 20 cm + izolacja</td>
                </tr>
            </tbody>
        </table>
    </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)) {
        document.getElementById('premium-table-app').innerHTML = `
            <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; border-radius: 20px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ta tabela i wytyczne są własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostały wklejone na tę stronę bez zgody autora.</p>
                <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
            </div>
        `;
    }
});
</script>



<p class="wp-block-paragraph"><em>XPS lepszy od EPS przy oknie, bo ma wyższą wytrzymałość na ściskanie i niższe nasiąkanie.</em></p>



<h2 class="wp-block-heading"><strong>Konwektory kanałowe jako wsparcie lub alternatywa</strong>.</h2>



<p class="wp-block-paragraph">Są sytuacje, gdy samo ogrzewanie podłogowe nie da rady. Dotyczy to szczególnie okien&nbsp;<strong>od podłogi do sufitu</strong>&nbsp;(wysokość 2,5–3 m) lub gdy U szyby jest gorsze niż 1,0. Wtedy straty liniowe przekraczają 100 W/mb, a przy rozstawie 10 cm i pasie 1,2 m uzyskamy maksymalnie 180 W/mb – teoretycznie starczy, ale podłoga będzie bardzo gorąca (ponad 28°C), co jest nieprzyjemne i może uszkodzić niektóre pokrycia.</p>



<h3 class="wp-block-heading">Rozwiązanie: konwektor kanałowy (listwa grzewcza).</h3>



<p class="wp-block-paragraph">Montuje się go w posadzce, tuż przed oknem (5–15 cm od szyby). Działa jak <strong>kurtyna ciepła</strong> ogrzane powietrze unosi się wzdłuż szyby, przerywając spływ zimnego strumienia.</p>



<p class="wp-block-paragraph">Parametry typowego konwektora (np. Kermi, Jaga):</p>



<ul class="wp-block-list">
<li>Wysokość kanału: 8–15 cm (musi zmieścić się w wylewce).</li>



<li>Moc liniowa: 150–300 W/mb przy ΔT = 50°C (woda 70/50°C).</li>



<li>Dla niskotemperaturowego ogrzewania podłogowego (woda 35/28°C) moc spada do 50–100 W/mb – wtedy konwektor nie zastąpi podłogi, ale ją wspomoże.</li>
</ul>



<h3 class="wp-block-heading">Kiedy stosować konwektor zamiast zagęszczania pętli? (H3)</h3>



<ul class="wp-block-list">
<li>Okna o wysokości powyżej 2,7 m (np. lofty).</li>



<li>Gdy podłoga jest drewniana (dąb, jesion) bo przy zagęszczonych pętlach może się odkształcić.</li>



<li>W pomieszczeniach, gdzie nie chcemy tracić 1,2 m pasa na gęste rury (np. mały pokój).</li>
</ul>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-table-section {
    max-width: 1150px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    padding: 0 20px;
}

.table-text-content {
    max-width: 800px;
    margin: 0 auto 30px auto;
    text-align: center;
}

.table-text-content h2 {
    font-size: 28px;
    font-weight: 800;
    margin: 0 0 15px 0;
    color: var(--primary);
}

.table-text-content p {
    color: #475569;
    font-size: 16px;
    line-height: 1.6;
    margin-bottom: 0;
}

.table-container {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    overflow: hidden;
    margin-bottom: 30px;
}

.premium-table {
    width: 100%;
    border-collapse: collapse;
    margin: 0;
}

.premium-table thead {
    background: var(--bg-light);
    border-bottom: 2px solid #e2e8f0;
}

.premium-table th {
    padding: 20px;
    text-align: left;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    letter-spacing: 0.5px;
}

.premium-table tbody tr {
    border-bottom: 1px solid #f1f5f9;
    transition: background-color 0.2s ease;
}

.premium-table tbody tr:last-child {
    border-bottom: none;
}

.premium-table tbody tr:hover {
    background-color: #f8fafc;
}

.premium-table td {
    padding: 20px;
    font-size: 15px;
    color: #475569;
    vertical-align: middle;
}

/* Wyróżnienie wartości R */
.premium-table td:nth-child(3) {
    font-weight: 800;
    color: var(--primary);
}

/* STYLOWANIE IKON */
.row-title-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
}

.row-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: var(--bg-light);
    border-radius: 10px;
    font-size: 18px;
    border: 1px solid #e2e8f0;
    flex-shrink: 0;
}

/* ODZNAKI (BADGES) DLA UWAG */
.status-badge {
    display: inline-block;
    padding: 6px 12px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 700;
    line-height: 1.4;
}

.badge-good {
    background: #dcfce7;
    color: #166534;
}

.badge-warn {
    background: #ffedd5;
    color: #9a3412;
}

.badge-bad {
    background: #fee2e2;
    color: #991b1b;
}

.table-outro {
    background: #eff6ff;
    padding: 20px 30px;
    border-radius: 16px;
    border-left: 4px solid var(--accent);
    color: #1e3a8a;
    font-size: 15px;
    line-height: 1.6;
    font-weight: 500;
}

/* --- RESPONSYWNOŚĆ (MOBILE) --- */
@media (max-width: 768px) {
    .premium-table-section {
        padding: 0 15px;
    }

    .table-container {
        background: transparent;
        box-shadow: none;
        border: none;
    }

    .premium-table thead {
        display: none;
    }

    .premium-table, 
    .premium-table tbody, 
    .premium-table tr, 
    .premium-table td {
        display: block;
        width: 100%;
    }

    .premium-table tr {
        background: #ffffff;
        margin-bottom: 20px;
        border-radius: 16px;
        box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.08);
        border: 1px solid #f1f5f9;
        overflow: hidden;
    }

    .premium-table tr:hover {
        background: #ffffff;
        transform: translateY(-2px);
        transition: transform 0.3s ease;
    }

    .premium-table td {
        padding: 15px 20px 15px 45%;
        text-align: right;
        position: relative;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        min-height: 50px;
        display: flex;
        justify-content: flex-end;
        align-items: center;
    }

    .premium-table td:first-child {
        padding: 20px;
        text-align: left;
        justify-content: flex-start;
        background: var(--bg-light);
        border-bottom: 2px solid #e2e8f0;
    }

    .premium-table td:last-child {
        border-bottom: none;
    }

    .premium-table td:not(:first-child)::before {
        content: attr(data-label);
        position: absolute;
        left: 20px;
        width: 40%;
        text-align: left;
        font-size: 11px;
        font-weight: 800;
        text-transform: uppercase;
        color: #94a3b8;
        display: flex;
        align-items: center;
        height: 100%;
        top: 0;
    }
}
</style>

<div class="premium-table-section" id="premium-table-coverings">
    
    <div class="table-text-content">
        <h2>Dobór pokrycia podłogowego – to ma znaczenie</h2>
        <p>Nie każde pokrycie nadaje się do strefy przyokiennej z gęstymi rurami. <strong>Opór cieplny pokrycia (R)</strong> powinien być jak najmniejszy – wtedy ciepło szybko dociera do powierzchni okna, blokując spływający chłód. <br><br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Tabela opracowana przez ekspertów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="table-container">
        <table class="premium-table">
            <thead>
                <tr>
                    <th>Pokrycie</th>
                    <th>Grubość</th>
                    <th>R (m²K/W)</th>
                    <th>Uwagi</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">💠</div>
                            <strong>Płytki gresowe</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">1 cm</td>
                    <td data-label="R (m²K/W)">~0,02</td>
                    <td data-label="Uwagi"><span class="status-badge badge-good">Idealne przy oknach</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🪨</div>
                            <strong>Kamień naturalny (marmur)</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">2 cm</td>
                    <td data-label="R (m²K/W)">~0,03</td>
                    <td data-label="Uwagi"><span class="status-badge badge-good">Bardzo dobre</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">⚡</div>
                            <strong>Panele winylowe LVT</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">4–6 mm</td>
                    <td data-label="R (m²K/W)">0,01–0,02</td>
                    <td data-label="Uwagi"><span class="status-badge badge-good">Dobre, szybka reakcja</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🪵</div>
                            <strong>Panele laminowane</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">8 mm</td>
                    <td data-label="R (m²K/W)">0,05–0,07</td>
                    <td data-label="Uwagi"><span class="status-badge badge-warn">Umiarkowane (lepiej unikać przy oknie)</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🌳</div>
                            <strong>Deska drewniana (dąb)</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">1,5 cm</td>
                    <td data-label="R (m²K/W)">0,10–0,12</td>
                    <td data-label="Uwagi"><span class="status-badge badge-bad">Złe – blokuje ciepło, ryzyko spękań</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🧶</div>
                            <strong>Dywan</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">1 cm (wysoki)</td>
                    <td data-label="R (m²K/W)">0,15–0,25</td>
                    <td data-label="Uwagi"><span class="status-badge badge-bad">Absolutnie nie przy oknie!</span></td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="table-outro">
        💡 <strong>Wskazówka eksperta:</strong> W strefie przyokiennej zalecamy gres lub kamień – nawet jeśli reszta pokoju ma panele czy deskę. Można to elegancko rozwiązać, robiąc wizualne oddzielenie stref za pomocą minimalistycznej listwy przejściowej.
    </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)) {
        document.getElementById('premium-table-coverings').innerHTML = `
            <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; border-radius: 20px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ta tabela i wytyczne są własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostały wklejone na tę stronę bez zgody autora.</p>
                <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
            </div>
        `;
    }
});
</script>



<h2 class="wp-block-heading"><strong>Sterowanie z kompensacją i czujnikami przy szybie</strong>.</h2>



<p class="wp-block-paragraph">Tradycyjny <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/" type="link" id="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">termostat pokojowy</a> reaguje na temperaturę powietrza w środku pomieszczenia. Przy dużych oknach to za mało bo strefa przy szybie może być o 3–5°C zimniejsza, zanim termostat zareaguje.</p>



<h3 class="wp-block-heading">Nowoczesne podejście.</h3>



<p class="wp-block-paragraph">Zastosuj regulator pogodowy z czujnikiem&nbsp;<strong>przypowierzchniowym</strong>&nbsp;na szybie (lub w posadzce przy oknie). Na rynku dostępne są systemy, np.:</p>



<ul class="wp-block-list">
<li><strong>Danfoss Icon</strong>&nbsp;z czujnikiem okiennym (OZ).</li>



<li><strong>Uponor Smatrix</strong>&nbsp;z możliwością podłączenia czujnika zewnętrznego i wewnętrznego w strefie brzegowej.</li>



<li><strong>Salus Controls</strong>&nbsp;z bezprzewodowym czujnikiem przyklejanym do szyby.</li>
</ul>



<p class="wp-block-paragraph">Algorytm: gdy temperatura szyby spada poniżej 12°C (przy zewnętrznej -5°C), regulator zwiększa temperaturę w obwodzie przyokiennym o 5–10°C. Dzięki temu podłoga oddaje więcej ciepła dokładnie wtedy, gdy jest potrzebne.</p>



<h2 class="wp-block-heading"><strong>Przykład obliczeniowy – projekt krok po kroku</strong>.</h2>



<p class="wp-block-paragraph">Zaprojektujmy <a href="https://projekt-ogrzewania.pl/" type="link" id="https://projekt-ogrzewania.pl/">ogrzewanie podłogowe</a> dla salonu 35 m² z oknem 5 × 2,2 m (U=0,9 W/m²K). Temperatura zewnętrzna obliczeniowa -16°C (Polska, III strefa), wewnętrzna 22°C.</p>



<h3 class="wp-block-heading">Krok 1: Straty przez okno</h3>



<p class="wp-block-paragraph">ΔT = 22 &#8211; (-16) = 38 K<br>Straty przez szybę: 0,9 * 38 = 34,2 W/m²<br>Dla całego okna (5*2,2=11 m²): 34,2 * 11 = 376 W<br>Na metr bieżący: 376 / 5 =&nbsp;<strong>75,2 W/mb</strong></p>



<p class="wp-block-paragraph">Dodajemy 30% na spływ powietrza: 75,2 * 1,3 = <strong>98 W/mb</strong> tyle musi dostarczyć podłoga w pasie przy oknie.</p>



<h3 class="wp-block-heading">Krok 2: Wybór metody</h3>



<p class="wp-block-paragraph">Mamy do dyspozycji pas o szerokości 1,2 m. Jaka gęstość mocy podłogi jest potrzebna?<br>98 W/mb / 1,2 m =&nbsp;<strong>81,7 W/m²</strong>&nbsp;w pasie.</p>



<p class="wp-block-paragraph">Sprawdzamy, jaki rozstaw rur da taką gęstość przy typowej ΔT (woda – pomieszczenie) = 8°C (woda 35/27°C, średnia 31°C, pom. 22°C, różnica 9°C). Z danych producenta:</p>



<ul class="wp-block-list">
<li>Rozstaw 15 cm → ok. 100 W/m²</li>



<li>Rozstaw 20 cm → ok. 70 W/m²</li>
</ul>



<p class="wp-block-paragraph">Przyjmujemy&nbsp;<strong>rozstaw 15 cm</strong>&nbsp;w pasie 1,2 m. Reszta pomieszczenia (poza pasem) może mieć 20 cm.</p>



<h3 class="wp-block-heading">Krok 3: Długość rur i zapotrzebowanie na moc</h3>



<p class="wp-block-paragraph">Pas przyokienny: powierzchnia 5 m * 1,2 m = 6 m².<br>Rury co 15 cm: na 1 m² potrzeba ok. 6,7 mb rury (1 / 0,15).<br>Łącznie: 6 * 6,7 =&nbsp;<strong>40,2 mb</strong>&nbsp;w jednym obwodzie – idealnie (obwód nie powinien przekraczać 100 mb).</p>



<p class="wp-block-paragraph">Reszta salonu: 35 &#8211; 6 = 29 m², rozstaw 20 cm → 5 mb/m² → 145 mb. Dzielimy na dwa obwody po 72,5 mb.</p>



<h3 class="wp-block-heading">Krok 4: Izolacja przy oknie</h3>



<p class="wp-block-paragraph">Podłoga na gruncie. Standardowo EPS 10 cm, ale przy oknie dokładamy pas XPS 15 cm (szer. 1,5 m) pod rury. Dodatkowo izolacja krawędziowa przy szybie z pianki PUR.</p>



<h3 class="wp-block-heading">Krok 5: Pokrycie</h3>



<p class="wp-block-paragraph">W pasie przyokiennym <strong>gres 1 cm</strong> (R=0,02). Reszta panele winylowe LVT (R=0,01). Bez dywanów.</p>



<h2 class="wp-block-heading"><strong>Kalkulator – jak samodzielnie dobrać zagęszczenie rur przy oknie</strong>.</h2>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

/* ZAJAWKA SEO I LINK */
.calc-intro {
    max-width: 1150px;
    margin: 40px auto 10px auto;
    text-align: center;
    padding: 0 20px;
}

.calc-intro h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
    margin-bottom: 15px;
}

.calc-intro p {
    font-size: 16px;
    color: #475569;
    line-height: 1.6;
    max-width: 800px;
    margin: 0 auto;
}

.screed-calc {
    max-width: 1150px;
    margin: 30px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    overflow: hidden;
    color: var(--primary);
}

.calc-grid {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
}

/* LEWA STRONA - KONFIGURACJA */
.config-side {
    padding: 40px;
    background: #ffffff;
}

.section-title {
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1.2px;
    margin-bottom: 20px;
    display: block;
}

.type-selector {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
    margin-bottom: 30px;
}

.type-btn {
    padding: 12px 6px;
    border: 2px solid #cbd5e1;
    border-radius: 12px;
    cursor: pointer;
    text-align: center;
    font-weight: 700;
    font-size: 14px;
    color: #475569;
    background: #fff;
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.type-btn span {
    margin-top: 4px;
    font-size: 10px;
    font-weight: 400;
}

.type-btn.active {
    border-color: var(--accent);
    background: #eff6ff;
    color: var(--accent);
    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
}

.input-wrap { margin-bottom: 25px; }
.input-label-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 8px;
    align-items: center;
}
.input-label-row label { font-weight: 600; font-size: 14px; }
.input-label-row .val-badge {
    background: #f1f5f9;
    padding: 4px 12px;
    border-radius: 8px;
    font-weight: 800;
    color: var(--accent);
    font-size: 14px;
}

input[type=range] {
    width: 100%; height: 6px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-top: 10px;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer;
}

/* PRAWA STRONA - WYNIKI */
.result-side {
    padding: 40px;
    background: var(--bg-light);
    border-left: 1px solid #f1f5f9;
}

.main-score-box {
    background: white; padding: 30px; border-radius: 20px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.03); margin-bottom: 25px; border-bottom: 6px solid var(--success); transition: 0.3s;
}
.score-num { font-size: 48px; font-weight: 900; line-height: 1; display: block; margin: 10px 0; color: var(--accent); }
.score-label { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; }

#risk-msg {
    margin-top: 15px; padding: 12px; border-radius: 10px; font-size: 13px; font-weight: 600; display: none; background: #fee2e2; color: var(--danger); border: 1px solid #fecaca; line-height: 1.4; text-align: left;
}

.tech-grid {
    background: var(--primary); color: white; padding: 25px; border-radius: 20px; display: grid; gap: 12px;
}
.tech-item {
    display: flex; justify-content: space-between; padding-bottom: 12px; border-bottom: 1px solid #1e293b; align-items: center;
}
.tech-item:last-child { border: none; padding-bottom: 0; }
.tech-item span { color: #94a3b8; font-size: 13px; }
.tech-item strong { font-size: 15px; text-align: right;}

.material-grid {
    display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px; margin-bottom: 15px;
}
.mini-card { background: rgba(255,255,255,0.08); padding: 15px; border-radius: 12px; text-align: center;}
.mini-card.full-width { grid-column: 1 / -1; background: rgba(37, 99, 235, 0.2); }
.mini-card span { font-size: 11px; color: #94a3b8; display: block; margin-bottom: 6px; text-transform: uppercase; font-weight: 600;}
.mini-card.full-width span { color: #bfdbfe; }
.mini-card strong { font-size: 20px; color: #fff; font-weight: 900; }

/* STOPKA */
.footer-cta {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #eff6ff;
    border-radius: 20px;
    border-left: 6px solid var(--accent);
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 30px;
}

.cta-text-side {
    max-width: 550px;
}

.cta-buttons-stack {
    display: flex;
    flex-direction: column; 
    gap: 12px;
    min-width: 280px; 
}

.cta-btn {
    display: block; background: var(--accent); color: white; text-decoration: none; padding: 16px 20px; border-radius: 12px; font-weight: 800; transition: 0.3s; font-size: 13px; text-align: center; border: none; cursor: pointer;
}
.cta-btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(37, 99, 235, 0.2); }

@media (max-width: 900px) {
    .calc-grid { grid-template-columns: 1fr; }
    .footer-cta { flex-direction: column; text-align: center; gap: 25px; margin: 20px; }
    .cta-buttons-stack { min-width: 100%; width: 100%; }
    .type-selector { grid-template-columns: repeat(2, 1fr); }
}
</style>

<div class="calc-intro">
    <h2>Kalkulator strefy brzegowej: Rozstaw rur przy oknie</h2>
    <p>Zimne stopy przy dużych przeszkleniach to przeszłość! Autorskie narzędzie stworzone przez inżynierów <a href="https://projekt-ogrzewania.pl/" style="color: #2563eb; font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a> bazujące na fizyce budowli. Podaj parametry swojego okna, a kalkulator wyliczy wymaganą moc podłogi, zapotrzebowanie na rurę oraz optymalny rozstaw.</p>
</div>

<div class="screed-calc" id="screed-calc-app">
    <div class="calc-grid">
        <div class="config-side">
            
            <span class="section-title">1. Parametry okna</span>
            <div class="input-wrap">
                <div class="input-label-row"><label>Współczynnik przenikania szyby (U)</label><span class="val-badge"><span id="v-u">0.9</span> W/m²K</span></div>
                <input type="range" id="u-val" min="0.5" max="1.8" step="0.1" value="0.9">
            </div>
            
            <div class="input-wrap">
                <div class="input-label-row"><label>Wysokość okna (od podłogi)</label><span class="val-badge"><span id="v-height">2.2</span> m</span></div>
                <input type="range" id="height-val" min="1.5" max="6.0" step="0.1" value="2.2">
            </div>

            <div class="input-wrap">
                <div class="input-label-row"><label>Szerokość okna</label><span class="val-badge"><span id="v-win-width">3.0</span> m</span></div>
                <input type="range" id="win-width-val" min="1.0" max="10.0" step="0.5" value="3.0">
                <div style="font-size: 11px; color: #64748b; margin-top: 8px;">Długość wnęki okiennej (pozwala obliczyć ilość rury).</div>
            </div>

            <span class="section-title">2. Geometria strefy brzegowej</span>
            <div class="input-wrap">
                <div class="input-label-row"><label>Szerokość pasa przyokiennego</label><span class="val-badge"><span id="v-width">1.2</span> m</span></div>
                <input type="range" id="width-val" min="0.5" max="2.0" step="0.1" value="1.2">
                <div style="font-size: 11px; color: #64748b; margin-top: 8px;">Odległość, na jaką strefa &#8222;wchodzi&#8221; w głąb pomieszczenia.</div>
            </div>

            <span class="section-title">3. Temperatury projektowe</span>
            <div class="input-wrap" style="margin-bottom: 15px;">
                <div class="input-label-row"><label>Oczekiwana temp. wewnątrz</label><span class="val-badge"><span id="v-tin">22</span> °C</span></div>
                <input type="range" id="tin-val" min="18" max="25" step="1" value="22">
            </div>
            
            <div style="font-size: 14px; font-weight: 600; margin-bottom: 8px;">Temperatura zewnętrzna (Strefa klimatyczna)</div>
            <div class="type-selector">
                <div class="type-btn" id="btn-tz-16" data-tz="-16">-16 °C<span>Strefa I, II, III</span></div>
                <div class="type-btn active" id="btn-tz-18" data-tz="-18">-18 °C<span>Strefa IV</span></div>
                <div class="type-btn" id="btn-tz-20" data-tz="-20">-20 °C<span>Strefa V</span></div>
                <div class="type-btn" id="btn-tz-22" data-tz="-22">-22 °C<span>Góry / Suwałki</span></div>
            </div>
            
        </div>

        <div class="result-side">
            <div id="mainBox" class="main-score-box">
                <span class="score-label">Wymagana moc podłogi w strefie brzegowej</span>
                <span class="score-num" id="resPower">&#8212;</span>
                <span class="score-label">W/m²</span>
                <div id="risk-msg">⚠️ Uwaga!</div>
            </div>

            <div class="tech-grid">
                <div class="material-grid">
                    <div class="mini-card full-width">
                        <span>Zalecany rozstaw rur w strefie brzegowej:</span>
                        <strong id="resSpacing" style="color:#60a5fa;">&#8212;</strong>
                    </div>
                    <div class="mini-card">
                        <span>Długość rur w strefie:</span>
                        <strong id="resPipeTotal">&#8212; mb</strong>
                    </div>
                    <div class="mini-card">
                        <span>Ilość obwodów (pętli):</span>
                        <strong id="resLoops">&#8212;</strong>
                    </div>
                </div>
                
                <div class="tech-item"><span>Całkowita strata cieplna przez okno:</span><strong id="resTotalWindowLoss" style="color:#fbbf24">&#8212;</strong></div>
                <div class="tech-item"><span>Powierzchnia strefy brzegowej:</span><strong id="resZoneArea">&#8212;</strong></div>
                <div class="tech-item" style="border:none;"><span>Strata bazowa z 1 metra bież. okna:</span><strong id="resBaseLoss">&#8212;</strong></div>
            </div>
            
            <div style="margin-top:20px; font-size:11px; color:#94a3b8; line-height: 1.5;">
                <strong>Wskazówka:</strong> Wyliczenia zakładają standardową temperaturę zasilania podłogówki (ΔT wody i powietrza ok. 8-10°C). Dla optymalnego przekazywania ciepła zastosuj w tej strefie wykończenie z płytek gresowych lub kamienia (R ≈ 0.02 m²K/W). Jedna pętla nie powinna przekraczać ok. 90-100mb.
            </div>
        </div>
    </div>

    <div class="footer-cta">
        <div class="cta-text-side">
            <h3 style="margin:0 0 10px 0; color:#1e3a8a">Nie zgaduj przy dużych oknach!</h3>
            <p style="margin:0; font-size:14px; color:#475569">Zbyt rzadki rozstaw lub za długa pętla to gwarancja problemów. Zleć nam profesjonalny projekt, w którym wyliczymy opory hydrauliczne i zaprojektujemy dedykowane obwody z odpowiednim przepływem.</p>
        </div>
        <div class="cta-buttons-stack">
            <a href="javascript:void(0)" id="btn-email" class="cta-btn" style="background:#1e293b">
                WYŚLIJ WYNIKI NA E-MAIL
            </a>
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-btn">
                ZAMÓW PROJEKT OGRZEWANIA →
            </a>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('screed-calc-app');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px; font-family: sans-serif;">' +
                '<span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span>' +
                '<h' + '3 style="margin-top:0; font-size: 24px; color: #dc2626;">Narzędzie chronione</h' + '3>' +
                '<p style="font-size: 16px; margin-bottom: 25px;">Ten kalkulator jest własnością serwisu <a href="https://projekt-ogrzewania.pl/" style="color: #dc2626; font-weight: bold; text-decoration: underline;">Projekt-Ogrzewania.pl</a></p>' +
                '<a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 14px 28px; background: #dc2626; color: #ffffff; text-decoration: none; border-radius: 12px; font-weight: 800;">PRZEJDŹ DO ORYGINAŁU</a>' +
                '</div>';
        }
        return; 
    }

    var tz = -18; 

    function updateCalc() {
        var uEl = document.getElementById('u-val');
        var hEl = document.getElementById('height-val');
        var winWidthEl = document.getElementById('win-width-val');
        var wEl = document.getElementById('width-val');
        var tinEl = document.getElementById('tin-val');
        
        if(!uEl || !hEl || !winWidthEl || !wEl || !tinEl) return;

        var u = parseFloat(uEl.value);
        var h = parseFloat(hEl.value);
        var winW = parseFloat(winWidthEl.value);
        var s = parseFloat(wEl.value);
        var tin = parseFloat(tinEl.value);
        
        document.getElementById('v-u').innerText = u.toFixed(1);
        document.getElementById('v-height').innerText = h.toFixed(1);
        document.getElementById('v-win-width').innerText = winW.toFixed(1);
        document.getElementById('v-width').innerText = s.toFixed(1);
        document.getElementById('v-tin').innerText = tin;

        // Obliczenia fizyczne
        var deltaT = tin - tz;
        var baseLossM = u * deltaT * h; // Strata bazowa na 1 mb okna
        var totalLossM = baseLossM * 1.3; // Zapotrzebowanie z zapasem (na bryzę) na mb
        var reqPower = totalLossM / s; // Moc na m2 w strefie
        
        var totalWindowLoss = baseLossM * winW; // Całkowita strata samego okna (W)
        var zoneArea = winW * s; // Powierzchnia strefy brzegowej (m2)

        // Wypisywanie do UI statystyk ogólnych
        document.getElementById('resBaseLoss').innerText = baseLossM.toFixed(0) + ' W/mb';
        document.getElementById('resTotalWindowLoss').innerText = totalWindowLoss.toFixed(0) + ' W';
        document.getElementById('resZoneArea').innerText = zoneArea.toFixed(1) + ' m²';
        document.getElementById('resPower').innerText = reqPower.toFixed(0);

        // Ustalenie rozstawu rur i mnożnika rury na m2
        var spacing = "";
        var pipePerM2 = 0;
        var mBox = document.getElementById('mainBox');
        var rMsg = document.getElementById('risk-msg');
        var warnings = [];
        var boxColor = 'var(--success)';

        if (reqPower > 160) {
            spacing = "7.5 cm (lub konwektor)";
            pipePerM2 = 13.3;
            warnings.push('⚠️ Moc krytyczna! Sama podłogówka może nie wystarczyć (ryzyko gorącej posadzki). Rozważ grzejnik kanałowy lub rozstaw rur 7.5 cm.');
            boxColor = 'var(--danger)';
        } else if (reqPower > 130) {
            spacing = "10 cm";
            pipePerM2 = 10.0;
            boxColor = 'var(--warning)';
        } else if (reqPower > 110) {
            spacing = "12.5 cm";
            pipePerM2 = 8.0;
        } else if (reqPower > 80) {
            spacing = "15 cm";
            pipePerM2 = 6.7;
        } else {
            spacing = "20 cm";
            pipePerM2 = 5.0;
        }

        // Obliczenia materiałowe
        var totalPipe = zoneArea * pipePerM2;
        var loopCount = 1;

        if (totalPipe > 95) {
            loopCount = Math.ceil(totalPipe / 80); // Dzielimy na pętle po ok 80m dla strefy gęstej
            warnings.push('⚠️ Ze względu na dużą ilość rury (' + Math.round(totalPipe) + ' mb), strefę należy rozdzielić na ' + loopCount + ' niezależne obwody na rozdzielaczu, aby uniknąć dławienia przepływu.');
            if(boxColor === 'var(--success)') boxColor = 'var(--warning)';
        }

        if (s < 1.0) {
            warnings.push('ℹ️ Pas przyokienny jest dość wąski. Zwiększenie go do 1.2m odciąży posadzkę i pozwoli zwiększyć rozstaw rur.');
        }

        document.getElementById('resSpacing').innerText = spacing;
        document.getElementById('resPipeTotal').innerText = Math.round(totalPipe);
        document.getElementById('resLoops').innerText = loopCount;

        if (warnings.length > 0) {
            rMsg.innerHTML = warnings.join('<br><br>');
            rMsg.style.display = 'block';
        } else {
            rMsg.style.display = 'none';
        }
        mBox.style.borderBottomColor = boxColor;
        document.getElementById('resPower').style.color = (boxColor === 'var(--success)') ? 'var(--accent)' : boxColor;
    }

    var tzButtons = ['btn-tz-16', 'btn-tz-18', 'btn-tz-20', 'btn-tz-22'];
    for (var i = 0; i < tzButtons.length; i++) {
        (function(btnId) {
            var btn = document.getElementById(btnId);
            if(btn) {
                btn.addEventListener('click', function(e) {
                    tz = parseFloat(e.currentTarget.getAttribute('data-tz'));
                    for(var j = 0; j < tzButtons.length; j++) {
                        var el = document.getElementById(tzButtons[j]);
                        if(el) el.classList.remove('active');
                    }
                    e.currentTarget.classList.add('active');
                    updateCalc();
                });
            }
        })(tzButtons[i]);
    }

    var inputs = ['u-val', 'height-val', 'win-width-val', 'width-val', 'tin-val'];
    inputs.forEach(function(id) {
        var el = document.getElementById(id);
        if(el) el.addEventListener('input', updateCalc);
    });

    var btnEmail = document.getElementById('btn-email');
    if(btnEmail) {
        btnEmail.addEventListener('click', function() {
            var u = document.getElementById('v-u').innerText;
            var h = document.getElementById('v-height').innerText;
            var winW = document.getElementById('v-win-width').innerText;
            var s = document.getElementById('v-width').innerText;
            var tin = document.getElementById('v-tin').innerText;
            
            var power = document.getElementById('resPower').innerText;
            var spacing = document.getElementById('resSpacing').innerText;
            var totalLoss = document.getElementById('resTotalWindowLoss').innerText;
            var pipe = document.getElementById('resPipeTotal').innerText;
            var loops = document.getElementById('resLoops').innerText;
            
            var email = 'biuro@projekt-ogrzewania.pl';
            var subject = encodeURIComponent('Konsultacja - Strefa brzegowa podłogówki');
            
            var bodyText = 'Dzień dobry,\n\nSkorzystałem z Państwa kalkulatora strefy brzegowej. Oto parametry mojego przeszklenia:\n\n' +
                           '• Współczynnik U okna: ' + u + ' W/m²K\n' +
                           '• Wymiary okna: ' + winW + 'm szerokości x ' + h + 'm wysokości\n' +
                           '• Założony pas przyokienny: ' + s + ' m\n' +
                           '• Temp. zewn.: ' + tz + '°C, Temp. wewn.: ' + tin + '°C\n\n' +
                           'WYNIKI Z KALKULATORA:\n' +
                           '• Całkowita strata okna: ' + totalLoss + '\n' +
                           '• Wymagana moc w strefie: ' + power + ' W/m²\n' +
                           '• Sugerowany rozstaw rur: ' + spacing + '\n' +
                           '• Zapotrzebowanie na rurę: ' + pipe + ' mb (' + loops + ' pętli)\n\n' +
                           'Proszę o kontakt w sprawie wyceny profesjonalnego projektu instalacji.';
            
            var ampersand = String.fromCharCode(38);           
            window.location.href = 'mailto:' + email + '?subject=' + subject + ampersand + 'body=' + encodeURIComponent(bodyText);
        });
    }

    updateCalc();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-table-section {
    max-width: 1150px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    padding: 0 20px;
}

.table-text-content {
    max-width: 800px;
    margin: 0 auto 30px auto;
    text-align: center;
}

.table-text-content h2 {
    font-size: 28px;
    font-weight: 800;
    margin: 0 0 15px 0;
    color: var(--primary);
}

.table-text-content p {
    color: #475569;
    font-size: 16px;
    line-height: 1.6;
    margin-bottom: 0;
}

/* KARTA WZORU */
.formula-card {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    padding: 30px;
    margin-bottom: 30px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.math-formula {
    background: #eff6ff;
    padding: 20px 40px;
    border-radius: 16px;
    font-size: 22px;
    font-weight: 700;
    color: var(--accent);
    display: inline-flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 25px;
    border: 2px dashed #bfdbfe;
}

.math-fraction {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    vertical-align: middle;
}

.math-numerator {
    border-bottom: 3px solid var(--accent);
    padding: 0 10px 5px 10px;
}

.math-denominator {
    padding: 5px 10px 0 10px;
}

.variables-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
    width: 100%;
    max-width: 800px;
}

.var-item {
    background: var(--bg-light);
    padding: 12px 15px;
    border-radius: 12px;
    font-size: 14px;
    color: #475569;
    display: flex;
    align-items: center;
}

.var-item strong {
    color: var(--primary);
    font-size: 16px;
    min-width: 40px;
    display: inline-block;
}

/* TABELA */
.table-container {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    overflow: hidden;
    margin-bottom: 30px;
}

.premium-table {
    width: 100%;
    border-collapse: collapse;
    margin: 0;
}

.premium-table thead {
    background: var(--bg-light);
    border-bottom: 2px solid #e2e8f0;
}

.premium-table th {
    padding: 20px;
    text-align: left;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    letter-spacing: 0.5px;
}

.premium-table tbody tr {
    border-bottom: 1px solid #f1f5f9;
    transition: background-color 0.2s ease;
}

.premium-table tbody tr:last-child {
    border-bottom: none;
}

.premium-table tbody tr:hover {
    background-color: #f8fafc;
}

.premium-table td {
    padding: 20px;
    font-size: 15px;
    color: #475569;
    vertical-align: middle;
}

.premium-table td:nth-child(2),
.premium-table td:nth-child(3) {
    font-weight: 700;
    color: var(--primary);
}

.row-title-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
}

.row-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: var(--bg-light);
    border-radius: 10px;
    font-size: 18px;
    border: 1px solid #e2e8f0;
    flex-shrink: 0;
    font-weight: normal;
}

.table-outro {
    background: #f8fafc;
    padding: 25px 30px;
    border-radius: 16px;
    border-left: 4px solid var(--success);
    color: #334155;
    font-size: 15px;
    line-height: 1.6;
}

.calc-example {
    background: #ffffff;
    padding: 15px;
    border-radius: 10px;
    font-family: monospace;
    font-size: 14px;
    color: var(--accent);
    margin-top: 15px;
    border: 1px solid #e2e8f0;
}

/* --- RESPONSYWNOŚĆ (MOBILE) --- */
@media (max-width: 768px) {
    .premium-table-section { padding: 0 15px; }
    .variables-grid { grid-template-columns: 1fr; }
    .math-formula { flex-direction: column; font-size: 18px; padding: 15px; text-align: center; }
    
    .table-container { background: transparent; box-shadow: none; border: none; }
    .premium-table thead { display: none; }
    .premium-table, .premium-table tbody, .premium-table tr, .premium-table td { display: block; width: 100%; }
    
    .premium-table tr {
        background: #ffffff;
        margin-bottom: 20px;
        border-radius: 16px;
        box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.08);
        border: 1px solid #f1f5f9;
        overflow: hidden;
    }

    .premium-table td {
        padding: 15px 20px 15px 45%;
        text-align: right;
        position: relative;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        min-height: 50px;
        display: flex;
        justify-content: flex-end;
        align-items: center;
    }

    .premium-table td:first-child {
        padding: 20px;
        text-align: left;
        justify-content: flex-start;
        background: var(--bg-light);
        border-bottom: 2px solid #e2e8f0;
    }

    .premium-table td:last-child { border-bottom: none; }

    .premium-table td:not(:first-child)::before {
        content: attr(data-label);
        position: absolute;
        left: 20px;
        width: 40%;
        text-align: left;
        font-size: 11px;
        font-weight: 800;
        text-transform: uppercase;
        color: #94a3b8;
        display: flex;
        align-items: center;
        height: 100%;
        top: 0;
    }
}
</style>

<div class="premium-table-section" id="premium-table-power">
    
    <div class="table-text-content">
        <h2>Jak obliczyć wymaganą moc podłogi?</h2>
        <p>Skorzystaj z poniższego wzoru, aby dokładnie ustalić, ile ciepła musi wygenerować podłoga w strefie brzegowej. <br><br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Opracowanie autorskie: Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="formula-card">
        <div class="math-formula">
            <span>Q<sub>pas</sub> =</span>
            <div class="math-fraction">
                <span class="math-numerator">U · (T<sub>w</sub> - T<sub>z</sub>) · H · 1,3</span>
                <span class="math-denominator">S</span>
            </div>
        </div>

        <div class="variables-grid">
            <div class="var-item"><strong>U</strong> współczynnik przenikania okna (W/m²K)</div>
            <div class="var-item"><strong>T<sub>w</sub></strong> temperatura wewnętrzna (np. 22°C)</div>
            <div class="var-item"><strong>T<sub>z</sub></strong> temperatura zewn. (dla lokalizacji, np. -16°C)</div>
            <div class="var-item"><strong>H</strong> wysokość okna (w metrach)</div>
            <div class="var-item"><strong>1,3</strong> stały współczynnik spływu powietrza (bryzy)</div>
            <div class="var-item"><strong>S</strong> szerokość pasa przyokiennego (zazwyczaj 1,0–1,5 m)</div>
        </div>
    </div>

    <div class="table-container">
        <table class="premium-table">
            <thead>
                <tr>
                    <th>Rozstaw rur (cm)</th>
                    <th>Moc podłogi (W/m²) przy ΔT = 8°C</th>
                    <th>Moc podłogi (W/m²) przy ΔT = 10°C</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>7,5 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">180–200 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">220–250 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>10 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">140–160 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">170–200 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>12,5 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">110–130 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">140–160 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>15 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">90–110 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">110–130 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>20 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">65–80 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">80–100 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>25 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">50–65 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">60–80 W/m²</td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="table-outro">
        <strong>Praktyczny przykład kalkulacji:</strong><br>
        Mamy okno o parametrach: <strong>U = 0,9</strong>, Temp. wewnętrzna <strong>(T<sub>w</sub>) = 22°C</strong>, Temp. zewnętrzna <strong>(T<sub>z</sub>) = -16°C</strong>, Wysokość okna <strong>(H) = 2,2 m</strong>, Szerokość pasa <strong>(S) = 1,2 m</strong>.
        
        <div class="calc-example">
            Q<sub>pas</sub> = (0,9 * 38 * 2,2 * 1,3) / 1,2<br><br>
            1. Różnica temp: 22 - (-16) = 38°C<br>
            2. Strata bazowa: 0,9 * 38 * 2,2 = 75,24 W/mb<br>
            3. Efekt bryzy (+30%): 75,24 * 1,3 = 97,8 W/mb<br>
            4. Podział na pas 1,2m: 97,8 / 1,2 = <strong>81,5 W/m²</strong>
        </div>
        
        <br><strong>Wniosek:</strong> Zaglądając do tabeli dla różnicy ΔT = 8°C, widzimy, że wynik 81,5 W/m² idealnie wpasowuje się w <strong>rozstaw rur 15 cm</strong> (który generuje 90–110 W/m²).
    </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)) {
        document.getElementById('premium-table-power').innerHTML = `
            <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; border-radius: 20px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten wzór i tabele są własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostały wklejone na tę stronę bez zgody autora.</p>
                <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
            </div>
        `;
    }
});
</script>



<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-chart-box {
    max-width: 900px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid #f1f5f9;
    overflow: hidden;
    color: var(--primary);
}

.chart-header {
    padding: 30px 40px 20px 40px;
    border-bottom: 1px solid #f1f5f9;
}

.chart-header h3 {
    margin: 0 0 8px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--primary);
}

.chart-header p {
    margin: 0;
    font-size: 14px;
    color: #64748b;
    font-weight: 500;
}

.chart-canvas-wrapper {
    padding: 30px 40px;
    position: relative;
    height: 420px;
    width: 100%;
}

.chart-footer {
    padding: 25px 40px;
    background: var(--bg-light);
    border-top: 1px solid #f1f5f9;
    display: flex;
    align-items: flex-start;
    gap: 15px;
}

.chart-icon {
    font-size: 24px;
    line-height: 1;
}

.chart-conclusion {
    margin: 0;
    font-size: 14px;
    color: #475569;
    line-height: 1.6;
}

.chart-conclusion strong {
    color: var(--danger);
}

.chart-conclusion .text-accent { color: var(--accent); font-weight: 700; }
.chart-conclusion .text-success { color: var(--success); font-weight: 700; }

@media (max-width: 600px) {
    .chart-header, .chart-canvas-wrapper, .chart-footer {
        padding: 20px;
    }
    .chart-canvas-wrapper {
        height: 350px;
    }
}
</style>

<div class="premium-chart-box" id="chart-app-container">
    <div class="chart-header">
        <h3>Wpływ rozstawu rur na temperaturę podłogi przy oknie</h3>
        <p>Parametry: Temp. wody 35°C | Temp. wewn. 22°C | Pokrycie: Gres 1 cm <br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Analiza przygotowana przez Projekt-Ogrzewania.pl</a></p>
    </div>
    
    <div class="chart-canvas-wrapper">
        <canvas id="screedHeatingChart"></canvas>
    </div>
    
    <div class="chart-footer">
        <div class="chart-icon">💡</div>
        <p class="chart-conclusion">
            <strong>Wniosek z wykresu:</strong> Bez zagęszczenia (Krzywa A) strefa 0–50 cm od okna jest zbyt zimna (poniżej 22°C), co wywołuje uczucie przeciągu. <span class="text-accent">Zagęszczenie do 10 cm (Krzywa B)</span> podnosi temperaturę do komfortowych 26°C. Zastosowanie <span class="text-success">konwektora kanałowego (Krzywa C)</span> odcina chłód szybciej, pozwalając na utrzymanie niższej temperatury samej posadzki (23°C).
        </p>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // ZABEZPIECZENIE DOMENOWE (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)) {
        document.getElementById('chart-app-container').innerHTML = `
            <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Wykres chroniony prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten interaktywny wykres jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został skopiowany na tę stronę nielegalnie.</p>
                <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
            </div>
        `;
        return; 
    }

    // JEŚLI DOMENA SIĘ ZGADZA - RYSUJEMY WYKRES
    const canvasEl = document.getElementById('screedHeatingChart');
    if(!canvasEl) return; 
    
    const ctx = canvasEl.getContext('2d');
    
    // Oś X: Odległość od okna w centymetrach
    const distances = [0, 10, 30, 50, 70, 100, 120, 150];
    
    // Krzywa A (Rozstaw 20 cm) - Zbyt zimno przy oknie
    const tempA = [20.2, 21.0, 22.1, 23.0, 23.6, 24.0, 24.0, 24.0];
    
    // Krzywa B (Rozstaw 10 cm, pas 1,2 m) - Komfort
    const tempB = [26.0, 25.8, 25.3, 24.8, 24.4, 24.0, 24.0, 24.0];
    
    // Krzywa C (Konwektor + rozstaw 10 cm) - Optymalnie z konwektorem
    const tempC = [23.0, 23.3, 23.6, 23.8, 24.0, 24.0, 24.0, 24.0];

    // Granica komfortu stała 22 stopnie
    const limitLine = [22, 22, 22, 22, 22, 22, 22, 22];

    new Chart(ctx, {
        type: 'line',
        data: {
            labels: distances.map(d => d + ' cm'),
            datasets: [
                {
                    label: 'Krzywa B (Rozstaw 10 cm w pasie 1,2m)',
                    data: tempB,
                    borderColor: '#2563eb', 
                    backgroundColor: '#2563eb',
                    borderWidth: 3,
                    fill: false,
                    tension: 0.4,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#2563eb',
                    pointBorderWidth: 2,
                    pointRadius: 5,
                    pointHoverRadius: 7
                },
                {
                    label: 'Krzywa C (Rozstaw 10 cm + Konwektor)',
                    data: tempC,
                    borderColor: '#16a34a', 
                    backgroundColor: '#16a34a',
                    borderWidth: 3,
                    fill: false,
                    tension: 0.4,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#16a34a',
                    pointBorderWidth: 2,
                    pointRadius: 5,
                    pointHoverRadius: 7
                },
                {
                    label: 'Krzywa A (Standard 20 cm - Brak strefy)',
                    data: tempA,
                    borderColor: '#ea580c', 
                    backgroundColor: '#ea580c',
                    borderWidth: 3,
                    fill: false,
                    tension: 0.4,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#ea580c',
                    pointBorderWidth: 2,
                    pointRadius: 5,
                    pointHoverRadius: 7
                },
                {
                    label: 'Granica komfortu cieplnego (22°C)',
                    data: limitLine,
                    borderColor: '#94a3b8',
                    borderWidth: 2,
                    borderDash: [5, 5],
                    fill: false,
                    pointRadius: 0,
                    pointHoverRadius: 0
                }
            ]
        },
        options: {
            responsive: true,
            maintainAspectRatio: false,
            plugins: {
                legend: {
                    display: true,
                    position: 'top',
                    labels: {
                        font: { family: 'Inter', size: 12, weight: '600' },
                        color: '#475569',
                        usePointStyle: true,
                        padding: 15
                    }
                },
                tooltip: {
                    backgroundColor: '#0f172a',
                    titleFont: { family: 'Inter', size: 13, weight: 'bold' },
                    bodyFont: { family: 'Inter', size: 13 },
                    padding: 12,
                    displayColors: true,
                    callbacks: {
                        title: function(context) {
                            return 'Odległość od okna: ' + context[0].label;
                        },
                        label: function(context) {
                            let val = context.parsed.y;
                            return context.dataset.label.split(' (')[0] + ': ' + val.toFixed(1) + ' °C';
                        }
                    }
                }
            },
            scales: {
                x: {
                    grid: {
                        display: false
                    },
                    ticks: {
                        font: { family: 'Inter', size: 12, weight: '500' },
                        color: '#64748b'
                    },
                    title: {
                        display: true,
                        text: 'Odległość od szyby (cm)',
                        font: { family: 'Inter', size: 13, weight: 'bold' },
                        color: '#0f172a',
                        padding: {top: 10}
                    }
                },
                y: {
                    min: 19,
                    max: 27,
                    grid: {
                        color: '#f1f5f9',
                        drawBorder: false
                    },
                    ticks: {
                        stepSize: 1,
                        font: { family: 'Inter', size: 12 },
                        color: '#64748b',
                        callback: function(value) {
                            return value + ' °C';
                        }
                    },
                    title: {
                        display: true,
                        text: 'Temperatura powierzchni',
                        font: { family: 'Inter', size: 13, weight: 'bold' },
                        color: '#0f172a',
                        padding: {bottom: 10}
                    }
                }
            }
        }
    });
});
</script>



<h2 class="wp-block-heading">Projekt ogrzewania podłogowego w kontekście dużych przeszkleń.</h2>



<p class="wp-block-paragraph"><em><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" type="link" id="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Projekt ogrzewania podłogowego</a> do domu z dużymi przeszkleniami</em> nie może być traktowany jak zwykła instalacja. Wymaga <strong>holistycznego spojrzenia</strong> od izolacji fundamentów, przez dobór okien, aż po sterowanie. W mojej praktyce najczęstszym błędem jest kopiowanie standardowego rozstawu rur (15–20 cm) bez uwzględnienia strefy brzegowej. Prowadzi to do wiecznych reklamacji: <em>„przy oknach jest zimno, a w środku duszno”</em>. Prawidłowy projekt to taki, w którym:</p>



<ul class="wp-block-list">
<li>Wykonuje się&nbsp;<strong>obliczenia strat liniowych</strong>&nbsp;dla każdego przeszklenia z osobna.</li>



<li>Projektuje się&nbsp;<strong>minimum dwa obwody na pomieszczenie</strong>&nbsp;– główny i przyokienny.</li>



<li>Stosuje się&nbsp;<strong>zmienne rozstawy</strong>&nbsp;– gęstsze przy oknach, rzadsze w głębi.</li>



<li>Uwzględnia się&nbsp;<strong>rodzaj podłogi</strong>&nbsp;– przy drewnie lub dywanie konieczny konwektor.</li>



<li>Instaluje się&nbsp;<strong>czujniki temperatury</strong>&nbsp;w posadzce przy oknie lub na szybie.</li>
</ul>



<p class="wp-block-paragraph">Przykład zrealizowanego projektu: dom pasywny w okolicy Poznania, salon z oknami 6 × 2,5 m (U=0,7). Obliczenia wykazały stratę 65 W/mb. Zastosowano pas o szerokości 1,2 m z rurą co 12,5 cm (co dało 125 W/m² w pasie, czyli 150 W/mb – zapas). Dodatkowo izolacja XPS 15 cm pod pasem. Efekt: przy -18°C na zewnątrz temperatura podłogi przy szybie wynosiła 24°C, a powietrza 21,5°C – brak przeciągu. Inwestor zadowolony.</p>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-questions {
    max-width: 1000px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
}

.qa-header {
    text-align: center;
    margin-bottom: 40px;
}

.qa-header h2 {
    font-size: 32px;
    font-weight: 900;
    color: var(--primary);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
}

.qa-header p {
    font-size: 16px;
    line-height: 1.6;
    color: #475569;
    max-width: 700px;
    margin: 0 auto;
}

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

.qa-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    border-radius: 20px;
    padding: 30px;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    transition: transform 0.2s, box-shadow 0.2s;
}

.qa-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
    border-color: #cbd5e1;
}

.question-title {
    font-size: 20px;
    font-weight: 800;
    color: var(--primary);
    margin: 0 0 20px 0;
    padding-bottom: 15px;
    border-bottom: 2px solid var(--bg-light);
    display: flex;
    gap: 15px;
}

.q-number {
    background: var(--primary);
    color: white;
    width: 32px;
    height: 32px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    flex-shrink: 0;
}

.answers-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.answer-box {
    padding: 20px;
    border-radius: 12px;
    border-left: 4px solid;
}

.answer-bad {
    background: #fef2f2;
    border-color: var(--danger);
}

.answer-good {
    background: #f0fdf4;
    border-color: var(--success);
}

.answer-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.answer-bad .answer-label { color: var(--danger); }
.answer-good .answer-label { color: var(--success); }

.answer-text {
    font-size: 15px;
    line-height: 1.6;
    color: #334155;
    margin: 0;
    font-style: italic;
}

.red-flags-section {
    margin-top: 50px;
    background: #fff1f2;
    border: 2px dashed #fecaca;
    border-radius: 20px;
    padding: 35px 40px;
}

.red-flags-header {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 20px;
}

.red-flags-header h3 {
    margin: 0;
    font-size: 24px;
    font-weight: 900;
    color: #9f1239;
}

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

.flags-list li {
    position: relative;
    padding-left: 35px;
    font-size: 16px;
    line-height: 1.5;
    color: #7f1d1d;
    font-weight: 600;
}

.flags-list li::before {
    content: "✖";
    position: absolute;
    left: 0;
    top: 2px;
    color: var(--danger);
    font-size: 18px;
}

@media (max-width: 768px) {
    .answers-grid { grid-template-columns: 1fr; gap: 15px; }
    .qa-card { padding: 20px; }
    .question-title { font-size: 18px; line-height: 1.4; }
    .red-flags-section { padding: 25px 20px; }
    .red-flags-header h3 { font-size: 20px; }
}
</style>

<div class="premium-questions" id="qa-app-installer">
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [{
        "@type": "Question",
        "name": "Jak układać rury przy dużych oknach tarasowych?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Należy wyznaczyć tzw. strefę brzegową (zwykle pas 1-1,5 m od okna) i zagęścić tam rozstaw rur do 10, a nawet 7,5 cm, aby zrekompensować spływ zimnego powietrza od szyby."
        }
      }, {
        "@type": "Question",
        "name": "Czy strefa przy oknie może być na jednym obwodzie z resztą salonu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Przy dużych oknach strefa brzegowa musi być na oddzielnym obwodzie. Dzięki temu możemy podać tam wyższy przepływ lub niezależnie nią sterować, unikając przegrzewania środka salonu."
        }
      }, {
        "@type": "Question",
        "name": "Co z izolacją pod wylewką przy samym oknie?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Strefa przy progu to mostek termiczny. Należy zastosować twardszy styrodur (XPS) i zwiększyć jego grubość (np. do 15-20 cm), aby zminimalizować ucieczkę ciepła na zewnątrz."
        }
      }, {
        "@type": "Question",
        "name": "Jakie wykończenie podłogi zaplanować przy oknie panoramicznym?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Przy samym oknie najlepiej zastosować materiał o bardzo niskim oporze cieplnym – gres lub kamień. Drewno mocno blokuje ciepło, co przy zagęszczonych rurach może grozić uszkodzeniem."
        }
      }, {
        "@type": "Question",
        "name": "Jak sterować temperaturą przy tak dużych przeszkleniach?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Sam termostat to za mało, bo strefa przy szybie wychładza się szybciej. Najlepiej zastosować czujnik przypowierzchniowy (podłogowy lub na szybie), który natychmiast uruchomi obwód brzegowy przy spadku temperatury szyby."
        }
      }]
    }
    </script>
    <div class="qa-header">
        <h2>🏗️ 5 pytań weryfikujących wykonawcę podłogówki przy oknach</h2>
        <p>Duże przeszklenia nie wybaczają błędów instalacyjnych. Oto lista pytań, które pomogą ocenić, czy Twój instalator zna fizykę budowli i wie, co robi. <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Pytania rekrutacyjne przygotowane przez inżynierów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="qa-list">
        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">1</span> „Jak układać rury przy dużych oknach tarasowych?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Panie, dajemy wszędzie standardowo co 15 cm i będzie dobrze, podłoga to podłoga”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Należy wyznaczyć tzw. strefę brzegową (pas 1-1,5 m od okna) i zagęścić tam rozstaw rur do 10, a nawet 7,5 cm, aby zrekompensować spływ zimnego powietrza od szyby”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">2</span> „Czy strefa przy oknie może być na jednym obwodzie z resztą salonu?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Jasne, nie ma sensu marnować wyjść na rozdzielaczu, podepniemy wszystko w jedną długą pętlę”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Przy dużych oknach strefa brzegowa powinna być na oddzielnym obwodzie. Dzięki temu możemy podać tam wyższy przepływ lub niezależnie nią sterować, bez przegrzewania środka salonu”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">3</span> „Co z izolacją pod wylewką przy samym oknie?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Dajemy standardowy styropian EPS 10 cm, tak jak na całym parterze”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Strefa przy progu okiennym to mostek termiczny. Należy zastosować twardszy XPS i zwiększyć jego grubość (np. do 15-20 cm), aby uciąć ucieczkę ciepła na zewnątrz”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">4</span> „Jakie wykończenie podłogi zaplanować w strefie brzegowej?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Dębowa deska będzie wyglądać pięknie i na pewno będzie przy niej ciepło w stopy”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Przy oknie najlepiej zastosować materiał o bardzo niskim oporze cieplnym – gres lub kamień. Drewno izoluje, co przy zagęszczonych rurach strefy brzegowej może grozić spękaniami”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">5</span> „Jak sterować temperaturą przy tak dużych przeszkleniach?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Zwykły termostat ścienny umieszczony w korytarzu lub w głębi salonu w zupełności wystarczy”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Sam termostat to za mało, bo strefa przy szybie wychładza się błyskawicznie. Najlepiej zastosować czujnik przypowierzchniowy (podłogowy lub na szybie), by szybciej uruchamiać obwód brzegowy”.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="red-flags-section">
        <div class="red-flags-header">
            <span style="font-size: 32px;">🚩</span>
            <h3>Czerwone flagi (Uciekaj, jeśli to usłyszysz!)</h3>
        </div>
        <ul class="flags-list">
            <li>„Ogrzewanie podłogowe wystarczy w 100% nawet przy oknie do sufitu i podłodze z deski dębowej.” (W takich sytuacjach konieczny jest konwektor kanałowy).</li>
            <li>„Nie trzeba liczyć strat dla samego okna, zrobimy pętle na oko, średnią z całego salonu.”</li>
            <li>„Projektant tylko wymyśla obwody brzegowe, a my puścimy tu po prostu jedną, wielką wężownicę na cały dom.”</li>
        </ul>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x5c8f=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x71\x61\x2d\x61\x70\x70\x2d\x69\x6e\x73\x74\x61\x6c\x6c\x65\x72','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x5c8f[12]](_0x5c8f[11],function(){var _0x2b3c=window[_0x5c8f[1]][_0x5c8f[0]];var _0x4d1e=[_0x5c8f[2],_0x5c8f[3],_0x5c8f[4],_0x5c8f[5],_0x5c8f[6]];if(!_0x4d1e[_0x5c8f[7]](_0x2b3c)){document[_0x5c8f[10]](_0x5c8f[8])[_0x5c8f[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



<h2 class="wp-block-heading"><strong>Podsumowanie praktycznych zasad dla projektanta i inwestora</strong>.</h2>



<ol start="1" class="wp-block-list">
<li><strong>Zawsze licz straty przez okno</strong>&nbsp;– nie ufaj domniemaniom. Wzór w kalkulatorze powyżej jest prosty i wystarczający.</li>



<li><strong>Przyjmij szerokość strefy przyokiennej</strong>&nbsp;minimum 1,0 m, optymalnie 1,2–1,5 m. Dla okien od podłogi – 1,5 m.</li>



<li><strong>Rozstaw rur w tej strefie</strong>&nbsp;wybierz z tabeli – najczęściej 10–15 cm. Nie bój się 7,5 cm przy bardzo dużych wysokościach (powyżej 2,8 m).</li>



<li><strong>Oddzielny obwód</strong>&nbsp;dla każdej strefy przyokiennej dłuższej niż 4 m. Dla krótszych można połączyć, ale z zachowaniem zagęszczenia.</li>



<li><strong>Izolacja</strong>&nbsp;– w pasie przyokiennym zwiększ grubość i użyj XPS. Nie oszczędzaj na detalu za 200 zł, bo stracisz komfort.</li>



<li><strong>Pokrycie</strong>&nbsp;– w pasie przyokiennym wyłącznie płytki lub kamień. Drewno i dywan to proszenie się o kłopoty.</li>



<li><strong>Sterowanie</strong>&nbsp;– czujnik podłogowy w strefie przyokiennej to standard. W domach premium – czujnik szyby.</li>
</ol>



<p class="wp-block-paragraph">Pamiętaj, że&nbsp;<em>projekt ogrzewania podłogowego do domu z dużymi przeszkleniami</em>&nbsp;to nie tylko rysunek rozstawu rur. To także decyzje o izolacji, oknach, wentylacji (rekuperacja pomaga w równomiernym rozprowadzeniu ciepła). Traktuj strefę przy oknach jak&nbsp;<strong>specjalną krainę termiczną</strong>&nbsp;– rządzącą się własnymi prawami. Zastosuj opisane wyżej techniki, a nawet przy mrozie -20°C będziesz chodził boso wzdłuż panoramicznych szyb. I o to właśnie chodzi.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie.</title>
		<link>https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Mon, 09 Mar 2026 11:26:18 +0000</pubDate>
				<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Instalacja ogrzewania podłogowego]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Modernizacja domu]]></category>
		<category><![CDATA[Modernizacja ogrzewania]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[ile wat na m2]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[kalkulator strat ciepła]]></category>
		<category><![CDATA[moc ogrzewania domu]]></category>
		<category><![CDATA[obliczanie strat ciepła]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[straty ciepła domu]]></category>
		<category><![CDATA[zapotrzebowanie na ogrzewanie]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3743</guid>

					<description><![CDATA[<p>Obliczenie zapotrzebowania na ciepło budynku to pierwszy krok do prawidłowego zaprojektowania instalacji grzewczej. W tym poradniku pokazujemy, jak w prosty sposób oszacować straty energii w domu i sprawdzić, czy ogrzewanie podłogowe będzie wystarczające. Dzięki praktycznym wskazówkom oraz przykładom obliczeń dowiesz się, jak wykorzystać kalkulator strat ciepła domu – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie, aby ocenić moc instalacji, temperaturę zasilania oraz potencjalne koszty eksploatacji. To wiedza szczególnie przydatna dla inwestorów budujących dom lub modernizujących starsze budynki.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">Kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie.</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-panel: #1e293b;
    --rk-intro-brand: #2563eb;
    --rk-intro-brand-light: #eff6ff;
    --rk-intro-accent: #f97316;
    --rk-intro-bg: #ffffff;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #334155;
    --rk-intro-muted: #64748b;
    --rk-intro-success: #10b981;
}

.rk-intro-wrapper {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-intro-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(37, 99, 235, 0.1);
    border: 1px solid var(--rk-intro-border);
    overflow: hidden;
}

/* Sekcja Główna - Hook & Tytuł */
.rk-intro-header {
    padding: 50px 50px 40px 50px;
    background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
    position: relative;
    border-bottom: 4px solid var(--rk-intro-brand);
}

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--rk-intro-dark);
    color: #ffffff;
    padding: 8px 18px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    box-shadow: 0 4px 10px rgba(15, 23, 42, 0.15);
}

.rk-intro-title {
    font-size: 32px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    line-height: 1.25;
    margin: 0 0 25px 0;
}

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

/* Hook Section */
.rk-intro-hook-box {
    background: #ffffff;
    border-left: 5px solid var(--rk-intro-accent);
    padding: 25px 30px;
    border-radius: 0 16px 16px 0;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
    margin-bottom: 30px;
}

.rk-intro-hook-box p {
    margin: 0;
    font-size: 17px;
    line-height: 1.7;
    color: var(--rk-intro-text);
    font-weight: 500;
}

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

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

/* Sekcja Czego się dowiesz (Kafelki) */
.rk-intro-learn-section {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-intro-learn-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    margin: 0 0 25px 0;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-intro-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-intro-card {
    background: var(--rk-intro-brand-light);
    border: 1px solid #bfdbfe;
    border-radius: 16px;
    padding: 25px;
    display: flex;
    align-items: flex-start;
    gap: 20px;
}

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

.rk-intro-card-content h4 {
    margin: 0 0 8px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-intro-dark);
}

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

/* Author Tag */
.rk-intro-author {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-top: 30px;
    padding-top: 25px;
    border-top: 1px solid var(--rk-intro-border);
}

.rk-intro-author-avatar {
    width: 45px;
    height: 45px;
    border-radius: 50%;
    border: 2px solid var(--rk-intro-brand);
    object-fit: cover;
}

.rk-intro-author-info span {
    display: block;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-intro-dark);
}

.rk-intro-author-info small {
    font-size: 12px;
    color: var(--rk-intro-muted);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

@media (max-width: 768px) {
    .rk-intro-header { padding: 35px 25px; }
    .rk-intro-title { font-size: 26px; }
    .rk-intro-hook-box { padding: 20px; }
    .rk-intro-learn-section { padding: 35px 25px; }
    .rk-intro-grid { grid-template-columns: 1fr; }
    .rk-intro-card { padding: 20px; flex-direction: column; gap: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-intro",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie?",
    "description": "Zanim wydasz pieniądze na pompę ciepła, poznaj inżynierskie metody szacowania mocy. Kompletny przewodnik po obliczeniach OZC dla inwestorów.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-intro",
    "name": "Parametry wejściowe do obliczeń zapotrzebowania cieplnego budynku",
    "description": "Baza wiedzy definiująca podstawowe składowe analizy cieplnej budynków jednorodzinnych: izolacyjność, wentylację oraz założenia projektowe.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator strat ciepła",
      "obliczanie zapotrzebowania na ogrzewanie",
      "moc pompy ciepła",
      "projekt ogrzewania podłogowego",
      "obciążenie cieplne budynku"
    ],
    "measurementTechnique": "Przegląd inżynierski: Weryfikacja parametrów izolacyjnych, mostków termicznych oraz wentylacyjnych wpływających na dobór źródła ciepła.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Metodyka określania mocy cieplnej bez ryzyka przewymiarowania instalacji.",
        "Analiza parametrów przegród (U) i ich wpływ na całkowite zapotrzebowanie.",
        "Zasady doboru rozstawu rur grzewczych na podstawie wyniku W/m2."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-intro",
    "name": "Przewodnik: Kalkulator Strat Ciepła",
    "description": "Edukacyjny moduł wprowadzający inwestora do zagadnień fizyki budowli, stanowiący mapę drogową do samodzielnego szacowania obciążenia cieplnego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-intro-wrapper">
    
    <div class="rk-intro-header">
        <div class="rk-intro-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
            Kompendium Inwestora
        </div>
        
        <h2 class="rk-intro-title">Kalkulator strat ciepła budynku – <span>jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie?</span></h2>
        
        <div class="rk-intro-hook-box">
            <p><strong>Zanim wydasz kilkadziesiąt tysięcy złotych</strong> na pompę ciepła lub instalację podłogówki, musisz znać jedną, absolutnie fundamentalną liczbę: rzeczywiste obciążenie cieplne Twojego domu. Dobór źródła ciepła „na oko” to najprostsza droga do drastycznego przewymiarowania systemu, ciągłych awarii sprężarki i gigantycznych rachunków za prąd.</p>
        </div>

        <p class="rk-intro-description">Planowanie ogrzewania podłogowego w nowym domu lub podczas modernizacji starej instalacji zawsze rozpoczyna się od kluczowego pytania: jak samodzielnie obliczyć straty ciepła budynku pod ogrzewanie podłogowe, aby mieć pewność, że system będzie działał efektywnie? Właśnie w tym pomaga <strong>kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie</strong>, który pozwala w prosty sposób oszacować, ile energii potrzebuje budynek do utrzymania komfortowej temperatury. Narzędzie to, opierając się na uproszczonych algorytmach inżynierskich, pozwala inwestorowi na precyzyjne określenie mocy źródła ciepła.</p>
        
        <div class="rk-intro-author">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-intro-author-avatar" loading="lazy">
            <div class="rk-intro-author-info">
                <span>Jako wieloletni praktyk i twórca tego poratlu, w tym artykule przeprowadzę Cię przez cały proces matematyczny.</span>
                <small>Robert Kucharski, CEO projekt-ogrzewania.pl</small>
            </div>
        </div>
    </div>

    <div class="rk-intro-learn-section">
        <h3 class="rk-intro-learn-title">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--rk-intro-accent)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            Z tego poradnika dowiesz się:
        </h3>
        
        <div class="rk-intro-grid">
            
            <div class="rk-intro-card">
                <div class="rk-intro-card-icon">
                    <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="8" y1="6" x2="16" y2="6"></line><line x1="16" y1="14" x2="16.01" y2="14"></line><line x1="12" y1="14" x2="12.01" y2="14"></line><line x1="8" y1="14" x2="8.01" y2="14"></line><line x1="16" y1="18" x2="16.01" y2="18"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="8" y1="18" x2="8.01" y2="18"></line></svg>
                </div>
                <div class="rk-intro-card-content">
                    <h4>Algorytmy i Narzędzia</h4>
                    <p>Jak w uproszczony sposób korzystać ze wzorów na przenikanie (U) oraz straty wentylacyjne, bez konieczności opłacania drogich audytów na wczesnym etapie inwestycji.</p>
                </div>
            </div>

            <div class="rk-intro-card">
                <div class="rk-intro-card-icon">
                    <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
                </div>
                <div class="rk-intro-card-content">
                    <h4>Diagnostyka Przegród</h4>
                    <p>Zrozumiesz, dlaczego gruby styropian to nie wszystko, jak obliczyć opór cieplny paneli podłogowych i jak strefa klimatyczna wpływa na bilans Twojego domu.</p>
                </div>
            </div>

            <div class="rk-intro-card">
                <div class="rk-intro-card-icon">
                    <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="12 2 22 20 2 20 12 2"></polygon><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                </div>
                <div class="rk-intro-card-content">
                    <h4>Najdroższe Błędy Inwestorów</h4>
                    <p>Dowiesz się, jakich 6 najczęstszych pomyłek (np. zła kubatura, brak izolacji brzegowej) unikać podczas szacowania mocy, aby nie zawyżyć sztucznie kosztów instalacji.</p>
                </div>
            </div>

            <div class="rk-intro-card">
                <div class="rk-intro-card-icon">
                    <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 6h16M4 12h16M4 18h16"></path><path d="M12 2v20"></path></svg>
                </div>
                <div class="rk-intro-card-content">
                    <h4>Przełożenie na Projekt</h4>
                    <p>Zobaczysz, jak uzyskane Waty na metr kwadratowy (W/m²) bezpośrednio decydują o zagęszczeniu rur (co 10 czy 15 cm), długości pętli i ustawieniach rotametrów.</p>
                </div>
            </div>

        </div>
    </div>

</div>



<style>
:root {
    --rk-wt-dark: #0f172a;
    --rk-wt-panel: #1e293b;
    --rk-wt-brand: #0ea5e9; /* Główny niebieski */
    --rk-wt-brand-light: #f0f9ff;
    --rk-wt-accent: #f97316; /* Pomarańczowy dla ciepła */
    --rk-wt-success: #10b981;
    --rk-wt-warn: #f59e0b;
    --rk-wt-danger: #ef4444;
    --rk-wt-bg: #ffffff;
    --rk-wt-border: #e2e8f0;
    --rk-wt-text: #334155;
    --rk-wt-muted: #64748b;
}

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

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

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

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

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

.rk-wt-direct-box {
    background: rgba(255, 255, 255, 0.05);
    border-left: 4px solid var(--rk-wt-accent);
    padding: 20px 25px;
    border-radius: 0 12px 12px 0;
}

.rk-wt-direct-box p {
    margin: 0 0 10px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #e0f2fe;
}

.rk-wt-direct-box p:last-child { margin: 0; }
.rk-wt-direct-box strong { color: #ffffff; }

/* Sekcja Interaktywna */
.rk-wt-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

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

.rk-wt-subtitle {
    text-align: center;
    font-size: 15px;
    color: var(--rk-wt-muted);
    margin: 0 0 35px 0;
}

/* Przełącznik Budynków */
.rk-wt-tabs {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-bottom: 35px;
}

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

.rk-wt-tab-btn:hover {
    border-color: var(--rk-wt-brand);
    transform: translateY(-3px);
}

.rk-wt-tab-btn.active {
    border-color: var(--rk-wt-brand);
    background: var(--rk-wt-brand-light);
    box-shadow: 0 10px 20px -5px rgba(14, 165, 233, 0.2);
}

.rk-wt-tab-icon {
    width: 40px;
    height: 40px;
    background: #f1f5f9;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-wt-muted);
    transition: 0.3s;
}

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

.rk-wt-tab-text {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-wt-dark);
}

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

/* Kafelki z danymi (Zastępują Tabelę) */
.rk-wt-data-wrapper {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.rk-wt-data-card {
    background: #ffffff;
    border: 1px solid var(--rk-wt-border);
    border-radius: 12px;
    padding: 15px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-wt-data-card.highlight {
    background: var(--rk-wt-dark);
    border-color: var(--rk-wt-dark);
}

.rk-wt-data-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--rk-wt-muted);
}

.rk-wt-data-card.highlight .rk-wt-data-label {
    color: #94a3b8;
}

.rk-wt-data-val {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-wt-dark);
    text-align: right;
}

.rk-wt-data-card.highlight .rk-wt-data-val {
    color: #ffffff;
    font-size: 20px;
}

/* SVG Symulator */
.rk-wt-visual {
    background: var(--rk-wt-dark);
    border-radius: 16px;
    border: 3px solid #334155;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 300px;
    box-shadow: inset 0 0 30px rgba(0,0,0,0.5);
}

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

/* Animacje i stany SVG */
.anim-heat-floor { transition: fill 0.5s ease; }
.anim-heat-escape { transition: opacity 0.5s ease; stroke-dasharray: 6 6; }
.anim-warning-sign { opacity: 0; transition: opacity 0.3s; transform-origin: center; }

/* Stan: Nowy Dom */
.state-new .anim-heat-floor { fill: #f59e0b; }
.state-new .anim-heat-escape { opacity: 0.2; stroke: #f59e0b; animation: floatHeat 3s linear infinite; }

/* Stan: Modernizacja */
.state-mod .anim-heat-floor { fill: #ea580c; }
.state-mod .anim-heat-escape { opacity: 0.6; stroke: #ea580c; animation: floatHeat 2s linear infinite; stroke-width: 4; }

/* Stan: Stary Dom */
.state-old .anim-heat-floor { fill: #ef4444; }
.state-old .anim-heat-escape { opacity: 1; stroke: #ef4444; animation: floatHeat 1s linear infinite; stroke-width: 6; }
.state-old .anim-warning-sign { opacity: 1; animation: pulseWarn 1s infinite alternate; }

@keyframes floatHeat { to { stroke-dashoffset: -20; } }
@keyframes pulseWarn { from { transform: scale(0.9); } to { transform: scale(1.1); } }

/* Podsumowanie tekstowe */
.rk-wt-summary {
    padding: 0 50px 40px 50px;
    background: #f8fafc;
}

.rk-wt-summary-box {
    background: #ffffff;
    border: 1px solid var(--rk-wt-border);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    gap: 20px;
    align-items: flex-start;
}

.rk-wt-summary-icon {
    width: 48px;
    height: 48px;
    background: var(--rk-wt-brand-light);
    color: var(--rk-wt-brand);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.rk-wt-summary-text p {
    margin: 0 0 10px 0;
    font-size: 15px;
    line-height: 1.6;
    color: var(--rk-wt-text);
}

.rk-wt-link {
    color: var(--rk-wt-brand);
    font-weight: 800;
    text-decoration: none;
    border-bottom: 2px dashed rgba(14, 165, 233, 0.4);
    transition: 0.3s;
    font-size: 14px;
}

.rk-wt-link:hover {
    color: #0284c7;
    border-bottom-style: solid;
}

@media (max-width: 768px) {
    .rk-wt-header { padding: 35px 20px; }
    .rk-wt-title { font-size: 24px; }
    .rk-wt-direct-box { padding: 15px; }
    .rk-wt-interactive { padding: 30px 20px; }
    .rk-wt-tabs { grid-template-columns: 1fr; gap: 10px; }
    .rk-wt-tab-btn { flex-direction: row; padding: 12px 20px; }
    .rk-wt-grid { grid-template-columns: 1fr; }
    .rk-wt-data-card { flex-direction: column; align-items: flex-start; gap: 5px; }
    .rk-wt-data-val { text-align: left; }
    .rk-wt-visual { min-height: 220px; }
    .rk-wt-summary { padding: 0 20px 30px 20px; }
    .rk-wt-summary-box { flex-direction: column; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-w-m2",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Ile watów ogrzewania podłogowego na metr kwadratowy (W/m²) potrzebuje nowoczesny dom?",
    "description": "Analiza wskaźników zapotrzebowania cieplnego budynku W/m2 według standardów WT 2021 oraz normy PN-EN 1264. Sprawdź limity mocy dla ogrzewania podłogowego.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-w-m2",
    "name": "Wskaźniki zapotrzebowania na ciepło W/m2 (Tabela techniczna)",
    "description": "Zestawienie współczynników przenikania ciepła przegród oraz jednostkowego zapotrzebowania na moc grzewczą w zależności od standardu budynku (Nowy, Po termomodernizacji, Stary).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie na ciepło W/m2",
      "moc ogrzewania podłogowego z m2",
      "maksymalna temperatura podłogówki",
      "norma PN-EN 1264",
      "współczynnik przenikania U ściany"
    ],
    "measurementTechnique": "Dane tabelaryczne określające relację między izolacyjnością budynku a wymaganą gęstością i temperaturą zasilania układu płaszczyznowego.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Nowy dom WT 2021: 45 W/m2, U ściany 0.15-0.18, zasilanie 30-35°C (Idealne)",
        "Dom z lat 90 po ociepleniu: 75 W/m2, U ściany 0.25-0.30 (Warunkowe, gęsty rozstaw)",
        "Stary dom: 160 W/m2, U ściany 1.20-1.50 (Brak możliwości samej podłogówki)"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-w-m2",
    "name": "Symulator Standardu Energetycznego W/m2",
    "description": "Interaktywny panel prezentujący limity mocy grzewczej i ryzyko przegrzania posadzki w zależności od izolacji termicznej budynku.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-wt-container" id="rk-wt-app">
    
    <div class="rk-wt-header">
        <div class="rk-wt-badge">
            <svg width="14" height="14" 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>
            Bilans Mocy W/m²
        </div>
        <h2 class="rk-wt-title">Ile watów ogrzewania podłogowego na metr kwadratowy (W/m²) <span>potrzebuje nowoczesny dom?</span></h2>
        
        <div class="rk-wt-direct-box">
            <p><strong>Bezpośrednia odpowiedź:</strong> Nowoczesny dom jednorodzinny spełniający standardy WT 2021 wykazuje jednostkowe zapotrzebowanie na ciepło na poziomie od <strong>40 W/m² do 50 W/m²</strong> w najzimniejszy dzień roku. Maksymalna dopuszczalna norma emisji ciepła przez podłogę w strefie stałego przebywania ludzi wynosi <strong>80 W/m²</strong> (reguluje to międzynarodowa norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/" style="color:#7dd3fc;">PN-EN 1264</a>).</p>
            <p>Gdy zapotrzebowanie przekracza bezpieczną granicę (np. w starych domach), posadzka staje się zbyt gorąca. Wymuszanie mocy powyżej 100 W/m² z samej podłogówki prowadzi do temperatur rzędu 32-35°C, co wywołuje syndrom „ciężkich nóg” i pękanie okładzin.</p>
        </div>
    </div>

    

    <div class="rk-wt-interactive">
        <h3>Wskaźniki zapotrzebowania na ciepło</h3>
        <p class="rk-wt-subtitle">Wybierz standard izolacji swojego budynku, aby sprawdzić parametry dla przykładowego domu 150 m².</p>
        
        <div class="rk-wt-tabs">
            <div class="rk-wt-tab-btn active" onclick="rkUpdateWT('new')">
                <div class="rk-wt-tab-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg></div>
                <div class="rk-wt-tab-text">Nowy Dom<br><span style="font-size:11px; font-weight:normal; color:var(--rk-wt-muted)">WT 2021 / 2026</span></div>
            </div>
            <div class="rk-wt-tab-btn" onclick="rkUpdateWT('mod')">
                <div class="rk-wt-tab-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div>
                <div class="rk-wt-tab-text">Po modernizacji<br><span style="font-size:11px; font-weight:normal; color:var(--rk-wt-muted)">Docieplony (Lata 90.)</span></div>
            </div>
            <div class="rk-wt-tab-btn" onclick="rkUpdateWT('old')">
                <div class="rk-wt-tab-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg></div>
                <div class="rk-wt-tab-text">Stary Dom<br><span style="font-size:11px; font-weight:normal; color:var(--rk-wt-muted)">Brak izolacji</span></div>
            </div>
        </div>

        <div class="rk-wt-grid">
            
            <div class="rk-wt-data-wrapper">
                <div class="rk-wt-data-card">
                    <span class="rk-wt-data-label">Współczynnik U ściany</span>
                    <span class="rk-wt-data-val"><span id="rk-wt-uwall">0,15 – 0,18</span> <span style="font-size:12px; color:var(--rk-wt-muted)">W/(m²·K)</span></span>
                </div>
                <div class="rk-wt-data-card">
                    <span class="rk-wt-data-label">Współczynnik U okien</span>
                    <span class="rk-wt-data-val"><span id="rk-wt-uwin">0,80 – 0,90</span> <span style="font-size:12px; color:var(--rk-wt-muted)">W/(m²·K)</span></span>
                </div>
                <div class="rk-wt-data-card highlight" id="card-req">
                    <span class="rk-wt-data-label">Średnie zapotrzebowanie</span>
                    <span class="rk-wt-data-val"><span id="rk-wt-req">45</span> <span style="font-size:14px;">W/m²</span></span>
                </div>
                <div class="rk-wt-data-card">
                    <span class="rk-wt-data-label">Całkowita moc dla 150 m²</span>
                    <span class="rk-wt-data-val"><span id="rk-wt-tot">6,75</span> <span style="font-size:12px; color:var(--rk-wt-muted)">kW</span></span>
                </div>
                <div class="rk-wt-data-card">
                    <span class="rk-wt-data-label">Zdatność do podłogówki</span>
                    <span class="rk-wt-data-val" id="rk-wt-stat" style="font-size:14px;">Idealna (zasilanie 30-35°C)</span>
                </div>
            </div>

            <div class="rk-wt-visual state-new" id="rk-wt-svg-box">
                <svg class="rk-wt-svg" viewBox="0 0 200 150">
                    <rect x="20" y="40" width="160" height="90" fill="none" stroke="#64748b" stroke-width="4" />
                    <rect x="140" y="50" width="40" height="50" fill="rgba(56, 189, 248, 0.1)" stroke="#38bdf8" stroke-width="2" />
                    
                    <rect class="anim-heat-floor" x="20" y="120" width="160" height="10" />
                    <circle cx="40" cy="125" r="3" fill="#ffffff" />
                    <circle cx="70" cy="125" r="3" fill="#ffffff" />
                    <circle cx="100" cy="125" r="3" fill="#ffffff" />
                    <circle cx="130" cy="125" r="3" fill="#ffffff" />
                    <circle cx="160" cy="125" r="3" fill="#ffffff" />

                    <path class="anim-heat-escape" d="M 60 40 L 60 10" fill="none" stroke-width="2" />
                    <path class="anim-heat-escape" d="M 100 40 L 100 10" fill="none" stroke-width="2" />
                    
                    <path class="anim-heat-escape" d="M 180 60 L 220 60" fill="none" stroke-width="2" />
                    <path class="anim-heat-escape" d="M 180 80 L 220 80" fill="none" stroke-width="2" />

                    <g class="anim-warning-sign" transform="translate(100, 80)">
                        <polygon points="0,-20 -20,15 20,15" fill="#ef4444" stroke="#ffffff" stroke-width="2"/>
                        <text x="0" y="10" fill="#ffffff" font-size="20" font-weight="bold" text-anchor="middle">!</text>
                    </g>
                </svg>
            </div>

        </div>
    </div>

    <div class="rk-wt-summary">
        <div class="rk-wt-summary-box">
            <div class="rk-wt-summary-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><path d="M12 8v4l3 3"></path></svg>
            </div>
            <div class="rk-wt-summary-text">
                <p>Jeśli z obliczeń w Twoim arkuszu lub audycie wynika wskaźnik na poziomie <strong>40-50 W/m²</strong>, system płaszczyznowy będzie pracował w trybie niskotemperaturowym. Oznacza to zużywanie absolutnie minimalnej ilości energii elektrycznej przez pompę ciepła lub gazu w kotle kondensacyjnym.</p>
                <p>Przy wysokich stratach (np. 160 W/m²), sama podłogówka nie wystarczy. Pamiętaj, by nie przegrzewać posadzki i zadbać o izolację. Przeczytaj również, <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-moze-byc-jedynym-zrodlem-ciepla-w-domu-analiza-dla-polskich-warunkow/" class="rk-wt-link">czy podłogówka może być jedynym źródłem ciepła w domu</a> oraz dowiedz się, <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/" class="rk-wt-link">jaka jest optymalna temperatura posadzki</a> dla zdrowia mieszkańców.</p>
            </div>
        </div>
    </div>

</div>

<script>
const houseData = {
    new: {
        wU: '0,15 – 0,18', winU: '0,80 – 0,90', req: '45', tot: '6,75', stat: 'Idealna (zasilanie 30-35°C)',
        color: '#10b981', stateClass: 'state-new'
    },
    mod: {
        wU: '0,25 – 0,30', winU: '1,30 – 1,60', req: '75', tot: '11,25', stat: 'Warunkowa (gęsty rozstaw)',
        color: '#f59e0b', stateClass: 'state-mod'
    },
    old: {
        wU: '1,20 – 1,50', winU: '2,50 – 3,00', req: '160', tot: '24,00', stat: 'Brak (wymagane grzejniki)',
        color: '#ef4444', stateClass: 'state-old'
    }
};

function rkUpdateWT(type) {
    const btns = document.querySelectorAll('.rk-wt-tab-btn');
    btns.forEach(b => b.classList.remove('active'));
    event.currentTarget.classList.add('active');

    const data = houseData[type];
    
    document.getElementById('rk-wt-uwall').innerText = data.wU;
    document.getElementById('rk-wt-uwin').innerText = data.winU;
    document.getElementById('rk-wt-req').innerText = data.req;
    document.getElementById('rk-wt-tot').innerText = data.tot;
    
    const statEl = document.getElementById('rk-wt-stat');
    statEl.innerText = data.stat;
    statEl.style.color = data.color;

    const reqCard = document.getElementById('card-req');
    reqCard.style.backgroundColor = data.color;
    reqCard.style.borderColor = data.color;

    const svgBox = document.getElementById('rk-wt-svg-box');
    svgBox.className = 'rk-wt-visual ' + data.stateClass;
}
</script>



<style>
:root {
    --rk-zone-dark: #0f172a;
    --rk-zone-panel: #1e293b;
    --rk-zone-brand: #0284c7; 
    --rk-zone-brand-light: #e0f2fe;
    --rk-zone-accent: #f59e0b; /* Pomarańcz - Ciepło wewnątrz */
    --rk-zone-freeze: #3b82f6; /* Błękit - Zimno na zewnątrz */
    --rk-zone-bg: #ffffff;
    --rk-zone-border: #e2e8f0;
    --rk-zone-text: #334155;
    --rk-zone-muted: #64748b;
}

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

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

.rk-zone-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-zone-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
}

.rk-zone-header h2 span { color: #38bdf8; }

.rk-zone-direct {
    font-size: 15px;
    line-height: 1.7;
    color: #e0f2fe;
    margin: 0;
    padding-left: 20px;
    border-left: 3px solid var(--rk-zone-accent);
}

.rk-zone-direct strong {
    color: #ffffff;
}

/* Moduł Interaktywny */
.rk-zone-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

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

/* Kontrolki - Suwak Stref */
.rk-zone-controls {
    background: #ffffff;
    border: 1px solid var(--rk-zone-border);
    border-radius: 20px;
    padding: 30px;
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
}

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

.rk-zone-ctrl-title {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-zone-muted);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin: 0;
}

.rk-zone-val-display {
    font-size: 32px;
    font-weight: 900;
    color: var(--rk-zone-brand);
    line-height: 1;
}

.rk-zone-slider-wrap {
    position: relative;
    padding: 20px 0;
}

.rk-zone-range {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    background: linear-gradient(to right, #7dd3fc, #1e3a8a);
    border-radius: 4px;
    outline: none;
}

.rk-zone-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: #ffffff;
    border: 4px solid var(--rk-zone-brand);
    cursor: pointer;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.3);
    transition: transform 0.1s;
}

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

.rk-zone-markers {
    display: flex;
    justify-content: space-between;
    margin-top: 10px;
    font-size: 11px;
    font-weight: 700;
    color: var(--rk-zone-muted);
}

/* Wyniki (Kafelki) */
.rk-zone-data-box {
    display: flex;
    flex-direction: column;
    gap: 15px;
    margin-top: 25px;
}

.rk-zone-card {
    background: #f1f5f9;
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-left: 4px solid var(--rk-zone-brand);
}

.rk-zone-card-label {
    font-size: 13px;
    font-weight: 700;
    color: var(--rk-zone-text);
}

.rk-zone-card-val {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-zone-dark);
}

.rk-zone-card-val span {
    font-size: 12px;
    color: var(--rk-zone-muted);
}

/* Prawa Kolumna - SVG Wizualizacja */
.rk-zone-visual {
    background: var(--rk-zone-dark);
    border-radius: 20px;
    height: 100%;
    min-height: 320px;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 3px solid #334155;
    box-shadow: inset 0 0 40px rgba(0,0,0,0.6);
}

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

/* Bloki Tekstowe z Obliczeniami */
.rk-zone-content {
    padding: 0 50px 40px 50px;
    background: #f8fafc;
}

.rk-zone-content h3 {
    margin: 0 0 20px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-zone-dark);
}

.rk-zone-formula-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

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

.rk-zone-formula-box h4 {
    margin: 0 0 10px 0;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-zone-brand);
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-zone-formula-box p {
    margin: 0 0 15px 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-zone-text);
}

.rk-math-block {
    background: #f1f5f9;
    padding: 12px 15px;
    border-radius: 8px;
    font-family: 'Courier New', Courier, monospace;
    font-weight: 700;
    font-size: 13px;
    color: var(--rk-zone-dark);
    border-left: 3px solid var(--rk-zone-accent);
}

.rk-math-block b {
    color: #ef4444;
}

.rk-zone-alert {
    margin-top: 25px;
    padding: 20px;
    background: #fffbeb;
    border: 1px solid #fde68a;
    border-radius: 12px;
    color: #92400e;
    font-size: 14px;
    line-height: 1.6;
    display: flex;
    gap: 15px;
}

.rk-zone-link {
    color: var(--rk-zone-brand);
    font-weight: 800;
    text-decoration: none;
    border-bottom: 2px dashed rgba(2, 132, 199, 0.4);
    transition: 0.3s;
}

.rk-zone-link:hover {
    color: #0369a1;
    border-bottom-style: solid;
}

/* Animacje SVG */
.anim-thermo-fluid { transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1), fill 0.5s; transform-origin: bottom; }
.anim-frost { transition: opacity 0.5s; }
.anim-heat-wave { stroke-dasharray: 6 6; animation: flowHeat 1.5s linear infinite; }
@keyframes flowHeat { to { stroke-dashoffset: -12; } }

@media (max-width: 768px) {
    .rk-zone-header { padding: 35px 25px; }
    .rk-zone-interactive { padding: 30px 25px; }
    .rk-zone-grid { grid-template-columns: 1fr; }
    .rk-zone-content { padding: 0 25px 30px 25px; }
    .rk-zone-formula-grid { grid-template-columns: 1fr; }
    .rk-zone-visual { min-height: 250px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-strefy-klimatyczne",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Jak strefa klimatyczna w Polsce wpływa na wynik kalkulatora strat ciepła?",
    "description": "Zobacz, jak błędne przyjęcie projektowej temperatury zewnętrznej według normy PN-EN 12831 powoduje niedoszacowanie instalacji nawet o 22%.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-strefy",
    "name": "Wpływ Stref Klimatycznych na Projektowe Obciążenie Cieplne",
    "description": "Dane z normy PN-EN 12831 obrazujące wahania zapotrzebowania cieplnego w zależności od przypisanej strefy klimatycznej w Polsce (od I do V).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "strefy klimatyczne w Polsce",
      "norma PN-EN 12831",
      "projektowa temperatura zewnętrzna",
      "dobór mocy pompy ciepła",
      "kalkulator strat ciepła strefy"
    ],
    "measurementTechnique": "Analiza różnic w obciążeniu cieplnym ściany o stałym współczynniku przenikania (U=0,20) w funkcji strefy klimatycznej (ΔT od 36 K do 44 K).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Strefa I (Świnoujście): -16°C. Różnica temperatur (ΔT) wynosi 36 K.",
        "Strefa III (Polska Centralna): -20°C. Różnica temperatur (ΔT) wynosi 40 K.",
        "Strefa V (Suwałki, Zakopane): -24°C. Różnica temperatur (ΔT) wynosi 44 K.",
        "Błąd między Strefą I a V skutkuje odchyleniem wyniku aż o 22% dla pojedynczej przegrody."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-strefy",
    "name": "Symulator Stref Klimatycznych OZC",
    "description": "Interaktywne narzędzie wizualizujące różnice w stratach ciepła, przyroście różnicy temperatur (ΔT) i doborze źródła energii w zależności od strefy w Polsce.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-zone-container" id="rk-zone-app">
    
    <div class="rk-zone-header">
        <div class="rk-zone-badge">
            <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><path d="M2 12h20"></path><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg>
            Geografia Ogrzewania
        </div>
        <h2>Jak strefa klimatyczna w Polsce wpływa na wynik <span>kalkulatora strat ciepła?</span></h2>
        <div class="rk-zone-direct">
            <strong>Bezpośrednia odpowiedź:</strong> Polska podzielona jest na 5 stref klimatycznych według normy <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" style="color:#7dd3fc; font-weight:700;">PN-EN 12831</a>, dla których projektowa temperatura zewnętrzna wynosi od <strong>-16°C</strong> (Strefa I &#8211; Świnoujście) do <strong>-24°C</strong> (Strefa V &#8211; Suwałki, Zakopane). Wybór błędnej strefy w kalkulatorze powoduje błąd obliczeniowy mocy źródła ciepła sięgający nawet 22%.
        </div>
    </div>

    <div class="rk-zone-interactive">
        <div class="rk-zone-grid">
            
            <div class="rk-zone-controls">
                <div class="rk-zone-ctrl-header">
                    <div>
                        <p class="rk-zone-ctrl-title">Wybierz Strefę</p>
                        <p style="margin:5px 0 0 0; font-size:12px; color:var(--rk-zone-muted);">Pokój 20 m², U=0.20, Wewnątrz: +20°C</p>
                    </div>
                    <div class="rk-zone-val-display" id="rk-z-display">I</div>
                </div>

                <div class="rk-zone-slider-wrap">
                    <input type="range" class="rk-zone-range" id="rk-zone-slider" min="1" max="5" step="1" value="1" oninput="rkUpdateZone()">
                    <div class="rk-zone-markers">
                        <span>I (Zima łagodna)</span>
                        <span>III (Standard)</span>
                        <span>V (Biegun zimna)</span>
                    </div>
                </div>

                <div class="rk-zone-data-box">
                    <div class="rk-zone-card">
                        <span class="rk-zone-card-label">Projektowa Temp. Zewnętrzna</span>
                        <span class="rk-zone-card-val" id="rk-z-temp">-16 °C</span>
                    </div>
                    <div class="rk-zone-card">
                        <span class="rk-zone-card-label">Różnica Temperatur (ΔT)</span>
                        <span class="rk-zone-card-val" id="rk-z-delta">36 K</span>
                    </div>
                    <div class="rk-zone-card" style="border-left-color: var(--rk-zone-accent); background: #fffbeb;">
                        <span class="rk-zone-card-label" style="color: #92400e;">Zapotrzebowanie Pokoju (Q)</span>
                        <span class="rk-zone-card-val" style="color: #ea580c;" id="rk-z-power">144 <span>W</span></span>
                    </div>
                </div>
            </div>

            <div class="rk-zone-visual">
                <svg class="rk-zone-svg" viewBox="0 0 200 100">
                    <path d="M 20 80 L 20 40 L 50 20 L 80 40 L 80 80 Z" fill="#1e293b" stroke="#cbd5e1" stroke-width="2" stroke-linejoin="round"/>
                    <rect x="40" y="50" width="20" height="15" fill="#f59e0b" opacity="0.8"/>
                    
                    <path class="anim-heat-wave" d="M 85 50 L 115 50" fill="none" stroke="#f59e0b" stroke-width="3" stroke-linecap="round"/>
                    
                    <path id="svg-frost" class="anim-frost" d="M 20 40 L 50 20 L 80 40 L 80 45 L 50 25 L 20 45 Z" fill="#38bdf8" opacity="0"/>

                    <rect x="130" y="20" width="16" height="50" rx="8" fill="rgba(255,255,255,0.1)" stroke="#cbd5e1" stroke-width="2"/>
                    <circle cx="138" cy="70" r="12" fill="rgba(255,255,255,0.1)" stroke="#cbd5e1" stroke-width="2"/>
                    
                    <rect id="svg-thermo-bar" class="anim-thermo-fluid" x="134" y="30" width="8" height="40" rx="4" fill="#38bdf8"/>
                    <circle id="svg-thermo-bulb" class="anim-thermo-fluid" cx="138" cy="70" r="8" fill="#38bdf8"/>
                    
                    <line x1="155" y1="25" x2="160" y2="25" stroke="#cbd5e1" stroke-width="2"/>
                    <text x="165" y="28" fill="#cbd5e1" font-size="10" font-weight="bold">-16</text>
                    <line x1="155" y1="45" x2="160" y2="45" stroke="#cbd5e1" stroke-width="2"/>
                    <text x="165" y="48" fill="#cbd5e1" font-size="10" font-weight="bold">-20</text>
                    <line x1="155" y1="65" x2="160" y2="65" stroke="#cbd5e1" stroke-width="2"/>
                    <text x="165" y="68" fill="#cbd5e1" font-size="10" font-weight="bold">-24</text>
                </svg>
            </div>

        </div>
    </div>

    <div class="rk-zone-content">
        <h3>Przykład obliczeniowy wpływu strefy klimatycznej</h3>
        <p>Przeanalizujmy identyczny pokój o powierzchni <b>A = 20 m²</b>, który posiada ścianę zewnętrzną o współczynniku przenikania ciepła <b>U = 0,20 W/(m²·K)</b>. Zakładana temperatura wewnętrzna (komfortowa) to <b>T_wewn = +20°C</b>.</p>

        <div class="rk-zone-formula-grid">
            <div class="rk-zone-formula-box">
                <h4>
                    <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>
                    Scenariusz A (Strefa I &#8211; Łagodna)
                </h4>
                <p>Budynek zlokalizowany np. w Szczecinie. Projektowa temperatura zewnętrzna wynosi T_zewn = -16°C. Różnica temperatur (ΔT) to 36 K.</p>
                <div class="rk-math-block">
                    Q = A × U × ΔT<br>
                    Q = 20 × 0,20 × 36 = <b>144 W</b>
                </div>
            </div>

            <div class="rk-zone-formula-box">
                <h4>
                    <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>
                    Scenariusz B (Strefa V &#8211; Zimna)
                </h4>
                <p>Ten sam budynek zlokalizowany w Zakopanem lub Suwałkach. Temperatura spada do T_zewn = -24°C. Różnica temperatur (ΔT) rośnie do 44 K.</p>
                <div class="rk-math-block">
                    Q = A × U × ΔT<br>
                    Q = 20 × 0,20 × 44 = <b>176 W</b>
                </div>
            </div>
        </div>

        <div class="rk-zone-alert">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="flex-shrink:0"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
            <div>
                <strong>Konsekwencje dla inwestora:</strong> Różnica czysto fizyczna w obciążeniu dla zaledwie jednej ściany wynosi 22% (176 W vs 144 W). Przemnożenie tego błędu przez gabaryty całego budynku decyduje o wyborze klasy mocowej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-zone-link">pompy ciepła</a>. Jeśli zainstalujesz 6 kW zamiast wymaganych 8 kW, instalacja po prostu nie dogrzeje domu. Z kolei przewymiarowanie zniszczy sprężarkę przez taktowanie.
            </div>
        </div>
    </div>

</div>

<script>
const zData = [
    { zone: "I", temp: -16, delta: 36, power: 144, color: "#38bdf8", yH: 1, frost: 0 },
    { zone: "II", temp: -18, delta: 38, power: 152, color: "#0284c7", yH: 0.75, frost: 0.2 },
    { zone: "III", temp: -20, delta: 40, power: 160, color: "#2563eb", yH: 0.5, frost: 0.5 },
    { zone: "IV", temp: -22, delta: 42, power: 168, color: "#4f46e5", yH: 0.25, frost: 0.8 },
    { zone: "V", temp: -24, delta: 44, power: 176, color: "#312e81", yH: 0, frost: 1 }
];

function rkUpdateZone() {
    const val = parseInt(document.getElementById('rk-zone-slider').value) - 1;
    const data = zData[val];

    // Teksty
    document.getElementById('rk-z-display').innerText = data.zone;
    document.getElementById('rk-z-temp').innerText = data.temp + " °C";
    document.getElementById('rk-z-delta').innerText = data.delta + " K";
    document.getElementById('rk-z-power').innerHTML = data.power + " <span>W</span>";

    // SVG Termometr
    const tBar = document.getElementById('svg-thermo-bar');
    const tBulb = document.getElementById('svg-thermo-bulb');
    const frost = document.getElementById('svg-frost');

    // Skala SVG od 25 (-16) do 65 (-24). 
    // Wysokość słupka (maks = 40, min = 0).
    const scaleY = data.yH; 
    
    tBar.style.transform = `scaleY(${scaleY})`;
    tBar.style.fill = data.color;
    tBulb.style.fill = data.color;
    frost.style.opacity = data.frost;
}

// Init
document.addEventListener('DOMContentLoaded', rkUpdateZone);
</script>



<style>
:root {
    --rk-iso-dark: #0f172a;
    --rk-iso-panel: #1e293b;
    --rk-iso-brand: #8b5cf6; /* Indigo - nauka, inżynieria */
    --rk-iso-brand-light: #e0e7ff;
    --rk-iso-accent: #f97316; /* Pomarańcz - ciepło */
    --rk-iso-success: #10b981;
    --rk-iso-danger: #ef4444;
    --rk-iso-bg: #ffffff;
    --rk-iso-border: #e2e8f0;
    --rk-iso-text: #334155;
    --rk-iso-muted: #64748b;
}

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

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

.rk-iso-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.2);
    color: #a5b4fc;
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(165, 180, 252, 0.2);
}

.rk-iso-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
}

.rk-iso-header h2 span { color: #a5b4fc; }

.rk-iso-header p {
    font-size: 16px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.6;
    max-width: 800px;
}

/* Sekcja Główna */
.rk-iso-body {
    padding: 40px 50px;
    background: #f8fafc;
}

/* Kalkulator Interaktywny */
.rk-iso-calculator {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-iso-border);
    border-radius: 20px;
    padding: 30px;
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
    margin-bottom: 30px;
}

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

.rk-iso-ctrl-title {
    font-size: 18px;
    font-weight: 900;
    margin: 0;
    color: var(--rk-iso-dark);
}

.rk-iso-presets {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}

.rk-iso-preset-btn {
    background: #f1f5f9;
    border: 2px solid var(--rk-iso-border);
    border-radius: 12px;
    padding: 12px;
    text-align: center;
    cursor: pointer;
    font-weight: 800;
    font-size: 13px;
    color: var(--rk-iso-muted);
    transition: all 0.3s;
}

.rk-iso-preset-btn:hover {
    border-color: var(--rk-iso-brand);
    color: var(--rk-iso-brand);
}

.rk-iso-preset-btn.active {
    background: var(--rk-iso-brand-light);
    border-color: var(--rk-iso-brand);
    color: var(--rk-iso-brand);
}

.rk-iso-slider-wrap {
    background: #f8fafc;
    padding: 15px 20px;
    border-radius: 12px;
    border: 1px solid #f1f5f9;
}

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

.rk-iso-slider-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-iso-dark);
}

.rk-iso-slider-val {
    background: var(--rk-iso-brand);
    color: #ffffff;
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 800;
}

.rk-iso-range {
    -webkit-appearance: none;
    width: 100%;
    height: 6px;
    background: #cbd5e1;
    border-radius: 3px;
    outline: none;
}

.rk-iso-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-iso-brand);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.15);
}

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

.rk-iso-visual {
    background: var(--rk-iso-dark);
    border-radius: 16px;
    height: 180px;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 3px solid #334155;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
}

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

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

.rk-iso-data-box {
    background: #ffffff;
    border: 1px solid var(--rk-iso-border);
    border-radius: 12px;
    padding: 15px;
    text-align: center;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-iso-data-box.highlight {
    background: var(--rk-iso-dark);
    border-color: var(--rk-iso-dark);
}

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

.rk-iso-data-box.highlight .rk-iso-data-label { color: #94a3b8; }

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

.rk-iso-data-box.highlight .rk-iso-data-val { color: #ffffff; }

/* Bloki Tekstowe z Wiedzą */
.rk-iso-content-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 25px;
}

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

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

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

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

.rk-iso-formula {
    background: #f1f5f9;
    padding: 15px;
    border-radius: 8px;
    border-left: 4px solid var(--rk-iso-brand);
    font-family: 'Courier New', Courier, monospace;
    font-weight: 700;
    font-size: 14px;
    color: var(--rk-iso-dark);
    margin-bottom: 15px;
    overflow-x: auto;
}

.rk-iso-link {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    color: var(--rk-iso-brand);
    font-weight: 800;
    font-size: 14px;
    text-decoration: none;
    margin-top: 10px;
    transition: color 0.3s;
}

.rk-iso-link:hover { color: #4f46e5; }
.rk-iso-link svg { transition: transform 0.3s; }
.rk-iso-link:hover svg { transform: translateX(4px); }

/* Animacje SVG */
.anim-iso-layer { transition: height 0.4s ease, y 0.4s ease; }
.anim-heat-arrow { transition: opacity 0.4s, stroke 0.4s; }

@media (max-width: 768px) {
    .rk-iso-header, .rk-iso-body { padding: 30px 20px; }
    .rk-iso-calculator, .rk-iso-content-grid { grid-template-columns: 1fr; }
    .rk-iso-visual { height: 160px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-wspolczynnik-u",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Jak wyliczyć współczynnik przenikania ciepła U z grubości izolacji i lambdy materiału?",
    "description": "Praktyczny poradnik inżynierski: obliczanie oporu cieplnego (R) i współczynnika przenikania (U). Zobacz, dlaczego 15 cm grafitu to to samo co 20 cm białego styropianu.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-wspolczynnik-u",
    "name": "Parametry Fizyki Budowli: Współczynnik U i Opór R",
    "description": "Zestawienie analityczne parametrów izolacyjnych dla najpopularniejszych grubości i typów styropianu podłogowego, stanowiące bazę do obliczeń OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "współczynnik przenikania ciepła U",
      "jak obliczyć opór cieplny R",
      "styropian grafitowy czy biały",
      "ile styropianu pod ogrzewanie podłogowe",
      "kalkulator strat ciepła wzory",
      "izolacja podłogi na gruncie"
    ],
    "measurementTechnique": "Algorytm fizyki budowli określający zależność: Opór (R) = grubość w metrach (d) / lambda (λ). Współczynnik przenikania U = 1 / R.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Styropian biały EPS: zazwyczaj λ = 0,042 W/mK.",
        "Styropian grafitowy: zazwyczaj λ = 0,031 W/mK.",
        "Dla 20 cm EPS (λ=0,036): Opór R = 5,55 m2K/W, Przenikanie U = 0,18 W/m2K."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-kalkulator-u",
    "name": "Kalkulator Przenikania Ciepła U i Oporu R",
    "description": "Interaktywny kalkulator inżynierski pozwalający natychmiast przeliczyć grubość i lambdę izolacji na współczynnik U wymagany do bilansu cieplnego OZC.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-iso-container" id="rk-iso-app">
    
    <div class="rk-iso-header">
        <div class="rk-iso-badge">
            <svg width="14" height="14" 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>
            Fizyka budowli w praktyce
        </div>
        <h2>Jak wyliczyć współczynnik przenikania ciepła U <span>z grubości izolacji i lambdy materiału?</span></h2>
        <p>Inwestorzy często mylą pojęcia i kupują tani styropian o ogromnej grubości, sądząc, że chroni on budynek lepiej niż cieńszy materiał premium. Matematyki jednak nie oszukasz. Przelicz to samemu.</p>
    </div>

    <div class="rk-iso-body">
        
        <div class="rk-iso-calculator">
            
            <div class="rk-iso-controls">
                <h3 class="rk-iso-ctrl-title">Kalkulator Izolacji</h3>
                
                <div class="rk-iso-presets">
                    <div class="rk-iso-preset-btn active" id="btn-eps-graphite" onclick="rkSetIso('graphite')">Styropian Grafitowy<br><span style="font-size:11px; font-weight:600;">(Premium)</span></div>
                    <div class="rk-iso-preset-btn" id="btn-eps-white" onclick="rkSetIso('white')">Styropian Biały<br><span style="font-size:11px; font-weight:600;">(Standard)</span></div>
                </div>

                <div class="rk-iso-slider-wrap">
                    <div class="rk-iso-slider-head">
                        <span class="rk-iso-slider-label">Przewodność (Lambda λ)</span>
                        <span class="rk-iso-slider-val"><span id="rk-val-lam">0.031</span> W/mK</span>
                    </div>
                    <input type="range" class="rk-iso-range" id="rk-range-lam" min="0.030" max="0.045" step="0.001" value="0.031" oninput="rkUpdateIso()">
                </div>

                <div class="rk-iso-slider-wrap">
                    <div class="rk-iso-slider-head">
                        <span class="rk-iso-slider-label">Grubość materiału (d)</span>
                        <span class="rk-iso-slider-val"><span id="rk-val-thick">15</span> cm</span>
                    </div>
                    <input type="range" class="rk-iso-range" id="rk-range-thick" min="5" max="30" step="1" value="15" oninput="rkUpdateIso()">
                </div>
            </div>

            <div class="rk-iso-results">
                
                <div class="rk-iso-visual">
                    <svg class="rk-iso-svg" viewBox="0 0 200 100">
                        <rect x="20" y="80" width="160" height="20" fill="#334155" />
                        
                        <rect id="svg-iso-layer" class="anim-iso-layer" x="20" y="50" width="160" height="30" fill="#64748b" opacity="0.9" />
                        <text id="svg-text-thick" x="100" y="70" fill="#ffffff" font-size="12" font-weight="bold" text-anchor="middle">15 cm</text>

                        <rect id="svg-screed" class="anim-iso-layer" x="20" y="35" width="160" height="15" fill="#94a3b8" />
                        <circle id="svg-pipe" class="anim-iso-layer" cx="100" cy="42" r="5" fill="#ef4444" />

                        <g id="svg-heat-loss" class="anim-heat-arrow">
                            <path d="M 60 85 L 60 95" stroke="#ef4444" stroke-width="3" stroke-linecap="round" />
                            <polygon points="56,92 60,98 64,92" fill="#ef4444" />
                            <path d="M 140 85 L 140 95" stroke="#ef4444" stroke-width="3" stroke-linecap="round" />
                            <polygon points="136,92 140,98 144,92" fill="#ef4444" />
                        </g>
                    </svg>
                </div>

                <div class="rk-iso-data-grid">
                    <div class="rk-iso-data-box">
                        <span class="rk-iso-data-label">Opór cieplny (R)</span>
                        <span class="rk-iso-data-val"><span id="rk-res-r">4.84</span> <span style="font-size:12px; color:var(--rk-iso-muted)">m²K/W</span></span>
                    </div>
                    <div class="rk-iso-data-box highlight">
                        <span class="rk-iso-data-label">Współczynnik przenikania (U)</span>
                        <span class="rk-iso-data-val"><span id="rk-res-u">0.21</span> <span style="font-size:12px; color:#94a3b8">W/m²K</span></span>
                    </div>
                </div>

            </div>
        </div>

        <div class="rk-iso-content-grid">
            
            <div class="rk-iso-card">
                <h3>
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
                    Wzór inżynierski (Bezpośrednia odpowiedź)
                </h3>
                <p>Współczynnik przenikania ciepła pojedynczej warstwy materiału izolacyjnego oblicza się z bezwzględnego wzoru <strong>U = λ / d</strong>, gdzie <strong>λ</strong> to współczynnik przewodzenia ciepła, a <strong>d</strong> to grubość materiału wyrażona ściśle w metrach.</p>
                <div class="rk-iso-formula">
                    R = d / λ<br>
                    U = 1 / R = λ / d
                </div>
                <p>Pamiętaj, że całkowity opór cieplny przegrody wielowarstwowej definiuje zależność uwzględniająca opory przejmowania ciepła na powierzchniach (R<sub>si</sub>, R<sub>se</sub>).</p>
            </div>

            <div class="rk-iso-card">
                <h3>
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
                    Przykład: 20 cm EPS 100 na gruncie
                </h3>
                <p>Wyliczmy rzeczywisty współczynnik U dla <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/" class="rk-iso-link" style="display:inline; padding:0; margin:0; border:none; text-decoration:underline; font-weight:normal;">izolacji podłogówki</a> wykonanej z klasycznych płyt styropianowych EPS o grubości 20 cm (d = 0,20 m) i deklarowanej przez producenta przewodności λ = 0,036 W/mK.</p>
                <div class="rk-iso-formula">
                    R = 0,20 / 0,036 = <strong>5,55 m²K/W</strong><br>
                    U = 1 / 5,55 = <strong>0,18 W/m²·K</strong>
                </div>
                <p>Wartość 0,18 to precyzyjny parametr techniczny. To właśnie tę cyfrę musisz wprowadzić do kalkulatora strat ciepła w sekcji przegród poziomych.</p>
                <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/" class="rk-iso-link">
                    Czym dokładnie jest Opór Cieplny R? ➔
                </a>
            </div>

        </div>

    </div>
</div>

<script>
function rkSetIso(type) {
    const btnG = document.getElementById('btn-eps-graphite');
    const btnW = document.getElementById('btn-eps-white');
    const sliderLam = document.getElementById('rk-range-lam');

    if (type === 'graphite') {
        btnG.classList.add('active');
        btnW.classList.remove('active');
        sliderLam.value = 0.031;
    } else {
        btnW.classList.add('active');
        btnG.classList.remove('active');
        sliderLam.value = 0.042;
    }
    rkUpdateIso();
}

function rkUpdateIso() {
    const lam = parseFloat(document.getElementById('rk-range-lam').value);
    const thickCm = parseInt(document.getElementById('rk-range-thick').value);
    
    // Update labels
    document.getElementById('rk-val-lam').innerText = lam.toFixed(3);
    document.getElementById('rk-val-thick').innerText = thickCm;

    // Calc
    const thickM = thickCm / 100;
    const r = thickM / lam;
    const u = 1 / r;

    document.getElementById('rk-res-r').innerText = r.toFixed(2);
    document.getElementById('rk-res-u').innerText = u.toFixed(2);

    // SVG Animation logic
    // thickCm: 5 to 30. We map this to SVG height.
    // Base y=80. Max thick = 30cm -> height=60, y=20.
    const svgHeight = thickCm * 2; // 1cm = 2px
    const svgY = 80 - svgHeight;

    const isoLayer = document.getElementById('svg-iso-layer');
    const textThick = document.getElementById('svg-text-thick');
    const screedLayer = document.getElementById('svg-screed');
    const pipeLayer = document.getElementById('svg-pipe');

    isoLayer.setAttribute('height', svgHeight);
    isoLayer.setAttribute('y', svgY);
    
    // Ustawienie koloru (grafit vs biały)
    if(lam < 0.036) {
        isoLayer.setAttribute('fill', '#475569'); // Ciemniejszy grafit
    } else {
        isoLayer.setAttribute('fill', '#cbd5e1'); // Jasny biały
    }

    textThick.setAttribute('y', svgY + (svgHeight / 2) + 4);
    textThick.textContent = thickCm + " cm";

    screedLayer.setAttribute('y', svgY - 15);
    pipeLayer.setAttribute('cy', svgY - 7);

    // Heat Loss arrows (Redness &#038; Opacity based on U)
    // Good U < 0.20 (Low opacity, smaller). Bad U > 0.40 (High opacity, red)
    const heatGrp = document.getElementById('svg-heat-loss');
    let heatOpacity = u / 0.8; // Normalized roughly
    if(heatOpacity > 1) heatOpacity = 1;
    if(heatOpacity < 0.1) heatOpacity = 0.1;
    
    heatGrp.style.opacity = heatOpacity;
}

// Init
document.addEventListener('DOMContentLoaded', rkUpdateIso);
</script>



<style>
:root {
    --rk-vent-dark: #0f172a;
    --rk-vent-panel: #1e293b;
    --rk-vent-brand: #0284c7; /* Chłodny błękit - świeże powietrze */
    --rk-vent-brand-light: #e0f2fe;
    --rk-vent-accent: #f97316; /* Ciepło domowe */
    --rk-vent-success: #0d9488; /* Oszczędność (Teal) */
    --rk-vent-danger: #ef4444; /* Strata (Czerwień) */
    --rk-vent-bg: #ffffff;
    --rk-vent-border: #e2e8f0;
    --rk-vent-text: #334155;
    --rk-vent-muted: #64748b;
}

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

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

.rk-vent-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

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

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

.rk-vent-direct-answer {
    font-size: 16px;
    line-height: 1.7;
    color: #e0f2fe;
    margin: 0;
    padding-left: 20px;
    border-left: 3px solid var(--rk-vent-accent);
}

.rk-vent-direct-answer strong {
    color: #ffffff;
}

/* Moduł Interaktywny */
.rk-vent-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

/* Przełącznik Systemów Wentylacji */
.rk-vent-switcher {
    display: flex;
    justify-content: center;
    margin-bottom: 30px;
}

.rk-vent-toggle-bg {
    background: #e2e8f0;
    padding: 6px;
    border-radius: 99px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.05);
}

.rk-vent-toggle-btn {
    padding: 12px 24px;
    border-radius: 99px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-vent-muted);
    cursor: pointer;
    transition: all 0.3s;
    z-index: 1;
    border: none;
    background: transparent;
    display: flex;
    align-items: center;
    gap: 8px;
}

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

.rk-vent-toggle-slider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: 50%;
    background: var(--rk-vent-danger);
    border-radius: 99px;
    transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
    box-shadow: 0 4px 10px rgba(0,0,0,0.15);
}

.state-recup .rk-vent-toggle-slider {
    left: calc(50% - 6px);
    background: var(--rk-vent-success);
}

/* Siatka: SVG + Dane */
.rk-vent-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: stretch;
}

/* SVG Wizualizacja */
.rk-vent-visual {
    background: var(--rk-vent-dark);
    border-radius: 20px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 30px rgba(0,0,0,0.5);
    border: 3px solid #334155;
    position: relative;
    overflow: hidden;
    min-height: 250px;
}

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

/* Tablica Wyników */
.rk-vent-dashboard {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-vent-stat-card {
    background: #ffffff;
    border: 1px solid var(--rk-vent-border);
    border-radius: 16px;
    padding: 20px 25px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
    display: flex;
    flex-direction: column;
    justify-content: center;
    transition: all 0.3s;
}

.rk-vent-stat-label {
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--rk-vent-muted);
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.rk-vent-stat-val {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-vent-dark);
    line-height: 1;
    display: flex;
    align-items: baseline;
    gap: 5px;
}

.rk-vent-stat-val span {
    font-size: 14px;
    color: var(--rk-vent-muted);
}

.val-red { color: var(--rk-vent-danger); }
.val-green { color: var(--rk-vent-success); }

/* Detale Obliczeń (Karty z Wzorami) */
.rk-vent-details {
    padding: 0 50px 40px 50px;
    background: #f8fafc;
}

.rk-vent-details h3 {
    margin: 0 0 20px 0;
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-vent-dark);
}

.rk-vent-calc-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-vent-calc-box {
    background: #ffffff;
    border: 1px solid var(--rk-vent-border);
    padding: 25px;
    border-radius: 16px;
}

.rk-vent-calc-box h4 {
    margin: 0 0 10px 0;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-vent-brand);
}

.rk-vent-formula {
    background: #f1f5f9;
    padding: 12px 15px;
    border-radius: 8px;
    font-family: 'Courier New', Courier, monospace;
    font-weight: 700;
    font-size: 13px;
    color: var(--rk-vent-dark);
    margin: 10px 0;
    border-left: 3px solid var(--rk-vent-brand);
}

.rk-vent-calc-box p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-vent-text);
}

.rk-vent-link {
    color: var(--rk-vent-brand);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.rk-vent-link:hover { color: #0369a1; }

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

/* Stan: Grawitacja */
.state-grav .recup-element { opacity: 0; }
.state-grav .grav-element { opacity: 1; transition: opacity 0.3s; }
.state-grav .air-in { stroke: var(--rk-vent-brand); }
.state-grav .air-out { stroke: var(--rk-vent-danger); stroke-width: 6; }

/* Stan: Rekuperacja */
.state-recup .grav-element { opacity: 0; }
.state-recup .recup-element { opacity: 1; transition: opacity 0.5s; }
.state-recup .air-in { stroke: var(--rk-vent-brand); }
.state-recup .air-in-warmed { stroke: #fbbf24; }
.state-recup .air-out { stroke: var(--rk-vent-danger); stroke-width: 4; }
.state-recup .air-out-cooled { stroke: #94a3b8; }

.anim-wheel { transform-origin: 100px 50px; animation: spinWheel 3s linear infinite; }
@keyframes spinWheel { to { transform: rotate(360deg); } }

@media (max-width: 768px) {
    .rk-vent-header, .rk-vent-interactive, .rk-vent-details { padding: 30px 20px; }
    .rk-vent-grid, .rk-vent-calc-grid { grid-template-columns: 1fr; }
    .rk-vent-visual { height: 200px; min-height: auto; }
    .rk-vent-toggle-btn { padding: 10px 15px; font-size: 12px; }
    .rk-vent-title { font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-wentylacja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Ile kW mocy grzewczej ucieka przez wentylację grawitacyjną i jak rekuperacja zmienia ten wynik?",
    "description": "Porównanie strat ciepła dla wentylacji grawitacyjnej i mechanicznej z rekuperacją. Dowiedz się, jak odzysk ciepła wpływa na projektowanie pętli podłogowych i moc pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-wentylacja",
    "name": "Symulacja strat wentylacyjnych (Qv) z rekuperacją i bez",
    "description": "Zestawienie analityczne porównujące straty ciepła i przepływy powietrza (m3/h) dla budynku 150 m2 przy wentylacji naturalnej oraz mechanicznej z odzyskiem ciepła 85%.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "straty wentylacyjne w kalkulatorze",
      "rekuperacja a pompa ciepła",
      "wentylacja grawitacyjna straty ciepła",
      "rozstaw rur podłogówki a rekuperacja",
      "obliczanie strat ciepła wentylacja",
      "norma PN-EN 13141-7"
    ],
    "measurementTechnique": "Algorytm obliczeniowy Qv = 0,34 × V × ΔT redukowany o współczynnik sprawności odzysku ciepła zdefiniowany normą PN-EN 13141-7.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Kubatura szacunkowa dla domu 150 m2: 375 m3.",
        "Strumień powietrza dla krotności wymian 0,5/h: 187,5 m3/h.",
        "Całkowita strata grawitacyjna (ΔT=40K): 2550 W.",
        "Zredukowana strata przy rekuperacji (85% sprawności): 382,5 W."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-wentylacja",
    "name": "Kalkulator Oszczędności Rekuperacji",
    "description": "Interaktywny symulator przepływu powietrza wizualizujący spadek zapotrzebowania na moc grzewczą w budynku wyposażonym w wymiennik krzyżowy.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-vent-container" id="rk-vent-app">
    
    <div class="rk-vent-header">
        <div class="rk-vent-badge">
            <svg width="14" height="14" 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>
            Bilans Powietrzny
        </div>
        <h2 class="rk-vent-title">Ile kW mocy grzewczej ucieka przez wentylację grawitacyjną i jak <span>rekuperacja zmienia ten wynik?</span></h2>
        <div class="rk-vent-direct-answer">
            <strong>Bezpośrednia odpowiedź:</strong> W tradycyjnym domu 150 m² z wentylacją grawitacyjną, straty z tytułu wymiany powietrza generują do <strong>40% całkowitego zapotrzebowania na ciepło</strong> (co odpowiada ucieczce ok. 2,5 - 3,5 kW ciągłej mocy). Zastosowanie centrali wentylacyjnej (rekuperacji) o sprawności temperaturowej rzędu 85% redukuje te straty do ułamkowych wartości rzędu <strong>0,4 - 0,6 kW</strong>.
        </div>
    </div>

    <div class="rk-vent-interactive state-grav" id="rk-vent-state-wrapper">
        
        <div class="rk-vent-switcher">
            <div class="rk-vent-toggle-bg">
                <div class="rk-vent-toggle-slider"></div>
                <button class="rk-vent-toggle-btn active" id="btn-grav" onclick="rkSwitchVent('grav')">
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg>
                    Grawitacja
                </button>
                <button class="rk-vent-toggle-btn" id="btn-recup" onclick="rkSwitchVent('recup')">
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="8" width="18" height="8" rx="2"></rect><path d="M12 4v4"></path><path d="M12 16v4"></path><circle cx="12" cy="12" r="2"></circle></svg>
                    Rekuperacja 85%
                </button>
            </div>
        </div>

        <div class="rk-vent-grid">
            
            <div class="rk-vent-visual">
                <svg class="rk-vent-svg" viewBox="0 0 200 100">
                    <rect x="0" y="0" width="100" height="100" fill="#0f172a" /> <rect x="100" y="0" width="100" height="100" fill="#1e293b" /> <line x1="100" y1="0" x2="100" y2="100" stroke="#334155" stroke-width="2" />

                    <g class="grav-element">
                        <path class="anim-air-flow air-in" d="M 20 70 L 160 70" fill="none" stroke-width="4" stroke-linecap="round" />
                        <polygon points="150,65 165,70 150,75" fill="var(--rk-vent-brand)"/>
                        
                        <path class="anim-air-flow air-out" d="M 160 30 L 20 30" fill="none" stroke-width="6" stroke-linecap="round" />
                        <polygon points="35,23 20,30 35,37" fill="var(--rk-vent-danger)"/>
                    </g>

                    <g class="recup-element">
                        <rect x="80" y="30" width="40" height="40" fill="#0f172a" stroke="#cbd5e1" stroke-width="2" rx="4" />
                        <g class="anim-wheel">
                            <line x1="90" y1="40" x2="110" y2="60" stroke="#cbd5e1" stroke-width="2" />
                            <line x1="90" y1="60" x2="110" y2="40" stroke="#cbd5e1" stroke-width="2" />
                        </g>

                        <path class="anim-air-flow air-in" d="M 20 60 L 80 60" fill="none" stroke-width="3" stroke-linecap="round" />
                        <path class="anim-air-flow air-in-warmed" d="M 120 60 L 180 60" fill="none" stroke-width="3" stroke-linecap="round" />
                        <polygon points="170,56 182,60 170,64" fill="#fbbf24"/>

                        <path class="anim-air-flow air-out" d="M 180 40 L 120 40" fill="none" stroke-width="3" stroke-linecap="round" />
                        <path class="anim-air-flow air-out-cooled" d="M 80 40 L 20 40" fill="none" stroke-width="3" stroke-linecap="round" />
                        <polygon points="30,36 18,40 30,44" fill="#94a3b8"/>
                    </g>
                </svg>
            </div>

            <div class="rk-vent-dashboard">
                <div class="rk-vent-stat-card">
                    <span class="rk-vent-stat-label">
                        <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"></path></svg>
                        Moc bezpowrotnie tracona (Q<sub>v</sub>)
                    </span>
                    <span class="rk-vent-stat-val val-red" id="val-lost">2 550 <span>W</span></span>
                </div>
                
                <div class="rk-vent-stat-card">
                    <span class="rk-vent-stat-label">
                        <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                        Odzyskana energia dla podłogówki
                    </span>
                    <span class="rk-vent-stat-val val-green" id="val-saved">0 <span>W (0.0 kW)</span></span>
                </div>

                <div class="rk-vent-stat-card" style="background: #f1f5f9; border-color: transparent;">
                    <span class="rk-vent-stat-label">Wpływ na projekt instalacji</span>
                    <span class="rk-vent-stat-val" id="val-impact" style="font-size: 16px; color: var(--rk-vent-text);">
                        Wymagany gęsty rozstaw rur (co 10 cm). Ryzyko zakupu przewymiarowanej pompy ciepła.
                    </span>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-vent-details">
        <h3>Przykład obliczeniowy dla domu 150 m² (kubatura 375 m³)</h3>
        
        <div class="rk-vent-calc-grid">
            <div class="rk-vent-calc-box">
                <h4>Wariant 1: Wentylacja grawitacyjna</h4>
                <p>Przyjmujemy wymianę na poziomie 0,5/h, co daje strumień V = 187,5 m³/h. Różnica temperatur na zewnątrz i wewnątrz w mrozy to ΔT = 40 K.</p>
                <div class="rk-vent-formula">
                    Q<sub>v</sub> = 0,34 × 187,5 × 40 = <strong>2550 W</strong>
                </div>
                <p>Oznacza to, że z samego tytułu wietrzenia budynku w starym systemie, dom wymaga od <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-vent-link">pompy ciepła</a> ponad 2,5 kW ciągłej mocy.</p>
            </div>

            <div class="rk-vent-calc-box">
                <h4>Wariant 2: Mechaniczna z rekuperacją</h4>
                <p>Zastosowanie centrali (sprawność η = 85% zgodnie z <strong>PN-EN 13141-7</strong>). Strumień powietrza jest poddawany procesowi krzyżowej wymiany ciepła.</p>
                <div class="rk-vent-formula">
                    Q<sub>v_rek</sub> = 2550 W × (1 - 0,85) = <strong>382,5 W</strong>
                </div>
                <p>Ignorowanie <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-vent-link">wpływu rekuperacji</a> w kalkulatorach prowadzi do potężnego przewymiarowania. Instalator niepotrzebnie zacieśni <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-vent-link">rozstaw rur</a> i drastycznie podniesie koszty hydrauliki.</p>
            </div>
        </div>
    </div>

</div>

<script>
function rkSwitchVent(state) {
    const wrapper = document.getElementById('rk-vent-state-wrapper');
    const btnGrav = document.getElementById('btn-grav');
    const btnRecup = document.getElementById('btn-recup');
    
    const valLost = document.getElementById('val-lost');
    const valSaved = document.getElementById('val-saved');
    const valImpact = document.getElementById('val-impact');

    if(state === 'grav') {
        wrapper.className = 'rk-vent-interactive state-grav';
        btnGrav.classList.add('active');
        btnRecup.classList.remove('active');

        valLost.innerHTML = '2 550 <span>W</span>';
        valLost.className = 'rk-vent-stat-val val-red';
        
        valSaved.innerHTML = '0 <span>W (0.0 kW)</span>';
        valSaved.className = 'rk-vent-stat-val val-green';

        valImpact.innerHTML = 'Wymagany gęsty rozstaw rur (co 10 cm). Ryzyko zakupu przewymiarowanej pompy ciepła.';
    } else {
        wrapper.className = 'rk-vent-interactive state-recup';
        btnRecup.classList.add('active');
        btnGrav.classList.remove('active');

        valLost.innerHTML = '382 <span>W</span>';
        valLost.className = 'rk-vent-stat-val val-green';
        
        valSaved.innerHTML = '2 168 <span>W (~ 2.16 kW)</span>';
        valSaved.className = 'rk-vent-stat-val val-green';

        valImpact.innerHTML = 'Mniejsze straty = rzadszy rozstaw (co 20 cm), niższe koszty materiałowe i tańsza pompa ciepła.';
    }
}
</script>



<style>
:root {
    --rk-fl-dark: #0f172a;
    --rk-fl-panel: #1e293b;
    --rk-fl-brand: #2563eb;
    --rk-fl-brand-light: #eff6ff;
    --rk-fl-accent: #f97316;
    --rk-fl-success: #10b981;
    --rk-fl-danger: #ef4444;
    --rk-fl-border: #e2e8f0;
    --rk-fl-text: #334155;
    --rk-fl-muted: #64748b;
    --rk-fl-bg: #ffffff;
}

.rk-fl-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-fl-bg);
    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;
    color: var(--rk-fl-dark);
}

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

.rk-fl-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255,255,255,0.1);
    color: #93c5fd;
    padding: 6px 14px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(255,255,255,0.15);
}

.rk-fl-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-fl-header p {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.7;
}

/* Główny kontener treści */
.rk-fl-body {
    padding: 40px 45px;
    background: #f8fafc;
}

/* Moduł Interaktywny */
.rk-fl-interactive {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    margin-top: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-fl-border);
    border-radius: 20px;
    padding: 25px;
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
}

/* Lewa Kolumna - SVG Wizualizacja */
.rk-fl-visual-box {
    background: var(--rk-fl-dark);
    border-radius: 16px;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 280px;
    border: 3px solid #334155;
    box-shadow: inset 0 0 40px rgba(0,0,0,0.5);
}

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

/* Prawa Kolumna - Kontrolki i Dane */
.rk-fl-controls {
    display: flex;
    flex-direction: column;
}

.rk-fl-controls h3 {
    margin: 0 0 20px 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-fl-dark);
    line-height: 1.3;
}

/* Switcher Okładzin */
.rk-fl-switch-group {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-bottom: 25px;
}

.rk-fl-switch-btn {
    background: #f1f5f9;
    border: 2px solid var(--rk-fl-border);
    border-radius: 12px;
    padding: 15px;
    text-align: center;
    cursor: pointer;
    font-weight: 800;
    font-size: 14px;
    color: var(--rk-fl-muted);
    transition: all 0.3s;
}

.rk-fl-switch-btn.active {
    background: var(--rk-fl-brand-light);
    border-color: var(--rk-fl-brand);
    color: var(--rk-fl-brand);
    box-shadow: 0 5px 15px -5px rgba(37, 99, 235, 0.2);
}

/* Kafelki z danymi (Live Data) */
.rk-fl-data-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-fl-data-card {
    background: #ffffff;
    border: 1px solid var(--rk-fl-border);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-fl-data-card.highlight {
    background: var(--rk-fl-dark);
    border-color: var(--rk-fl-dark);
}

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

.rk-fl-data-card.highlight .rk-fl-data-label { color: #94a3b8; }

.rk-fl-data-val {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-fl-dark);
    transition: color 0.3s;
}

.rk-fl-data-card.highlight .rk-fl-data-val { color: #ffffff; }

.val-danger { color: var(--rk-fl-danger) !important; }
.val-success { color: var(--rk-fl-success) !important; }

/* Animacje SVG */
.rk-anim-heat { transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1); transform-origin: bottom; }
.rk-anim-layer { transition: all 0.5s ease-in-out; }

/* Stan 1: Płytki (Dobre przewodzenie) */
.state-tiles .rk-layer-panel { opacity: 0; transform: translateY(-10px); }
.state-tiles .rk-layer-tile { opacity: 1; transform: translateY(0); }
.state-tiles .rk-anim-heat { stroke: var(--rk-fl-success); transform: scaleY(1); animation: heatFlowFast 1.5s linear infinite; stroke-dasharray: 10 10; }

/* Stan 2: Panele (Izolator) */
.state-panels .rk-layer-panel { opacity: 1; transform: translateY(0); }
.state-panels .rk-layer-tile { opacity: 0; transform: translateY(10px); }
.state-panels .rk-anim-heat { stroke: var(--rk-fl-danger); transform: scaleY(0.4); animation: heatFlowSlow 3s linear infinite; stroke-dasharray: 20 5; }

@keyframes heatFlowFast { to { stroke-dashoffset: -20; } }
@keyframes heatFlowSlow { to { stroke-dashoffset: -25; } }

/* CTA dolne */
.rk-fl-cta {
    margin-top: 30px;
    padding: 20px;
    background: var(--rk-fl-brand-light);
    border-left: 4px solid var(--rk-fl-brand);
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
}

.rk-fl-cta p {
    margin: 0;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-fl-dark);
}

.rk-fl-cta a {
    white-space: nowrap;
    background: var(--rk-fl-brand);
    color: #ffffff;
    padding: 12px 20px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-decoration: none;
    transition: background 0.3s;
}

.rk-fl-cta a:hover { background: var(--rk-fl-brand-hover); }

@media (max-width: 768px) {
    .rk-fl-header { padding: 30px 25px; }
    .rk-fl-body { padding: 30px 25px; }
    .rk-fl-interactive { grid-template-columns: 1fr; padding: 20px; }
    .rk-fl-visual-box { height: 220px; min-height: auto; }
    .rk-fl-cta { flex-direction: column; text-align: center; }
    .rk-fl-cta a { width: 100%; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-okladziny",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Jak rodzaj okładziny podłogowej (płytki vs panele) zmienia parametry instalacji?",
    "description": "Opór cieplny paneli zmusza pompę ciepła do pracy na wyższych temperaturach zasilania. Zobacz inżynieryjne porównanie wydajności gresu i laminatu.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-okladziny",
    "name": "Opór cieplny (R) okładzin podłogowych a COP pompy ciepła",
    "description": "Parametry hydrauliczne instalacji podłogowej zestawione dla stałego zapotrzebowania 50 W/m2 w zależności od zastosowanej posadzki.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "opór cieplny paneli",
      "ogrzewanie podłogowe a panele",
      "wydajność pompy ciepła podłogówka",
      "temperatura zasilania podłogówki płytki vs panele",
      "COP pompy ciepła spadek"
    ],
    "measurementTechnique": "Symulacja spadku współczynnika COP pompy ciepła w zależności od oporu cieplnego materiału wykończeniowego zgodnie z normą PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Gres ceramiczny: Opór R = 0,01 m2K/W, Wymagane Tz = 33°C",
        "Panele laminowane: Opór R = 0,12 m2K/W, Wymagane Tz = 38°C",
        "Spadek COP pompy ciepła dla paneli względem płytek wynosi od 10 do 12% w skali roku."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-okladziny",
    "name": "Symulator Wpływu Okładziny na Ogrzewanie Podłogowe",
    "description": "Narzędzie pozwalające prześledzić zachowanie instalacji i spadki wydajności w przypadku zamiany płytek ceramicznych na panele laminowane.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-fl-wrapper" id="rk-fl-app">
    
    <div class="rk-fl-header">
        <div class="rk-fl-badge">
            <svg width="14" height="14" 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="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
            Analiza Materiałowa
        </div>
        <h2>Jak rodzaj okładziny podłogowej (płytki vs panele) zmienia parametry pracy instalacji w kalkulatorze?</h2>
        <p>Opór cieplny (R) materiału wykończeniowego ma kolosalny wpływ na to, jaką temperaturę musisz zadać na źródle ciepła, aby skutecznie ogrzać pomieszczenie. Ignorowanie tego faktu to gwarancja niedogrzanego domu.</p>
    </div>

    <div class="rk-fl-body">
        
        <p><strong>Bezpośrednia odpowiedź:</strong> Opór cieplny (R) płytek ceramicznych wynosi zaledwie <strong>0,01 m²K/W</strong>, podczas gdy paneli laminowanych wraz z podkładem dedykowanym osiąga graniczną wartość <strong>0,10 - 0,15 m²K/W</strong> dopuszczoną przez normę PN-EN 1264.</p>
        <p>Oznacza to, że panele stanowią potężny izolator, który wymusza podniesienie temperatury zasilania (Tz) średnio o 3 do 5 stopni Celsjusza w celu uzyskania tej samej mocy grzewczej.</p>
        <p>Zastosowanie grubych paneli lub parkietu drewnianego bez uwzględnienia tego faktu w obliczeniach kalkulatora powoduje drastyczne niedogrzanie pomieszczeń. Jeśli projektant założy wykończenie z płytek i dobierze temperaturę zasilania wody na 35°C, a Ty ostatecznie położysz panele, <strong>temperatura w pokoju spadnie z planowanych 20°C do zaledwie 17-18°C</strong> w mroźne dni.</p>

        <div class="rk-fl-interactive">
            
            <div class="rk-fl-visual-box state-tiles" id="rkFlVisual">
                <svg class="rk-fl-svg-layer" viewBox="0 0 200 100">
                    <rect x="20" y="70" width="160" height="30" fill="#334155" />
                    <circle cx="100" cy="85" r="8" fill="none" stroke="#f97316" stroke-width="3" />
                    
                    <path class="rk-anim-heat" d="M 100 70 L 100 20" fill="none" stroke-width="4" stroke-linecap="round" />
                    <path class="rk-anim-heat" d="M 85 70 L 60 20" fill="none" stroke-width="3" stroke-linecap="round" />
                    <path class="rk-anim-heat" d="M 115 70 L 140 20" fill="none" stroke-width="3" stroke-linecap="round" />

                    <g class="rk-anim-layer rk-layer-tile">
                        <rect x="20" y="60" width="160" height="10" fill="#94a3b8" />
                        <line x1="60" y1="60" x2="60" y2="70" stroke="#0f172a" stroke-width="2" />
                        <line x1="100" y1="60" x2="100" y2="70" stroke="#0f172a" stroke-width="2" />
                        <line x1="140" y1="60" x2="140" y2="70" stroke="#0f172a" stroke-width="2" />
                    </g>

                    <g class="rk-anim-layer rk-layer-panel">
                        <rect x="20" y="55" width="160" height="5" fill="#f59e0b" opacity="0.6" /> <rect x="20" y="45" width="160" height="10" fill="#854d0e" /> <line x1="80" y1="45" x2="80" y2="55" stroke="#0f172a" stroke-width="1" />
                        <line x1="120" y1="45" x2="120" y2="55" stroke="#0f172a" stroke-width="1" />
                    </g>
                </svg>
            </div>

            <div class="rk-fl-controls">
                <h3>Przykład danych hydraulicznych dla zmiany okładziny</h3>
                <p style="font-size: 13px; color: var(--rk-fl-muted); margin-top: -15px; margin-bottom: 20px;">
                    Przy stałym zapotrzebowaniu na moc: <strong>q = 50 W/m²</strong>
                </p>

                <div class="rk-fl-switch-group">
                    <div class="rk-fl-switch-btn active" id="btn-tiles" onclick="rkSwitchFloor('tiles')">
                        Gres ceramiczny
                    </div>
                    <div class="rk-fl-switch-btn" id="btn-panels" onclick="rkSwitchFloor('panels')">
                        Panele laminowane
                    </div>
                </div>

                <div class="rk-fl-data-grid">
                    <div class="rk-fl-data-card">
                        <span class="rk-fl-data-label">Opór cieplny (R)</span>
                        <span class="rk-fl-data-val" id="val-r">0,01 <span style="font-size:14px">m²K/W</span></span>
                    </div>
                    <div class="rk-fl-data-card">
                        <span class="rk-fl-data-label">Temp. podłogi</span>
                        <span class="rk-fl-data-val">24,5 <span style="font-size:14px">°C</span></span>
                    </div>
                    <div class="rk-fl-data-card highlight">
                        <span class="rk-fl-data-label">Wymagana Temp. Zasilania</span>
                        <span class="rk-fl-data-val val-success" id="val-tz">33 °C</span>
                    </div>
                    <div class="rk-fl-data-card highlight">
                        <span class="rk-fl-data-label">Skutek dla COP (Wydajność)</span>
                        <span class="rk-fl-data-val val-success" id="val-cop">MAX (100%)</span>
                    </div>
                </div>

            </div>

        </div>

        <div class="rk-fl-cta">
            <p><strong>Złota zasada instalatora:</strong> Podniesienie temperatury zasilania (Tz) zaledwie z 33°C na 38°C (wymuszone przez panele) obniża współczynnik efektywności COP pompy ciepła o około 10-12%. To bezpośrednio przekłada się na proporcjonalnie wyższe rachunki za prąd przez cały sezon grzewczy.</p>
            <a href="https://projekt-ogrzewania.pl/podlogi-drewniane-vs-panele-laminowane-co-wybrac-przy-ogrzewaniu-podlogowym/">
                Wybierz odpowiednią okładzinę ➔
            </a>
        </div>

    </div>
</div>

<script>
function rkSwitchFloor(type) {
    const visual = document.getElementById('rkFlVisual');
    const btnTiles = document.getElementById('btn-tiles');
    const btnPanels = document.getElementById('btn-panels');
    
    const valR = document.getElementById('val-r');
    const valTz = document.getElementById('val-tz');
    const valCop = document.getElementById('val-cop');

    if(type === 'tiles') {
        visual.className = 'rk-fl-visual-box state-tiles';
        btnTiles.classList.add('active');
        btnPanels.classList.remove('active');

        valR.innerHTML = '0,01 <span style="font-size:14px">m²K/W</span>';
        valTz.innerHTML = '33 °C';
        valTz.className = 'rk-fl-data-val val-success';
        
        valCop.innerHTML = 'MAX (100%)';
        valCop.className = 'rk-fl-data-val val-success';
    } else {
        visual.className = 'rk-fl-visual-box state-panels';
        btnPanels.classList.add('active');
        btnTiles.classList.remove('active');

        valR.innerHTML = '0,12 <span style="font-size:14px">m²K/W</span>';
        valTz.innerHTML = '38 °C';
        valTz.className = 'rk-fl-data-val val-danger';
        
        valCop.innerHTML = 'Spadek o -12%';
        valCop.className = 'rk-fl-data-val val-danger';
    }
}
</script>



<style>
:root {
    --rk-calc-bg: #f8fafc;
    --rk-calc-card: #ffffff;
    --rk-calc-dark: #0f172a;
    --rk-calc-brand: #2563eb; 
    --rk-calc-brand-hover: #1d4ed8;
    --rk-calc-brand-light: #eff6ff;
    --rk-calc-accent: #f97316; 
    --rk-calc-success: #10b981;
    --rk-calc-warning: #f59e0b;
    --rk-calc-danger: #ef4444;
    --rk-calc-border: #e2e8f0;
    --rk-calc-text: #334155;
    --rk-calc-muted: #64748b;
}

.rk-calc-wrapper {
    max-width: 1000px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-calc-card);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(37, 99, 235, 0.15);
    border: 1px solid rgba(37, 99, 235, 0.2);
    overflow: hidden;
    color: var(--rk-calc-dark);
}

/* Nagłówek Kalkulatora */
.rk-calc-head {
    background: linear-gradient(135deg, var(--rk-calc-dark) 0%, #1e3a8a 100%);
    padding: 40px 45px;
    color: #ffffff;
    position: relative;
    overflow: hidden;
}

.rk-calc-head::after {
    content: '';
    position: absolute;
    right: -50px;
    top: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(37,99,235,0.4) 0%, transparent 70%);
    border-radius: 50%;
    pointer-events: none;
}

.rk-calc-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #93c5fd;
    padding: 8px 16px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(255, 255, 255, 0.15);
    backdrop-filter: blur(4px);
}

.rk-calc-head h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 10px 0;
    line-height: 1.2;
}

.rk-calc-head p {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    max-width: 650px;
    line-height: 1.6;
}

/* Grid Główny */
.rk-calc-body {
    display: grid;
    grid-template-columns: 1.3fr 1fr;
    background: var(--rk-calc-bg);
}

/* Sekcja Lewa - Konfigurator */
.rk-calc-controls {
    padding: 40px 45px;
    background: #ffffff;
    border-right: 1px solid var(--rk-calc-border);
}

.rk-calc-section-title {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-calc-muted);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin: 30px 0 20px 0;
}

.rk-calc-section-title:first-child {
    margin-top: 0;
}

.rk-calc-section-title svg {
    color: var(--rk-calc-brand);
}

/* Przyciski Wyboru (Kafelki z ikonami) */
.rk-calc-btn-group {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

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

.rk-calc-opt-btn:hover {
    border-color: #93c5fd;
    background: var(--rk-calc-brand-light);
}

.rk-calc-opt-btn.active {
    border-color: var(--rk-calc-brand);
    background: var(--rk-calc-brand-light);
    box-shadow: 0 8px 15px -5px rgba(37, 99, 235, 0.15);
}

.rk-calc-opt-icon {
    width: 28px;
    height: 28px;
    color: var(--rk-calc-muted);
    transition: color 0.3s;
}

.rk-calc-opt-btn.active .rk-calc-opt-icon {
    color: var(--rk-calc-brand);
}

.rk-calc-opt-text {
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-calc-text);
}

.rk-calc-opt-btn.active .rk-calc-opt-text {
    color: var(--rk-calc-brand);
}

/* Suwaki Modern */
.rk-slider-wrap {
    margin-bottom: 25px;
    background: #f8fafc;
    padding: 15px 20px;
    border-radius: 12px;
    border: 1px solid #f1f5f9;
}

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

.rk-slider-label {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-calc-dark);
}

.rk-slider-val {
    background: var(--rk-calc-brand);
    color: #ffffff;
    padding: 4px 12px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    box-shadow: 0 2px 5px rgba(37, 99, 235, 0.2);
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 6px;
    background: #cbd5e1;
    border-radius: 3px;
    outline: none;
}

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

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

/* Sekcja Prawa - Wyniki */
.rk-calc-results {
    padding: 40px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

/* Główny Wynik z SVG */
.rk-res-main-card {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px 20px;
    text-align: center;
    border: 1px solid var(--rk-calc-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
    position: relative;
    overflow: hidden;
}

.rk-res-gauge {
    width: 120px;
    height: 60px;
    margin: 0 auto 10px auto;
    position: relative;
}

.rk-gauge-path-bg { fill: none; stroke: #e2e8f0; stroke-width: 12; stroke-linecap: round; }
.rk-gauge-path-val { fill: none; stroke: var(--rk-calc-success); stroke-width: 12; stroke-linecap: round; transition: stroke-dashoffset 0.8s ease, stroke 0.3s; }

.rk-res-huge {
    font-size: 52px;
    font-weight: 900;
    color: var(--rk-calc-dark);
    line-height: 1;
    margin-bottom: 5px;
    letter-spacing: -1px;
}

.rk-res-unit {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-calc-muted);
    text-transform: uppercase;
}

.rk-res-alert {
    margin-top: 15px;
    padding: 10px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 700;
    display: none;
    background: var(--rk-calc-danger);
    color: #ffffff;
    animation: pulseAlert 2s infinite;
}

@keyframes pulseAlert {
    0% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4); }
    70% { box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); }
    100% { box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
}

/* Tabela Parametrów */
.rk-res-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-res-box {
    background: #ffffff;
    border: 1px solid var(--rk-calc-border);
    padding: 15px;
    border-radius: 14px;
}

.rk-res-box.accent {
    background: var(--rk-calc-dark);
    border-color: var(--rk-calc-dark);
}

.rk-res-box-label {
    font-size: 11px;
    color: var(--rk-calc-muted);
    font-weight: 800;
    text-transform: uppercase;
    display: block;
    margin-bottom: 5px;
}

.rk-res-box.accent .rk-res-box-label { color: #94a3b8; }

.rk-res-box-val {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-calc-dark);
}

.rk-res-box.accent .rk-res-box-val { color: #ffffff; }

/* Pasek strat ciepła */
.rk-loss-bar-wrap {
    background: #ffffff;
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-calc-border);
}

.rk-loss-bar-title {
    font-size: 11px;
    font-weight: 800;
    color: var(--rk-calc-muted);
    text-transform: uppercase;
    margin-bottom: 10px;
    display: block;
}

.rk-loss-bar {
    height: 12px;
    display: flex;
    border-radius: 6px;
    overflow: hidden;
    background: #e2e8f0;
}

.rk-lb-segment { height: 100%; transition: width 0.5s ease; }
.rk-lb-w { background: var(--rk-calc-brand); }
.rk-lb-r { background: #38bdf8; }
.rk-lb-f { background: var(--rk-calc-accent); }
.rk-lb-v { background: #94a3b8; }

.rk-loss-legend {
    display: flex;
    justify-content: space-between;
    margin-top: 10px;
    font-size: 10px;
    font-weight: 700;
    color: var(--rk-calc-muted);
}

.rk-leg-item { display: flex; align-items: center; gap: 4px; }
.rk-leg-dot { width: 8px; height: 8px; border-radius: 50%; }

/* Sekcja Info Tekstowego & CTA */
.rk-calc-footer {
    background: #ffffff;
    border-top: 1px solid var(--rk-calc-border);
    padding: 40px 45px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.rk-calc-info-text {
    font-size: 14px;
    line-height: 1.7;
    color: var(--rk-calc-text);
    background: var(--rk-calc-brand-light);
    padding: 20px;
    border-left: 4px solid var(--rk-calc-brand);
    border-radius: 0 12px 12px 0;
    margin: 0;
}

.rk-calc-info-text a {
    color: var(--rk-calc-brand);
    font-weight: 700;
    text-decoration: underline;
}

.rk-calc-actions {
    display: flex;
    gap: 20px;
    align-items: center;
}

.rk-btn-primary {
    background: var(--rk-calc-accent);
    color: #ffffff;
    padding: 16px 30px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 900;
    text-decoration: none;
    text-transform: uppercase;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    box-shadow: 0 10px 20px -5px rgba(249, 115, 22, 0.4);
    transition: all 0.3s;
    border: none;
    cursor: pointer;
}

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

@media (max-width: 900px) {
    .rk-calc-body { grid-template-columns: 1fr; }
    .rk-calc-head { padding: 35px 25px; }
    .rk-calc-controls { padding: 30px 20px; border-right: none; border-bottom: 1px solid var(--rk-calc-border); }
    .rk-calc-results { padding: 30px 20px; }
    .rk-calc-footer { padding: 30px 20px; }
    .rk-calc-actions { flex-direction: column; }
    .rk-btn-primary { width: 100%; justify-content: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-calculator",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Kalkulator strat ciepła budynku online – oblicz zapotrzebowanie na ogrzewanie",
    "description": "Profesjonalny symulator OZC. Oblicz zapotrzebowanie na moc (W/m2), długość pętli grzewczych i dobierz optymalną temperaturę zasilania dla pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-calculator",
    "name": "Szacunkowe Parametry Wykonawcze Ogrzewania Podłogowego",
    "description": "Zbiór obliczonych parametrów hydraulicznych i termicznych wygenerowanych na podstawie wprowadzonych wskaźników izolacyjności przegród budowlanych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie cieplne W/m2",
      "dobór pompy obiegowej",
      "planowanie pętli grzewczych",
      "kosztorys ogrzewania podłogowego",
      "temperatura zasilania podłogówki"
    ],
    "measurementTechnique": "Szacowanie heurystyczne bazujące na uproszczonych wzorach normy PN-EN 12831, przeliczające sumę strat przez przenikanie i wentylację na metraż instalacji.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wynik > 95 W/m2 wskazuje na wysokie ryzyko niedogrzania samym systemem podłogowym.",
        "Zapotrzebowanie określa średnią wymaganą ilość mb rury instalacyjnej.",
        "Moc całkowita determinuje dobór mocy źródła ciepła (pompy ciepła)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-calculator",
    "name": "Zaawansowany Symulator Zapotrzebowania Cieplnego",
    "description": "Interaktywna aplikacja inżynierska wizualizująca na żywo zmiany parametrów instalacyjnych (temperatura, rozstaw rur) w zależności od grubości ocieplenia i rodzaju posadzki.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 and JavaScript enabled browser.",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-calc-wrapper" id="rk-calc-app">
    <div class="rk-calc-head">
        <div class="rk-calc-badge">Narzędzie Inżynierskie</div>
        <h2>Kalkulator strat ciepła budynku online – oblicz zapotrzebowanie na ogrzewanie</h2>
        <p>Wprowadź gabaryty swojego budynku oraz parametry przegród, aby błyskawicznie oszacować moc grzewczą i optymalne parametry pracy pętli podłogowych. Pamiętaj, że uzyskane wyniki mają <strong>charakter wyłącznie poglądowy</strong> i nie zastępują profesjonalnego projektu (OZC).</p>
    </div>

    <div class="rk-calc-body">
        
        <div class="rk-calc-controls">
            
            <div class="rk-calc-section-title">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg>
                1. Standard energetyczny
            </div>
            <div class="rk-calc-btn-group">
                <div class="rk-calc-opt-btn active" onclick="rkSetPreset('new', this)">
                    <svg class="rk-calc-opt-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg>
                    <span class="rk-calc-opt-text">Nowy Dom<br>(WT 2021)</span>
                </div>
                <div class="rk-calc-opt-btn" onclick="rkSetPreset('mod', this)">
                    <svg class="rk-calc-opt-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    <span class="rk-calc-opt-text">Docieplony<br>(Modernizacja)</span>
                </div>
                <div class="rk-calc-opt-btn" onclick="rkSetPreset('old', this)">
                    <svg class="rk-calc-opt-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
                    <span class="rk-calc-opt-text">Stary Dom<br>(Bez izolacji)</span>
                </div>
            </div>

            <div class="rk-calc-section-title">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><line x1="4" y1="12" x2="20" y2="12"></line><line x1="12" y1="4" x2="12" y2="20"></line></svg>
                2. Geometria i Fizyka budowli
            </div>
            
            <div class="rk-slider-wrap">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">Powierzchnia ogrzewana</span>
                    <span class="rk-slider-val"><span id="rk-v-area">140</span> m²</span>
                </div>
                <input type="range" id="rk-area" class="rk-range-input" min="40" max="300" value="140" oninput="rkUpdateCalc()">
            </div>

            <div class="rk-slider-wrap">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">Strefa Klimatyczna</span>
                    <span class="rk-slider-val">Strefa <span id="rk-v-zone">III</span> (<span id="rk-v-temp">-20</span>°C)</span>
                </div>
                <input type="range" id="rk-zone" class="rk-range-input" min="1" max="5" step="1" value="3" oninput="rkUpdateCalc()">
            </div>

            <div class="rk-slider-wrap">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">Wsp. przenikania Ścian (U)</span>
                    <span class="rk-slider-val" id="rk-v-walls">0.18</span>
                </div>
                <input type="range" id="rk-walls" class="rk-range-input" min="0.1" max="1.5" step="0.01" value="0.18" oninput="rkUpdateCalc()">
            </div>

            <div class="rk-slider-wrap">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">Wsp. przenikania Dachu (U)</span>
                    <span class="rk-slider-val" id="rk-v-roof">0.15</span>
                </div>
                <input type="range" id="rk-roof" class="rk-range-input" min="0.1" max="1.0" step="0.01" value="0.15" oninput="rkUpdateCalc()">
            </div>

            <div class="rk-slider-wrap">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">Wsp. przenikania Podłogi (U)</span>
                    <span class="rk-slider-val" id="rk-v-floor">0.25</span>
                </div>
                <input type="range" id="rk-floor" class="rk-range-input" min="0.1" max="1.5" step="0.01" value="0.25" oninput="rkUpdateCalc()">
            </div>

            <div class="rk-calc-section-title">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
                3. Wykończenie posadzki
            </div>
            <div class="rk-calc-btn-group">
                <div class="rk-calc-opt-btn active" id="rk-f-tiles" onclick="rkSetFloor(0.02, 'tiles')">
                    <span class="rk-calc-opt-text">PŁYTKI/GRES</span>
                </div>
                <div class="rk-calc-opt-btn" id="rk-f-panels" onclick="rkSetFloor(0.08, 'panels')">
                    <span class="rk-calc-opt-text">PANELE</span>
                </div>
                <div class="rk-calc-opt-btn" id="rk-f-wood" onclick="rkSetFloor(0.12, 'wood')">
                    <span class="rk-calc-opt-text">DESKA</span>
                </div>
            </div>

        </div>

        <div class="rk-calc-results">
            
            <div class="rk-res-main-card">
                <div class="rk-res-gauge">
                    <svg viewBox="0 0 100 50" width="100%" height="100%">
                        <path class="rk-gauge-path-bg" d="M 10 50 A 40 40 0 0 1 90 50" />
                        <path class="rk-gauge-path-val" id="rk-gauge-val" d="M 10 50 A 40 40 0 0 1 90 50" stroke-dasharray="125.6" stroke-dashoffset="125.6" />
                    </svg>
                </div>
                <div class="rk-res-huge" id="rk-res-m2">--</div>
                <div class="rk-res-unit">Watów na m² (W/m²)</div>
                <div class="rk-res-alert" id="rk-alert-msg">
                    ⚠️ Krytyczne zapotrzebowanie. Sama instalacja podłogowa nie dogrzeje budynku w mrozy.
                </div>
            </div>

            <div class="rk-res-grid">
                <div class="rk-res-box">
                    <span class="rk-res-box-label">Moc całkowita instalacji</span>
                    <span class="rk-res-box-val" id="rk-res-total">-- kW</span>
                </div>
                <div class="rk-res-box accent">
                    <span class="rk-res-box-label">Sugerowany rozstaw rur</span>
                    <span class="rk-res-box-val" id="rk-res-spacing">-- cm</span>
                </div>
                <div class="rk-res-box">
                    <span class="rk-res-box-label">Temp. zasilania (Tz)</span>
                    <span class="rk-res-box-val" id="rk-res-tz" style="color:var(--rk-calc-accent)">-- °C</span>
                </div>
                <div class="rk-res-box">
                    <span class="rk-res-box-label">Ilość mb rury PEX (ok.)</span>
                    <span class="rk-res-box-val" id="rk-res-pipe">-- mb</span>
                </div>
            </div>

            <div class="rk-loss-bar-wrap">
                <span class="rk-loss-bar-title">Rozkład ucieczki ciepła</span>
                <div class="rk-loss-bar">
                    <div class="rk-lb-segment rk-lb-w" id="rk-bar-w" style="width: 0%"></div>
                    <div class="rk-lb-segment rk-lb-r" id="rk-bar-r" style="width: 0%"></div>
                    <div class="rk-lb-segment rk-lb-f" id="rk-bar-f" style="width: 0%"></div>
                    <div class="rk-lb-segment rk-lb-v" id="rk-bar-v" style="width: 0%"></div>
                </div>
                <div class="rk-loss-legend">
                    <div class="rk-leg-item"><div class="rk-leg-dot rk-lb-w"></div> Ściany</div>
                    <div class="rk-leg-item"><div class="rk-leg-dot rk-lb-r"></div> Dach</div>
                    <div class="rk-leg-item"><div class="rk-leg-dot rk-lb-f"></div> Podłoga</div>
                    <div class="rk-leg-item"><div class="rk-leg-dot rk-lb-v"></div> Wentylacja</div>
                </div>
            </div>

        </div>

    </div>

    <div class="rk-calc-footer">
        <h3>Jak czytać wyniki symulacji OZC?</h3>
        <p class="rk-calc-info-text">
            <strong>Zanim zamówisz materiały lub projekt, musisz oszacować zapotrzebowanie energetyczne!</strong> 
            Wyniki powyżej pokazują teoretyczne granice dla Twojego budynku i mają <strong>charakter poglądowy</strong>. Zbyt wysokie obciążenie (powyżej 80 W/m²) wymusi gęste układanie rur, a w efekcie zakup potężniejszego urządzenia grzewczego. Aby nie zgadywać w ciemno, bazuj na profesjonalnych wyliczeniach. Zastanów się zresztą sam: projekt "z głowy" czy pełny projekt inżynierski z obliczeniami strat? Różnica w kosztach późniejszej eksploatacji jest kolosalna.
        </p>
        <div class="rk-calc-actions">
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-btn-primary">
                ZAMÓW PROFESJONALNY PROJEKT PODŁOGÓWKI
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
            </a>
        </div>
    </div>

</div>

<script>
let rkActiveR = 0.02;
const rkZTemps = { 1: -16, 2: -18, 3: -20, 4: -22, 5: -24 };
const rkZNames = { 1: "I", 2: "II", 3: "III", 4: "IV", 5: "V" };

function rkSetPreset(type, el) {
    document.querySelectorAll('.rk-calc-btn-group')[0].querySelectorAll('.rk-calc-opt-btn').forEach(b => b.classList.remove('active'));
    el.classList.add('active');
    
    const p = {
        new: { w: 0.18, r: 0.15, f: 0.25 },
        mod: { w: 0.35, r: 0.25, f: 0.40 },
        old: { w: 1.10, r: 0.80, f: 1.00 }
    };
    
    document.getElementById('rk-walls').value = p[type].w;
    document.getElementById('rk-roof').value = p[type].r;
    document.getElementById('rk-floor').value = p[type].f;
    rkUpdateCalc();
}

function rkSetFloor(r, id) {
    rkActiveR = r;
    const btns = document.querySelectorAll('.rk-calc-btn-group')[1].querySelectorAll('.rk-calc-opt-btn');
    btns.forEach(b => b.classList.remove('active'));
    document.getElementById('rk-f-'+id).classList.add('active');
    rkUpdateCalc();
}

function rkUpdateCalc() {
    const area = parseFloat(document.getElementById('rk-area').value);
    const zone = document.getElementById('rk-zone').value;
    const uWalls = parseFloat(document.getElementById('rk-walls').value);
    const uRoof = parseFloat(document.getElementById('rk-roof').value);
    const uFloor = parseFloat(document.getElementById('rk-floor').value);
    
    const deltaT = 20 - rkZTemps[zone];
    
    // Update labels
    document.getElementById('rk-v-area').innerText = area;
    document.getElementById('rk-v-zone').innerText = rkZNames[zone];
    document.getElementById('rk-v-temp').innerText = rkZTemps[zone];
    document.getElementById('rk-v-walls').innerText = uWalls.toFixed(2);
    document.getElementById('rk-v-roof').innerText = uRoof.toFixed(2);
    document.getElementById('rk-v-floor').innerText = uFloor.toFixed(2);

    // Calc logic
    const qWalls = (area * 1.5) * uWalls * deltaT; // uśrednione ściany
    const qRoof = area * uRoof * deltaT;
    const qFloor = area * uFloor * 15; // stałe dt dla gruntu
    const qVent = 0.34 * (area * 2.6) * 0.5 * deltaT; // grawitacyjna went.
    
    const total = (qWalls + qRoof + qFloor + qVent) * 1.1; // +10% mostki
    const wm2 = total / area;

    // UI Updates
    document.getElementById('rk-res-m2').innerText = Math.round(wm2);
    document.getElementById('rk-res-total').innerText = (total / 1000).toFixed(2);

    // Gauge Update (Max 150 W/m2 for scale)
    const gaugeValPath = document.getElementById('rk-gauge-val');
    const circumference = 125.6; // pi * r (r=40) for semi-circle
    let pct = wm2 / 150;
    if(pct > 1) pct = 1;
    const offset = circumference - (pct * circumference);
    gaugeValPath.style.strokeDashoffset = offset;

    const alertMsg = document.getElementById('rk-alert-msg');
    if(wm2 > 95) {
        gaugeValPath.style.stroke = "var(--rk-calc-danger)";
        alertMsg.style.display = "block";
    } else if (wm2 > 65) {
        gaugeValPath.style.stroke = "var(--rk-calc-warning)";
        alertMsg.style.display = "none";
    } else {
        gaugeValPath.style.stroke = "var(--rk-calc-success)";
        alertMsg.style.display = "none";
    }

    // Parameters
    let spacing = (wm2 > 70 || rkActiveR > 0.08) ? 10 : 15;
    document.getElementById('rk-res-spacing').innerText = spacing;

    let tz = 20 + (wm2 * (0.12 + rkActiveR));
    tz = Math.min(55, Math.max(28, tz));
    document.getElementById('rk-res-tz').innerText = Math.round(tz) + " °C";

    const pipe = area * (100 / spacing) * 1.05;
    document.getElementById('rk-res-pipe').innerText = Math.round(pipe);

    // Bars
    document.getElementById('rk-bar-w').style.width = (qWalls/total*100) + "%";
    document.getElementById('rk-bar-r').style.width = (qRoof/total*100) + "%";
    document.getElementById('rk-bar-f').style.width = (qFloor/total*100) + "%";
    document.getElementById('rk-bar-v').style.width = (qVent/total*100) + "%";
}

// Init on load
document.addEventListener('DOMContentLoaded', rkUpdateCalc);
</script>



<style>
/* STYLE DLA SEKCJI HERO I WSTĘPU */
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-intro-module {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
}

/* 1. HERO BOX */
.premium-hero-box {
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    position: relative;
    margin-bottom: 50px;
}

.premium-hero-box::before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    width: 350px;
    height: 350px;
    background: radial-gradient(circle, rgba(37,99,235,0.06) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    transform: translate(30%, -30%);
    z-index: 0;
}

.hero-content {
    position: relative;
    z-index: 1;
    padding: 50px 55px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
}

.hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #eff6ff;
    color: var(--accent);
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 25px;
    border: 1px solid #bfdbfe;
}

.hero-title {
    margin-top: 0;
    margin-bottom: 25px;
    font-size: 36px;
    font-weight: 900;
    line-height: 1.2;
    color: var(--primary);
}

.hero-text {
    font-size: 17px;
    line-height: 1.8;
    color: #475569;
    margin-bottom: 20px;
}

.hero-text strong {
    color: var(--primary);
}

.hero-text:last-of-type {
    margin-bottom: 0;
}

/* 2. KARTY - 4 CZYNNIKI */
.factors-section {
    padding: 20px 0;
}

.factors-header {
    text-align: center;
    margin-bottom: 40px;
}

.factors-header h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
    margin-bottom: 15px;
}

.factors-header p {
    font-size: 16px;
    color: #64748b;
    max-width: 700px;
    margin: 0 auto;
    line-height: 1.6;
}

.factors-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 25px;
}

.factor-card {
    background: #ffffff;
    border: 2px solid var(--border-color);
    border-radius: 20px;
    padding: 35px 30px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.05);
    position: relative;
    overflow: hidden;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
}

.factor-card:hover {
    border-color: var(--accent);
    transform: translateY(-5px);
    box-shadow: 0 20px 40px -10px rgba(37, 99, 235, 0.15);
}

.factor-icon {
    width: 56px;
    height: 56px;
    background: #eff6ff;
    color: var(--accent);
    border-radius: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 28px;
    margin-bottom: 25px;
    transition: transform 0.4s;
}

.factor-card:hover .factor-icon {
    transform: scale(1.1) rotate(-5deg);
}

.factor-card h4 {
    margin: 0 0 15px 0;
    font-size: 19px;
    font-weight: 800;
    color: var(--primary);
    line-height: 1.3;
}

.factor-card p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.65;
    color: #475569;
}

.factor-example {
    background: #f8fafc;
    padding: 18px 20px;
    border-radius: 12px;
    border-left: 4px solid var(--accent);
    font-size: 14px;
    color: #334155;
    line-height: 1.6;
    margin-top: auto;
}

.factor-example strong {
    color: var(--primary);
    display: block;
    margin-bottom: 5px;
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.formula-box {
    background: #ffffff;
    border: 1px dashed #cbd5e1;
    padding: 10px;
    border-radius: 8px;
    font-family: 'Courier New', Courier, monospace;
    font-size: 13px;
    font-weight: 700;
    color: var(--primary);
    margin-top: 10px;
    text-align: center;
}

/* Wyróżnienia kolorystyczne dla konkretnych kart */
.card-iso .factor-example { border-left-color: var(--success); }
.card-iso .factor-icon { background: #dcfce7; color: var(--success); }

.card-flow .factor-example { border-left-color: var(--accent); }

.card-len .factor-example { border-left-color: var(--danger); }
.card-len .factor-icon { background: #fee2e2; color: var(--danger); }

.card-pump .factor-example { border-left-color: var(--warning); }
.card-pump .factor-icon { background: #ffedd5; color: var(--warning); }

/* KREATYWNE CTA */
.rk-prm-cta-box {
    margin-top: 50px;
    background: linear-gradient(135deg, #2563eb 0%, #1e3a8a 100%);
    border-radius: 20px;
    padding: 40px 50px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 30px;
    color: #ffffff;
    box-shadow: 0 15px 30px -10px rgba(37, 99, 235, 0.4);
}

.rk-prm-cta-text h3 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
}

.rk-prm-cta-text p {
    margin: 0;
    font-size: 15px;
    opacity: 0.9;
    max-width: 500px;
    line-height: 1.6;
}

.rk-prm-btn-massive {
    background: #ffffff;
    color: var(--accent);
    padding: 18px 30px;
    border-radius: 14px;
    font-size: 16px;
    font-weight: 900;
    text-transform: uppercase;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
    box-shadow: 0 10px 20px rgba(0,0,0,0.1);
    transition: all 0.3s;
}

.rk-prm-btn-massive:hover {
    transform: translateY(-4px);
    box-shadow: 0 15px 25px rgba(0,0,0,0.2);
    background: #f8fafc;
}

@media (max-width: 900px) {
    .hero-content { padding: 40px 30px; }
    .hero-title { font-size: 28px; }
    .factors-grid { grid-template-columns: 1fr; gap: 20px; }
    .rk-prm-cta-box { flex-direction: column; text-align: center; padding: 35px 25px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#projekt-hydrauliczny",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Jak wyniki z kalkulatora strat ciepła wpływają na projekt ogrzewania podłogowego?",
    "description": "Przełożenie obciążenia cieplnego na parametry hydrauliczne: rozstaw rur PEX, rotametry, długość pętli oraz dobór pompy ciepła i bufora.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-hydraulika",
    "name": "Wytyczne Hydrauliczne Projektowania Ogrzewania Podłogowego",
    "description": "Techniczne korelacje pomiędzy zapotrzebowaniem energetycznym budynku a ustawieniami przepływów, długością pętli i doborem elementów maszynowni.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projekt ogrzewania podłogowego parametry",
      "rozstaw rur w ogrzewaniu podłogowym",
      "maksymalna długość pętli ogrzewania podłogowego",
      "ustawienie przepływów na rotametrach",
      "dobór pompy ciepła i bufora"
    ],
    "measurementTechnique": "Konwersja obciążenia cieplnego (W/m2) na przepływy masowe przy zakładanym spadku temperatury dT=5K oraz wyznaczanie oporów hydraulicznych pętli.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rozstaw rur: 20 cm dla <45 W/m2, 15 cm dla 50-80 W/m2, 10 cm dla stref brzegowych.",
        "Przepływ masowy (l/min) wyliczany z proporcji Mocy i delta T (ΔT).",
        "Maksymalna długość pojedynczej pętli rury 16x2.0 mm: 100-120 mb w celu ograniczenia oporów poniżej 20 kPa.",
        "Sumaryczna moc budynku warunkuje moc grzewczą pompy ciepła w punkcie biwalencyjnym."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-hydraulika",
    "name": "Przewodnik Parametrów Projektowych",
    "description": "Narzędzie tłumaczące inżynierskie przełożenie wyników audytu OZC na fizyczne elementy instalacji ogrzewania podłogowego (rury, rozdzielacze, bufory).",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="premium-intro-module" id="intro-hero-app">
    
    <div class="premium-hero-box">
        <div class="hero-content">
            <div class="hero-badge">
                <svg width="14" height="14" 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>
                Inżynieria w praktyce
            </div>
            
            <h2 class="hero-title">Jak wyniki z kalkulatora strat ciepła wpływają na projekt ogrzewania podłogowego?</h2>
            
            <p class="hero-text">Wprowadzenie dokładnych danych z kalkulatora strat ciepła budynku jest fundamentem do wykonania poprawnego, profesjonalnego projektu instalacji ogrzewania podłogowego.</p>
            
            <p class="hero-text">Wynik całkowitego obciążenia cieplnego (<strong>Q<sub>total</sub></strong>) oraz wskaźniki jednostkowe (<strong>W/m²</strong>) determinują kluczowe parametry hydrauliczne i montażowe układu wodnego, eliminując kosztowne błędy wykonawcze.</p>
        </div>
    </div>

    <div class="factors-section">
        <div class="factors-header">
            <h2>Przełożenie wyników na 4 parametry hydrauliczne projektu</h2>
            <p>Zobacz, jak wartości uzyskane z kalkulatora bezpośrednio determinują dobór komponentów i zasady montażu w Twoim domu.</p>
        </div>
        
        <div class="factors-grid">
            
            <div class="factor-card card-iso">
                <div class="factor-icon">📏</div>
                <h4>Dobór rozstawu rur (zagęszczenie wężownicy)</h4>
                <p>Wskaźniki jednostkowe zapotrzebowania z kalkulatora (ilość W/m²) bezpośrednio decydują o zagęszczeniu rur. Prawidłowy dobór gwarantuje, że podłoga odda dokładnie tyle ciepła, ile potrzebuje pomieszczenie w mroźne dni.</p>
                <div class="factor-example">
                    <strong>Zasady rozstawu:</strong>
                    • &lt; 45 W/m² → Rozstaw co <strong>20 cm</strong> (domy energooszczędne).<br>
                    • 50-80 W/m² → Rozstaw co <strong>15 cm</strong> (standard).<br>
                    • &gt; 80 W/m² lub duże okna → Zagęszczenie co <strong>10 cm</strong> (strefy brzegowe).
                </div>
            </div>

            <div class="factor-card card-flow">
                <div class="factor-icon">⚖️</div>
                <h4>Wyznaczenie przepływów masowych (rotametry)</h4>
                <p>Dokładna moc pętli z OZC pozwala wyliczyć wymagany przepływ wody na belce rozdzielacza. Tę wartość hydraulik musi precyzyjnie ustawić na rotametrze podczas procedury równoważenia instalacji.</p>
                <div class="factor-example">
                    <strong>Przykład z projektu:</strong>
                    Dla pętli o mocy Q = 1200 W i spadku temperatury ΔT = 5 K, wymagany przepływ wynosi:
                    <div class="formula-box">
                        ṁ = Q / (c · ΔT) = 1200 / (1,163 · 5) = 206,3 kg/h ≈ 3,43 l/min
                    </div>
                </div>
            </div>

            <div class="factor-card card-len">
                <div class="factor-icon">🛑</div>
                <h4>Maksymalna długość pętli grzewczej</h4>
                <p>Projektant, znając przepływy i wynikowe straty ciepła, dzieli powierzchnię posadzki na sekcje. Robi to tak, aby nie przekroczyć granicznych oporów hydraulicznych, z którymi nie poradzi sobie pompa obiegowa.</p>
                <div class="factor-example">
                    <strong>Limit inżynierski:</strong>
                    Pojedyncza pętla z popularnej rury o średnicy 16 mm <strong>nie może przekroczyć 100-120 metrów długości</strong>. Dłuższa rura wygeneruje opory powyżej 20 kPa, powodując efekt „zimnej podłogi” na końcu obiegu w salonie.
                </div>
            </div>

            <div class="factor-card card-pump">
                <div class="factor-icon">⚙️</div>
                <h4>Dobór pompy ciepła i bufora</h4>
                <p>Całkowita moc budynku uzyskana z kalkulatora (np. 7,5 kW dla skrajnej temperatury -20°C) wskazuje wprost inwestorowi i projektantowi, jakiej klasy mocowej model pompy ciepła należy zakupić.</p>
                <div class="factor-example">
                    <strong>Dlaczego to jest ważne?</strong>
                    Precyzyjny dobór mocy zapobiega instalacji urządzeń zbyt dużych (przewymiarowanych), które ulegają przyspieszonym awariom z powodu tzw. taktowania kompresora. Wyznacza też wymaganą minimalną pojemność bufora dla procesu defrostu.
                </div>
            </div>

        </div>
    </div>

    <div class="rk-prm-cta-box">
        <div class="rk-prm-cta-text">
            <h3>Koniec z szacowaniem "na oko"!</h3>
            <p>Nie pozwól instalatorowi układać rur bez rzetelnego, matematycznego planu. Zainwestuj w pełny projekt inżynierski OZC, który zbilansuje każdy litr wody w Twoim domu. <strong>To jedyna gwarancja niskich rachunków.</strong></p>
        </div>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-prm-btn-massive">
            Zamów Kompletny Projekt
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 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 appContainer = document.getElementById('intro-hero-app');
        if (appContainer) {
            appContainer.innerHTML = `
                <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; border-radius: 24px; font-family: sans-serif;">
                    <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                    <h3 style="margin-top:0; font-size: 24px; font-weight: 900;">Treść chroniona prawem autorskim</h3>
                    <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5; margin-bottom: 25px;">Ten moduł jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został wdrożony na nieautoryzowanej domenie.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINAŁ</a>
                </div>
            `;
        }
    }
});
</script>



<style>
:root {
    --rk-err-dark: #0f172a;
    --rk-err-panel: #1e293b;
    --rk-err-danger: #ef4444; 
    --rk-err-danger-light: #fef2f2;
    --rk-err-warn: #f59e0b; 
    --rk-err-safe: #10b981; 
    --rk-err-blue: #3b82f6; 
    --rk-err-bg: #ffffff;
    --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, sans-serif;
    background: var(--rk-err-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(239, 68, 68, 0.15);
    border: 1px solid rgba(239, 68, 68, 0.3);
    overflow: hidden;
}

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

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

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

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

.rk-err-subtitle {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    max-width: 700px;
    line-height: 1.6;
}

/* Moduł Interaktywny */
.rk-err-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

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

/* Lista błędów (Lewa Kolumna) */
.rk-err-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

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

.rk-err-btn:hover {
    border-color: var(--rk-err-danger);
    transform: translateX(4px);
}

.rk-err-btn.active {
    background: var(--rk-err-danger-light);
    border-color: var(--rk-err-danger);
    box-shadow: inset 4px 0 0 var(--rk-err-danger), 0 10px 20px -5px rgba(239, 68, 68, 0.15);
}

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

.rk-err-btn.active .rk-err-icon {
    background: var(--rk-err-danger);
    color: #ffffff;
}

.rk-err-btn-text h4 {
    margin: 0 0 5px 0;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-err-dark);
}

.rk-err-btn-text p {
    margin: 0;
    font-size: 12px;
    color: var(--rk-err-muted);
    line-height: 1.4;
}

/* Karty CTA (Długi Ogon - Wypełnienie Pustego Miejsca na lewym pasku) */
.rk-err-cta-card {
    background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
    border-radius: 14px;
    padding: 18px 20px;
    text-decoration: none;
    display: flex;
    flex-direction: column;
    justify-content: center;
    position: relative;
    overflow: hidden;
    border: 1px solid #334155;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
    transition: transform 0.3s, box-shadow 0.3s, border-color 0.3s;
    margin-top: 5px;
}

.rk-err-cta-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 8px 25px rgba(15, 23, 42, 0.4);
    border-color: var(--rk-err-danger);
}

.err-cta-badge {
    font-size: 10px;
    color: #cbd5e1;
    text-transform: uppercase;
    font-weight: 800;
    letter-spacing: 1px;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.err-cta-badge::before {
    content: '';
    display: inline-block;
    width: 6px;
    height: 6px;
    background: var(--rk-err-danger);
    border-radius: 50%;
}

.err-cta-title {
    font-size: 14px;
    color: #ffffff;
    font-weight: 700;
    line-height: 1.5;
    padding-right: 25px;
}

.err-cta-arrow {
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--rk-err-danger);
    font-size: 18px;
    font-weight: bold;
    transition: right 0.3s;
}

.rk-err-cta-card:hover .err-cta-arrow {
    right: 15px;
}

/* Panel Detali (Prawa Kolumna - Zoptymalizowana pod Długi Ogon Tekstu) */
.rk-err-display {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-err-border);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
}

.rk-err-panel {
    display: none;
    flex-direction: column;
    height: 100%;
}

.rk-err-panel.active {
    display: flex;
    animation: fadeInScale 0.4s ease-out forwards;
}

@keyframes fadeInScale {
    from { opacity: 0; transform: scale(0.98); }
    to { opacity: 1; transform: scale(1); }
}

/* Treść Panelu Pełnotekstowego */
.rk-err-content {
    padding: 40px 45px;
    flex-grow: 1;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
}

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

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

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

.rk-err-link {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: var(--rk-err-danger);
    font-weight: 800;
    font-size: 15px;
    text-decoration: none;
    margin-top: 15px;
    padding-top: 25px;
    border-top: 1px dashed var(--rk-err-border);
    transition: color 0.3s;
}

.rk-err-link:hover { color: #991b1b; }
.rk-err-link svg { transition: transform 0.3s; }
.rk-err-link:hover svg { transform: translateX(5px); }

@media (max-width: 768px) {
    .rk-err-header { padding: 35px 25px; }
    .rk-err-title { font-size: 24px; }
    .rk-err-interactive { padding: 25px; }
    .rk-err-grid { grid-template-columns: 1fr; }
    .rk-err-content { padding: 30px 25px; }
    .rk-err-content h3 { font-size: 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-bledy-szacowania",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Najczęstsze błędy inwestorów przy samodzielnym szacowaniu zapotrzebowania na ciepło",
    "description": "Kluczowe pułapki podczas obliczania strat cieplnych: ignorowanie izolacji brzegowej, błędna kubatura do strat wentylacyjnych, zła strefa klimatyczna oraz wpływ wylewki na bezwładność.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-bledy",
    "name": "Rejestr Błędów Szacunkowych Zapotrzebowania Cieplnego",
    "description": "Wykaz najczęstszych odchyleń w samodzielnych audytach energetycznych wpływających na przewymiarowanie pomp ciepła i nieefektywność instalacji płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "błędy obliczeniowe OZC",
      "grubość wylewki a straty ciepła",
      "izolacja brzegowa podłogówki",
      "strefa klimatyczna w Polsce",
      "straty wentylacyjne kubatura",
      "straty ciepła przez duże przeszklenia",
      "temperatura w łazience 24 stopnie"
    ],
    "measurementTechnique": "Weryfikacja parametrów audytowych poprzez porównanie wskaźników normatywnych z błędnymi założeniami inwestorskimi.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Fałszywy wskaźnik 50 W/m2 przy dużych przeszkleniach północnych.",
        "Generowanie masywnej bezwładności przez wylewki grubsze niż 6 cm.",
        "Zawyżanie kubatury wentylacyjnej przez przyjmowanie wysokości stanu surowego.",
        "Przemarzanie stref przez brak ciągłości izolacji brzegowej.",
        "Przyjmowanie uniwersalnej strefy klimatycznej zamiast lokalnej temperatury projektowej.",
        "Ignorowanie wyższej temperatury docelowej (+24°C) dla łazienek w bilansie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-error-scanner",
    "name": "Przegląd Błędów Obliczeniowych HVAC",
    "description": "Narzędzie nawigacyjne demaskujące wpływ niewłaściwych założeń architektonicznych i materiałowych na błędy w kalkulatorach zapotrzebowania cieplnego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-err-container" id="rk-err-app">
    
    <div class="rk-err-header">
        <div class="rk-err-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" 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>
            Skaner Ryzyka Inwestycyjnego
        </div>
        <h2 class="rk-err-title">Najczęstsze błędy inwestorów przy <span>samodzielnym szacowaniu zapotrzebowania</span> na ciepło</h2>
        <p class="rk-err-subtitle">Nawet najlepszy kalkulator poda fałszywy wynik, jeśli wprowadzisz do niego błędne dane wejściowe. Zobacz 6 grzechów głównych, które zrujnują bilans energetyczny Twojego domu.</p>
    </div>

    <div class="rk-err-interactive">
        <div class="rk-err-grid">
            
            <div class="rk-err-list">
                
                <button class="rk-err-btn active" data-err="err-1">
                    <div class="rk-err-icon">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
                    </div>
                    <div class="rk-err-btn-text">
                        <h4>Ślepa wiara w internet</h4>
                        <p>Ignorowanie dużych okien</p>
                    </div>
                </button>

                <button class="rk-err-btn" data-err="err-2">
                    <div class="rk-err-icon">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20"></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    </div>
                    <div class="rk-err-btn-text">
                        <h4>Bezwładność wylewki</h4>
                        <p>Opór grubego betonu</p>
                    </div>
                </button>

                <button class="rk-err-btn" data-err="err-3">
                    <div class="rk-err-icon">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
                    </div>
                    <div class="rk-err-btn-text">
                        <h4>Błędy kubaturowe</h4>
                        <p>Stan surowy vs gotowy</p>
                    </div>
                </button>

                <button class="rk-err-btn" data-err="err-4">
                    <div class="rk-err-icon">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12.55a11 11 0 0 1 14.08 0"></path><path d="M1.42 9a16 16 0 0 1 21.16 0"></path><path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path><line x1="12" y1="20" x2="12.01" y2="20"></line></svg>
                    </div>
                    <div class="rk-err-btn-text">
                        <h4>Mostki termiczne</h4>
                        <p>Brak izolacji brzegowej</p>
                    </div>
                </button>

                <button class="rk-err-btn" data-err="err-5">
                    <div class="rk-err-icon">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path></svg>
                    </div>
                    <div class="rk-err-btn-text">
                        <h4>Zła strefa klimatyczna</h4>
                        <p>Błąd na ΔT i temperaturze</p>
                    </div>
                </button>

                <button class="rk-err-btn" data-err="err-6">
                    <div class="rk-err-icon">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"></path></svg>
                    </div>
                    <div class="rk-err-btn-text">
                        <h4>Niedogrzana łazienka</h4>
                        <p>Ignorowanie normy +24°C</p>
                    </div>
                </button>

                <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/" class="rk-err-cta-card">
                    <div class="err-cta-badge">Kalkulacje a okładzina</div>
                    <div class="err-cta-title">Panele czy Płytki? Poznaj wpływ na efektywność instalacji</div>
                    <div class="err-cta-arrow">➔</div>
                </a>

                <a href="https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/" class="rk-err-cta-card">
                    <div class="err-cta-badge">Ostrzeżenie Inżyniera</div>
                    <div class="err-cta-title">5 Błędów montażu, których nie naprawisz po wylewce</div>
                    <div class="err-cta-arrow">➔</div>
                </a>

            </div>

            <div class="rk-err-display">
                
                <div class="rk-err-panel active" id="err-1">
                    <div class="rk-err-content">
                        <h3>Przyjmowanie uśrednionych wskaźników z internetu</h3>
                        <p>Projektowanie instalacji na bazie ogólnikowego hasła „każdy nowy dom potrzebuje 50 W/m²” to proszenie się o kłopoty. Ignorowanie wielkości okien to błąd kardynalny. Dom z dużymi przeszkleniami od strony północnej może potrzebować w strefie przyokiennej potężnego zastrzyku mocy – w najchłodniejsze dni nawet do 90 W/m².</p>
                        <p><strong>Dlaczego duże okna tarasowe (np. typu HS) generują problemy?</strong> Przeszklenia mają zazwyczaj 3-4 krotnie gorszy współczynnik przenikania ciepła (U) niż dobrze ocieplona ściana zewnętrzna. Oznacza to, że salon z oknem na całą ścianę wychładza się drastycznie szybciej. Aby skompensować te <strong>straty ciepła przez duże przeszklenia</strong>, konieczne jest wyznaczenie precyzyjnej <strong>strefy brzegowej obwodowej w ogrzewaniu podłogowym</strong> z gęstszym rozstawem rur (najczęściej co 10 cm, a czasem nawet co 5 cm). Profesjonalny kalkulator strat ciepła budynku zawsze oddziela przegrody przezroczyste od pełnych ścian, co pozwala bezbłędnie zoptymalizować późniejszy projekt inżynierski.</p>
                        <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/" class="rk-err-link">
                            Zarządzaj strefą brzegową przy oknach 
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
                        </a>
                    </div>
                </div>

                <div class="rk-err-panel" id="err-2">
                    <div class="rk-err-content">
                        <h3>Nieuwzględnianie grubości i rodzaju wylewki</h3>
                        <p>Zbyt gruba wylewka betonowa (np. wylanie 10 cm standardowego betonu z miksokreta zamiast optymalnych 5-6 cm specjalistycznego jastrychu) drastycznie zaburza parametry. Kalkulator musi koniecznie uwzględniać ten opór cieplny warstwy nad rurami, inaczej oszacowana temperatura zasilania z kotła okaże się niewystarczająca do efektywnego przebicia grubej warstwy budulca i nagrzania posadzki.</p>
                        <p><strong>Jaka wylewka na ogrzewanie podłogowe sprawdzi się najlepiej?</strong> Wybór materiału ma kluczowy wpływ na roczne rachunki. Jastrych anhydrytowy charakteryzuje się znacznie wyższym współczynnikiem przewodzenia ciepła (λ) i płynną konsystencją, która idealnie, bez pęcherzyków powietrza otula rury PEX lub PERT. Znacznie mniejsza <strong>bezwładność cieplna w ogrzewaniu podłogowym</strong> z wylewką anhydrytową pozwala systemowi szybciej reagować na nagłe zmiany pogody, zmniejszając zużycie prądu przez pompę ciepła.</p>
                        <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" class="rk-err-link">
                            Optymalna grubość wylewki – parametry i normy
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
                        </a>
                    </div>
                </div>

                <div class="rk-err-panel" id="err-3">
                    <div class="rk-err-content">
                        <h3>Błędne obliczanie kubatury do strat wentylacyjnych</h3>
                        <p>To powszechny, klasyczny błąd przy samodzielnych wyliczeniach! Przyjmowanie wysokości pomieszczeń bezpośrednio z rzutów architektonicznych z fazy stanu surowego (np. wpisywanie w tabelę 2,80 m lub 3,00 m) zamiast wartości docelowej netto po wykonaniu grubych izolacji podłóg styropianem, wylaniu jastrychu oraz montażu sufitów podwieszanych (gdzie realna wysokość wynosi np. 2,55 m). Taki pozornie drobny błąd sztucznie podnosi wynik w kalkulatorze o kilkanaście procent.</p>
                        <p><strong>Jak oblicza się straty cieplne w budynkach z rekuperacją?</strong> Precyzyjna kubatura przestrzeni powietrznej jest fundamentalna przy wentylacji mechanicznej z odzyskiem ciepła. Markowy rekuperator potrafi odzyskać ponad 80% ciepła z wywiewanego powietrza z pomieszczeń. Błędnie zawyżona objętość zmusza do projektowania większych, niepotrzebnych przepływów powietrza oraz potężnie zakłamuje <strong>projektowe obciążenie cieplne (OZC)</strong>. Skutek? Kupujesz mocniejszą, dużo droższą pompę ciepła, która przez cały sezon będzie fatalnie taktować, pracując na zwolnionych obrotach.</p>
                        <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-err-link">
                            Poznaj wpływ rekuperacji na obciążenie OZC
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
                        </a>
                    </div>
                </div>

                <div class="rk-err-panel" id="err-4">
                    <div class="rk-err-content">
                        <h3>Ignorowanie izolacji brzegowej i fundamentowej</h3>
                        <p>Pomijanie mocy uciekającej niekontrolowanie przez boki i krawędzie nagrzanej płyty grzewczej do otoczenia to inżynierski koszmar. Brak grubej, elastycznej pianki dylatacyjnej umieszczonej na stykach wylewki ze ścianami zewnętrznymi generuje potężny obwodowy mostek termiczny. To tędy najczęściej i bezpowrotnie ucieka energia na zewnątrz budynku, co często wywołuje ekstremalne wychłodzenie cokołów i powstawanie pleśni.</p>
                        <p><strong>Ile styropianu pod ogrzewanie podłogowe na gruncie?</strong> Absolutną bazą jest doskonała izolacja termiczna kładziona bezpośrednio na folii przeciwwilgociowej (standard WT to obecnie około 15-20 cm twardego styropianu rzędu EPS 100). Jej głównym zadaniem jest zablokowanie przekazywania ciepła w dół do gruntu. Z kolei profesjonalna <strong>izolacja brzegowa i dylatacje w instalacji ogrzewania podłogowego</strong> pełnią podwójną misję: jako amortyzator mechaniczny przejmują naprężenia termiczne rozszerzającego się jastrychu (zapobiegając pękaniu posadzki), oraz stanowią kluczową fizyczną blokadę cieplną pomiędzy płytą a murowanymi, zimnymi ścianami.</p>
                        <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" class="rk-err-link">
                            Sprawdź zasady dylatacji i izolacji brzegowej 
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
                        </a>
                    </div>
                </div>

                <div class="rk-err-panel" id="err-5">
                    <div class="rk-err-content">
                        <h3>Błędne przypisanie strefy klimatycznej</h3>
                        <p>Polska nie jest jednolita termicznie! Wpisanie do kalkulatora domyślnej wartości -20°C dla inwestycji w Szczecinie (Strefa I: -16°C) zafałszuje wynik w górę. Z kolei dla inwestycji w Suwałkach (Strefa V: -24°C) instalacja zostanie dramatycznie niedoszacowana, co doprowadzi do przemarzania budynku.</p>
                        <p><strong>Jak strefa klimatyczna w Polsce wpływa na wynik kalkulatora strat ciepła?</strong> Różnica temperatur (ΔT) między wnętrzem a otoczeniem jest głównym i najsilniejszym mnożnikiem we wzorze na przenikanie. Błędne określenie dokładnej <strong>projektowej temperatury zewnętrznej</strong> sprawi, że sztucznie wyliczone zapotrzebowanie wymusi na Tobie zakup pompy ciepła o niewłaściwej mocy – a przesterowane urządzenie szybciej ulegnie kosztownej awarii kompresora.</p>
                        <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" class="rk-err-link">
                            Sprawdź podział na strefy klimatyczne i normę PN-EN 12831
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
                        </a>
                    </div>
                </div>

                <div class="rk-err-panel" id="err-6">
                    <div class="rk-err-content">
                        <h3>Ignorowanie wyższej temperatury docelowej w łazience</h3>
                        <p>Inwestorzy często liczą całą powierzchnię domu ryczałtowo, przyjmując wszędzie standardowe +20°C. Tymczasem zgodnie ze sztuką inżynierską oraz prawem budowlanym, docelowa temperatura komfortu w łazience musi wynosić +24°C. Różnica zaledwie 4 stopni potężnie zmienia i zawyża bilans cieplny dla tego pomieszczenia.</p>
                        <p><strong>Dlaczego łazienka wymaga innych obliczeń strat ciepła w kalkulatorze budowlanym?</strong> Wyższa delta temperatur (ΔT) oznacza drastycznie szybszą ucieczkę energii przez ściany i wentylację. Co gorsza, w łazience użyteczna, fizyczna powierzchnia wylewki pod <strong>ogrzewanie podłogowe</strong> jest mocno ograniczona przez stałą zabudowę (wanna, brodzik bez progu, szafki, stelaże WC). Wymusza to na projektancie OZC skrajne zagęszczenie rur grzewczych (często co 5-10 cm) oraz w 90% przypadków dodanie dedykowanego ściennego grzejnika elektrycznego do suszenia ręczników.</p>
                        <a href="https://projekt-ogrzewania.pl/jak-gesto-rozkladac-podlogowke/" class="rk-err-link">
                            Zobacz jak gęsto układać rury podłogówki w łazience
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
                        </a>
                    </div>
                </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    const btns = document.querySelectorAll('.rk-err-btn');
    const panels = document.querySelectorAll('.rk-err-panel');

    // Obsługa zakładek błędów
    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 targetId = btn.getAttribute('data-err');
            const targetPanel = document.getElementById(targetId);
            
            if(targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --rk-case-dark: #0f172a;
    --rk-case-panel: #1e293b;
    --rk-case-brand: #0284c7; /* Sky blue - techniczny i górski */
    --rk-case-brand-light: #f0f9ff;
    --rk-case-accent: #f59e0b; /* Bursztyn - ogrzewanie */
    --rk-case-danger: #ef4444; 
    --rk-case-success: #10b981; 
    --rk-case-bg: #ffffff;
    --rk-case-border: #e2e8f0;
    --rk-case-text: #334155;
    --rk-case-muted: #64748b;
}

.rk-case-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-case-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid rgba(2, 132, 199, 0.3);
    overflow: hidden;
    color: var(--rk-case-dark);
}

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

.rk-case-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

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

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

.rk-case-intro {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.7;
    max-width: 800px;
}

/* Moduł Interaktywny */
.rk-case-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-case-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
}

/* Kontrolki - Lewa strona */
.rk-case-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

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

.rk-case-ctrl-title {
    font-size: 15px;
    font-weight: 900;
    color: var(--rk-case-dark);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    gap: 8px;
}

/* Przełączniki Suwakowe */
.rk-case-slider-wrap {
    position: relative;
    padding-top: 10px;
}

.rk-case-range {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    background: #e2e8f0;
    border-radius: 4px;
    outline: none;
}

.rk-case-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    border: 4px solid var(--rk-case-brand);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.15);
}

.rk-case-labels {
    display: flex;
    justify-content: space-between;
    margin-top: 12px;
    font-size: 11px;
    font-weight: 800;
    color: var(--rk-case-muted);
}

/* Przełączniki Kafelkowe (Okładzina) */
.rk-case-btn-group {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}

.rk-case-opt-btn {
    background: #f1f5f9;
    border: 2px solid transparent;
    padding: 12px;
    border-radius: 10px;
    text-align: center;
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-case-muted);
    cursor: pointer;
    transition: 0.3s;
}

.rk-case-opt-btn.active {
    background: var(--rk-case-brand-light);
    border-color: var(--rk-case-brand);
    color: var(--rk-case-brand);
}

/* Wyniki - Prawa strona */
.rk-case-results {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.rk-case-visual {
    background: var(--rk-case-dark);
    border-radius: 16px;
    border: 3px solid #334155;
    height: 200px;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 40px rgba(0,0,0,0.6);
}

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

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

.rk-case-card {
    background: #ffffff;
    border: 1px solid var(--rk-case-border);
    padding: 15px;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-case-card.highlight {
    background: var(--rk-case-dark);
    border-color: var(--rk-case-dark);
}

.rk-case-card-label {
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--rk-case-muted);
    margin-bottom: 5px;
}

.rk-case-card.highlight .rk-case-card-label { color: #94a3b8; }

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

.rk-case-card.highlight .rk-case-card-val { color: #ffffff; font-size: 22px; }

/* Informacja podsumowująca i CTA */
.rk-case-content {
    padding: 0 50px 40px 50px;
    background: #f8fafc;
}

.rk-case-text-box {
    background: #ffffff;
    border: 1px solid var(--rk-case-border);
    border-radius: 16px;
    padding: 30px;
    margin-bottom: 20px;
}

.rk-case-text-box h3 {
    margin: 0 0 15px 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-case-dark);
}

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

.rk-case-text-box p:last-child { margin: 0; }

.rk-case-link {
    color: var(--rk-case-brand);
    font-weight: 800;
    text-decoration: underline;
    text-underline-offset: 2px;
}

.rk-case-link:hover { color: #0369a1; }

@media (max-width: 768px) {
    .rk-case-header, .rk-case-interactive, .rk-case-content { padding: 30px 20px; }
    .rk-case-title { font-size: 24px; }
    .rk-case-grid { grid-template-columns: 1fr; gap: 30px; }
    .rk-case-visual { height: 180px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#case-study-rabka",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Praktyczne Case Study: Obliczenia strat ciepła dla domu 150 m² w Rabce-Zdroju",
    "description": "Zobacz, jak trudne warunki klimatyczne (Strefa V) w Rabce-Zdroju wpływają na kalkulator zapotrzebowania na ogrzewanie, dobór pompy ciepła i rozstaw rur u inwestora Pana Zbigniewa.",
    "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-rabka",
    "name": "Analiza OZC: Case Study 150 m² Rabka Zdrój",
    "description": "Dane z symulacji obciążenia cieplnego dla budynku o pow. 150 m2 zlokalizowanego w V strefie klimatycznej (-24°C). Porównanie izolacji WT2021 ze starym budownictwem.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator strat ciepła Rabka",
      "zapotrzebowanie na ogrzewanie 150m2",
      "dobór pompy ciepła strefa V",
      "rozstaw rur w ogrzewaniu podłogowym",
      "projektowe obciążenie cieplne OZC"
    ],
    "measurementTechnique": "Szacowanie heurystyczne dla V strefy klimatycznej (ΔT = 44K) pokazujące wpływ standardu termicznego na całkowitą moc instalacji hydraulicznej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Nowy dom WT2021: ok. 50 W/m2, Moc PC: 7.5 kW, Rozstaw rur: 15 cm.",
        "Dom po termo: ok. 80 W/m2, Moc PC: 12.0 kW, Rozstaw rur: 10 cm.",
        "Stary dom: ok. 140 W/m2, Moc 21.0 kW. Ogrzewanie podłogowe niewystarczające bez docieplenia."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-rabka",
    "name": "Symulator Case Study - Pan Zbigniew (Rabka-Zdrój)",
    "description": "Interaktywny moduł edukacyjny wizualizujący wpływ wyboru izolacji i okładziny na temperaturę zasilania i kosztorys wykonawczy.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-case-container" id="rk-case-app">
    
    <div class="rk-case-header">
        <div class="rk-case-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"></path><circle cx="12" cy="10" r="3"></circle></svg>
            Case Study: Pan Zbigniew (150 m²)
        </div>
        <h2 class="rk-case-title">Praktyczne Case Study: Obliczenia strat ciepła <span>dla domu w Rabce-Zdroju</span></h2>
        <p class="rk-case-intro">Pan Zbigniew z Rabki-Zdroju (V strefa klimatyczna, projektowa temperatura -24°C) planuje montaż instalacji podłogowej dla 150 m². Zobacz, jak jego decyzje dotyczące izolacji i wyboru posadzki na etapie budowy wpływają na wyniki w kalkulatorze.</p>
    </div>

    <div class="rk-case-interactive">
        <div class="rk-case-grid">
            
            <div class="rk-case-controls">
                
                <div class="rk-case-ctrl-box">
                    <h3 class="rk-case-ctrl-title">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--rk-case-brand)" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg>
                        Standard izolacji budynku
                    </h3>
                    <div class="rk-case-slider-wrap">
                        <input type="range" class="rk-case-range" id="rk-case-iso" min="1" max="3" step="1" value="3" oninput="rkUpdateCase()">
                        <div class="rk-case-labels">
                            <span style="color:var(--rk-case-danger)">Stary (Brak)</span>
                            <span style="color:var(--rk-case-accent)">Po Termo</span>
                            <span style="color:var(--rk-case-success)">WT 2021 (Nowy)</span>
                        </div>
                    </div>
                </div>

                <div class="rk-case-ctrl-box">
                    <h3 class="rk-case-ctrl-title">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--rk-case-brand)" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect></svg>
                        Wybór okładziny posadzki
                    </h3>
                    <div class="rk-case-btn-group">
                        <div class="rk-case-opt-btn active" id="btn-case-tiles" onclick="rkSetCaseFloor('tiles')">Gres / Płytki</div>
                        <div class="rk-case-opt-btn" id="btn-case-panels" onclick="rkSetCaseFloor('panels')">Panele Laminowane</div>
                    </div>
                </div>

            </div>

            <div class="rk-case-results">
                
                <div class="rk-case-visual">
                    <svg class="rk-case-svg" viewBox="0 0 200 100">
                        <polygon points="0,100 40,30 80,100" fill="#1e293b"/>
                        <polygon points="60,100 120,20 180,100" fill="#334155"/>
                        <polygon points="140,100 180,50 220,100" fill="#1e293b"/>
                        <polygon points="40,30 25,55 55,55" fill="#f1f5f9"/>
                        <polygon points="120,20 95,50 145,50" fill="#e2e8f0"/>
                        
                        <rect x="75" y="60" width="50" height="40" fill="#ffffff" stroke="#cbd5e1" stroke-width="2"/>
                        <polygon points="70,60 100,40 130,60" fill="#ef4444" stroke="#dc2626" stroke-width="2"/>
                        <rect x="90" y="75" width="20" height="25" fill="#38bdf8" opacity="0.3" stroke="#0ea5e9" stroke-width="1"/>
                        
                        <rect x="20" y="20" width="10" height="40" rx="5" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1"/>
                        <circle cx="25" cy="60" r="8" fill="#38bdf8"/>
                        <rect x="23" y="45" width="4" height="15" fill="#38bdf8"/>
                        <text x="38" y="64" fill="#f0f9ff" font-size="12" font-weight="bold">-24°C</text>
                    </svg>
                </div>

                <div class="rk-case-data-grid">
                    <div class="rk-case-card highlight">
                        <span class="rk-case-card-label">Zapotrzebowanie pokoju</span>
                        <span class="rk-case-card-val"><span id="val-case-wm2">50</span> <span style="font-size:14px">W/m²</span></span>
                    </div>
                    <div class="rk-case-card">
                        <span class="rk-case-card-label">Rozstaw rur PEX</span>
                        <span class="rk-case-card-val"><span id="val-case-spacing" style="color:var(--rk-case-brand)">co 15 cm</span></span>
                    </div>
                    <div class="rk-case-card">
                        <span class="rk-case-card-label">Moc Pompy Ciepła</span>
                        <span class="rk-case-card-val"><span id="val-case-kw">7.5</span> <span style="font-size:14px; color:var(--rk-case-muted)">kW</span></span>
                    </div>
                    <div class="rk-case-card">
                        <span class="rk-case-card-label">Temp. Zasilania (Tz)</span>
                        <span class="rk-case-card-val"><span id="val-case-tz" style="color:var(--rk-case-accent)">32°C</span></span>
                    </div>
                </div>

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

    <div class="rk-case-content">
        
        <div class="rk-case-text-box">
            <h3>Wnioski z obliczeń strat ciepła dla lokalizacji górskiej</h3>
            <p>Rabka-Zdrój, z uwagi na przynależność do V strefy klimatycznej (projektowa temperatura -24°C), nakłada na inwestora znacznie surowsze wymogi fizyczne niż centralna Polska. Gdyby Pan Zbigniew użył taniego kalkulatora online ustawionego domyślnie na strefę III (-20°C), jego <strong>projektowe obciążenie cieplne (OZC)</strong> zostałoby niedoszacowane o ponad 10-15%. W praktyce oznaczałoby to wybór zbyt słabej pompy ciepła, która nie dałaby rady ogrzać domu 150 m² podczas siarczystych, styczniowych mrozów.</p>
        </div>

        <div class="rk-case-text-box" style="margin-bottom:0; border-color:var(--rk-case-brand);">
            <h3>Wpływ posadzki i rozstawu na portfel</h3>
            <p>Zwróć uwagę, co się dzieje, gdy Pan Zbigniew (przy bardzo dobrej izolacji WT2021) postanawia zmienić gres na panele laminowane. Ze względu na opór cieplny paneli, woda wychodząca z kotłowni musi być podgrzana o kilka stopni wyżej (Tz rośnie), aby przebić się przez warstwę izolatora. To wymusza gęstszy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-case-link">rozstaw rur w ogrzewaniu podłogowym</a> (z 15 cm robi się 10 cm), co podnosi koszty zakupu materiału hydraulicznego na całe 150 m².</p>
            <p>Jeżeli dom byłby stary, bez termomodernizacji, instalacja podłogowa w tym chłodnym regionie w ogóle by sobie nie poradziła – podłoga musiałaby zostać rozgrzana do niekomfortowych 35°C, a i tak potrzebne byłoby wsparcie przez <strong>kocioł gazowy</strong> lub dodatkowe grzejniki ścienne.</p>
        </div>

    </div>
</div>

<script>
let caseFloorType = 'tiles';

function rkSetCaseFloor(type) {
    caseFloorType = type;
    document.getElementById('btn-case-tiles').classList.remove('active');
    document.getElementById('btn-case-panels').classList.remove('active');
    document.getElementById('btn-case-' + type).classList.add('active');
    rkUpdateCase();
}

function rkUpdateCase() {
    const isoLevel = parseInt(document.getElementById('rk-case-iso').value);
    
    // Dane dla 150m2 w Rabce (-24st)
    let wm2, totalKw, spacing, baseTz;

    if(isoLevel === 1) {
        // Stary dom
        wm2 = 140;
        totalKw = 21.0;
        spacing = "Brak moliwości";
        baseTz = 55;
    } else if(isoLevel === 2) {
        // Po termo
        wm2 = 80;
        totalKw = 12.0;
        spacing = "co 10 cm";
        baseTz = 38;
    } else {
        // Nowy dom WT2021
        wm2 = 50;
        totalKw = 7.5;
        spacing = "co 15 cm";
        baseTz = 32;
    }

    // Korekta dla paneli
    if(caseFloorType === 'panels') {
        baseTz += 4;
        if(isoLevel === 3) spacing = "co 10 cm"; // panele wymuszają gęstszy rurę
    }

    // Zabezpieczenie wizualne przy braku możliwości
    if(isoLevel === 1) {
        document.getElementById('val-case-wm2').innerHTML = wm2 + " <span style='font-size:14px; color:#ef4444'>(Krytyczne)</span>";
        document.getElementById('val-case-spacing').innerText = "Wymagane grzejniki";
        document.getElementById('val-case-spacing').style.color = "#ef4444";
        document.getElementById('val-case-tz').innerText = ">50°C";
    } else {
        document.getElementById('val-case-wm2').innerText = wm2;
        document.getElementById('val-case-spacing').innerText = spacing;
        document.getElementById('val-case-spacing').style.color = "var(--rk-case-brand)";
        document.getElementById('val-case-tz').innerText = baseTz + "°C";
    }
    
    document.getElementById('val-case-kw').innerText = totalKw;
}

// Inicjalizacja
document.addEventListener('DOMContentLoaded', rkUpdateCase);
</script>



<style>
:root {
    --rk-hl-dark: #0f172a;
    --rk-hl-panel: #1e293b;
    --rk-hl-brand: #f97316; /* Energetyczny pomarańcz (Ciepło) */
    --rk-hl-brand-light: #ffedd5;
    --rk-hl-blue: #0ea5e9;  /* Chłodny niebieski (Zimno/Wentylacja) */
    --rk-hl-green: #10b981; /* Zielony (Optymalizacja/Sukces) */
    --rk-hl-bg: #ffffff;
    --rk-hl-border: #e2e8f0;
    --rk-hl-text: #334155;
    --rk-hl-muted: #64748b;
}

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

/* Sekcja Cytatu Eksperckiego - Zoptymalizowana */
.rk-hl-quote-section {
    background: linear-gradient(145deg, var(--rk-hl-dark) 0%, #020617 100%);
    padding: 50px;
    position: relative;
    color: #ffffff;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    border-bottom: 5px solid var(--rk-hl-brand);
    overflow: hidden;
}

.rk-hl-quote-section::before {
    content: '"';
    position: absolute;
    top: -20px;
    left: 40px;
    font-size: 180px;
    font-family: serif;
    color: rgba(249, 115, 22, 0.1);
    line-height: 1;
    z-index: 0;
}

.rk-hl-quote-text {
    font-size: 24px;
    font-weight: 900;
    line-height: 1.5;
    margin: 0 0 25px 0;
    position: relative;
    z-index: 1;
    max-width: 850px;
}

.rk-hl-quote-text span {
    color: var(--rk-hl-brand);
}

.rk-hl-author-bar {
    display: flex;
    align-items: center;
    gap: 15px;
    position: relative;
    z-index: 1;
    background: rgba(255,255,255,0.05);
    padding: 10px 25px;
    border-radius: 99px;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-hl-avatar {
    width: 50px;
    height: 50px;
    border-radius: 50%;
    border: 2px solid var(--rk-hl-brand);
    object-fit: cover;
}

.rk-hl-author-info h3 {
    margin: 0;
    font-size: 16px;
    font-weight: 800;
    color: #ffffff;
}

.rk-hl-author-info p {
    margin: 0;
    font-size: 12px;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 1px;
    font-weight: 700;
}

/* Interaktywny Moduł */
.rk-hl-interactive {
    padding: 40px;
    background: #f8fafc;
}

.rk-hl-interactive-title {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-hl-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

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

/* Przyciski (Tabs) + Karta Długiego Ogona */
.rk-hl-tabs {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rk-hl-tab-btn {
    background: #f8fafc;
    border: 1px solid var(--rk-hl-border);
    padding: 18px 20px;
    border-radius: 14px;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    gap: 15px;
    position: relative;
    overflow: hidden;
}

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

.rk-hl-tab-btn.active {
    background: var(--rk-hl-brand);
    border-color: var(--rk-hl-brand);
    color: #ffffff;
    box-shadow: 0 10px 20px -5px rgba(249, 115, 22, 0.4);
    transform: scale(1.02);
}

.rk-hl-tab-icon {
    width: 38px;
    height: 38px;
    background: #ffffff;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-hl-brand);
    flex-shrink: 0;
    transition: 0.3s;
    box-shadow: 0 2px 5px rgba(0,0,0,0.05);
}

.rk-hl-tab-btn.active .rk-hl-tab-icon {
    color: var(--rk-hl-brand);
}

.rk-hl-tab-text {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-hl-dark);
    transition: color 0.3s;
}

.rk-hl-tab-btn.active .rk-hl-tab-text {
    color: #ffffff;
}

/* Karta CTA (Długi Ogon - Wypełnienie Pustego Miejsca) */
.rk-hl-cta-card {
    background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
    border-radius: 14px;
    padding: 16px 20px;
    text-decoration: none;
    display: flex;
    flex-direction: column;
    justify-content: center;
    margin-top: 10px;
    position: relative;
    overflow: hidden;
    transition: transform 0.3s, box-shadow 0.3s;
    border: 1px solid #334155;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}

.rk-hl-cta-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 8px 25px rgba(15, 23, 42, 0.4);
    border-color: var(--rk-hl-brand);
}

.cta-badge {
    font-size: 10px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 800;
    letter-spacing: 1px;
    margin-bottom: 5px;
    display: flex;
    align-items: center;
    gap: 5px;
}

.cta-badge::before {
    content: '';
    display: inline-block;
    width: 6px;
    height: 6px;
    background: var(--rk-hl-brand);
    border-radius: 50%;
}

.cta-title {
    font-size: 14px;
    color: #ffffff;
    font-weight: 700;
    line-height: 1.4;
    padding-right: 25px;
}

.cta-arrow {
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--rk-hl-brand);
    font-size: 18px;
    font-weight: bold;
    transition: right 0.3s;
}

.rk-hl-cta-card:hover .cta-arrow {
    right: 15px;
}

/* Panele z Treścią */
.rk-hl-panels-container {
    position: relative;
    border-radius: 16px;
    background: #f8fafc;
    border: 1px solid var(--rk-hl-border);
    overflow: hidden;
}

.rk-hl-panel {
    display: none;
    padding: 35px;
    animation: slideFadeIn 0.4s ease-out forwards;
}

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

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

.rk-hl-panel h4 {
    margin: 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-hl-dark);
    display: flex;
    align-items: center;
    gap: 10px;
}

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

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

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

/* Kontenery SVG */
.rk-hl-svg-box {
    width: 100%;
    height: 180px;
    background: var(--rk-hl-dark);
    border-radius: 12px;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 30px rgba(0,0,0,0.6);
    border: 3px solid #334155;
    overflow: hidden;
}

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

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

.rk-hl-author-photo {
    width: 75px;
    height: 75px;
    border-radius: 50%;
    border: 3px solid var(--rk-hl-brand);
    box-shadow: 0 4px 15px rgba(249, 115, 22, 0.2);
    object-fit: cover;
    flex-shrink: 0;
}

.rk-hl-author-desc {
    flex-grow: 1;
}

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

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

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

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

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

/* Animacje SVG */

/* Tab 1: Przenikanie */
.anim-heat-escape { opacity: 0; }
.rk-hl-panel.active .anim-heat-escape { animation: heatEscape 2s ease-out infinite; }
.rk-hl-panel.active .d-1 { animation-delay: 0s; }
.rk-hl-panel.active .d-2 { animation-delay: 0.5s; }
.rk-hl-panel.active .d-3 { animation-delay: 1s; }

@keyframes heatEscape {
    0% { transform: translate(0, 0); opacity: 1; stroke: #f97316; }
    100% { transform: translate(var(--tx), var(--ty)); opacity: 0; stroke: #ef4444; }
}

/* Tab 2: Wentylacja */
.anim-fan-spin { transform-origin: center; }
.rk-hl-panel.active .anim-fan-spin { animation: fanSpin 3s linear infinite; }
@keyframes fanSpin { to { transform: rotate(360deg); } }

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

/* Tab 3: Mostki termiczne */
.anim-thermal-bridge { fill: transparent; transition: fill 0.5s; }
.rk-hl-panel.active .anim-thermal-bridge { animation: pulseRed 1.5s infinite alternate; }
@keyframes pulseRed {
    0% { fill: rgba(239, 68, 68, 0.2); stroke: rgba(239, 68, 68, 0.5); }
    100% { fill: rgba(239, 68, 68, 0.8); stroke: rgba(239, 68, 68, 1); box-shadow: 0 0 10px red; }
}

/* Tab 4: Wynik */
.anim-power-bar { transform: scaleY(0); transform-origin: bottom; transition: transform 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) 0.3s; }
.rk-hl-panel.active .anim-power-bar { transform: scaleY(1); }

@media (max-width: 768px) {
    .rk-hl-quote-section { padding: 40px 20px; }
    .rk-hl-quote-text { font-size: 20px; }
    .rk-hl-interactive { padding: 30px 20px; }
    .rk-hl-grid { grid-template-columns: 1fr; gap: 20px; padding: 10px; }
    .rk-hl-tabs { flex-direction: row; flex-wrap: wrap; }
    .rk-hl-tab-btn { flex: 1 1 calc(50% - 5px); padding: 12px; flex-direction: column; text-align: center; gap: 8px; }
    .rk-hl-cta-card { flex: 1 1 100%; margin-top: 5px; }
    .rk-hl-tab-text { font-size: 13px; }
    .rk-hl-panel { padding: 25px 20px; }
    .rk-hl-svg-box { height: 150px; }
    
    /* Responsive dla stopki z autorem */
    .rk-hl-author-footer { flex-direction: column; text-align: center; padding: 30px 20px; align-items: center; }
    .rk-hl-social-links { justify-content: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-quote-summary",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Eksperckie Podsumowanie - Składowe Bilansu Cieplnego Budynku",
    "description": "Brak rzetelnych obliczeń strat ciepła to najdroższy błąd inwestora. Poznaj 4 główne składowe zapotrzebowania energetycznego warunkujące dobór pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "jobTitle": "Inżynier HVAC & Audytor OZE",
      "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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-heat-loss",
    "name": "Parametry Bilansu Cieplnego Budynku (PN-EN 12831)",
    "description": "Analiza składowych strat ciepła: przenikanie przez przegrody (U), straty wentylacyjne, wpływ mostków cieplnych oraz optymalizacja mocy grzewczej podłogówki.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "straty ciepła przez przenikanie",
      "straty wentylacyjne z rekuperacją",
      "obliczenia mostków termicznych",
      "zapotrzebowanie mocy pompy ciepła",
      "wylewka i panele a moc podłogówki"
    ],
    "measurementTechnique": "Algorytm zgodny z normą PN-EN 12831 wyliczający sumaryczne obciążenie cieplne na podstawie izolacyjności przegród, krotności wymiany powietrza oraz oporu cieplnego posadzki.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Przenikanie (Qtr): Główna ucieczka energii przez ściany i okna. Decyduje o nim współczynnik U.",
        "Wentylacja (Qv): Straty powietrzne. Wentylacja grawitacyjna to nawet 40% strat, rekuperacja obniża je diametralnie.",
        "Mostki cieplne: Nieszczelności izolacji, standardowo dolicza się 10-15% nawiązki do zapotrzebowania bazowego.",
        "Moc końcowa: Wyznacza precyzyjny dobór mocy nominalnej pompy ciepła, zapobiegając taktowaniu."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-heat-loss-guide",
    "name": "Interaktywny Przewodnik: Składowe Strat Ciepła",
    "description": "Narzędzie nawigacyjne rozbijające trudne wzory matematyczne OZC na 4 zrozumiałe czynniki decyzyjne z wykorzystaniem dynamicznych schematów SVG oraz linkowań optymalizacyjnych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-hl-container" id="rk-hl-app">
    
    <div class="rk-hl-quote-section">
        <h2 class="rk-hl-quote-text">
            Brak rzetelnych obliczeń OZC to <span>najdroższy błąd</span> inwestora. Zgadywanie rozstawu rur, bagatelizowanie izolacji czy oporu paneli podłogowych zmusza pompę ciepła do pracy na nieefektywnych parametrach. <span>Matematyka budynku nigdy nie wybacza szacowania „na oko”.</span>
        </h2>
        <div class="rk-hl-author-bar">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-hl-avatar" loading="lazy">
            <div class="rk-hl-author-info">
                <h3>Robert Kucharski</h3>
                <p>Inżynier HVAC & Audytor OZE</p>
            </div>
        </div>
    </div>

    <div class="rk-hl-interactive">
        <h3 class="rk-hl-interactive-title">Anatomia Bilansu Cieplnego (4 Składowe)</h3>
        
        <div class="rk-hl-grid">
            
            <div class="rk-hl-tabs">
                
                <button class="rk-hl-tab-btn active" data-tab="hl-1">
                    <div class="rk-hl-tab-icon">
                        <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
                    </div>
                    <span class="rk-hl-tab-text">1. Przenikanie (Ściany/Okna)</span>
                </button>

                <button class="rk-hl-tab-btn" data-tab="hl-2">
                    <div class="rk-hl-tab-icon">
                        <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2"></path></svg>
                    </div>
                    <span class="rk-hl-tab-text">2. Straty Wentylacyjne</span>
                </button>

                <button class="rk-hl-tab-btn" data-tab="hl-3">
                    <div class="rk-hl-tab-icon">
                        <svg width="22" height="22" 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><circle cx="12" cy="13" r="2"></circle><line x1="12" y1="15" x2="12" y2="18"></line></svg>
                    </div>
                    <span class="rk-hl-tab-text">3. Mostki Cieplne (+10%)</span>
                </button>

                <button class="rk-hl-tab-btn" data-tab="hl-4">
                    <div class="rk-hl-tab-icon">
                        <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
                    </div>
                    <span class="rk-hl-tab-text">4. Wynik i Dobór Mocy</span>
                </button>

                <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/" class="rk-hl-cta-card">
                    <div class="cta-badge">Analiza OZC a okładzina</div>
                    <div class="cta-title">Panele czy Płytki? Opór cieplny a efektywność podłogówki</div>
                    <div class="cta-arrow">➔</div>
                </a>

            </div>

            <div class="rk-hl-panels-container">
                
                <div class="rk-hl-panel active" id="hl-1">
                    <h4>
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--rk-hl-brand)" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
                        Straty przez przenikanie (U)
                    </h4>
                    <p>Wartość bazowa wyliczana ze wzoru (A × U × ΔT). Kluczowe znaczenie ma jakość izolacji (<a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" class="rk-hl-link">zgodnie z PN-EN 12831</a>) oraz prawidłowe przyjęcie strefy klimatycznej. Błąd w grubości styropianu drastycznie podnosi ucieczkę energii w zimowe noce.</p>
                    <div class="rk-hl-svg-box">
                        <svg class="rk-svg-content" viewBox="0 0 200 100">
                            <path d="M80 70 V 40 L100 25 L120 40 V 70 Z" fill="none" stroke="#64748b" stroke-width="3" stroke-linejoin="round"/>
                            <rect x="92" y="55" width="16" height="15" fill="none" stroke="#64748b" stroke-width="2"/>
                            <g style="--tx: -30px; --ty: -10px;" class="anim-heat-escape d-1">
                                <path d="M70 45 L50 40" stroke-width="3" stroke-linecap="round"/>
                                <polyline points="55 35 50 40 55 45" stroke-width="3" fill="none" stroke-linejoin="round"/>
                            </g>
                            <g style="--tx: 30px; --ty: -10px;" class="anim-heat-escape d-2">
                                <path d="M130 45 L150 40" stroke-width="3" stroke-linecap="round"/>
                                <polyline points="145 35 150 40 145 45" stroke-width="3" fill="none" stroke-linejoin="round"/>
                            </g>
                            <g style="--tx: 0px; --ty: -30px;" class="anim-heat-escape d-3">
                                <path d="M100 20 L100 0" stroke-width="3" stroke-linecap="round"/>
                                <polyline points="95 5 100 0 105 5" stroke-width="3" fill="none" stroke-linejoin="round"/>
                            </g>
                        </svg>
                    </div>
                </div>

                <div class="rk-hl-panel" id="hl-2">
                    <h4>
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--rk-hl-blue)" 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>
                        Grawitacja vs Rekuperacja
                    </h4>
                    <p>W tradycyjnym domu wentylacja grawitacyjna wyrzuca w powietrze aż 40% wyprodukowanego ciepła! Zastosowanie odzysku ciepła (<a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-hl-link">rekuperacji</a>) redukuje to zapotrzebowanie drastycznie, pozwalając na montaż mniejszej pompy obiegowej.</p>
                    <div class="rk-hl-svg-box">
                        <svg class="rk-svg-content" viewBox="0 0 200 100">
                            <rect x="75" y="30" width="50" height="40" rx="4" fill="none" stroke="#94a3b8" stroke-width="3"/>
                            <line x1="75" y1="50" x2="125" y2="50" stroke="#94a3b8" stroke-width="2" stroke-dasharray="4 4"/>
                            <line x1="100" y1="30" x2="100" y2="70" stroke="#94a3b8" stroke-width="2" stroke-dasharray="4 4"/>
                            <path class="anim-air-flow" d="M 30 40 L 70 40" stroke="#0ea5e9" stroke-width="4" stroke-linecap="round"/>
                            <polyline points="65 35 70 40 65 45" fill="none" stroke="#0ea5e9" stroke-width="4" stroke-linejoin="round"/>
                            <path class="anim-air-flow" d="M 125 40 L 165 40" stroke="#f97316" stroke-width="4" stroke-linecap="round"/>
                            <polyline points="160 35 165 40 160 45" fill="none" stroke="#f97316" stroke-width="4" stroke-linejoin="round"/>
                            <g class="anim-fan-spin" style="transform-origin: 100px 50px;">
                                <circle cx="100" cy="50" r="12" fill="none" stroke="#64748b" stroke-width="2"/>
                                <line x1="100" y1="38" x2="100" y2="62" stroke="#64748b" stroke-width="2"/>
                                <line x1="88" y1="50" x2="112" y2="50" stroke="#64748b" stroke-width="2"/>
                            </g>
                        </svg>
                    </div>
                </div>

                <div class="rk-hl-panel" id="hl-3">
                    <h4>
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2.5"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
                        Pułapka Mostków Termicznych
                    </h4>
                    <p>Żaden dom nie jest idealnym termosem. Brak izolacji na wieńcach, niedokładne ocieplenie podłogi na gruncie i nadproża okienne wymagają doliczenia od 10% do 15% narzutu w obliczeniach inżynierskich. Ich ignorowanie kończy się niedogrzaniem pokoi.</p>
                    <div class="rk-hl-svg-box">
                        <svg class="rk-svg-content" viewBox="0 0 200 100">
                            <path d="M 50 80 L 150 80 L 150 20" fill="none" stroke="#64748b" stroke-width="15" stroke-linecap="square"/>
                            <path d="M 50 65 L 135 65 L 135 20" fill="none" stroke="#334155" stroke-width="15" stroke-linecap="square"/>
                            <circle class="anim-thermal-bridge" cx="142" cy="72" r="15" stroke-width="3"/>
                            <path d="M 120 90 L 140 75" fill="none" stroke="#ef4444" stroke-width="2" stroke-dasharray="3 3"/>
                        </svg>
                    </div>
                </div>

                <div class="rk-hl-panel" id="hl-4">
                    <h4>
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--rk-hl-green)" 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>
                        Wynik: Niska Temperatura Zasilania
                    </h4>
                    <p>Zsumowanie wszystkich wartości daje ostateczny wskaźnik mocy (np. 6,5 kW). Prawidłowy bilans budynku jest <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" class="rk-hl-link">fundamentem komfortu termicznego</a> i pozwala obniżyć <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/" class="rk-hl-link">temperaturę zasilania na kotłowni do optymalnych 35°C</a>.</p>
                    <div class="rk-hl-svg-box">
                        <svg class="rk-svg-content" viewBox="0 0 200 100">
                            <line x1="40" y1="80" x2="160" y2="80" stroke="#94a3b8" stroke-width="2"/>
                            <line x1="40" y1="80" x2="40" y2="20" stroke="#94a3b8" stroke-width="2"/>
                            <line x1="35" y1="40" x2="160" y2="40" stroke="#10b981" stroke-width="2" stroke-dasharray="5 5"/>
                            <text x="165" y="44" fill="#10b981" font-size="12" font-weight="bold">MAX 35°C</text>
                            <rect class="anim-power-bar" x="60" y="50" width="20" height="30" fill="#3b82f6" rx="2" style="transition-delay: 0.1s;"/>
                            <rect class="anim-power-bar" x="90" y="45" width="20" height="35" fill="#f59e0b" rx="2" style="transition-delay: 0.3s;"/>
                            <rect class="anim-power-bar" x="120" y="40" width="20" height="40" fill="#10b981" rx="2" style="transition-delay: 0.5s;"/>
                        </svg>
                    </div>
                </div>

            </div>
        </div>
    </div>
    
    <div class="rk-hl-author-footer">
        <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-hl-author-photo" loading="lazy">
        <div class="rk-hl-author-desc">
            <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 na co dzień kształtuje decyzje tysięcy inwestorów i wykonawców w Polsce.</p>
            <div class="rk-hl-social-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() {
    const tabs = document.querySelectorAll('.rk-hl-tab-btn');
    const panels = document.querySelectorAll('.rk-hl-panel');

    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            // Czyszczenie klas aktywnych
            tabs.forEach(t => t.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            // Ustawienie aktualnego elementu
            tab.classList.add('active');
            const targetId = tab.getAttribute('data-tab');
            const targetPanel = document.getElementById(targetId);
            
            if(targetPanel) {
                // Restart animacji CSS dla wykresów SVG
                void targetPanel.offsetWidth;
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --rk-qa-dark: #0f172a;
    --rk-qa-card: #ffffff;
    --rk-qa-emerald: #059669; /* Ekspercki Szmaragd */
    --rk-qa-emerald-light: #d1fae5;
    --rk-qa-accent: #0284c7; /* Cyjan dla przełamania */
    --rk-qa-bg: #f8fafc;
    --rk-qa-border: #cbd5e1;
    --rk-qa-text: #334155;
}

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

/* Nagłówek */
.rk-qa-header {
    background: linear-gradient(135deg, var(--rk-qa-dark) 0%, #1e293b 100%);
    padding: 40px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 5px solid var(--rk-qa-emerald);
}

.rk-qa-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(5, 150, 105, 0.2);
    color: #6ee7b7;
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(110, 231, 183, 0.2);
}

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

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

/* Akordeon */
.rk-qa-interactive {
    padding: 40px 50px;
}

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

.rk-qa-item {
    background: var(--rk-qa-card);
    border: 1px solid var(--rk-qa-border);
    border-radius: 16px;
    overflow: hidden;
    transition: all 0.3s ease;
}

.rk-qa-item.active {
    border-color: var(--rk-qa-emerald);
    box-shadow: 0 10px 20px -5px rgba(5, 150, 105, 0.1);
}

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

.rk-qa-question:hover {
    background: #f1f5f9;
}

.rk-qa-item.active .rk-qa-question {
    background: var(--rk-qa-emerald-light);
    color: #064e3b;
}

.rk-qa-icon {
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    border-radius: 10px;
    background: #e2e8f0;
    color: var(--rk-qa-dark);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), background 0.3s, color 0.3s;
}

.rk-qa-item.active .rk-qa-icon {
    background: var(--rk-qa-emerald);
    color: #ffffff;
    transform: rotate(135deg);
}

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

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

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

.rk-qa-content {
    padding: 30px;
    border-top: 1px solid var(--rk-qa-border);
    display: grid;
    grid-template-columns: 1fr 220px;
    gap: 35px;
    align-items: center;
}

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

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

.rk-link {
    color: var(--rk-qa-accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid transparent;
    transition: all 0.3s;
}

.rk-link:hover {
    border-bottom-color: var(--rk-qa-accent);
}

/* Wizualizacje SVG */
.rk-qa-visual {
    background: #f8fafc;
    border-radius: 16px;
    padding: 15px;
    height: 150px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 2px dashed var(--rk-qa-border);
    position: relative;
}

.rk-qa-item.active .rk-qa-visual {
    border-color: var(--rk-qa-emerald);
    background: #ffffff;
}

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

/* Animacje SVG */
/* 1. OZC vs Kalkulator */
.anim-scan { stroke-dasharray: 150; stroke-dashoffset: 150; transition: stroke-dashoffset 1s ease-in-out; }
.rk-qa-item.active .anim-scan { stroke-dashoffset: 0; stroke: var(--rk-qa-emerald); }

/* 2. PEX Length */
.anim-grid-line { stroke-dasharray: 50; stroke-dashoffset: 50; }
.rk-qa-item.active .anim-grid-line { animation: drawGrid 1.5s forwards; stroke: var(--rk-qa-accent); }
@keyframes drawGrid { to { stroke-dashoffset: 0; } }

/* 3. Thermometer */
.anim-mercury { transform: scaleY(0.4); transform-origin: bottom; transition: transform 1s cubic-bezier(0.34, 1.56, 0.64, 1); fill: #ef4444; }
.rk-qa-item.active .anim-mercury { transform: scaleY(0.7); }

/* 4. Density */
.anim-dense-pipe { transition: transform 0.5s ease-out; }
.rk-qa-item.active .pipe-l { transform: translateX(5px); }
.rk-qa-item.active .pipe-r { transform: translateX(-5px); stroke: #ef4444; }

/* 5. Screed */
.anim-screed-layer { opacity: 0.3; transition: opacity 1s, fill 1s; }
.rk-qa-item.active .anim-screed-layer { opacity: 1; fill: #d1fae5; }

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "FAQ – Eksperckie odpowiedzi o straty ciepła i parametry podłogówki",
    "description": "Najczęstsze pytania inwestorów dotyczące OZC, rozstawu rur PEX, temperatur zasilania oraz wpływu wylewki na działanie kalkulatora strat 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-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-faq",
    "name": "Zestawienie normatywne: Zapotrzebowanie cieplne a parametry podłogówki",
    "description": "Techniczne dane referencyjne wiążące zapotrzebowanie budynku na moc (W/m2) z ilością rury, temperaturą maksymalną zasilania oraz wymaganiami OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator strat ciepła online",
      "zapotrzebowanie W/m2",
      "zużycie rury PEX na m2",
      "maksymalna temperatura podłogówki",
      "wylewka anhydrytowa a moc"
    ],
    "measurementTechnique": "Obliczenia analityczne i heurystyczne oparte na wytycznych normy PN-EN 12831 oraz PN-EN 1264, porównujące wyniki z kalkulatorów internetowych z profesjonalnym OZC.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rozstaw 15 cm wymaga 6,7 mb rury PEX na 1 m2.",
        "Rozstaw 10 cm wymaga 10 mb rury PEX na 1 m2.",
        "Maksymalna temperatura zasilania podłogówki wg normy to 50 stopni Celsjusza.",
        "Graniczne zapotrzebowanie cieplne dla samej podłogówki to ok. 100 W/m2."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-faq",
    "name": "Interaktywne FAQ - Parametry Projektowe Ogrzewania",
    "description": "Interaktywny moduł edukacyjny prezentujący zagadnienia hydrauliczne i cieplne przy użyciu animacji wektorowych i technicznych zestawień danych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy darmowy kalkulator strat ciepła online może zastąpić oficjalne OZC?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, darmowy kalkulator służy wyłącznie do wstępnej weryfikacji koncepcji i oszacowania kosztów. Oficjalne Obliczeniowe Zapotrzebowanie na Ciepło (OZC) wykonane przez inżyniera jest dokumentem prawnym wymaganym przy wnioskach o dotacje z programu „Czyste Powietrze” oraz przy precyzyjnym doborze pompy ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Ile rury PEX potrzeba na 1 m² ogrzewania podłogowego?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Ilość rury zależy ściśle od jej rozstawu wynikającego z obliczeń strat ciepła. Przy rozstawie co 15 cm zużycie wynosi średnio 6,7 metra bieżącego na m², natomiast przy zagęszczeniu co 10 cm (np. w łazienkach lub strefach brzegowych) wzrasta do 10 metrów bieżących na m²."
        }
      },
      {
        "@type": "Question",
        "name": "Jaka jest maksymalna temperatura zasilania dla ogrzewania podłogowego?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Maksymalna dopuszczalna temperatura zasilania wodą grzewczą wynosi 50°C według normy PN-EN 1264. W optymalnie zaprojektowanych systemach dla domów energooszczędnych temperatura ta nie przekracza jednak 35°C w najzimniejszy dzień roku."
        }
      },
      {
        "@type": "Question",
        "name": "Czy przy wysokim zapotrzebowaniu na ciepło (>100 W/m²) można w nieskończoność zagęszczać rury?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie. Zagęszczanie rur ma swoje fizyczne i hydrauliczne granice. Zejście poniżej rozstawu 10 cm na całej powierzchni generuje ogromne opory, których nie pokona standardowa pompa obiegowa. Przy stratach rzędu 100 W/m² konieczna jest termomodernizacja lub wsparcie instalacji tradycyjnymi grzejnikami ściennymi."
        }
      },
      {
        "@type": "Question",
        "name": "Jak rodzaj wylewki wpływa na skuteczność wyników z kalkulatora?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Wybór wylewki drastycznie zmienia parametry pracy. Wylewka anhydrytowa ma niemal dwukrotnie wyższy współczynnik przewodzenia ciepła niż beton z miksokreta. Pozwala to na znacznie szybsze przekazywanie energii do pomieszczenia i utrzymanie niższej, bardziej oszczędnej temperatury zasilania na źródle ciepła."
        }
      }
    ]
  }
]
</script>

<div class="rk-qa-container" id="rk-qa-app">
    <div class="rk-qa-header">
        <div class="rk-qa-badge">
            <svg width="18" height="18" 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>
            Inżynierskie Q&A
        </div>
        <h2 class="rk-qa-title">FAQ – <span>Najczęściej zadawane pytania</span></h2>
    </div>

    <div class="rk-qa-interactive">
        <div class="rk-qa-list">
            
            <div class="rk-qa-item">
                <button class="rk-qa-question">
                    <span>1. Czy darmowy kalkulator strat ciepła online może zastąpić oficjalne OZC?</span>
                    <div class="rk-qa-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                Nie, darmowy kalkulator służy wyłącznie do <strong>wstępnej weryfikacji koncepcji</strong> i oszacowania kosztów. Oficjalne <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-link">Obliczeniowe Zapotrzebowanie na Ciepło (OZC)</a> wykonane przez wykwalifikowanego inżyniera jest szczegółowym dokumentem prawnym. Jest on bezwzględnie wymagany przy wnioskach o dotacje z programu „Czyste Powietrze” oraz stanowi jedyną bezpieczną podstawę przy precyzyjnym doborze mocy pompy ciepła.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="20" y="10" width="60" height="50" rx="4" fill="none" stroke="#94a3b8" stroke-width="3"/>
                                    <path d="M30 25 h30 M30 35 h40 M30 45 h20" stroke="#cbd5e1" stroke-width="3" stroke-linecap="round"/>
                                    <path class="anim-scan" d="M10 35 h80" stroke-width="4" stroke-linecap="round"/>
                                    <circle cx="70" cy="45" r="8" fill="#10b981"/>
                                    <path d="M66 45 l3 3 l5 -5" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-qa-item">
                <button class="rk-qa-question">
                    <span>2. Ile rury PEX potrzeba na 1 m² ogrzewania podłogowego?</span>
                    <div class="rk-qa-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                Ilość rury zależy ściśle od jej rozstawu wynikającego z obliczeń strat ciepła. Przy najpopularniejszym rozstawie <strong>co 15 cm</strong> zużycie wynosi średnio <strong>6,7 metra bieżącego na m²</strong>. Z kolei przy zagęszczeniu <strong>co 10 cm</strong> (stosowanym np. w łazienkach, strefach brzegowych lub pod pompy ciepła) wzrasta do <strong>10 mb na m²</strong>. W precyzyjnym wyliczeniu materiału na cały dom pomoże Ci dedykowany <a href="https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/" class="rk-link">kalkulator długości rur</a>.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <path class="anim-grid-line" d="M20 20 h60 M20 35 h60 M20 50 h60" fill="none" stroke-width="3" stroke-linecap="round" style="animation-delay: 0.1s;"/>
                                    <path class="anim-grid-line" d="M30 10 v50 M50 10 v50 M70 10 v50" fill="none" stroke-width="3" stroke-linecap="round" style="animation-delay: 0.4s;"/>
                                    <circle cx="50" cy="35" r="15" fill="none" stroke="var(--rk-qa-emerald)" stroke-width="4" stroke-dasharray="10 5"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-qa-item">
                <button class="rk-qa-question">
                    <span>3. Jaka jest maksymalna temperatura zasilania dla ogrzewania podłogowego?</span>
                    <div class="rk-qa-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                Maksymalna, bezpieczna dla jastrychu i instalacji temperatura zasilania wodą grzewczą wynosi <strong>50°C</strong> – wartość tę ściśle reguluje norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/" class="rk-link">PN-EN 1264</a>. Warto jednak pamiętać, że w nowym budownictwie o dobrym standardzie izolacji, optymalnie zaprojektowany system rzadko przekracza <strong>32–35°C</strong> w najzimniejsze dni w roku, co gwarantuje najwyższy komfort i energooszczędność.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="40" y="10" width="20" height="40" rx="10" fill="none" stroke="#94a3b8" stroke-width="3"/>
                                    <circle cx="50" cy="50" r="12" fill="none" stroke="#94a3b8" stroke-width="3"/>
                                    <rect class="anim-mercury" x="44" y="20" width="12" height="30" rx="6"/>
                                    <circle cx="50" cy="50" r="8" fill="#ef4444"/>
                                    <line x1="65" y1="20" x2="75" y2="20" stroke="#ef4444" stroke-width="2"/>
                                    <text x="80" y="24" font-size="12" fill="#ef4444" font-weight="bold">50°</text>
                                    <line x1="65" y1="35" x2="70" y2="35" stroke="#10b981" stroke-width="2"/>
                                    <text x="75" y="39" font-size="12" fill="#10b981" font-weight="bold">35°</text>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-qa-item">
                <button class="rk-qa-question">
                    <span>4. Czy przy wysokim zapotrzebowaniu na ciepło (>100 W/m²) można w nieskończoność zagęszczać rury?</span>
                    <div class="rk-qa-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                Zdecydowanie <strong>nie</strong>. <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-link">Rozstaw rur w ogrzewaniu podłogowym</a> ma swoje fizyczne i hydrauliczne ograniczenia. Zejście poniżej rozstawu 10 cm na dużej powierzchni generuje tak potężne opory tłoczenia wody, z którymi nie poradzi sobie standardowa pompa obiegowa, a ponadto powierzchnia posadzki przekroczy dopuszczalne 29°C. Jeśli zapotrzebowanie budynku przebija 100 W/m², system płaszczyznowy musi być wspomagany grzejnikami lub dom wymaga bezwzględnej termomodernizacji.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <circle class="pipe-l" cx="30" cy="35" r="10" fill="none" stroke="#64748b" stroke-width="4"/>
                                    <circle class="pipe-r" cx="70" cy="35" r="10" fill="none" stroke="#64748b" stroke-width="4"/>
                                    <path d="M 45 35 l 10 0 M 45 30 l 5 5 l -5 5" fill="none" stroke="#cbd5e1" stroke-width="2" stroke-linecap="round"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-qa-item">
                <button class="rk-qa-question">
                    <span>5. Jak rodzaj wylewki wpływa na skuteczność wyników z kalkulatora?</span>
                    <div class="rk-qa-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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-qa-answer-wrapper">
                    <div class="rk-qa-answer-inner">
                        <div class="rk-qa-content">
                            <div class="rk-qa-text">
                                Wybór odpowiedniego jastrychu drastycznie zmienia parametry pracy. <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/" class="rk-link">Wylewka anhydrytowa</a> wykazuje niemal dwukrotnie wyższy współczynnik przewodzenia ciepła w porównaniu do standardowego betonu z miksokreta. Dzięki płynnej konsystencji idealnie i szczelnie otula rury grzewcze. Przekłada się to na błyskawiczne oddawanie ciepła do pomieszczenia i możliwość pracy pompy ciepła na niższym, oszczędniejszym parametrze temperaturowym.
                            </div>
                            <div class="rk-qa-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="15" y="15" width="70" height="40" rx="4" fill="none" stroke="#94a3b8" stroke-width="3"/>
                                    <rect class="anim-screed-layer" x="17" y="30" width="66" height="23" rx="2" fill="#cbd5e1"/>
                                    <circle cx="35" cy="40" r="5" fill="#ef4444"/>
                                    <circle cx="50" cy="40" r="5" fill="#ef4444"/>
                                    <circle cx="65" cy="40" r="5" fill="#ef4444"/>
                                    <path d="M20 30 Q35 25 50 30 T80 30" fill="none" stroke="var(--rk-qa-emerald)" stroke-width="2"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    const faqItems = document.querySelectorAll('.rk-qa-item');

    faqItems.forEach(item => {
        const btn = item.querySelector('.rk-qa-question');
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Zwijanie wszystkich
            faqItems.forEach(i => i.classList.remove('active'));
            
            // Rozwijanie klikniętego (jeśli nie był aktywny)
            if (!isActive) {
                item.classList.add('active');
            }
        });
    });
    
    // Otwarcie pierwszego elementu na start
    if(faqItems.length > 0) {
        faqItems[0].classList.add('active');
    }
});
</script>



<style>
:root {
    --rk-fin-dark: #0f172a;
    --rk-fin-blue: #0ea5e9;
    --rk-fin-light-blue: #e0f2fe;
    --rk-fin-green: #10b981;
    --rk-fin-green-light: #dcfce7;
    --rk-fin-red: #ef4444;
    --rk-fin-red-light: #fee2e2;
    --rk-fin-orange: #f59e0b;
    --rk-fin-orange-light: #fef3c7;
    --rk-fin-gray: #64748b;
    --rk-fin-border: #cbd5e1;
    --rk-fin-bg: #ffffff;
}

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

/* Nagłówek */
.rk-fin-header {
    padding: 40px 40px 30px;
    background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
    border-bottom: 1px solid var(--rk-fin-border);
}

.rk-fin-header h2 {
    margin: 0 0 15px 0;
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-fin-dark);
    letter-spacing: -0.5px;
}

.rk-fin-header p {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-fin-gray);
    margin: 0;
}

.rk-fin-highlight {
    font-weight: 800;
    color: var(--rk-fin-blue);
}

/* Sekcja Interaktywna - Symulator */
.rk-fin-interactive {
    padding: 40px;
    background: #ffffff;
}

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

.rk-fin-dashboard {
    display: grid;
    grid-template-columns: 1fr 1.5fr;
    gap: 30px;
    align-items: center;
}

.rk-fin-slider-box {
    background: #f8fafc;
    padding: 30px;
    border-radius: 16px;
    border: 1px solid var(--rk-fin-border);
    text-align: center;
}

.rk-fin-slider-label {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-fin-gray);
    text-transform: uppercase;
    margin-bottom: 15px;
}

.rk-fin-value-display {
    font-size: 42px;
    font-weight: 900;
    color: var(--rk-fin-dark);
    margin-bottom: 20px;
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 5px;
}

.rk-fin-value-display span {
    font-size: 18px;
    color: var(--rk-fin-gray);
}

/* Stylizacja suwaka (Slider) */
.rk-range-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #cbd5e1;
    outline: none;
    transition: background 0.3s;
}

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

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

/* Wynik symulacji */
.rk-fin-result-box {
    padding: 30px;
    border-radius: 16px;
    transition: all 0.4s ease;
    display: flex;
    flex-direction: column;
    gap: 15px;
    border: 2px solid transparent;
}

.rk-fin-result-box.state-green {
    background: var(--rk-fin-green-light);
    border-color: var(--rk-fin-green);
}
.rk-fin-result-box.state-orange {
    background: var(--rk-fin-orange-light);
    border-color: var(--rk-fin-orange);
}
.rk-fin-result-box.state-red {
    background: var(--rk-fin-red-light);
    border-color: var(--rk-fin-red);
}

.rk-fin-result-header {
    display: flex;
    align-items: center;
    gap: 15px;
}

.rk-anim-house {
    width: 60px;
    height: 60px;
}

.house-path {
    transition: all 0.4s ease;
    stroke-width: 2;
    fill: none;
}

.state-green .house-path { stroke: var(--rk-fin-green); fill: rgba(16, 185, 129, 0.2); }
.state-orange .house-path { stroke: var(--rk-fin-orange); fill: rgba(245, 158, 11, 0.2); }
.state-red .house-path { stroke: var(--rk-fin-red); fill: rgba(239, 68, 68, 0.2); }

.state-red .heat-wave {
    animation: heatRise 1.5s infinite alternate;
    stroke: var(--rk-fin-red);
}

@keyframes heatRise {
    0% { transform: translateY(0) scale(1); opacity: 0.5; }
    100% { transform: translateY(-5px) scale(1.1); opacity: 1; }
}

.rk-fin-result-title {
    font-size: 20px;
    font-weight: 800;
    margin: 0;
}
.state-green .rk-fin-result-title { color: #065f46; }
.state-orange .rk-fin-result-title { color: #92400e; }
.state-red .rk-fin-result-title { color: #991b1b; }

.rk-fin-result-text {
    font-size: 15px;
    line-height: 1.6;
    margin: 0;
    color: #334155;
}

/* Sekcja Wzorów i Linków */
.rk-fin-content-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    padding: 0 40px 40px;
}

.rk-fin-card {
    background: #f8fafc;
    border: 1px solid var(--rk-fin-border);
    padding: 25px;
    border-radius: 12px;
}

.rk-fin-card h4 {
    margin: 0 0 15px 0;
    font-size: 16px;
    color: var(--rk-fin-dark);
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-fin-card ul {
    margin: 0;
    padding: 0 0 0 20px;
    font-size: 14px;
    color: var(--rk-fin-gray);
    line-height: 1.6;
}

.rk-fin-card ul li { margin-bottom: 8px; }
.rk-fin-card a {
    color: var(--rk-fin-blue);
    text-decoration: none;
    font-weight: 700;
    transition: color 0.2s;
}
.rk-fin-card a:hover { text-decoration: underline; }

/* Massive CTA */
.rk-fin-cta {
    background: var(--rk-fin-dark);
    padding: 40px;
    text-align: center;
}

.rk-fin-cta h3 {
    color: #ffffff;
    font-size: 24px;
    margin: 0 0 10px 0;
}

.rk-fin-cta p {
    color: #94a3b8;
    margin: 0 auto 30px auto;
    max-width: 600px;
    font-size: 15px;
    line-height: 1.6;
}

.rk-btn-massive {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-fin-blue);
    color: #ffffff;
    font-size: 18px;
    font-weight: 900;
    padding: 20px 40px;
    border-radius: 12px;
    text-decoration: none;
    text-transform: uppercase;
    box-shadow: 0 10px 20px -5px rgba(14, 165, 233, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-btn-massive:hover {
    transform: translateY(-4px);
    background: #0284c7;
    box-shadow: 0 15px 25px -5px rgba(14, 165, 233, 0.6);
}

@media (max-width: 768px) {
    .rk-fin-header, .rk-fin-interactive, .rk-fin-content-grid, .rk-fin-cta { padding: 25px; }
    .rk-fin-dashboard, .rk-fin-content-grid { grid-template-columns: 1fr; gap: 20px; }
    .rk-fin-value-display { font-size: 36px; }
    .rk-btn-massive { width: 100%; padding: 16px; font-size: 16px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
    },
    "headline": "Podsumowanie – Zabezpiecz Swój Budżet i Komfort Termiczny",
    "description": "Sprawdź samodzielnie zapotrzebowanie budynku na ciepło (W/m2) z wykorzystaniem interaktywnego symulatora normy PN-EN 12831. Optymalizuj parametry przed wyborem pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-30",
    "dateModified": "2026-05-30"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#dataset-zapotrzebowanie",
    "name": "Bilans Cieplny i Wskaźniki W/m2 dla Ogrzewania Podłogowego",
    "description": "Zestawienie analityczne określające limity i optymalne zakresy mocy grzewczej dla instalacji płaszczyznowych w odniesieniu do izolacji oraz typu okładziny podłogowej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczenia strat ciepła",
      "norma PN-EN 12831",
      "zapotrzebowanie W/m2",
      "projekt wykonawczy ogrzewania",
      "temperatura zasilania podłogówki"
    ],
    "measurementTechnique": "Analiza zapotrzebowania na ciepło (Q = A × U × ΔT) w zależności od stopnia izolacji budynku i wymagań hydraulicznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zakres 40-50 W/m2: Optymalny (Nowe budownictwo, idealne dla pomp ciepła).",
        "Zakres 51-80 W/m2: Umiarkowany (Wymaga zagęszczenia rur i projektowania OZC).",
        "Zakres >80 W/m2: Krytyczny (Ryzyko niedogrzania, wymaga grzejników lub termomodernizacji)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webapp-symulator",
    "name": "Symulator Zapotrzebowania Cieplnego W/m2",
    "description": "Interaktywne narzędzie obliczeniowe obrazujące wpływ jednostkowego zapotrzebowania na ciepło budynku na efektywność wodnego ogrzewania podłogowego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-fin-container">
    <div class="rk-fin-header">
        <h2>Podsumowanie – Zabezpiecz Swój Budżet i Komfort Termiczny</h2>
        <p>
            Samodzielne obliczenie strat ciepła budynku za pomocą uproszczonej metody normy <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" style="color:var(--rk-fin-blue); font-weight:700;">PN-EN 12831</a> to kluczowy krok techniczny, który chroni inwestora przed przewymiarowaniem źródła ciepła i wadliwym działaniem ogrzewania podłogowego.
        </p>
    </div>

    <div class="rk-fin-interactive">
        <h3>Symulator Obciążenia Instalacji</h3>
        <div class="rk-fin-dashboard">
            <div class="rk-fin-slider-box">
                <span class="rk-fin-slider-label">Zapotrzebowanie na ciepło budynku</span>
                <div class="rk-fin-value-display">
                    <span id="sliderValue">45</span> <span>W/m²</span>
                </div>
                <input type="range" min="30" max="120" value="45" step="5" class="rk-range-slider" id="heatSlider">
            </div>

            <div class="rk-fin-result-box state-green" id="resultCard">
                <div class="rk-fin-result-header">
                    <svg class="rk-anim-house" viewBox="0 0 24 24" fill="none" stroke="currentColor">
                        <path class="house-path" d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
                        <polyline class="house-path" points="9 22 9 12 15 12 15 22"></polyline>
                        <path class="heat-wave" d="M12 2v3" style="display:none;" stroke-width="2" stroke-linecap="round"/>
                        <path class="heat-wave" d="M8 4v3" style="display:none;" stroke-width="2" stroke-linecap="round"/>
                        <path class="heat-wave" d="M16 4v3" style="display:none;" stroke-width="2" stroke-linecap="round"/>
                    </svg>
                    <h4 class="rk-fin-result-title" id="resultTitle">Strefa Optymalna</h4>
                </div>
                <p class="rk-fin-result-text" id="resultText">
                    Idealne warunki dla podłogówki i pompy ciepła. Niska temperatura zasilania (ok. 30-32°C). Układ działa energooszczędnie, można bezpiecznie planować <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">panele podłogowe</a>.
                </p>
            </div>
        </div>
    </div>

    <div class="rk-fin-content-grid">
        <div class="rk-fin-card">
            <h4>
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--rk-fin-blue)" stroke-width="2"><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>
                Fizyka Budynku
            </h4>
            <ul>
                <li>Znając wzory na straty przez przenikanie (<strong>Q = A × U × ΔT</strong>) oraz wentylację (<strong>Qv = 0,34 × V × ΔT</strong>), weryfikujesz, czy mieścisz się w zakresie 40-80 W/m².</li>
                <li>Zignorowanie parametrów łazienki (wymagane <strong>+24°C</strong>) zepsuje komfort termiczny w newralgicznym punkcie domu.</li>
            </ul>
        </div>
        <div class="rk-fin-card">
            <h4>
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--rk-fin-blue)" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
                Zlecaj OZC Inżynierom
            </h4>
            <ul>
                <li>Każdy litr wody przepływający przez rozdzielacz musi być poprawnie zbilansowany matematycznie.</li>
                <li>Traktuj samodzielne wyliczenia jako wstęp do zlecenia <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">profesjonalnego projektu OZC</a>, zwłaszcza przy pompach ciepła.</li>
            </ul>
        </div>
    </div>

    <div class="rk-fin-cta">
        <h3>Zaprojektuj System Bez Błędów</h3>
        <p>Nie zostawiaj kluczowych parametrów hydraulicznych przypadkowi. Odkryj inżynierskie metody projektowania, normy prawne i kalkulatory, które zagwarantują 100% efektywności Twojej inwestycji.</p>
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-massive">
            SPRAWDŹ BAZĘ WIEDZY EKSKLUZYWNEJ
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const slider = document.getElementById('heatSlider');
    const display = document.getElementById('sliderValue');
    const resultCard = document.getElementById('resultCard');
    const resultTitle = document.getElementById('resultTitle');
    const resultText = document.getElementById('resultText');
    const heatWaves = document.querySelectorAll('.heat-wave');

    function updateDashboard(value) {
        display.textContent = value;
        
        if (value <= 50) {
            resultCard.className = 'rk-fin-result-box state-green';
            resultTitle.textContent = 'Strefa Optymalna';
            resultText.innerHTML = 'Idealne warunki dla podłogówki i pompy ciepła. Niska temperatura zasilania (ok. 30-32°C). Układ działa energooszczędnie, można bezpiecznie planować <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">panele podłogowe</a>.';
            heatWaves.forEach(w => w.style.display = 'none');
            slider.style.background = `linear-gradient(to right, var(--rk-fin-green) ${(value-30)/(120-30)*100}%, #cbd5e1 ${(value-30)/(120-30)*100}%)`;
        } 
        else if (value > 50 && value <= 80) {
            resultCard.className = 'rk-fin-result-box state-orange';
            resultTitle.textContent = 'Strefa Umiarkowana (Uwaga!)';
            resultText.innerHTML = 'Osiągasz granice wydajności. Konieczne zagęszczenie rur (rozstaw co 10 cm). Ryzyko przy stosowaniu paneli. Wymagany precyzyjny <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projekt OZC</a>, aby uniknąć niedogrzania łazienek.';
            heatWaves.forEach(w => w.style.display = 'none');
            slider.style.background = `linear-gradient(to right, var(--rk-fin-orange) ${(value-30)/(120-30)*100}%, #cbd5e1 ${(value-30)/(120-30)*100}%)`;
        } 
        else {
            resultCard.className = 'rk-fin-result-box state-red';
            resultTitle.textContent = 'Strefa Krytyczna';
            resultText.innerHTML = 'Sama podłogówka <strong>nie ogrzeje tego budynku</strong>. Próba wymuszenia mocy doprowadzi do przegrzania posadzki (dyskomfort). Konieczna <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">termomodernizacja</a> lub dodanie obiegów grzejnikowych.';
            heatWaves.forEach(w => w.style.display = 'block');
            slider.style.background = `linear-gradient(to right, var(--rk-fin-red) ${(value-30)/(120-30)*100}%, #cbd5e1 ${(value-30)/(120-30)*100}%)`;
        }
    }

    slider.addEventListener('input', (e) => {
        updateDashboard(e.target.value);
    });

    // Inicjalizacja
    updateDashboard(slider.value);
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">Kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kompleksowy kalkulator ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 01 Mar 2026 15:07:17 +0000</pubDate>
				<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Technika instalacyjna]]></category>
		<category><![CDATA[Technologia grzewcza]]></category>
		<category><![CDATA[długość rury pex]]></category>
		<category><![CDATA[instalacja podłogowa krok po kroku]]></category>
		<category><![CDATA[kalkulator ogrzewania podłogowego]]></category>
		<category><![CDATA[moc ogrzewania podłogowego]]></category>
		<category><![CDATA[obliczenia ogrzewania podłogowego]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[przepływy w pętlach]]></category>
		<category><![CDATA[rozdzielacz podłogówki]]></category>
		<category><![CDATA[rozstaw rur podłogówka]]></category>
		<category><![CDATA[temperatura zasilania podłogówka]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3552</guid>

					<description><![CDATA[<p>Ile metrów rury kupić? Jak dobrać rozstaw pętli? Czy temperatura 35°C wystarczy, aby ogrzać cały dom? Kompleksowy kalkulator ogrzewania podłogowego pozwala przełożyć te pytania na konkretne liczby. W artykule znajdziesz nie tylko wzory i gotowe przeliczniki, ale także realny przykład mieszkania 70 m² rozpisany krok po kroku. To praktyczne narzędzie dla inwestorów, którzy chcą świadomie zaplanować instalację i uniknąć kosztownych błędów wykonawczych.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">Kompleksowy kalkulator ogrzewania podłogowego.</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-darker: #020617;
    --rk-intro-primary: #2563eb; /* Inżynieryjny niebieski */
    --rk-intro-primary-light: #eff6ff;
    --rk-intro-teal: #0d9488; /* Akcent dla parametrów */
    --rk-intro-teal-bg: #f0fdfa;
    --rk-intro-bg: #ffffff;
    --rk-intro-surface: #f8fafc;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #334155;
    --rk-intro-muted: #64748b;
    --rk-intro-shadow: 0 10px 30px -10px rgba(37, 99, 235, 0.15);
}

.rk-intro-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-intro-bg);
    border-radius: 24px;
    box-shadow: var(--rk-intro-shadow);
    border: 1px solid var(--rk-intro-border);
    overflow: hidden;
}

/* --- NAGŁÓWEK I WSTĘP --- */
.rk-intro-header {
    background: linear-gradient(145deg, var(--rk-intro-darker) 0%, var(--rk-intro-dark) 100%);
    padding: 45px 50px;
    color: #ffffff;
    position: relative;
}

.rk-intro-header::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 100%; height: 5px;
    background: linear-gradient(90deg, var(--rk-intro-primary), var(--rk-intro-teal));
}

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(37, 99, 235, 0.2);
    color: #60a5fa;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(96, 165, 250, 0.3);
}

.rk-intro-title {
    font-size: 32px;
    font-weight: 900;
    line-height: 1.2;
    margin: 0 0 25px 0;
    color: #ffffff;
}

.rk-intro-title span {
    color: #93c5fd;
}

.rk-intro-lead {
    font-size: 17px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
    padding: 25px;
    background: rgba(255, 255, 255, 0.03);
    border-left: 4px solid var(--rk-intro-primary);
    border-radius: 0 12px 12px 0;
}

.rk-intro-lead strong {
    color: #ffffff;
    font-weight: 700;
}

.rk-link-light {
    color: #60a5fa;
    text-decoration: none;
    border-bottom: 1px dashed rgba(96, 165, 250, 0.5);
    transition: all 0.3s;
}

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

/* --- INTERAKTYWNY EKSPLORATOR ALGORYTMU --- */
.rk-explorer-section {
    padding: 40px 50px;
    background: var(--rk-intro-surface);
}

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

/* Nawigacja (Menu pigułkowe) */
.rk-explorer-nav {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 35px;
    background: #ffffff;
    padding: 8px;
    border-radius: 16px;
    border: 1px solid var(--rk-intro-border);
}

.rk-exp-btn {
    flex: 1;
    min-width: 140px;
    padding: 14px 20px;
    background: transparent;
    border: none;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-intro-muted);
    cursor: pointer;
    transition: all 0.3s;
    text-align: center;
}

.rk-exp-btn:hover {
    background: var(--rk-intro-surface);
    color: var(--rk-intro-primary);
}

.rk-exp-btn.active {
    background: var(--rk-intro-primary);
    color: #ffffff;
    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
}

/* Zawartość zakładek */
.rk-exp-content {
    display: none;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-intro-border);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    overflow: hidden;
    animation: rkFadeIn 0.4s ease;
}

.rk-exp-content.active {
    display: flex;
}

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

/* Layout wewnętrzny: Lewo SVG (Statyczne), Prawo Tekst */
.rk-exp-visual {
    flex: 0 0 40%;
    background: var(--rk-intro-teal-bg);
    padding: 30px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-right: 1px solid var(--rk-intro-border);
}

.rk-static-svg {
    width: 100%;
    max-width: 180px;
    height: auto;
    filter: drop-shadow(0 10px 15px rgba(13, 148, 136, 0.15));
}

.rk-exp-details {
    flex: 1;
    padding: 35px 40px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-exp-details h3 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-intro-dark);
}

.rk-exp-details p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-intro-text);
}

/* Kafelki z parametrami (zamiast lania wody) */
.rk-data-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tile {
    background: var(--rk-intro-surface);
    padding: 15px;
    border-radius: 12px;
    border: 1px solid var(--rk-intro-border);
}

.rk-tile-label {
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--rk-intro-muted);
    margin-bottom: 5px;
}

.rk-tile-value {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-intro-primary);
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-intro-header, .rk-explorer-section { padding: 30px 25px; }
    .rk-intro-title { font-size: 26px; }
    .rk-intro-lead { padding: 20px 15px; font-size: 15px; }
    .rk-exp-content.active { flex-direction: column; }
    .rk-exp-visual { border-right: none; border-bottom: 1px solid var(--rk-intro-border); padding: 40px 20px; }
    .rk-exp-details { padding: 25px; }
    .rk-data-tiles { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Kompleksowy Kalkulator Ogrzewania Podłogowego (Algorytm PN-EN 1264)",
    "description": "Precyzyjne narzędzie inżynieryjne pozwalające wyliczyć strumień masowy, opory hydrauliczne pętli, rozstaw rur i całkowitą długość przewodów PERT/PEX. Kompendium wiedzy matematycznej.",
    "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-23",
    "dateModified": "2026-05-23"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-algorytm",
    "name": "Zestawienie Parametrów Algorytmu PN-EN 1264",
    "description": "Baza danych wytycznych algorytmicznych niezbędnych do przeprowadzenia poprawnych obliczeń hydrauliczno-termicznych systemu grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kompleksowy kalkulator ogrzewania podłogowego",
      "algorytm inżynieryjny PN-EN 1264",
      "obliczenia hydrauliczno-termiczne",
      "strumień masowy podłogówki",
      "opory hydrauliczne pętli"
    ],
    "measurementTechnique": "Obliczenia numeryczne na podstawie wzorów fizyki cieplnej i normy europejskiej PN-EN 1264 dot. systemów płaszczyznowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zapotrzebowanie na strumień masowy czynnika grzewczego (kg/h).",
        "Opory hydrauliczne pętli grzewczej i spadki ciśnień (kPa).",
        "Wymagany rozstaw rur dostosowany do strefy i strat ciepła.",
        "Całkowita długość przewodów PEX/PERT na jedno pomieszczenie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-wstep",
    "name": "Eksplorator Algorytmu Ogrzewania Podłogowego",
    "description": "Interaktywny widget prezentujący 4 główne filary obliczeniowe profesjonalnego kalkulatora podłogówki, wyposażony w statyczne grafiki inżynierskie.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 and CSS3",
    "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="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>
            Kompendium Inżyniera
        </div>
        <h2 class="rk-intro-title">Kompleksowy Kalkulator <span>Ogrzewania Podłogowego</span></h2>
        
        <p class="rk-intro-lead">
            Błędne zaprojektowanie instalacji płaszczyznowej generuje gigantyczne straty finansowe, niedogrzanie pomieszczeń oraz pękanie wylewek jastrychowych. <strong>Kompleksowy kalkulator ogrzewania podłogowego</strong> to zaawansowany algorytm inżynieryjny oparty na <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/" class="rk-link-light">normie PN-EN 1264</a>, który pozwala precyzyjnie wyliczyć zapotrzebowanie na strumień masowy czynnika grzewczego, opory hydrauliczne pętli, wymagany <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-link-light">rozstaw rur</a> oraz całkowitą długość <a href="https://projekt-ogrzewania.pl/rura-pert-do-ogrzewania-podlogowego/" class="rk-link-light">przewodów PERT/PEX</a>. Poniższy materiał stanowi kompletne kompendium wiedzy matematycznej i instalacyjnej, niezbędne do przeprowadzenia obliczeń hydrauliczno-termicznych systemu grzewczego (Interaktywny kalkulator jest dostępny w dalszej części artykułu).
        </p>
    </div>

    <div class="rk-explorer-section">
        <h3 class="rk-explorer-title">4 Filary Algorytmu Obliczeniowego</h3>
        
        <div class="rk-explorer-nav">
            <button class="rk-exp-btn active" data-target="tab-masowy">Strumień Masowy</button>
            <button class="rk-exp-btn" data-target="tab-opory">Opory Hydrauliczne</button>
            <button class="rk-exp-btn" data-target="tab-rozstaw">Rozstaw Rur</button>
            <button class="rk-exp-btn" data-target="tab-dlugosc">Długość Przewodów</button>
        </div>

        <div class="rk-exp-content active" id="tab-masowy">
            <div class="rk-exp-visual">
                <svg class="rk-static-svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
                    <rect x="35" y="10" width="30" height="80" rx="4" fill="#ffffff" stroke="#2563eb" stroke-width="4"></rect>
                    <line x1="45" y1="20" x2="55" y2="20" stroke="#64748b" stroke-width="2"></line>
                    <line x1="45" y1="40" x2="55" y2="40" stroke="#64748b" stroke-width="2"></line>
                    <line x1="45" y1="60" x2="55" y2="60" stroke="#64748b" stroke-width="2"></line>
                    <line x1="45" y1="80" x2="55" y2="80" stroke="#64748b" stroke-width="2"></line>
                    <polygon points="40,55 60,55 50,70" fill="#ef4444"></polygon>
                    <path d="M 50 90 L 50 100 M 35 100 L 65 100" stroke="#0d9488" stroke-width="4" stroke-linecap="round"></path>
                </svg>
            </div>
            <div class="rk-exp-details">
                <h3>Zapotrzebowanie na strumień masowy</h3>
                <p>Kalkulator na podstawie projektowego obciążenia cieplnego (OZC) określa dokładną ilość wody (w litrach na minutę), jaka musi przepłynąć przez dany obwód, aby dostarczyć wymaganą moc grzewczą do pomieszczenia. To podstawa regulacji na rotametrach.</p>
                <div class="rk-data-tiles">
                    <div class="rk-tile">
                        <div class="rk-tile-label">Jednostka bazowa</div>
                        <div class="rk-tile-value">kg/h lub l/min</div>
                    </div>
                    <div class="rk-tile">
                        <div class="rk-tile-label">Zależność fizyczna</div>
                        <div class="rk-tile-value">Q = m · c · ΔT</div>
                    </div>
                </div>
            </div>
        </div>

        <div class="rk-exp-content" id="tab-opory">
            <div class="rk-exp-visual">
                <svg class="rk-static-svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
                    <path d="M 10 50 Q 30 20 50 50 T 90 50" fill="none" stroke="#e2e8f0" stroke-width="12" stroke-linecap="round"></path>
                    <path d="M 10 50 Q 30 20 50 50 T 90 50" fill="none" stroke="#2563eb" stroke-width="6" stroke-linecap="round"></path>
                    <circle cx="20" cy="30" r="12" fill="#ffffff" stroke="#0d9488" stroke-width="3"></circle>
                    <line x1="20" y1="30" x2="28" y2="22" stroke="#ef4444" stroke-width="2" stroke-linecap="round"></line>
                    <circle cx="80" cy="30" r="12" fill="#ffffff" stroke="#0d9488" stroke-width="3"></circle>
                    <line x1="80" y1="30" x2="72" y2="22" stroke="#ef4444" stroke-width="2" stroke-linecap="round"></line>
                </svg>
            </div>
            <div class="rk-exp-details">
                <h3>Opory hydrauliczne pętli</h3>
                <p>Zbyt długa rura lub zbyt duża prędkość wody generuje ogromne opory tarcia (straty liniowe i miejscowe). Obliczenia te są krytyczne dla poprawnego doboru wysokości podnoszenia pompy obiegowej, aby zapobiec &#8222;niedogrzaniu&#8221; najdalszych pętli.</p>
                <div class="rk-data-tiles">
                    <div class="rk-tile">
                        <div class="rk-tile-label">Maksymalny opór pętli</div>
                        <div class="rk-tile-value">≤ 20 kPa</div>
                    </div>
                    <div class="rk-tile">
                        <div class="rk-tile-label">Optymalna prędkość</div>
                        <div class="rk-tile-value">0,25 &#8211; 0,5 m/s</div>
                    </div>
                </div>
            </div>
        </div>

        <div class="rk-exp-content" id="tab-rozstaw">
            <div class="rk-exp-visual">
                <svg class="rk-static-svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
                    <rect x="10" y="10" width="80" height="80" fill="#ffffff" stroke="#cbd5e1" stroke-width="2" rx="4"></rect>
                    <path d="M 20 20 L 80 20 M 80 20 A 10 10 0 0 1 80 40 M 80 40 L 20 40 M 20 40 A 10 10 0 0 0 20 60 M 20 60 L 80 60 M 80 60 A 10 10 0 0 1 80 80 M 80 80 L 20 80" fill="none" stroke="#0d9488" stroke-width="6" stroke-linecap="round"></path>
                    <line x1="45" y1="23" x2="45" y2="37" stroke="#ef4444" stroke-width="2"></line>
                    <polygon points="45,23 42,28 48,28" fill="#ef4444"></polygon>
                    <polygon points="45,37 42,32 48,32" fill="#ef4444"></polygon>
                </svg>
            </div>
            <div class="rk-exp-details">
                <h3>Wymagany rozstaw rur</h3>
                <p>Na podstawie oporu cieplnego warstw posadzki (np. płytki vs panele) oraz wyliczonych strat ciepła, system wskazuje bezpieczny rozstaw montażowy. Zagęszczenie rur (np. co 10 cm w łazience) gwarantuje osiągnięcie właściwej temperatury wnętrza.</p>
                <div class="rk-data-tiles">
                    <div class="rk-tile">
                        <div class="rk-tile-label">Pompy ciepła (Standard)</div>
                        <div class="rk-tile-value">10 &#8211; 15 cm</div>
                    </div>
                    <div class="rk-tile">
                        <div class="rk-tile-label">Strefy brzegowe (Okna)</div>
                        <div class="rk-tile-value">5 &#8211; 10 cm</div>
                    </div>
                </div>
            </div>
        </div>

        <div class="rk-exp-content" id="tab-dlugosc">
            <div class="rk-exp-visual">
                <svg class="rk-static-svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
                    <circle cx="50" cy="50" r="35" fill="none" stroke="#2563eb" stroke-width="8"></circle>
                    <circle cx="50" cy="50" r="25" fill="none" stroke="#2563eb" stroke-width="8"></circle>
                    <circle cx="50" cy="50" r="15" fill="none" stroke="#2563eb" stroke-width="8"></circle>
                    <path d="M 50 15 L 50 5" stroke="#ef4444" stroke-width="4" stroke-linecap="round"></path>
                    <path d="M 50 5 L 90 5" stroke="#ef4444" stroke-width="4" stroke-linecap="round"></path>
                    <text x="70" y="20" fill="#0f172a" font-size="14" font-weight="900" font-family="sans-serif">Σ L</text>
                </svg>
            </div>
            <div class="rk-exp-details">
                <h3>Całkowita długość przewodów</h3>
                <p>Precyzyjne wyliczenie metrów bieżących (uwzględniające 10% naddatku instalacyjnego oraz trasy doprowadzające do rozdzielacza) zapobiega brakom materiałowym na budowie i pozwala dokładnie oszacować pojemność zładu wodnego układu.</p>
                <div class="rk-data-tiles">
                    <div class="rk-tile">
                        <div class="rk-tile-label">Max dł. obwodu (PEX 16)</div>
                        <div class="rk-tile-value">120 m</div>
                    </div>
                    <div class="rk-tile">
                        <div class="rk-tile-label">Pojemność rury 16&#215;2</div>
                        <div class="rk-tile-value">0,113 l/mb</div>
                    </div>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener interaktywny należy do serwisu Projekt-Ogrzewania.pl. Uruchamianie na nieautoryzowanej domenie jest zabronione prawem.
                </div>
            `;
            return;
        }
    }

    // Logika Zakładek Eksploratora
    const buttons = document.querySelectorAll('.rk-exp-btn');
    const contents = document.querySelectorAll('.rk-exp-content');

    buttons.forEach(btn => {
        btn.addEventListener('click', () => {
            const targetId = btn.getAttribute('data-target');
            
            // Resetuj wszystkie
            buttons.forEach(b => b.classList.remove('active'));
            contents.forEach(c => c.classList.remove('active'));
            
            // Aktywuj kliknięty
            btn.classList.add('active');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-calc-dark: #0f172a;
    --rk-calc-darker: #020617;
    --rk-calc-brand: #3b82f6; /* Inżynieryjny, mocny niebieski */
    --rk-calc-brand-hover: #2563eb;
    --rk-calc-accent: #f59e0b; /* Bursztyn do akcentowania wzorów */
    --rk-calc-bg: #ffffff;
    --rk-calc-surface: #f8fafc;
    --rk-calc-border: #e2e8f0;
    --rk-calc-text: #334155;
    --rk-calc-muted: #64748b;
    --rk-calc-formula-bg: #1e293b;
    --rk-shadow-soft: 0 10px 25px -5px rgba(59, 130, 246, 0.1);
}

.rk-calc-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-calc-bg);
    border-radius: 20px;
    box-shadow: var(--rk-shadow-soft);
    border: 1px solid var(--rk-calc-border);
    overflow: hidden;
}

/* --- NAGŁÓWEK --- */
.rk-calc-header {
    background: linear-gradient(135deg, var(--rk-calc-dark) 0%, var(--rk-calc-darker) 100%);
    padding: 40px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-calc-brand);
}

.rk-calc-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(59, 130, 246, 0.2);
    color: #93c5fd;
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 15px;
    border: 1px solid rgba(147, 197, 253, 0.3);
}

.rk-calc-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
}

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

.rk-calc-lead strong { color: #ffffff; }

.rk-calc-link {
    color: #60a5fa;
    text-decoration: underline;
    text-underline-offset: 3px;
    font-weight: 600;
    transition: color 0.3s;
}

.rk-calc-link:hover { color: #93c5fd; }

/* --- INTERAKTYWNY STEPPER --- */
.rk-calc-interactive {
    padding: 40px 50px;
    background: var(--rk-calc-surface);
}

.rk-calc-subtitle {
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-calc-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

.rk-stepper-wrapper {
    display: flex;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-calc-border);
    border-radius: 16px;
    padding: 25px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

/* Lewa strona: Kroki */
.rk-stepper-nav {
    flex: 0 0 220px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    border-right: 1px solid var(--rk-calc-border);
    padding-right: 20px;
}

.rk-step-btn {
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    text-align: left;
    background: transparent;
    border: 1px solid transparent;
    padding: 15px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-calc-muted);
    cursor: pointer;
    transition: all 0.3s;
}

.rk-step-btn:hover {
    background: var(--rk-calc-surface);
    color: var(--rk-calc-brand);
}

.rk-step-btn.active {
    background: var(--rk-calc-brand);
    color: #ffffff;
    box-shadow: 0 4px 12px rgba(59, 130, 246, 0.3);
}

.rk-step-num {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    background: var(--rk-calc-border);
    color: var(--rk-calc-text);
    border-radius: 50%;
    font-size: 12px;
    font-weight: 900;
    transition: all 0.3s;
}

.rk-step-btn.active .rk-step-num {
    background: #ffffff;
    color: var(--rk-calc-brand);
}

/* Prawa strona: Zawartość */
.rk-stepper-content {
    flex: 1;
    position: relative;
    min-height: 320px;
}

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

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

@keyframes slideInRight {
    from { opacity: 0; transform: translateX(20px); }
    to { opacity: 1; transform: translateX(0); }
}

.rk-panel-title {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-calc-dark);
    margin: 0 0 15px 0;
}

/* Wzór matematyczny */
.rk-formula-box {
    background: var(--rk-calc-formula-bg);
    border-radius: 12px;
    padding: 20px;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-left: 4px solid var(--rk-calc-accent);
    position: relative;
    overflow: hidden;
}

.rk-formula-box::before {
    content: 'Wzór wg PN-EN';
    position: absolute;
    top: 5px; left: 10px;
    font-size: 10px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 800;
    letter-spacing: 1px;
}

.rk-formula-text {
    font-family: 'Courier New', Courier, monospace;
    font-size: 22px;
    font-weight: 700;
    color: #ffffff;
    letter-spacing: 1px;
}

.rk-formula-text sub {
    font-size: 12px;
    color: var(--rk-calc-accent);
}

/* Wyjaśnienie */
.rk-panel-desc {
    font-size: 14px;
    line-height: 1.7;
    color: var(--rk-calc-text);
    margin: 0 0 20px 0;
    background: var(--rk-calc-surface);
    padding: 15px;
    border-radius: 8px;
    border: 1px dashed var(--rk-calc-border);
}

/* Wizualizacja SVG (Animacje) */
.rk-panel-visual {
    height: 100px;
    background: #ffffff;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-svg-graphic {
    width: 100%;
    max-width: 250px;
    height: 100%;
}

/* --- Animacje SVG --- */
.anim-ozc-arrow { stroke-dasharray: 4; animation: flowOut 1s linear infinite; stroke: #ef4444; }
@keyframes flowOut { to { stroke-dashoffset: -8; } }

.anim-heat-wave path { stroke: #f59e0b; opacity: 0; animation: radiateUp 1.5s infinite alternate; }
.anim-heat-wave path:nth-child(2) { animation-delay: 0.5s; }
.anim-heat-wave path:nth-child(3) { animation-delay: 1s; }
@keyframes radiateUp { to { opacity: 1; transform: translateY(-5px); } }

.anim-ruler-move { animation: shrinkRuler 3s infinite alternate cubic-bezier(0.4, 0, 0.2, 1); transform-origin: left; }
@keyframes shrinkRuler { 0% { transform: scaleX(1); } 100% { transform: scaleX(0.66); } }

.anim-pipe-roll { stroke-dasharray: 200; stroke-dashoffset: 200; animation: unroll 3s infinite ease-out; stroke: #3b82f6; }
@keyframes unroll { 50%, 100% { stroke-dashoffset: 0; } }

.anim-loop-split { stroke-dasharray: 100; animation: splitFlow 2s infinite linear; stroke: #3b82f6; }
@keyframes splitFlow { to { stroke-dashoffset: -20; } }

/* --- Responsywność --- */
@media (max-width: 768px) {
    .rk-calc-header, .rk-calc-interactive { padding: 30px 20px; }
    .rk-calc-title { font-size: 24px; }
    .rk-stepper-wrapper { flex-direction: column; padding: 15px; gap: 20px; }
    .rk-stepper-nav { flex: auto; border-right: none; border-bottom: 1px solid var(--rk-calc-border); padding-right: 0; padding-bottom: 15px; flex-direction: row; overflow-x: auto; scrollbar-width: none; }
    .rk-stepper-nav::-webkit-scrollbar { display: none; }
    .rk-step-btn { min-width: 160px; justify-content: center; }
    .rk-formula-text { font-size: 18px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Jak obliczyć zapotrzebowanie na ciepło i długość rur ogrzewania podłogowego?",
    "description": "Algorytm kalkulatora wg PN-EN 12831 i 1264. Poznaj krok po kroku wzory na projektowe obciążenie cieplne, rozstaw rur i podział na pętle.",
    "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-23"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-wzory",
    "name": "Wzory i algorytmy obliczeniowe PN-EN 12831 i 1264",
    "description": "Zestawienie matematyczne procedur doboru parametrów ogrzewania płaszczyznowego, zapobiegające błędom przewymiarowania instalacji.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczenia OZC",
      "długość rury podłogówka",
      "rozstaw rur wzór",
      "norma PN-EN 12831",
      "kalkulator ogrzewania podłogowego"
    ],
    "measurementTechnique": "Szeregowanie algorytmiczne wg norm europejskich, przeliczające powierzchnię i straty na zapotrzebowanie hydrauliczne.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Projektowa moc grzewcza Q_obl = A × q",
        "Krok 2: Gęstość strumienia q_s = Q_obl / A_grz",
        "Krok 3: Obliczenie teoretycznego rozstawu rur (a)",
        "Krok 4: Całkowita długość rury L = (A_grz / a × 1,1) + L_d",
        "Krok 5: Podział na pętle N_p = ceil(L / L_max)"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-algorytm",
    "name": "Symulator Algorytmu Podłogówki",
    "description": "Interaktywny panel (stepper) objaśniający w 5 krokach proces matematyczny zachodzący w kalkulatorze ogrzewania podłogowego wraz z wizualizacjami SVG.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-calc-container" id="rk-calc-app">
    
    <div class="rk-calc-header">
        <div class="rk-calc-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
            Metodologia Obliczeń
        </div>
        <h2 class="rk-calc-title">Jak obliczyć zapotrzebowanie na ciepło i długość rur za pomocą kalkulatora?</h2>
        <p class="rk-calc-lead">
            Zgodnie z normą <strong>PN-EN 12831</strong>, podstawą do wyliczenia jakichkolwiek parametrów podłogówki jest <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-calc-link">Projektowe Obciążenie Cieplne budynku (OZC)</a>. Algorytm kalkulatora konwertuje tę wartość na <a href="https://projekt-ogrzewania.pl/ile-rury-na-m%c2%b2-ogrzewania-podlogowego/" class="rk-calc-link">metry bieżące rury</a> oraz liczbę sekcji <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/" class="rk-calc-link">rozdzielacza</a> w oparciu o parametry fizyczne przegród. Próba doboru instalacji „na oko” (np. uniwersalne przyjmowanie rozstawu co 15 cm) skutkuje niedogrzaniem stref przyokiennych lub przewymiarowaniem <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/" class="rk-calc-link">pompy obiegowej</a>, co generuje dodatkowe koszty na poziomie 2500–4000 PLN na etapie zakupu materiałów.
        </p>
    </div>

    <div class="rk-calc-interactive">
        <h3 class="rk-calc-subtitle">Algorytm obliczeniowy krok po kroku</h3>
        
        <div class="rk-stepper-wrapper">
            <div class="rk-stepper-nav">
                <button class="rk-step-btn active" data-step="1">
                    <span class="rk-step-num">1</span> Moc grzewcza
                </button>
                <button class="rk-step-btn" data-step="2">
                    <span class="rk-step-num">2</span> Gęstość strumienia
                </button>
                <button class="rk-step-btn" data-step="3">
                    <span class="rk-step-num">3</span> Rozstaw rur
                </button>
                <button class="rk-step-btn" data-step="4">
                    <span class="rk-step-num">4</span> Długość rury
                </button>
                <button class="rk-step-btn" data-step="5">
                    <span class="rk-step-num">5</span> Podział na pętle
                </button>
            </div>

            <div class="rk-stepper-content">
                
                <div class="rk-step-panel active" id="rk-step-1">
                    <h4 class="rk-panel-title">Wyznaczenie projektowej mocy grzewczej pomieszczenia (Q<sub>obl</sub>)</h4>
                    <div class="rk-formula-box">
                        <div class="rk-formula-text">Q<sub>obl</sub> = A &times; q</div>
                    </div>
                    <div class="rk-panel-desc">
                        Gdzie <strong>A</strong> to powierzchnia użytkowa [m²], a <strong>q</strong> to jednostkowe zapotrzebowanie na ciepło [W/m²] określone wg PN-EN 12831. Dla nowych budynków (WT 2021) przyjmuje się 30–50 W/m², dla domów po termomodernizacji 60–80 W/m².
                    </div>
                    <div class="rk-panel-visual">
                        <svg class="rk-svg-graphic" viewBox="0 0 200 80">
                            <path d="M 80 40 L 100 20 L 120 40 L 120 70 L 80 70 Z" fill="none" stroke="#64748b" stroke-width="4" stroke-linejoin="round"/>
                            <path class="anim-ozc-arrow" d="M 125 45 L 150 45" stroke-width="3" stroke-linecap="round"/>
                            <path class="anim-ozc-arrow" d="M 75 45 L 50 45" stroke-width="3" stroke-linecap="round"/>
                            <path class="anim-ozc-arrow" d="M 100 15 L 100 -5" stroke-width="3" stroke-linecap="round"/>
                        </svg>
                    </div>
                </div>

                <div class="rk-step-panel" id="rk-step-2">
                    <h4 class="rk-panel-title">Wyznaczenie gęstości strumienia cieplnego posadzki (q<sub>s</sub>)</h4>
                    <div class="rk-formula-box">
                        <div class="rk-formula-text">q<sub>s</sub> = Q<sub>obl</sub> / A<sub>grz</sub></div>
                    </div>
                    <div class="rk-panel-desc">
                        Gdzie <strong>A<sub>grz</sub></strong> to rzeczywista powierzchnia grzewcza [m²] (po odliczeniu stałej zabudowy meblowej np. szaf, kominków, wanien). Otrzymujemy parametr W/m² czystej podłogi.
                    </div>
                    <div class="rk-panel-visual">
                        <svg class="rk-svg-graphic" viewBox="0 0 200 80">
                            <path d="M 40 70 L 160 70 L 140 50 L 60 50 Z" fill="#e2e8f0" stroke="#cbd5e1" stroke-width="2"/>
                            <g class="anim-heat-wave" fill="none" stroke-width="3" stroke-linecap="round">
                                <path d="M 70 40 Q 80 30, 90 40 T 110 40"/>
                                <path d="M 90 35 Q 100 25, 110 35 T 130 35"/>
                                <path d="M 110 30 Q 120 20, 130 30 T 150 30"/>
                            </g>
                        </svg>
                    </div>
                </div>

                <div class="rk-step-panel" id="rk-step-3">
                    <h4 class="rk-panel-title">Obliczenie teoretycznego rozstawu rur (a)</h4>
                    <div class="rk-formula-box">
                        <div class="rk-formula-text">a = f( q<sub>s</sub> , t<sub>z</sub> , R<sub>&lambda;,B</sub> )</div>
                    </div>
                    <div class="rk-panel-desc">
                        Rozstaw rur [m] jest funkcją gęstości strumienia, temperatury zasilania oraz oporu cieplnego okładziny podłogowej. Oblicza się go z układu równań normy PN-EN 1264-2. Wynik zaokrągla się w dół do standardów montażowych: <strong>0,10 m, 0,15 m lub 0,20 m</strong>.
                    </div>
                    <div class="rk-panel-visual">
                        <svg class="rk-svg-graphic" viewBox="0 0 200 80">
                            <line x1="50" y1="40" x2="150" y2="40" stroke="#3b82f6" stroke-width="4" stroke-linecap="round"/>
                            <line class="anim-ruler-move" x1="50" y1="40" x2="150" y2="40" stroke="#f59e0b" stroke-width="6" stroke-linecap="round"/>
                            <line x1="50" y1="30" x2="50" y2="50" stroke="#64748b" stroke-width="2"/>
                            <line x1="150" y1="30" x2="150" y2="50" stroke="#64748b" stroke-width="2"/>
                        </svg>
                    </div>
                </div>

                <div class="rk-step-panel" id="rk-step-4">
                    <h4 class="rk-panel-title">Wyznaczenie całkowitej długości rury w pomieszczeniu (L)</h4>
                    <div class="rk-formula-box">
                        <div class="rk-formula-text">L = (A<sub>grz</sub> / a &times; 1,1) + L<sub>d</sub></div>
                    </div>
                    <div class="rk-panel-desc">
                        Gdzie <strong>1,1</strong> to stały współczynnik uwzględniający 10% zapasu na wygięcia łuków rur, a <strong>L<sub>d</sub></strong> to długość odcinka doprowadzającego (zasilanie + powrót) z szafki rozdzielaczowej do danego pomieszczenia [m].
                    </div>
                    <div class="rk-panel-visual">
                        <svg class="rk-svg-graphic" viewBox="0 0 200 80">
                            <circle cx="60" cy="40" r="20" fill="none" stroke="#3b82f6" stroke-width="4"/>
                            <circle cx="60" cy="40" r="12" fill="none" stroke="#3b82f6" stroke-width="4"/>
                            <path class="anim-pipe-roll" d="M 60 20 L 160 20" fill="none" stroke-width="4" stroke-linecap="round"/>
                        </svg>
                    </div>
                </div>

                <div class="rk-step-panel" id="rk-step-5">
                    <h4 class="rk-panel-title">Podział na pętle grzewcze (N<sub>p</sub>)</h4>
                    <div class="rk-formula-box">
                        <div class="rk-formula-text">N<sub>p</sub> = ceil( L / L<sub>max</sub> )</div>
                    </div>
                    <div class="rk-panel-desc">
                        Gdzie <strong>L<sub>max</sub></strong> to graniczna długość jednego obwodu (dla rury 16 mm wynosi 120 m). Funkcja <em>ceil</em> zaokrągla wynik matematyczny zawsze w górę do pełnej liczby całkowitej (obwodu na rozdzielaczu).
                    </div>
                    <div class="rk-panel-visual">
                        <svg class="rk-svg-graphic" viewBox="0 0 200 80">
                            <rect x="30" y="20" width="20" height="40" fill="#64748b" rx="2"/>
                            <path class="anim-loop-split" d="M 50 30 L 140 30 Q 160 30, 160 50 Q 160 70, 140 70 L 50 70" fill="none" stroke-width="4" stroke-linecap="round"/>
                            <path class="anim-loop-split" d="M 50 40 L 100 40 Q 120 40, 120 50 Q 120 60, 100 60 L 50 60" fill="none" stroke="#f59e0b" stroke-width="4" stroke-linecap="round"/>
                        </svg>
                    </div>
                </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-calc-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener algorytmiczny należy do serwisu Projekt-Ogrzewania.pl. Uruchamianie na nieautoryzowanej domenie jest zabronione prawem.
                </div>
            `;
            return;
        }
    }

    // Logika Steppera
    const stepBtns = document.querySelectorAll('.rk-step-btn');
    const stepPanels = document.querySelectorAll('.rk-step-panel');

    stepBtns.forEach(btn => {
        btn.addEventListener('click', () => {
            const targetStep = btn.getAttribute('data-step');
            
            // Czyszczenie klas aktywnych
            stepBtns.forEach(b => b.classList.remove('active'));
            stepPanels.forEach(p => p.classList.remove('active'));
            
            // Aktywacja wybranego
            btn.classList.add('active');
            document.getElementById('rk-step-' + targetStep).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-temp-dark: #0f172a;
    --rk-temp-darker: #020617;
    --rk-temp-brand: #0ea5e9; /* Błękit inżynieryjny */
    --rk-temp-safe: #10b981;  /* Szmaragdowy - norma */
    --rk-temp-warn: #f59e0b;  /* Bursztyn - ostrzeżenie */
    --rk-temp-danger: #ef4444; /* Czerwień - awaria */
    --rk-temp-bg: #ffffff;
    --rk-temp-surface: #f8fafc;
    --rk-temp-border: #e2e8f0;
    --rk-temp-text: #334155;
    --rk-temp-muted: #64748b;
    --rk-temp-shadow: 0 15px 35px -10px rgba(15, 23, 42, 0.1);
}

.rk-temp-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-temp-bg);
    border-radius: 24px;
    box-shadow: var(--rk-temp-shadow);
    border: 1px solid var(--rk-temp-border);
    overflow: hidden;
}

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

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

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

.rk-temp-title span { color: #7dd3fc; }

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

.rk-temp-link {
    color: #38bdf8;
    text-decoration: none;
    border-bottom: 1px dashed rgba(56, 189, 248, 0.4);
    font-weight: 600;
    transition: all 0.3s;
}

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

/* --- KONTENER SYMULATORA --- */
.rk-temp-simulator {
    padding: 40px 50px;
    background: var(--rk-temp-surface);
}

.rk-sim-layout {
    display: grid;
    grid-template-columns: 1fr 320px;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-temp-border);
    padding: 30px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

/* Lewa Strona - Kontrolki i SVG */
.rk-sim-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-slider-box {
    background: var(--rk-temp-surface);
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-temp-border);
}

.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-dark);
    text-transform: uppercase;
}

.rk-slider-value {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-temp-safe);
    transition: color 0.3s;
}

/* Custom Input Range */
.rk-range-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #cbd5e1;
    outline: none;
    transition: background 0.3s;
}

.rk-range-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--rk-temp-safe);
    cursor: pointer;
    border: 4px solid #ffffff;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    transition: background 0.3s, transform 0.1s;
}

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

/* Wizualizacja SVG Przekroju */
.rk-svg-stage {
    flex-grow: 1;
    background: #f1f5f9;
    border-radius: 16px;
    border: 1px dashed var(--rk-temp-border);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    position: relative;
    overflow: hidden;
}

.rk-cross-section { width: 100%; max-width: 350px; height: auto; }

/* Animacje SVG */
.anim-heat-ray { stroke-dasharray: 8 8; animation: heatRise 2s linear infinite; }
@keyframes heatRise { to { stroke-dashoffset: -16; } }

.anim-crack-path { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0.5s ease-out; }
.state-danger .anim-crack-path { stroke-dashoffset: 0; }

.anim-pipe-color { transition: fill 0.3s, stroke 0.3s; }
.state-warn .anim-pipe-color { fill: var(--rk-temp-warn); stroke: #d97706; }
.state-warn .anim-heat-ray { stroke: var(--rk-temp-warn); animation-duration: 1.2s; }
.state-danger .anim-pipe-color { fill: var(--rk-temp-danger); stroke: #b91c1c; }
.state-danger .anim-heat-ray { stroke: var(--rk-temp-danger); animation-duration: 0.7s; }

/* Prawa Strona - Metryki */
.rk-sim-metrics {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-metric-card {
    background: #ffffff;
    border: 1px solid var(--rk-temp-border);
    border-radius: 12px;
    padding: 20px;
    transition: all 0.3s;
    position: relative;
    overflow: hidden;
}

.rk-metric-card::before {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0; width: 4px;
    background: var(--rk-temp-safe);
    transition: background 0.3s;
}

.state-warn .rk-metric-card::before { background: var(--rk-temp-warn); }
.state-danger .rk-metric-card::before { background: var(--rk-temp-danger); }

.rk-metric-title {
    font-size: 12px;
    color: var(--rk-temp-muted);
    font-weight: 800;
    text-transform: uppercase;
    margin-bottom: 8px;
}

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

.rk-metric-desc {
    font-size: 13px;
    color: var(--rk-temp-text);
    margin-top: 8px;
    line-height: 1.4;
}

/* Ostrzeżenie (Awaria) */
.rk-alert-box {
    display: none;
    background: #fef2f2;
    border: 1px solid #fecaca;
    padding: 15px;
    border-radius: 12px;
    color: #991b1b;
    font-size: 13px;
    line-height: 1.5;
    margin-top: auto;
    animation: alertPop 0.3s ease-out;
}

.rk-alert-box strong { font-weight: 800; color: #7f1d1d; display: block; font-size: 14px; margin-bottom: 4px; }
.state-danger .rk-alert-box { display: block; }

@keyframes alertPop {
    0% { opacity: 0; transform: scale(0.95); }
    100% { opacity: 1; transform: scale(1); }
}

/* Strefy Temperatur (Limity) */
.rk-zones-info {
    padding: 30px 50px 40px;
    background: #ffffff;
    border-top: 1px solid var(--rk-temp-border);
}

.rk-zones-info h3 {
    margin: 0 0 20px 0;
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-temp-dark);
}

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

.rk-zone-item {
    background: #f8fafc;
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-temp-border);
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rk-zone-icon {
    width: 40px; height: 40px;
    background: #e0f2fe;
    color: var(--rk-temp-brand);
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-zone-item h4 { margin: 0; font-size: 15px; font-weight: 800; color: var(--rk-temp-dark); }
.rk-zone-limit { font-size: 20px; font-weight: 900; color: var(--rk-temp-brand); }
.rk-zone-text { font-size: 13px; color: var(--rk-temp-muted); line-height: 1.5; margin: 0; }

@media (max-width: 768px) {
    .rk-temp-header, .rk-temp-simulator, .rk-zones-info { padding: 30px 20px; }
    .rk-temp-title { font-size: 24px; }
    .rk-sim-layout { grid-template-columns: 1fr; padding: 20px; gap: 20px; }
    .rk-zones-grid { grid-template-columns: 1fr; }
    .rk-svg-stage { height: 200px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/#article-temperatura",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/"
    },
    "headline": "Maksymalna temperatura zasilania ogrzewania podłogowego według normy PN-EN 1264",
    "description": "Zgodnie z PN-EN 1264 maksymalna temperatura zasilania to 50°C. Przekroczenie limitu prowadzi do uszkodzeń mechanicznych wylewki (naprężenia ścinające 2,5 MPa) i degradacji paneli.",
    "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-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/#dataset-limity",
    "name": "Wartości graniczne temperatur powierzchniowych (PN-EN 1264)",
    "description": "Zestawienie dopuszczalnych temperatur powierzchni posadzki dla poszczególnych stref przebywania w budynku mieszkalnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "maksymalna temperatura ogrzewania podłogowego",
      "norma PN-EN 1264",
      "strefa brzegowa temperatura",
      "naprężenia ścinające wylewki",
      "temperatura zasilania podłogówki"
    ],
    "measurementTechnique": "Określenie parametrów granicznych na podstawie normy europejskiej PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Strefa stałego przebywania ludzi (salony, sypialnie): max 29°C.",
        "Strefy łazienkowe i sanitarne: max 33°C.",
        "Strefy brzegowe (do 1 m od okien): max 35°C."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/#webapp-symulator",
    "name": "Symulator Naprężeń Termicznych Posadzki",
    "description": "Interaktywny kalkulator wizualizujący wpływ temperatury zasilania na naprężenia wylewki, temperaturę powierzchni oraz ryzyko pęknięć mechanicznych (uszkodzenia płytek, syndrom ciężkich nóg).",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "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="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path></svg>
            Reżim Temperaturowy
        </div>
        <h2 class="rk-temp-title">Maksymalna temperatura zasilania <span>według PN-EN 1264</span></h2>
        <p class="rk-temp-lead">
            Maksymalna temperatura zasilania instalacji ogrzewania podłogowego w układzie ciągłym wynosi <strong>50°C</strong> zgodnie z wymaganiami normy <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/" class="rk-temp-link">PN-EN 1264</a>. Niedopełnienie tych obostrzeń i wpuszczenie w jastrych parametru rzędu 55–60°C (brak <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/" class="rk-temp-link">zaworu mieszającego</a> na starym kotle) generuje ogromne naprężenia ścinające. Skutkuje to pękaniem płytek, degradacją termiczną paneli i &#8222;syndromem ciężkich nóg&#8221;.
        </p>
    </div>

    <div class="rk-temp-simulator">
        <div class="rk-sim-layout state-safe" id="rk-sim-core">
            
            <div class="rk-sim-controls">
                <div class="rk-slider-box">
                    <div class="rk-slider-header">
                        <span class="rk-slider-label">Zasilanie Układu (T<sub>z</sub>)</span>
                        <span class="rk-slider-value" id="val-supply">35°C</span>
                    </div>
                    <input type="range" class="rk-range-slider" id="rk-temp-slider" min="25" max="65" step="1" value="35">
                </div>

                <div class="rk-svg-stage">
                    <svg class="rk-cross-section" viewBox="0 0 200 150" xmlns="http://www.w3.org/2000/svg">
                        <rect x="10" y="110" width="180" height="30" fill="#cbd5e1" rx="4"/>
                        <circle cx="30" cy="125" r="2" fill="#94a3b8"/> <circle cx="50" cy="115" r="2" fill="#94a3b8"/>
                        <rect x="10" y="50" width="180" height="60" fill="#e2e8f0" rx="2"/>
                        <rect x="10" y="40" width="43" height="8" fill="#94a3b8" rx="1"/>
                        <rect x="55" y="40" width="43" height="8" fill="#94a3b8" rx="1"/>
                        <rect x="100" y="40" width="43" height="8" fill="#94a3b8" rx="1"/>
                        <rect x="145" y="40" width="45" height="8" fill="#94a3b8" rx="1"/>
                        <circle class="anim-pipe-color" cx="100" cy="85" r="12" fill="#10b981" stroke="#047857" stroke-width="3"/>
                        <circle cx="100" cy="85" r="6" fill="rgba(255,255,255,0.4)"/>
                        <path class="anim-heat-ray" d="M 80 70 Q 75 50 80 30" fill="none" stroke="#10b981" stroke-width="2" stroke-linecap="round"/>
                        <path class="anim-heat-ray" d="M 100 65 Q 100 45 100 25" fill="none" stroke="#10b981" stroke-width="2" stroke-linecap="round"/>
                        <path class="anim-heat-ray" d="M 120 70 Q 125 50 120 30" fill="none" stroke="#10b981" stroke-width="2" stroke-linecap="round"/>
                        <path class="anim-crack-path" d="M 98 40 L 92 60 L 105 80 L 100 110" fill="none" stroke="#0f172a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                    </svg>
                </div>
            </div>

            <div class="rk-sim-metrics">
                <div class="rk-metric-card">
                    <div class="rk-metric-title">Temperatura Posadzki</div>
                    <div class="rk-metric-val" id="val-surface">24.5°C</div>
                    <div class="rk-metric-desc" id="desc-surface">Pełny komfort. Zgodnie z PN-EN 1264.</div>
                </div>
                
                <div class="rk-metric-card">
                    <div class="rk-metric-title">Naprężenia Wylewki</div>
                    <div class="rk-metric-val" id="val-stress">0.4 MPa</div>
                    <div class="rk-metric-desc" id="desc-stress">Stabilna praca w granicach wytrzymałości jastrychu.</div>
                </div>

                <div class="rk-alert-box">
                    <strong>Koszt naprawy: min. 15 000 PLN!</strong>
                    Naprężenia ścinające przekraczają wytrzymałość betonu na rozciąganie. Bezpowrotne odklejenie gresu i degradacja rur.
                </div>
            </div>

        </div>
    </div>

    <div class="rk-zones-info">
        <h3>Wartości graniczne temperatur (Powierzchnia)</h3>
        <div class="rk-zones-grid">
            
            <div class="rk-zone-item">
                <div class="rk-zone-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
                </div>
                <h4>Salony i Sypialnie</h4>
                <div class="rk-zone-limit">max 29°C</div>
                <p class="rk-zone-text">Strefa stałego przebywania ludzi. Zabezpiecza przed &#8222;syndromem ciężkich nóg&#8221;.</p>
            </div>

            <div class="rk-zone-item">
                <div class="rk-zone-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12h20"></path><path d="M5 12v5a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-5"></path><path d="M7 21h10"></path><path d="M12 12v-5"></path><path d="M8 7h8"></path><path d="M12 7V4"></path><path d="M10 4h4"></path></svg>
                </div>
                <h4>Łazienki i Sanitarne</h4>
                <div class="rk-zone-limit">max 33°C</div>
                <p class="rk-zone-text">Dopuszcza się wyższą temperaturę z uwagi na zwiększone zapotrzebowanie na komfort (bosa stopa).</p>
            </div>

            <div class="rk-zone-item">
                <div class="rk-zone-icon">
                    <svg width="22" height="22" 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="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
                </div>
                <h4>Strefy Brzegowe</h4>
                <div class="rk-zone-limit">max 35°C</div>
                <p class="rk-zone-text">Pas o szerokości do 1 m <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/" class="rk-temp-link" style="color:var(--rk-temp-muted);">wzdłuż dużych przeszkleń</a> w celu kompensacji strat zimna.</p>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-temp-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener interaktywny należy do serwisu Projekt-Ogrzewania.pl. Uruchamianie na nieautoryzowanej domenie jest zabronione prawem.
                </div>
            `;
            return;
        }
    }

    // Logika Symulatora Temperatur
    const slider = document.getElementById('rk-temp-slider');
    const layout = document.getElementById('rk-sim-core');
    
    const valSupply = document.getElementById('val-supply');
    const valSurface = document.getElementById('val-surface');
    const valStress = document.getElementById('val-stress');
    const descSurface = document.getElementById('desc-surface');
    const descStress = document.getElementById('desc-stress');
    const sliderThumb = document.querySelector('.rk-range-slider');

    function updateSimulation() {
        const temp = parseInt(slider.value);
        valSupply.textContent = temp + '°C';

        // Prosta interpolacja fizyczna dla estymacji:
        // Powierzchnia rośnie z temperaturą zasilania.
        const surfaceTemp = (20 + (temp - 25) * 0.45).toFixed(1);
        valSurface.textContent = surfaceTemp + '°C';

        // Naprężenia w betonie rosną eksponencjalnie pow. 40 stopni
        let stress = 0.2 + ((temp - 25) * 0.02);
        if(temp > 45) {
            stress = stress + Math.pow((temp - 45)*0.15, 2);
        }
        valStress.textContent = stress.toFixed(1) + ' MPa';

        // Stany logiczne
        layout.classList.remove('state-safe', 'state-warn', 'state-danger');

        if (temp <= 40) {
            layout.classList.add('state-safe');
            descSurface.textContent = 'Pełny komfort. Zgodnie z PN-EN 1264.';
            descStress.textContent = 'Stabilna praca w granicach wytrzymałości jastrychu.';
            sliderThumb.style.setProperty('--rk-temp-safe', '#10b981'); // update thumb via custom prop if needed (CSS takes care mostly)
            slider.style.background = `linear-gradient(to right, #10b981 ${(temp-25)/40*100}%, #cbd5e1 ${(temp-25)/40*100}%)`;
        } 
        else if (temp > 40 && temp <= 50) {
            layout.classList.add('state-warn');
            descSurface.textContent = 'Temperatura na granicy dopuszczalności. Ryzyko dyskomfortu (syndrom ciężkich nóg).';
            descStress.textContent = 'Zwiększona praca płyty grzewczej. Dylatacje mocno obciążone.';
            slider.style.background = `linear-gradient(to right, #f59e0b ${(temp-25)/40*100}%, #cbd5e1 ${(temp-25)/40*100}%)`;
        } 
        else if (temp > 50) {
            layout.classList.add('state-danger');
            descSurface.textContent = 'Przekroczenie normy! Degardacja klejów i uszkodzenia paneli.';
            descStress.textContent = 'Naprężenia ścinające wykraczają poza wytrzymałość betonu na rozciąganie.';
            slider.style.background = `linear-gradient(to right, #ef4444 ${(temp-25)/40*100}%, #cbd5e1 ${(temp-25)/40*100}%)`;
        }
    }

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



<style>
:root {
    --rk-pitch-dark: #0f172a;
    --rk-pitch-darker: #020617;
    --rk-pitch-brand: #10b981; /* Zielony / szmaragdowy akcent efektywności OZE i SCOP */
    --rk-pitch-brand-light: #e6f4ea;
    --rk-pitch-accent: #3b82f6; /* Niebieski dla pompy ciepła i krzywej grzewczej */
    --rk-pitch-bg: #ffffff;
    --rk-pitch-surface: #f8fafc;
    --rk-pitch-border: #cbd5e1;
    --rk-pitch-text: #334155;
    --rk-pitch-muted: #64748b;
    --rk-pitch-shadow: 0 15px 35px -10px rgba(16, 185, 129, 0.1);
}

.rk-pitch-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-pitch-bg);
    border-radius: 24px;
    box-shadow: var(--rk-pitch-shadow);
    border: 1px solid var(--rk-pitch-border);
    overflow: hidden;
}

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

.rk-pitch-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #34d399;
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(52, 211, 153, 0.3);
}

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

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

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

.rk-pitch-link {
    color: #34d399;
    text-decoration: none;
    border-bottom: 1px dashed rgba(52, 211, 153, 0.4);
    font-weight: 600;
    transition: all 0.3s;
}

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

/* --- INTERAKTYWNY PANEL OPTYMALIZACJI --- */
.rk-pitch-interactive {
    padding: 40px 50px;
    background: var(--rk-pitch-surface);
}

.rk-sim-layout {
    display: grid;
    grid-template-columns: 1fr 340px;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-pitch-border);
    padding: 30px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

/* Lewa Strona - Wybór rozstawu i wykres */
.rk-sim-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-pitch-selector-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-pitch-dark);
    text-transform: uppercase;
    margin: 0 0 12px 0;
    letter-spacing: 0.5px;
}

/* Menu Przełączników Kafelkowych */
.rk-pitch-tiles {
    display: flex;
    gap: 12px;
}

.rk-pitch-tile-btn {
    flex: 1;
    background: var(--rk-pitch-surface);
    border: 2px solid var(--rk-pitch-border);
    border-radius: 14px;
    padding: 15px 10px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.rk-pitch-tile-btn:hover {
    border-color: var(--rk-pitch-accent);
    background: #f0f6ff;
}

.rk-pitch-tile-btn.active {
    border-color: var(--rk-pitch-brand);
    background: var(--rk-pitch-brand-light);
    box-shadow: 0 4px 12px rgba(16, 185, 129, 0.15);
}

.rk-tile-step {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-pitch-dark);
}

.rk-tile-label {
    font-size: 12px;
    font-weight: 700;
    color: var(--rk-pitch-muted);
}

.rk-pitch-tile-btn.active .rk-tile-step { color: #065f46; }
.rk-pitch-tile-btn.active .rk-tile-label { color: #047857; }

/* Statyczny moduł graficzny SVG */
.rk-svg-viewport {
    background: #f8fafc;
    border-radius: 16px;
    border: 1px dashed var(--rk-pitch-border);
    padding: 25px;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 180px;
}

.rk-geometry-svg { width: 100%; max-width: 320px; height: auto; }

/* Dynamiczne stany CSS mapowane przez JS na klasę kontenera głównego */
.rk-pipe-line { fill: none; stroke: var(--rk-pitch-accent); stroke-width: 5; stroke-linecap: round; transition: all 0.4s ease; }
.rk-heat-circle { fill: #fca5a5; opacity: 0.4; transition: all 0.4s ease; }

/* Stany geometrii ułożenia rur */
.geom-10 .rk-pipe-15, .geom-10 .rk-pipe-20 { display: none; }
.geom-15 .rk-pipe-10, .geom-15 .rk-pipe-20 { display: none; }
.geom-20 .rk-pipe-10, .geom-20 .rk-pipe-15 { display: none; }

/* Prawa Strona - Parametry Techniczno-Ekonomiczne */
.rk-sim-results {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-tech-card {
    background: #ffffff;
    border: 1px solid var(--rk-pitch-border);
    border-radius: 12px;
    padding: 18px 20px;
    position: relative;
    overflow: hidden;
}

.rk-tech-card::before {
    content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
    background: var(--rk-pitch-brand);
}

.rk-card-label {
    font-size: 11px;
    color: var(--rk-pitch-muted);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 6px;
}

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

.rk-card-comment {
    font-size: 13px;
    color: var(--rk-pitch-text);
    margin-top: 6px;
    line-height: 1.4;
}

/* Panel Błędu Krytycznego (Garaż/Sypialnia co 20 przy przeszkleniach) */
.rk-crit-panel {
    display: none;
    background: #fef2f2;
    border: 1px solid #fecaca;
    padding: 15px;
    border-radius: 12px;
    color: #991b1b;
    font-size: 13px;
    line-height: 1.5;
    animation: panelPop 0.3s ease-out;
}
.rk-crit-panel strong { font-weight: 800; color: #7f1d1d; display: block; font-size: 14px; margin-bottom: 3px; }
.geom-20 .rk-crit-panel { display: block; }

@keyframes panelPop {
    from { opacity: 0; transform: scale(0.96); }
    to { opacity: 1; transform: scale(1); }
}

@media (max-width: 768px) {
    .rk-pitch-header, .rk-pitch-interactive { padding: 30px 20px; }
    .rk-pitch-title { font-size: 24px; }
    .rk-sim-layout { grid-template-columns: 1fr; padding: 20px; gap: 25px; }
    .rk-svg-viewport { min-height: 160px; }
    .rk-pitch-tiles { gap: 8px; }
    .rk-pitch-tile-btn { padding: 12px 6px; }
    .rk-tile-step { font-size: 16px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/"
    },
    "headline": "Jaki rozstaw rur ogrzewania podłogowego zastosować przy pompie ciepła?",
    "description": "Analiza wpływu geometrii rozstawu rur (10 cm vs 15 cm) na temperaturę zasilania pompy ciepła, współczynniki COP/SCOP oraz roczne oszczędności eksploatacyjne.",
    "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-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/#dataset",
    "name": "Zestawienie Wydajności i Zużycia Rur w Zależności od Rozstawu",
    "description": "Twarde dane przeliczeniowe łączące rozstaw rur (co 10, 15, 20 cm) z jednostkowym zużyciem materiału oraz maksymalną mocą cieplną posadzki gresowej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "rozstaw rur pompa ciepła",
      "zużycie rury na metr kwadratowy",
      "maksymalna moc grzewcza podłogówki",
      "krzywa grzewcza pompy ciepła",
      "obniżenie temperatury zasilania SCOP"
    ],
    "measurementTechnique": "Analiza numeryczna oporów przewodzenia jastrychu wg normy PN-EN 1264 i symulacja strat COP sprężarek inwerterowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rozstaw 10 cm: Zużycie 10,0 mb/m2, moc 75-85 W/m2 przy Tz=35°C. Idealny do łazienek.",
        "Rozstaw 15 cm: Zużycie 6,7 mb/m2, moc 55-65 W/m2 przy Tz=35°C. Standard salonowy.",
        "Rozstaw 20 cm: Zużycie 5,0 mb/m2, moc 35-45 W/m2 przy Tz=35°C. Ryzyko taktowania pompy."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/#webapp",
    "name": "Interaktywny Symulator Geometrii Pętli Grzewczych",
    "description": "Narzędzie pozwalające przełączać gęstość ułożenia rur (10, 15, 20 cm) i obserwować w czasie rzeczywistym zużycie mb rury, wymaganą temperaturę zasilania oraz prognozowane koszty eksploatacji.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-pitch-container" id="rk-pitch-app">
    
    <div class="rk-pitch-header">
        <div class="rk-pitch-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
            Geometria Układu OZE
        </div>
        <h2 class="rk-pitch-title">Jaki rozstaw rur ogrzewania podłogowego <span>zastosować przy pompie ciepła?</span></h2>
        <p class="rk-pitch-lead">
            Optymalny rozstaw rur grzewczych przy zasilaniu z niskotemperaturowej pompy ciepła wynosi <strong>10 cm</strong> w łazienkach oraz strefach brzegowych oraz <strong>15 cm</strong> w pozostałych pomieszczeniach mieszkalnych. Zco gęstszego rozstawu pozwala obniżyć temperaturę zasilania o <strong>4–6°C</strong> przy zachowaniu tej samej mocy grzewczej posadzki. Każde obniżenie temperatury wody o 1°C zwiększa efektywność średnioroczną pompy ciepła (współczynnik SCOP) o ok. <strong>2,5%</strong>, co bezpośrednio tnie rachunki za energię elektryczną.
        </p>
    </div>

    <div class="rk-pitch-interactive">
        <div class="rk-sim-layout geom-15" id="rk-pitch-core">
            
            <div class="rk-sim-controls">
                <div>
                    <h3 class="rk-pitch-selector-title">Wybierz gęstość ułożenia przewodów:</h3>
                    <div class="rk-pitch-tiles">
                        <button class="rk-pitch-tile-btn" data-geom="10">
                            <span class="rk-tile-step">co 10 cm</span>
                            <span class="rk-tile-label">Gęsty (Łazienki)</span>
                        </button>
                        <button class="rk-pitch-tile-btn active" data-geom="15">
                            <span class="rk-tile-step">co 15 cm</span>
                            <span class="rk-tile-label">Standard (Pokoje)</span>
                        </button>
                        <button class="rk-pitch-tile-btn" data-geom="20">
                            <span class="rk-tile-step">co 20 cm</span>
                            <span class="rk-tile-label">Rzadki (Garaże)</span>
                        </button>
                    </div>
                </div>

                <div class="rk-svg-viewport">
                    <svg class="rk-geometry-svg" viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
                        <rect x="5" y="30" width="190" height="60" fill="#e2e8f0" rx="4" stroke="#cbd5e1" stroke-width="1"/>
                        
                        <g class="rk-pipe-10">
                            <circle class="rk-heat-circle" cx="20" cy="65" r="16"/><circle class="rk-heat-circle" cx="50" cy="65" r="16"/><circle class="rk-heat-circle" cx="80" cy="65" r="16"/><circle class="rk-heat-circle" cx="110" cy="65" r="16"/><circle class="rk-heat-circle" cx="140" cy="65" r="16"/><circle class="rk-heat-circle" cx="170" cy="65" r="16"/>
                            <circle class="rk-pipe-line" cx="20" cy="65" r="6"/><circle class="rk-pipe-line" cx="50" cy="65" r="6"/><circle class="rk-pipe-line" cx="80" cy="65" r="6"/><circle class="rk-pipe-line" cx="110" cy="65" r="6"/><circle class="rk-pipe-line" cx="140" cy="65" r="6"/><circle class="rk-pipe-line" cx="170" cy="65" r="6"/>
                        </g>

                        <g class="rk-pipe-15">
                            <circle class="rk-heat-circle" cx="30" cy="65" r="22"/><circle class="rk-heat-circle" cx="85" cy="65" r="22"/><circle class="rk-heat-circle" cx="140" cy="65" r="22"/>
                            <circle class="rk-pipe-line" cx="30" cy="65" r="6"/><circle class="rk-pipe-line" cx="85" cy="65" r="6"/><circle class="rk-pipe-line" cx="140" cy="65" r="6"/>
                        </g>

                        <g class="rk-pipe-20">
                            <circle class="rk-heat-circle" cx="40" cy="65" r="28"/><circle class="rk-heat-circle" cx="130" cy="65" r="28"/>
                            <circle class="rk-pipe-line" cx="40" cy="65" r="6"/><circle class="rk-pipe-line" cx="130" cy="65" r="6"/>
                        </g>
                    </svg>
                </div>
            </div>

            <div class="rk-sim-results">
                <div class="rk-tech-card">
                    <div class="rk-card-label">Zużycie rury grzewczej</div>
                    <div class="rk-card-value" id="val-usage">6,7 mb/m²</div>
                    <div class="rk-card-comment">Standard inżynieryjny dla salonów i sypialni.</div>
                </div>

                <div class="rk-tech-card">
                    <div class="rk-card-label">Maksymalna moc (T<sub>z</sub> = 35°C)</div>
                    <div class="rk-card-value" id="val-power">55 – 65 W/m²</div>
                    <div class="rk-card-comment">Idealnie pokrywa zapotrzebowanie budynków WT 2021 z <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowego-czy-to-sie-oplaca/" class="rk-pitch-link" style="color:var(--rk-pitch-muted);">rekuperacją</a>.</div>
                </div>

                <div class="rk-tech-card">
                    <div class="rk-card-label">Parametry Krzywej Grzewczej</div>
                    <div class="rk-card-value" id="val-curve">35 / 30 °C</div>
                    <div class="rk-card-comment" id="val-cop-comment">Zapewnia wysoki współczynnik COP pompy na poziomie ok. 4,2.</div>
                </div>

                <div class="rk-crit-panel">
                    <strong>Błąd Krytyczny Projektu!</strong>
                    Rzadki układ rur w salonie z dużymi przeszkleniami wymusza podniesienie zasilania do 45°C. Współczynnik COP spada z 4,2 do 3,1, generując <strong>dodatkowy koszt 1200–1800 PLN</strong> co sezon.
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-pitch-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener inżynieryjny należy do serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu źródłowego.
                </div>
            `;
            return;
        }
    }

    // Logika kafelków interaktywnych
    const core = document.getElementById('rk-pitch-core');
    const tiles = document.querySelectorAll('.rk-pitch-tile-btn');
    
    const valUsage = document.getElementById('val-usage');
    const valPower = document.getElementById('val-power');
    const valCurve = document.getElementById('val-curve');
    const valCopComment = document.getElementById('val-cop-comment');

    const dataMap = {
        "10": {
            usage: "10,0 mb/m²",
            power: "75 – 85 W/m²",
            curve: "30 / 26 °C",
            comment: "Maksymalna efektywność pompy ciepła. Standard dla łazienek i stref brzegowych.",
            className: "geom-10"
        },
        "15": {
            usage: "6,7 mb/m²",
            power: "55 – 65 W/m²",
            curve: "35 / 30 °C",
            comment: "Zapewnia wysoki współczynnik COP pompy na poziomie ok. 4,2.",
            className: "geom-15"
        },
        "20": {
            usage: "5,0 mb/m²",
            power: "35 – 45 W/m²",
            curve: "45 / 40 °C",
            comment: "Drastyczny spadek sprawności sprężarki pompy ciepła.",
            className: "geom-20"
        }
    };

    tiles.forEach(tile => {
        tile.addEventListener('click', function() {
            tiles.forEach(t => t.classList.remove('active'));
            this.classList.add('active');

            const geom = this.getAttribute('data-geom');
            const data = dataMap[geom];

            // Aktualizacja metryk technicznych
            valUsage.textContent = data.usage;
            valPower.textContent = data.power;
            valCurve.textContent = data.curve;
            valCopComment.textContent = data.comment;

            // Aktualizacja rzutu geometrycznego przez klasy CSS
            core.className = "rk-sim-layout " + data.className;
        });
    });
});
</script>



<style>
:root {
    --rk-loop-dark: #0f172a;
    --rk-loop-darker: #020617;
    --rk-loop-primary: #0ea5e9; /* Hydronic Blue */
    --rk-loop-primary-light: #e0f2fe;
    --rk-loop-success: #10b981;
    --rk-loop-warning: #f59e0b;
    --rk-loop-danger: #ef4444;
    --rk-loop-bg: #ffffff;
    --rk-loop-surface: #f8fafc;
    --rk-loop-border: #cbd5e1;
    --rk-loop-text: #334155;
    --rk-loop-muted: #64748b;
    --rk-loop-shadow: 0 15px 35px -10px rgba(14, 165, 233, 0.15);
}

.rk-loop-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-loop-bg);
    border-radius: 24px;
    box-shadow: var(--rk-loop-shadow);
    border: 1px solid var(--rk-loop-border);
    overflow: hidden;
}

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

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

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

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

.rk-loop-link {
    color: #38bdf8;
    text-decoration: none;
    border-bottom: 1px dashed rgba(56, 189, 248, 0.4);
    font-weight: 600;
    transition: all 0.3s;
}

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

/* --- PANEL INTERAKTYWNY --- */
.rk-loop-interactive {
    padding: 40px 50px;
    background: var(--rk-loop-surface);
}

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

.rk-sim-grid {
    display: grid;
    grid-template-columns: 1fr 340px;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-loop-border);
    padding: 30px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

/* Lewa sekcja - Średnica, Suwak i Wykres */
.rk-sim-workspace {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

/* Selektor Średnic (Pigułki) */
.rk-diameter-selector {
    display: flex;
    gap: 10px;
    background: var(--rk-loop-surface);
    padding: 6px;
    border-radius: 14px;
    border: 1px solid var(--rk-loop-border);
}

.rk-diameter-btn {
    flex: 1;
    padding: 12px;
    background: transparent;
    border: none;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-loop-muted);
    cursor: pointer;
    transition: all 0.3s ease;
    text-align: center;
}

.rk-diameter-btn:hover {
    color: var(--rk-loop-primary);
}

.rk-diameter-btn.active {
    background: var(--rk-loop-primary);
    color: #ffffff;
    box-shadow: 0 4px 10px rgba(14, 165, 233, 0.25);
}

/* Box Suwaka Długości */
.rk-length-slider-box {
    background: var(--rk-loop-surface);
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-loop-border);
}

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

.rk-slider-title {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-loop-dark);
    text-transform: uppercase;
}

.rk-slider-counter {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-loop-primary);
    transition: color 0.3s;
}

.rk-main-range {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #cbd5e1;
    outline: none;
}

.rk-main-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--rk-loop-primary);
    cursor: pointer;
    border: 4px solid #ffffff;
    box-shadow: 0 2px 6px rgba(0,0,0,0.15);
    transition: transform 0.1s;
}

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

/* Wizualizacja SVG (Zegar i Rotametr) */
.rk-svg-viewport {
    background: #ffffff;
    border-radius: 16px;
    border: 1px dashed var(--rk-loop-border);
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 180px;
}

.rk-hydraulic-svg {
    width: 100%;
    max-width: 380px;
    height: auto;
}

/* Animacje i Przejścia elementów SVG */
.svg-gauge-pointer { transform-origin: 75px 55px; transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); stroke: var(--rk-loop-success); }
.svg-rotameter-float { transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); fill: #334155; }
.svg-pipe-flow { stroke-dasharray: 8; animation: hydraulicFlow 2s linear infinite; stroke: var(--rk-loop-primary); }

@keyframes hydraulicFlow { to { stroke-dashoffset: -16; } }

/* Klasy stanów wtryskiwane przez JS */
.state-safe .svg-gauge-pointer { stroke: var(--rk-loop-success); }
.state-warn .svg-gauge-pointer { stroke: var(--rk-loop-warning); }
.state-danger .svg-gauge-pointer { stroke: var(--rk-loop-danger); }
.state-danger .svg-pipe-flow { animation-duration: 8s; stroke: #94a3b8; } /* Drastyczny spadek przepływu */

/* Prawa sekcja - Wyświetlacz Wyników */
.rk-sim-outputs {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-output-card {
    background: #ffffff;
    border: 1px solid var(--rk-loop-border);
    border-radius: 12px;
    padding: 16px 20px;
    position: relative;
    overflow: hidden;
}

.rk-output-card::before {
    content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px;
    background: var(--rk-loop-success);
    transition: background-color 0.3s;
}

.state-safe .rk-card-hydraulics::before { background: var(--rk-loop-success); }
.state-warn .rk-card-hydraulics::before { background: var(--rk-loop-warning); }
.state-danger .rk-card-hydraulics::before { background: var(--rk-loop-danger); }

.rk-card-label {
    font-size: 11px;
    color: var(--rk-loop-muted);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 6px;
}

.rk-card-value {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-loop-dark);
    transition: color 0.3s;
}

.state-safe .rk-val-status { color: var(--rk-loop-success); }
.state-warn .rk-val-status { color: var(--rk-loop-warning); }
.state-danger .rk-val-status { color: var(--rk-loop-danger); }

.rk-card-comment {
    font-size: 13px;
    color: var(--rk-loop-text);
    margin-top: 6px;
    line-height: 1.4;
}

/* Panel Błędu Krytycznego (Za długa pętla) */
.rk-error-panel {
    display: none;
    background: #fef2f2;
    border: 1px solid #fecaca;
    padding: 15px;
    border-radius: 12px;
    color: #991b1b;
    font-size: 13px;
    line-height: 1.5;
    animation: panelPop 0.3s ease-out;
}
.rk-error-panel strong { font-weight: 800; color: #7f1d1d; display: block; font-size: 14px; margin-bottom: 4px; }
.state-danger .rk-error-panel { display: block; }

@keyframes panelPop {
    from { opacity: 0; transform: scale(0.96); }
    to { opacity: 1; transform: scale(1); }
}

/* --- TABELA LIMITÓW --- */
.rk-loop-limits {
    padding: 35px 50px 45px;
    background: #ffffff;
    border-top: 1px solid var(--rk-loop-border);
}

.rk-loop-limits h3 {
    margin: 0 0 20px 0;
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-loop-dark);
}

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

.rk-limit-item {
    background: var(--rk-loop-surface);
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-loop-border);
    text-align: center;
}

.rk-limit-diameter {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-loop-muted);
    text-transform: uppercase;
    margin-bottom: 5px;
}

.rk-limit-length {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-loop-primary);
    margin-bottom: 8px;
}

.rk-limit-desc {
    font-size: 13px;
    color: var(--rk-loop-text);
    line-height: 1.5;
    margin: 0;
}

@media (max-width: 768px) {
    .rk-loop-header, .rk-loop-interactive, .rk-loop-limits { padding: 30px 20px; }
    .rk-loop-header h2 { font-size: 24px; }
    .rk-sim-grid { grid-template-columns: 1fr; padding: 20px; gap: 25px; }
    .rk-limits-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-diameter-selector { flex-direction: column; gap: 6px; }
    .rk-diameter-btn { padding: 10px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/"
    },
    "headline": "Ile wynosi maksymalna długość pętli ogrzewania podłogowego dla rury PEX/PERT 16x2 mm?",
    "description": "Zgodnie z kryteriami inżynieryjnymi, maksymalna długość obwodu 16 mm wynosi 120 m. Przekroczenie limitu 20 kPa blokuje równoważenie instalacji na rotametrach rozdzielacza.",
    "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-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#dataset",
    "name": "Graniczne opory hydrauliczne pętli grzewczych PEX/PERT",
    "description": "Zestawienie fizycznych limitów długości obwodów ogrzewania podłogowego w relacji do średnicy zewnętrznej i dopuszczalnych spadków ciśnień.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "maksymalna długość pętli podłogówki",
      "rura pex 16mm opory",
      "strata ciśnienia w obwodzie",
      "rotametr rozdzielacza przepływ",
      "zrównoważenie hydrauliczne instalacji"
    ],
    "measurementTechnique": "Modelowanie spadków ciśnień z uwzględnieniem chropowatości bezwzględnej rur plastikowych oraz lepkości kinematicznej wody przy średniej temperaturze pracy.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rura o średnicy 16x2 mm: Absolutne maksimum wynosi 120 m. Rekomendowana długość robocza to 80-100 m.",
        "Rura o średnicy 17x2 mm: Maksymalny limit wynosi 140 m.",
        "Rura o średnicy 20x2 mm: Maksymalna długość obwodu to 160 m."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#webapp",
    "name": "Interaktywny Symulator Oporów Hydraulicznych Pętli",
    "description": "Aplikacja obliczeniowa pozwalająca dynamicznie zmieniać długość obwodu oraz średnicę rury, prezentując w czasie rzeczywistym spadek ciśnienia (kPa) i wpływ na rotametry.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Canvas/SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-loop-container" id="rk-loop-app">
    
    <div class="rk-loop-header">
        <div class="rk-loop-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21.5 2v6h-6M21.34 15.57a10 10 0 1 1-.57-8.38l5.67-5.67"></path></svg>
            Kryterium Hydrauliczne
        </div>
        <h2>Ile wynosi maksymalna długość pętli ogrzewania podłogowego dla rury PEX/PERT 16&#215;2 mm?</h2>
        <p class="rk-loop-lead">
            Maksymalna dopuszczalna długość jednej pętli grzewczej dla najpopularniejszej średnicy rury 16&#215;2 mm wynosi <strong>120 m</strong> (wliczając odcinki przyłączeniowe). Przekroczenie tej granicy powoduje drastyczny wzrost oporów hydraulicznych powyżej dopuszczalnej wartości <strong>20 kPa (0,2 bar)</strong>. Konsekwencją jest całkowity brak możliwości zrównoważenia hydraulicznego układu na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" class="rk-loop-link">rotametrach</a>, co prowadzi do „upośledzenia przepływu” i permanentnego niedogrzania strefy mieszkalnej.
        </p>
    </div>

    <div class="rk-loop-interactive">
        <h3>Interaktywny Analizator Spadków Ciśnienia</h3>
        <div class="rk-sim-grid state-safe" id="rk-loop-core">
            
            <div class="rk-sim-workspace">
                <div>
                    <div class="rk-pitch-selector-title">Wybierz średnicę zewnętrzną przewodu:</div>
                    <div class="rk-diameter-selector">
                        <button class="rk-diameter-btn active" data-dim="16">rura Ø 16&#215;2 mm</button>
                        <button class="rk-diameter-btn" data-dim="17">rura Ø 17&#215;2 mm</button>
                        <button class="rk-diameter-btn" data-dim="20">rura Ø 20&#215;2 mm</button>
                    </div>
                </div>

                <div class="rk-length-slider-box">
                    <div class="rk-slider-labels">
                        <span class="rk-slider-title">Całkowita Długość Obwodu (L)</span>
                        <span class="rk-slider-counter" id="val-length">90 m</span>
                    </div>
                    <input type="range" class="rk-main-range" id="rk-loop-slider" min="40" max="180" step="5" value="90">
                </div>

                <div class="rk-svg-viewport">
                    <svg class="rk-hydraulic-svg" viewBox="0 0 300 110" xmlns="http://www.w3.org/2000/svg">
                        <g transform="translate(10, 5)">
                            <path d="M 25 85 A 35 35 0 1 1 125 85" fill="none" stroke="#e2e8f0" stroke-width="8" stroke-linecap="round"/>
                            <circle cx="75" cy="55" r="5" fill="#334155"/>
                            <line class="svg-gauge-pointer" x1="75" y1="55" x2="45" y2="55" stroke-width="3" stroke-linecap="round"/>
                            <text x="75" y="100" font-size="11" font-weight="900" fill="#334155" text-anchor="middle">OPÓR (kPa)</text>
                        </g>

                        <g transform="translate(150, 10)">
                            <rect x="0" y="25" width="60" height="40" rx="6" fill="none" stroke="#cbd5e1" stroke-width="2"/>
                            <path d="M 10 45 L 50 45" fill="none" stroke-width="5" stroke-linecap="round" class="svg-pipe-flow"/>
                            <text x="30" y="20" font-size="10" font-weight="800" fill="#64748b" text-anchor="middle">PRZEPŁYW</text>
                        </g>

                        <g transform="translate(230, 5)">
                            <rect x="25" y="15" width="25" height="70" rx="2" fill="#f8fafc" stroke="#64748b" stroke-width="2"/>
                            <line x1="30" y1="30" x2="38" y2="30" stroke="#94a3b8" stroke-width="1"/>
                            <line x1="30" y1="45" x2="43" y2="45" stroke="#94a3b8" stroke-width="1.5"/>
                            <line x1="30" y1="60" x2="38" y2="60" stroke="#94a3b8" stroke-width="1"/>
                            <line x1="30" y1="75" x2="43" y2="75" stroke="#94a3b8" stroke-width="1.5"/>
                            <rect class="svg-rotameter-float" x="28" y="40" width="19" height="6" rx="1"/>
                            <text x="37" y="100" font-size="11" font-weight="900" fill="#334155" text-anchor="middle">L/MIN</text>
                        </g>
                    </svg>
                </div>
            </div>

            <div class="rk-sim-outputs">
                <div class="rk-output-card rk-card-hydraulics">
                    <div class="rk-card-label">Spadek Ciśnienia Pętli</div>
                    <div class="rk-card-value" id="val-pressure">11.2 kPa</div>
                    <div class="rk-card-comment">Układ stabilny. Straty ciśnienia mieszczą się w normatywnym limicie pompy obiegowej.</div>
                </div>

                <div class="rk-output-card rk-card-hydraulics">
                    <div class="rk-card-label">Stan Hydrauliczny Obwodu</div>
                    <div class="rk-card-value rk-val-status" id="val-status">Optymalny</div>
                    <div class="rk-card-comment" id="desc-status">Przepływ laminarany prawidłowy. Rotametr reaguje na nastawę.</div>
                </div>

                <div class="rk-error-panel">
                    <strong>Upośledzenie hydrauliczne pompy!</strong>
                    Opory liniowe rury drastycznie zdławiły przepływ. Rotametr opadł w okolice <strong>0,2 l/min</strong>. Ta pętla będzie całkowicie zimna. Wymagany podział na mniejsze obwody na etapie <a href="https://projekt-ogrzewania.pl/jak-zaplanowac-rozmieszczenie-petli-grzewczych-w-ogrzewaniu-podlogowym/" class="rk-loop-link" style="color: #7f1d1d;">rozmieszczenia obwodów</a>.
                </div>
            </div>

        </div>
    </div>

    <div class="rk-loop-limits">
        <h3>Maksymalne granice długości pętli rur według standardu HVAC</h3>
        <div class="rk-limits-grid">
            
            <div class="rk-limit-item">
                <div class="rk-limit-diameter">Rura Ø 16&#215;2 mm</div>
                <div class="rk-limit-length">max 120 m</div>
                <p class="rk-limit-desc">Absolutny limit dla instalacji domowych. Zalecana inżynierska długość robocza to <strong>80–100 m</strong>.</p>
            </div>

            <div class="rk-limit-item">
                <div class="rk-limit-diameter">Rura Ø 17&#215;2 mm</div>
                <div class="rk-limit-length">max 140 m</div>
                <p class="rk-limit-desc">Zwiększona średnica wewnętrzna pozwala na wydłużenie obwodu przy zachowaniu stabilności hydraulicznej.</p>
            </div>

            <div class="rk-limit-item">
                <div class="rk-limit-diameter">Rura Ø 20&#215;2 mm</div>
                <div class="rk-limit-length">max 160 m</div>
                <p class="rk-limit-desc">Stosowana na dużych przestrzeniach (hale, magazyny, obiekty przemysłowe) ze względu na dużą sztywność gięcia.</p>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-loop-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener inżynieryjny należy do serwisu Projekt-Ogrzewania.pl. Wykryto próbę nieautoryzowanego użycia skryptu.
                </div>
            `;
            return;
        }
    }

    // Zmienne operacyjne i stanowe
    const slider = document.getElementById('rk-loop-slider');
    const layout = document.getElementById('rk-loop-core');
    const dimButtons = document.querySelectorAll('.rk-diameter-btn');

    const valLength = document.getElementById('val-length');
    const valPressure = document.getElementById('val-pressure');
    const valStatus = document.getElementById('val-status');
    const descStatus = document.getElementById('desc-status');

    // Elementy SVG do fizycznej animacji
    const svgPointer = document.querySelector('.svg-gauge-pointer');
    const svgFloat = document.querySelector('.svg-rotameter-float');

    let currentDim = 16; // Domyślna średnica rury

    const limitMap = {
        16: { max: 120, warn: 100, factor: 0.0014 },
        17: { max: 140, warn: 115, factor: 0.0010 },
        20: { max: 160, warn: 135, factor: 0.0006 }
    };

    function recalculateHydraulics() {
        const len = parseInt(slider.value);
        valLength.textContent = len + ' m';

        const config = limitMap[currentDim];

        // Wyliczenie oporów (wzrost kwadratowy ze współczynnikiem dla średnicy)
        let pressure = Math.pow(len, 2) * config.factor;
        valPressure.textContent = pressure.toFixed(1) + ' kPa';

        // Mapowanie parametrów fizycznych na ruch elementów SVG
        // Kąt wskazówki manometru: od -45deg do 135deg
        let angle = -45 + (pressure / 45) * 180;
        if(angle > 140) angle = 140; // Max wychylenie
        svgPointer.style.transform = `rotate(${angle}deg)`;

        // Pozycja pływaka rotametru (y w dół = mniejszy przepływ)
        // Zakres bazowy y: od 20 (max przepływ) do 65 (przepływ zablokowany)
        let floatY = 20 + (pressure / 40) * 45;
        if(floatY > 65) floatY = 65;
        svgFloat.style.transform = `translateY(${floatY - 40}px)`;

        // Zarządzanie stanami wizualnymi i komentarzami inżynierskimi
        layout.classList.remove('state-safe', 'state-warn', 'state-danger');

        if(len <= config.warn) {
            layout.classList.add('state-safe');
            valStatus.textContent = "Optymalny";
            descStatus.textContent = "Przepływ laminarny prawidłowy. Rotametr reaguje na nastawę rozdzielacza.";
        } 
        else if (len > config.warn && len <= config.max) {
            layout.classList.add('state-warn');
            valStatus.textContent = "Ostrzeżenie";
            descStatus.textContent = "Zwiększone opory hydrauliczne. Pompa obiegowa pracuje na wyższym biegu.";
        } 
        else {
            layout.classList.add('state-danger');
            valStatus.textContent = "Przekroczenie limitu";
            descStatus.textContent = "Zablokowanie hydrauliczne obwodu. Brak możliwości wyregulowania pętli.";
        }
    }

    // Obsługa przycisków wyboru średnicy
    dimButtons.forEach(btn => {
        btn.addEventListener('click', function() {
            dimButtons.forEach(b => b.classList.remove('active'));
            this.classList.add('active');
            currentDim = parseInt(this.getAttribute('data-dim'));
            recalculateHydraulics();
        });
    });

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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"></blockquote>



<style>
:root {
    --rk-vessel-dark: #0f172a;
    --rk-vessel-darker: #020617;
    --rk-vessel-brand: #0ea5e9; /* Woda / Błękit */
    --rk-vessel-brand-light: #e0f2fe;
    --rk-vessel-accent: #f43f5e; /* Naczynie wzbiorcze / Czerwień */
    --rk-vessel-success: #10b981;
    --rk-vessel-bg: #ffffff;
    --rk-vessel-surface: #f8fafc;
    --rk-vessel-border: #cbd5e1;
    --rk-vessel-text: #334155;
    --rk-vessel-muted: #64748b;
    --rk-vessel-formula: #1e293b;
    --rk-vessel-shadow: 0 20px 40px -10px rgba(14, 165, 233, 0.15);
}

.rk-vessel-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-vessel-bg);
    border-radius: 24px;
    box-shadow: var(--rk-vessel-shadow);
    border: 1px solid var(--rk-vessel-border);
    overflow: hidden;
}

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

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

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

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

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

.rk-vessel-link {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed rgba(125, 211, 252, 0.4);
    font-weight: 600;
    transition: all 0.3s;
}

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

/* --- INTERAKTYWNY SYMULATOR --- */
.rk-vessel-interactive {
    padding: 40px 50px;
    background: var(--rk-vessel-surface);
}

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

.rk-sim-layout {
    display: grid;
    grid-template-columns: 1fr 360px;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-vessel-border);
    padding: 30px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

/* Kolumna Lewa - Suwaki i parametry */
.rk-sim-controls {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.rk-control-group {
    background: var(--rk-vessel-surface);
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-vessel-border);
}

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

.rk-control-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-vessel-dark);
    text-transform: uppercase;
}

.rk-control-value {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-vessel-brand);
}

/* Suwaki */
.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #cbd5e1;
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-vessel-brand);
    cursor: pointer;
    border: 4px solid #ffffff;
    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.15); }

/* Pigułki rozdzielacza */
.rk-pill-selector {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    margin-top: 10px;
}

.rk-pill-btn {
    flex: 1;
    min-width: 60px;
    padding: 10px 5px;
    background: #ffffff;
    border: 1px solid var(--rk-vessel-border);
    border-radius: 10px;
    font-size: 13px;
    font-weight: 700;
    color: var(--rk-vessel-muted);
    cursor: pointer;
    transition: all 0.2s;
    text-align: center;
}

.rk-pill-btn:hover { border-color: var(--rk-vessel-brand); color: var(--rk-vessel-brand); }
.rk-pill-btn.active { background: var(--rk-vessel-brand); color: #ffffff; border-color: var(--rk-vessel-brand); }

/* Kolumna Prawa - Wyniki i SVG */
.rk-sim-results {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-svg-viewport {
    background: #ffffff;
    border-radius: 16px;
    border: 1px dashed var(--rk-vessel-border);
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 220px;
    position: relative;
}

.rk-vessel-svg { width: 100%; max-width: 250px; height: auto; }

/* SVG Animacje */
.anim-water-level { transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); transform-origin: bottom; }
.anim-diaphragm { transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
.anim-gauge-needle { transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); transform-origin: 75px 55px; }

/* Karty Wyników */
.rk-result-card {
    background: #ffffff;
    border: 1px solid var(--rk-vessel-border);
    border-radius: 12px;
    padding: 15px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-result-card.highlight {
    border-color: var(--rk-vessel-accent);
    background: #fff1f2;
}

.rk-res-label { font-size: 12px; font-weight: 800; color: var(--rk-vessel-muted); text-transform: uppercase; }
.rk-res-value { font-size: 22px; font-weight: 900; color: var(--rk-vessel-dark); }
.highlight .rk-res-label { color: #be123c; }
.highlight .rk-res-value { color: var(--rk-vessel-accent); }

/* --- SEKCJA WZORÓW --- */
.rk-vessel-formulas {
    padding: 0 50px 40px;
    background: var(--rk-vessel-surface);
}

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

.rk-formula-box {
    background: #ffffff;
    border: 1px solid var(--rk-vessel-border);
    border-radius: 16px;
    padding: 25px;
    display: grid;
    grid-template-columns: 350px 1fr;
    gap: 30px;
    align-items: center;
}

.rk-formula-math {
    background: var(--rk-vessel-formula);
    padding: 20px;
    border-radius: 12px;
    color: #f8fafc;
    font-family: 'Courier New', Courier, monospace;
    font-size: 18px;
    font-weight: 700;
    text-align: center;
    border-left: 4px solid var(--rk-vessel-brand);
    letter-spacing: 0.5px;
}

.rk-formula-math sub { font-size: 11px; color: #93c5fd; }
.rk-formula-math span.operator { color: #f43f5e; margin: 0 5px; }

/* Custom Fraction for HTML */
.rk-html-fraction {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    vertical-align: middle;
    margin: 0 5px;
    line-height: 1.2;
}
.rk-html-numerator { border-bottom: 2px solid #cbd5e1; padding: 0 5px; }
.rk-html-denominator { padding: 0 5px; }

.rk-formula-desc h4 { margin: 0 0 10px 0; font-size: 16px; font-weight: 800; color: var(--rk-vessel-dark); }
.rk-formula-desc p { margin: 0; font-size: 14px; line-height: 1.6; color: var(--rk-vessel-text); }
.rk-formula-desc strong { font-weight: 800; color: var(--rk-vessel-dark); }

@media (max-width: 768px) {
    .rk-vessel-header, .rk-vessel-interactive, .rk-vessel-formulas { padding: 30px 20px; }
    .rk-vessel-header h2 { font-size: 24px; }
    .rk-sim-layout, .rk-formula-box { grid-template-columns: 1fr; }
    .rk-formula-box { gap: 15px; padding: 20px; }
    .rk-svg-viewport { min-height: 180px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/ile-wody-miesci-sie-w-1-metrze-rury-pex-pert-16/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/ile-wody-miesci-sie-w-1-metrze-rury-pex-pert-16/"
    },
    "headline": "Ile litrów wody mieści się w instalacji podłogówki i jak dobrać naczynie wzbiorcze?",
    "description": "Procedura obliczeniowa pojemności zładu i naczynia przeponowego według normy PN-EN 12828. Poznaj wzory i kalkulator pojemności rur PEX/PERT 16x2 mm.",
    "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-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/ile-wody-miesci-sie-w-1-metrze-rury-pex-pert-16/#dataset",
    "name": "Algorytm doboru naczynia wzbiorczego PN-EN 12828",
    "description": "Matematyczne zestawienie kroków i współczynników wymaganych do obliczenia całkowitego zładu wodnego i minimalnej pojemności naczynia kompensacyjnego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "pojemność wodna rury pex 16",
      "jak dobrać naczynie wzbiorcze",
      "wzór na naczynie przeponowe",
      "zład wody ogrzewanie podłogowe",
      "norma PN-EN 12828"
    ],
    "measurementTechnique": "Szeregowanie algorytmiczne wg norm europejskich, uwzględniające rozszerzalność wody, ciśnienie wstępne i zapas bezpieczeństwa.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Pojemność rur: V_rur = L_calk * 0,113 l/mb",
        "Pojemność instalacji: V_inst = V_rur + V_rozdz + V_buf",
        "Pojemność użytkowa: V_e = V_inst * e * 1,3",
        "Pojemność nominalna: V_n = V_e * ((p_max + 1) / (p_max - p_p))"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/ile-wody-miesci-sie-w-1-metrze-rury-pex-pert-16/#webapp",
    "name": "Kalkulator Pojemności Zładu i Naczynia Wzbiorczego",
    "description": "Interaktywne narzędzie obliczające pojemność całkowitą instalacji ogrzewania podłogowego oraz dobierające normatywną pojemność naczynia przeponowego.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-vessel-container" id="rk-vessel-app">
    
    <div class="rk-vessel-header">
        <div class="rk-vessel-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20"></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Pojemność i Kompensacja
        </div>
        <h2>Ile litrów wody mieści się w instalacji podłogówki i <span>jak dobrać naczynie wzbiorcze?</span></h2>
        <p class="rk-vessel-lead">
            Pojemność wodna jednego metra bieżącego rury PERT/PEX o średnicy 16&#215;2 mm wynosi dokładnie <strong>0,113 litra</strong>. Do obliczenia całkowitej pojemności zładu instalacji należy zsumować objętość rur podłogówki, belek <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/" class="rk-vessel-link">rozdzielacza</a> oraz źródła ciepła (np. <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-vessel-link">bufora</a>). <a href="https://projekt-ogrzewania.pl/naczynie-wzbiorcze/" class="rk-vessel-link">Naczynie wzbiorcze</a> dobiera się w oparciu o normę <strong>PN-EN 12828</strong>, przyjmując minimalny współczynnik rezerwy pojemności na poziomie 4% całkowitej objętości zładu.
        </p>
    </div>

    <div class="rk-vessel-interactive">
        <h3>Kalkulator Zładu i Naczynia Wzbiorczego</h3>
        
        <div class="rk-sim-layout">
            
            <div class="rk-sim-controls">
                
                <div class="rk-control-group">
                    <div class="rk-control-header">
                        <span class="rk-control-label">Długość rur (L<sub>całk</sub>)</span>
                        <span class="rk-control-value" id="val-pipe">800 m</span>
                    </div>
                    <input type="range" class="rk-range-input" id="range-pipe" min="100" max="2500" step="50" value="800">
                </div>

                <div class="rk-control-group">
                    <div class="rk-control-header">
                        <span class="rk-control-label">Zbiornik Buforowy</span>
                        <span class="rk-control-value" id="val-buffer">60 L</span>
                    </div>
                    <input type="range" class="rk-range-input" id="range-buffer" min="0" max="500" step="10" value="60">
                </div>

                <div class="rk-control-group">
                    <div class="rk-control-header">
                        <span class="rk-control-label">Liczba sekcji rozdzielacza</span>
                    </div>
                    <div class="rk-pill-selector">
                        <button class="rk-pill-btn" data-sec="4">4 sek.</button>
                        <button class="rk-pill-btn" data-sec="8">8 sek.</button>
                        <button class="rk-pill-btn active" data-sec="12">12 sek.</button>
                        <button class="rk-pill-btn" data-sec="16">16 sek.</button>
                    </div>
                </div>

            </div>

            <div class="rk-sim-results">
                
                <div class="rk-svg-viewport">
                    <svg class="rk-vessel-svg" viewBox="0 0 200 160" xmlns="http://www.w3.org/2000/svg">
                        <path d="M 70 20 Q 100 10 130 20 L 130 140 Q 100 150 70 140 Z" fill="#e2e8f0" stroke="#94a3b8" stroke-width="4"/>
                        <path class="anim-diaphragm" id="svg-diaphragm" d="M 72 80 Q 100 110 128 80" fill="none" stroke="#334155" stroke-width="3" stroke-dasharray="4"/>
                        <g transform="translate(0, 145)">
                            <path class="anim-water-level" id="svg-water" d="M 72 -5 Q 100 5 128 -5 L 128 -65 Q 100 -55 72 -65 Z" fill="#0ea5e9" opacity="0.8"/>
                        </g>
                        <rect x="95" y="145" width="10" height="15" fill="#64748b"/>
                        <path d="M 85 155 L 115 155" fill="none" stroke="#64748b" stroke-width="4"/>
                        
                        <g transform="translate(150, 40)">
                            <circle cx="20" cy="20" r="18" fill="#ffffff" stroke="#cbd5e1" stroke-width="3"/>
                            <path d="M 8 20 A 12 12 0 0 1 32 20" fill="none" stroke="#10b981" stroke-width="4"/>
                            <path d="M 32 20 A 12 12 0 0 1 12 28" fill="none" stroke="#f43f5e" stroke-width="4"/>
                            <circle cx="20" cy="20" r="3" fill="#334155"/>
                            <line class="anim-gauge-needle" id="svg-needle" x1="20" y1="20" x2="10" y2="10" stroke="#334155" stroke-width="2" stroke-linecap="round" style="transform-origin: 20px 20px;"/>
                        </g>
                    </svg>
                </div>

                <div class="rk-result-card">
                    <div class="rk-res-label">Całkowity zład (V<sub>inst</sub>)</div>
                    <div class="rk-res-value" id="res-total">156.4 L</div>
                </div>

                <div class="rk-result-card highlight">
                    <div class="rk-res-label">Min. Naczynie (V<sub>n</sub>)</div>
                    <div class="rk-res-value" id="res-vessel">12 L</div>
                </div>

            </div>

        </div>
    </div>

    <div class="rk-vessel-formulas">
        <h3 style="font-size: 20px; font-weight: 800; color: var(--rk-vessel-dark); margin: 0 0 20px 0; text-align: center;">Procedura obliczeniowa wg PN-EN 12828</h3>
        
        <div class="rk-formula-grid">
            
            <div class="rk-formula-box">
                <div class="rk-formula-math">
                    V<sub>rur</sub> = L<sub>całk</sub> <span class="operator">&times;</span> 0,113 <span style="font-size:12px;color:#94a3b8;">l/mb</span>
                </div>
                <div class="rk-formula-desc">
                    <h4>1. Pojemność wodna rur (V<sub>rur</sub>)</h4>
                    <p>Mnożymy całkowitą długość zastosowanej rury grzewczej PEX 16&#215;2 mm przez jej stałą pojemność wewnętrzną wynoszącą <strong>0,113 litra na metr bieżący</strong>.</p>
                </div>
            </div>

            <div class="rk-formula-box">
                <div class="rk-formula-math">
                    V<sub>inst</sub> = V<sub>rur</sub> <span class="operator">+</span> V<sub>rozdz</sub> <span class="operator">+</span> V<sub>buf</sub>
                </div>
                <div class="rk-formula-desc">
                    <h4>2. Całkowita pojemność instalacji (V<sub>inst</sub>)</h4>
                    <p>Gdzie <strong>V<sub>rozdz</sub></strong> to objętość belek i armatury (średnio 0,5 l na każdą sekcję rozdzielacza), a <strong>V<sub>buf</sub></strong> to pojemność ewentualnego zbiornika buforowego lub sprzęgła.</p>
                </div>
            </div>

            <div class="rk-formula-box">
                <div class="rk-formula-math">
                    V<sub>e</sub> = V<sub>inst</sub> <span class="operator">&times;</span> e <span class="operator">&times;</span> 1,3
                </div>
                <div class="rk-formula-desc">
                    <h4>3. Pojemność użytkowa naczynia (V<sub>e</sub>)</h4>
                    <p>Gdzie <strong>e</strong> to współczynnik rozszerzalności wody (dla t<sub>z</sub> = 45°C wynosi <strong>0,0095</strong>), a <strong>1,3</strong> to wymagany współczynnik bezpieczeństwa rezerwy wody.</p>
                </div>
            </div>

            <div class="rk-formula-box">
                <div class="rk-formula-math" style="display: flex; align-items: center; justify-content: center;">
                    V<sub>n</sub> = V<sub>e</sub> <span class="operator">&times;</span>
                    <div class="rk-html-fraction">
                        <div class="rk-html-numerator">p<sub>max</sub> + 1</div>
                        <div class="rk-html-denominator">p<sub>max</sub> &#8211; p<sub>p</sub></div>
                    </div>
                </div>
                <div class="rk-formula-desc">
                    <h4>4. Minimalna pojemność nominalna (V<sub>n</sub>)</h4>
                    <p>Gdzie <strong>p<sub>max</sub></strong> to max. dopuszczalne ciśnienie (zawór bezpieczeństwa – zwykle 3,0 bar), a <strong>p<sub>p</sub></strong> to ciśnienie wstępne gazu w naczyniu (zwykle 1,0–1,5 bar).</p>
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-vessel-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener inżynieryjny należy do serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu źródłowego.
                </div>
            `;
            return;
        }
    }

    // Zmienne UI
    const rangePipe = document.getElementById('range-pipe');
    const rangeBuffer = document.getElementById('range-buffer');
    const pillSecs = document.querySelectorAll('.rk-pill-btn');
    
    const valPipe = document.getElementById('val-pipe');
    const valBuffer = document.getElementById('val-buffer');
    const resTotal = document.getElementById('res-total');
    const resVessel = document.getElementById('res-vessel');

    // SVG Elementy
    const svgWater = document.getElementById('svg-water');
    const svgDiaphragm = document.getElementById('svg-diaphragm');
    const svgNeedle = document.getElementById('svg-needle');

    let sections = 12; // Domyślna wartość
    const standardVessels = [8, 12, 18, 24, 35, 50, 80, 100, 150];

    function calculateVessel() {
        const L = parseFloat(rangePipe.value);
        const buf = parseFloat(rangeBuffer.value);
        
        // Update Labels
        valPipe.textContent = L + ' m';
        valBuffer.textContent = buf + ' L';

        // Matematyka wg PN-EN 12828
        const V_rur = L * 0.113;
        const V_rozdz = sections * 0.5;
        const V_inst = V_rur + V_rozdz + buf;
        
        // Dla 45 st C, e = 0.0095
        const V_e = V_inst * 0.0095 * 1.3;
        
        // V_n = V_e * ((3 + 1) / (3 - 1.2)) = V_e * (4 / 1.8) = V_e * 2.222
        const V_n_min = V_e * 2.222;

        // Znajdź najbliższe większe naczynie handlowe
        let chosenVessel = standardVessels[standardVessels.length - 1];
        for(let v of standardVessels) {
            if(v >= V_n_min) {
                chosenVessel = v;
                break;
            }
        }

        // Update DOM
        resTotal.textContent = V_inst.toFixed(1) + ' L';
        resVessel.textContent = chosenVessel + ' L';

        // Animacja SVG (Wizualizacja wypełnienia/ciśnienia)
        // Im większy zład, tym membrana idzie wyżej, woda wypełnia się mocniej
        let fillRatio = V_n_min / 50; // Arbitralna skala dla animacji
        if(fillRatio > 1) fillRatio = 1;
        if(fillRatio < 0.2) fillRatio = 0.2;

        // Woda - skalowanie w Y (od dołu, od -145px)
        svgWater.style.transform = `scaleY(${fillRatio * 1.2})`;
        
        // Membrana - przesuwanie w górę
        let dShift = -20 * fillRatio;
        svgDiaphragm.style.transform = `translateY(${dShift}px)`;

        // Zegar - rotacja wskazówki (symulacja wzrostu ciśnienia z objętością)
        let angle = -45 + (fillRatio * 180);
        if(angle > 135) angle = 135;
        svgNeedle.style.transform = `rotate(${angle}deg)`;
    }

    // Event Listenery
    if(rangePipe && rangeBuffer) {
        rangePipe.addEventListener('input', calculateVessel);
        rangeBuffer.addEventListener('input', calculateVessel);
        
        pillSecs.forEach(btn => {
            btn.addEventListener('click', function() {
                pillSecs.forEach(b => b.classList.remove('active'));
                this.classList.add('active');
                sections = parseInt(this.getAttribute('data-sec'));
                calculateVessel();
            });
        });

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



<style>
:root {
    --rk-cases-dark: #0f172a;
    --rk-cases-panel: #1e293b;
    --rk-cases-primary: #3b82f6; /* Blue for tech/math */
    --rk-cases-success: #10b981; /* Green for correct calcs */
    --rk-cases-danger: #ef4444; /* Red for errors (Case 2) */
    --rk-cases-warning: #f59e0b;
    --rk-cases-bg: #f8fafc;
    --rk-cases-border: #e2e8f0;
    --rk-cases-text: #334155;
    --rk-cases-muted: #64748b;
}

.rk-cases-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(15, 23, 42, 0.15);
    border: 1px solid rgba(59, 130, 246, 0.3);
    overflow: hidden;
}

/* Header */
.rk-cases-header {
    background: linear-gradient(135deg, var(--rk-cases-dark) 0%, #1e293b 100%);
    padding: 40px 50px;
    color: #ffffff;
    border-bottom: 5px solid var(--rk-cases-primary);
    position: relative;
}

.rk-cases-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(59, 130, 246, 0.2);
    color: #93c5fd;
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(147, 197, 253, 0.3);
}

.rk-cases-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
    color: #ffffff;
}

.rk-cases-title span { color: #60a5fa; }

.rk-cases-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.7;
    margin: 0;
    max-width: 800px;
}

/* Navigation / Tabs */
.rk-cases-nav {
    display: flex;
    background: #f1f5f9;
    border-bottom: 1px solid var(--rk-cases-border);
    overflow-x: auto;
    scrollbar-width: none;
}
.rk-cases-nav::-webkit-scrollbar { display: none; }

.rk-case-tab {
    flex: 1;
    padding: 20px 15px;
    background: transparent;
    border: none;
    border-bottom: 3px solid transparent;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-cases-muted);
    cursor: pointer;
    transition: all 0.3s;
    white-space: nowrap;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-case-tab:hover {
    color: var(--rk-cases-primary);
    background: rgba(59, 130, 246, 0.05);
}

.rk-case-tab.active {
    color: var(--rk-cases-primary);
    border-bottom-color: var(--rk-cases-primary);
    background: #ffffff;
}

/* Content Area */
.rk-cases-content {
    background: #ffffff;
    padding: 0;
}

.rk-case-panel {
    display: none;
    animation: caseFade 0.4s ease-out;
}

.rk-case-panel.active {
    display: grid;
    grid-template-columns: 1fr 300px;
}

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

/* Left: Data & Math */
.rk-case-data {
    padding: 40px 50px;
    border-right: 1px solid var(--rk-cases-border);
}

.rk-case-data h3 {
    margin: 0 0 20px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-cases-dark);
}

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

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

.rk-data-label { font-size: 13px; color: var(--rk-cases-muted); font-weight: 700; }
.rk-data-val { font-size: 14px; font-weight: 900; color: var(--rk-cases-dark); }

.rk-math-block {
    background: #1e293b;
    border-radius: 12px;
    padding: 20px;
    color: #f8fafc;
    font-family: 'Courier New', Courier, monospace;
    font-size: 15px;
    margin-bottom: 25px;
    border-left: 4px solid var(--rk-cases-primary);
    box-shadow: inset 0 4px 6px rgba(0,0,0,0.2);
}

.rk-math-line {
    margin-bottom: 10px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    line-height: 1.5;
}
.rk-math-line:last-child { margin-bottom: 0; }

.rk-math-highlight {
    color: #38bdf8;
    font-weight: 900;
    font-size: 17px;
}

.rk-math-result {
    color: #10b981; /* Green for results */
    font-weight: 900;
    font-size: 18px;
}

.rk-case-panel[data-status="fail"] .rk-math-result {
    color: #ef4444; /* Red for bad results */
}

/* Right: Visuals & Conclusion */
.rk-case-visuals {
    background: #f8fafc;
    display: flex;
    flex-direction: column;
}

.rk-svg-wrapper {
    height: 220px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: #e2e8f0;
    border-bottom: 1px solid var(--rk-cases-border);
    position: relative;
    overflow: hidden;
}

.rk-case-conclusion {
    padding: 30px;
    flex-grow: 1;
}

.rk-case-conclusion h4 {
    margin: 0 0 10px 0;
    font-size: 16px;
    font-weight: 900;
    text-transform: uppercase;
}

.rk-case-panel[data-status="success"] .rk-case-conclusion h4 { color: var(--rk-cases-success); }
.rk-case-panel[data-status="fail"] .rk-case-conclusion h4 { color: var(--rk-cases-danger); }
.rk-case-panel[data-status="info"] .rk-case-conclusion h4 { color: var(--rk-cases-primary); }

.rk-case-conclusion p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-cases-text);
}

/* Custom Math elements to avoid LaTeX inside HTML */
.rk-fraction {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    vertical-align: middle;
    margin: 0 5px;
}
.rk-numerator {
    border-bottom: 1px solid #94a3b8;
    padding: 0 5px;
    font-size: 14px;
}
.rk-denominator {
    padding: 0 5px;
    font-size: 14px;
}

/* SVG Animations based on active panel */
.anim-loop-draw { stroke-dasharray: 100; stroke-dashoffset: 100; }
.rk-case-panel.active .anim-loop-draw { animation: drawLoop 2s forwards ease-out; }
.rk-case-panel.active .anim-loop-draw:nth-child(2) { animation-delay: 0.5s; }
.rk-case-panel.active .anim-loop-draw:nth-child(3) { animation-delay: 1s; }
.rk-case-panel.active .anim-loop-draw:nth-child(4) { animation-delay: 1.5s; }
@keyframes drawLoop { to { stroke-dashoffset: 0; } }

.rk-case-panel.active .anim-gauge-needle { animation: overPressure 2s forwards cubic-bezier(0.4, 0, 0.2, 1); }
@keyframes overPressure { 
    0% { transform: rotate(-45deg); } 
    70% { transform: rotate(135deg); stroke: #ef4444; } 
    80% { transform: rotate(120deg); stroke: #ef4444; } 
    100% { transform: rotate(130deg); stroke: #ef4444; } 
}

.rk-case-panel.active .anim-vessel-fill { animation: fillVessel 2s forwards ease-out; }
@keyframes fillVessel { from { transform: scaleY(0); } to { transform: scaleY(1); } }

/* Mobile View */
@media (max-width: 768px) {
    .rk-cases-header { padding: 30px 20px; }
    .rk-cases-title { font-size: 24px; }
    .rk-case-panel.active { grid-template-columns: 1fr; }
    .rk-case-data { padding: 30px 20px; border-right: none; border-bottom: 1px solid var(--rk-cases-border); }
    .rk-data-grid { grid-template-columns: 1fr; gap: 10px; }
    .rk-svg-wrapper { height: 180px; }
    .rk-case-tab { padding: 15px 20px; font-size: 14px; }
    .rk-math-block { padding: 15px; font-size: 13px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-case-studies",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Przykłady obliczeniowe instalacji ogrzewania podłogowego – Case Studies",
    "description": "Praktyczne przykłady obliczeń hydraulicznych i termicznych: salon z aneksem, przewymiarowana pętla 150m oraz dobór naczynia wzbiorczego.",
    "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-23",
    "dateModified": "2026-05-23"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-case-studies",
    "name": "Wyniki Symulacji Parametrów Ogrzewania Podłogowego",
    "description": "Szczegółowe dane liczbowe, wzory i konkluzje inżynierskie dla 3 popularnych wariantów instalacyjnych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczenia ogrzewania podłogowego",
      "dobór naczynia wzbiorczego",
      "prędkość przepływu wody w rurze",
      "strumień masowy podłogówki",
      "podział na pętle grzewcze"
    ],
    "measurementTechnique": "Szacunki numeryczne oparte o normę PN-EN 1264 z zastosowaniem fizycznych równań zachowania energii i oporów przepływu.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Salon 45m2: Zapotrzebowanie 1800W generuje 4 pętle po 77m przy rozstawie 15cm.",
        "Pętla 150m: Wymaga przepływu 0.344 m3/h i generuje niszczący opór rzędu 43 kPa.",
        "Zład 1050m rury: Wymaga naczynia wzbiorczego o objętości min. 8 litrów dla bezpieczeństwa."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-case-studies",
    "name": "Kalkulator Prędkości i Pojemności Wodnej",
    "description": "Interaktywny moduł edukacyjny prezentujący analizę 3 przypadków obliczeniowych (Case Studies) z dynamicznymi wykresami SVG i wnioskami.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-cases-container" id="rk-cases-app">
    
    <div class="rk-cases-header">
        <div class="rk-cases-badge">
            <svg width="14" height="14" 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>
            Analiza Przypadków (Case Studies)
        </div>
        <h2 class="rk-cases-title">Przykłady obliczeniowe instalacji <span>podłogówki</span></h2>
        <p class="rk-cases-desc">Poniżej przedstawiam trzy rzeczywiste scenariusze z kart projektowych. Zobacz, jak wzory matematyczne normy PN-EN przekładają się na dobór rur, analizę błędów wykonawczych i bezpieczeństwo hydrauliczne układu.</p>
    </div>

    <div class="rk-cases-nav">
        <button class="rk-case-tab active" data-target="case-1">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
            1. Salon 45 m² (Idealny)
        </button>
        <button class="rk-case-tab" data-target="case-2">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
            2. Pętla 150 m (Błąd)
        </button>
        <button class="rk-case-tab" data-target="case-3">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20"></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            3. Pojemność i Wzbiorcze
        </button>
    </div>

    <div class="rk-cases-content">
        
        <div class="rk-case-panel active" id="case-1" data-status="success">
            <div class="rk-case-data">
                <h3>Przykład 1: Salon z aneksem</h3>
                
                <div class="rk-data-grid">
                    <div class="rk-data-item"><span class="rk-data-label">Pow. podłogi (A):</span> <span class="rk-data-val">45 m²</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Standard (q):</span> <span class="rk-data-val">40 W/m²</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Pow. grzewcza (A<sub>grz</sub>):</span> <span class="rk-data-val">40 m²</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Rozstaw (a):</span> <span class="rk-data-val">15 cm (0.15m)</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Zabudowa stała:</span> <span class="rk-data-val">5 m²</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Długość dobiegu:</span> <span class="rk-data-val">16 m</span></div>
                </div>

                <div class="rk-math-block">
                    <div class="rk-math-line">
                        <span>Zapotrzebowanie (Q<sub>obl</sub>):</span>
                        <span class="rk-math-highlight">45 &times; 40</span>
                        <span>=</span>
                        <span class="rk-math-result">1800 W</span>
                    </div>
                    <div class="rk-math-line" style="margin-top:15px;">
                        <span>Dł. rury (L):</span>
                        <span>(40 / 0.15) &times; 1.1 + 16</span>
                        <span>=</span>
                        <span class="rk-math-highlight">309.33 m</span>
                    </div>
                    <div class="rk-math-line" style="margin-top:15px; border-top:1px dashed #475569; padding-top:15px;">
                        <span>Podział:</span>
                        <span>309.33 / 100 &approx; 3.09</span>
                        <span>&rarr;</span>
                        <span class="rk-math-result">4 pętle (po ~77m)</span>
                    </div>
                </div>
            </div>
            <div class="rk-case-visuals">
                <div class="rk-svg-wrapper">
                    <svg viewBox="0 0 100 100" style="width:100%; height:100%;">
                        <rect x="10" y="20" width="15" height="60" fill="#334155" rx="3"/>
                        <path class="anim-loop-draw" d="M 25 30 L 80 30 Q 90 30 90 40 L 40 40" fill="none" stroke="#10b981" stroke-width="3" stroke-linecap="round"/>
                        <path class="anim-loop-draw" d="M 25 45 L 80 45 Q 90 45 90 55 L 40 55" fill="none" stroke="#10b981" stroke-width="3" stroke-linecap="round"/>
                        <path class="anim-loop-draw" d="M 25 60 L 80 60 Q 90 60 90 70 L 40 70" fill="none" stroke="#10b981" stroke-width="3" stroke-linecap="round"/>
                        <path class="anim-loop-draw" d="M 25 75 L 80 75 Q 90 75 90 85 L 40 85" fill="none" stroke="#10b981" stroke-width="3" stroke-linecap="round"/>
                    </svg>
                </div>
                <div class="rk-case-conclusion">
                    <h4>Wniosek Inżynierski</h4>
                    <p>Podział na 4 krótkie pętle (około 77 metrów każda) gwarantuje bardzo niskie opory hydrauliczne, poniżej 15 kPa. Rotametry dadzą się idealnie wyregulować, a pompa ciepła nie będzie przeciążona.</p>
                </div>
            </div>
        </div>

        <div class="rk-case-panel" id="case-2" data-status="fail">
            <div class="rk-case-data">
                <h3>Przykład 2: Hydraulika zbyt długiej pętli</h3>
                
                <div class="rk-data-grid">
                    <div class="rk-data-item"><span class="rk-data-label">Długość rury (L):</span> <span class="rk-data-val">150 m</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Śr. wewnętrzna:</span> <span class="rk-data-val">12 mm (16&#215;2)</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Moc pętli (Q):</span> <span class="rk-data-val">2000 W</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Schłodzenie (&Delta;T):</span> <span class="rk-data-val">5 K</span></div>
                </div>

                <div class="rk-math-block">
                    <div class="rk-math-line">
                        <span>Wymagany strumień wody (m):</span>
                    </div>
                    <div class="rk-math-line">
                        <span>m =</span>
                        <div class="rk-fraction">
                            <span class="rk-numerator">2000</span>
                            <span class="rk-denominator">4186 &times; 5</span>
                        </div>
                        <span>&times; 3600 &approx;</span>
                        <span class="rk-math-highlight">344 kg/h</span>
                    </div>
                    <div class="rk-math-line" style="margin-top:15px; border-top:1px dashed #475569; padding-top:15px;">
                        <span>Prędkość (v):</span>
                        <span class="rk-math-result" style="color:#f59e0b;">0.85 m/s (Szumy!)</span>
                    </div>
                    <div class="rk-math-line">
                        <span>Opór liniowy dla 150m:</span>
                        <span class="rk-math-result">aż 43 kPa</span>
                    </div>
                </div>
            </div>
            <div class="rk-case-visuals">
                <div class="rk-svg-wrapper">
                    <svg viewBox="0 0 100 100" style="width:100%; height:100%;">
                        <path d="M 20 70 A 40 40 0 1 1 80 70" fill="none" stroke="#cbd5e1" stroke-width="8" stroke-linecap="round"/>
                        <path d="M 60 22 A 40 40 0 0 1 80 70" fill="none" stroke="#ef4444" stroke-width="8" stroke-linecap="round"/>
                        <line class="anim-gauge-needle" x1="50" y1="50" x2="20" y2="50" stroke="#334155" stroke-width="4" stroke-linecap="round" style="transform-origin: 50px 50px;"/>
                        <circle cx="50" cy="50" r="6" fill="#1e293b"/>
                        <text x="50" y="85" font-size="14" font-weight="900" fill="#ef4444" text-anchor="middle">43 kPa</text>
                    </svg>
                </div>
                <div class="rk-case-conclusion">
                    <h4>Błąd Krytyczny!</h4>
                    <p>Żadna standardowa pompa obiegowa nie zapewni tak wysokiego ciśnienia dyspozycyjnego dla jednej pętli przy zachowaniu przepływów na reszcie instalacji. <strong>Efekt: Pętla po prostu przestanie grzać.</strong></p>
                </div>
            </div>
        </div>

        <div class="rk-case-panel" id="case-3" data-status="info">
            <div class="rk-case-data">
                <h3>Przykład 3: Pojemność i Naczynie</h3>
                
                <div class="rk-data-grid">
                    <div class="rk-data-item"><span class="rk-data-label">Pow. domu:</span> <span class="rk-data-val">150 m²</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Całk. dł. rur:</span> <span class="rk-data-val">1050 m</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Rozdzielacz:</span> <span class="rk-data-val">12 sekcji</span></div>
                    <div class="rk-data-item"><span class="rk-data-label">Bufor sprzęgłowy:</span> <span class="rk-data-val">60 L</span></div>
                </div>

                <div class="rk-math-block">
                    <div class="rk-math-line">
                        <span>Pojemność rur (V<sub>rur</sub>):</span>
                        <span>1050 &times; 0.113 =</span>
                        <span class="rk-math-highlight">118.65 L</span>
                    </div>
                    <div class="rk-math-line">
                        <span>Całk. zład (V<sub>inst</sub>):</span>
                        <span>118.65 + (12 &times; 0.5) + 60 =</span>
                        <span class="rk-math-highlight">184.65 L</span>
                    </div>
                    <div class="rk-math-line" style="margin-top:15px; border-top:1px dashed #475569; padding-top:15px;">
                        <span>Obj. użytkowa (V<sub>e</sub>):</span>
                        <span>184.65 &times; 0.0095 &times; 1.3 =</span>
                        <span class="rk-math-highlight">2.28 L</span>
                    </div>
                    <div class="rk-math-line">
                        <span>Min. naczynie (V<sub>n</sub>):</span>
                        <span>2.28 &times; 2.22 =</span>
                        <span class="rk-math-result">5.06 L</span>
                    </div>
                </div>
            </div>
            <div class="rk-case-visuals">
                <div class="rk-svg-wrapper">
                    <svg viewBox="0 0 100 100" style="width:100%; height:100%;">
                        <rect x="30" y="20" width="40" height="60" fill="#cbd5e1" rx="20"/>
                        <rect class="anim-vessel-fill" x="30" y="50" width="40" height="30" fill="#3b82f6" rx="15" style="transform-origin: bottom;"/>
                        <line x1="50" y1="20" x2="50" y2="10" stroke="#334155" stroke-width="4"/>
                        <path d="M 30 50 Q 50 40 70 50" fill="none" stroke="#1e293b" stroke-width="2" stroke-dasharray="4"/>
                        <text x="50" y="65" font-size="14" font-weight="900" fill="#ffffff" text-anchor="middle">8 L</text>
                    </svg>
                </div>
                <div class="rk-case-conclusion">
                    <h4>Bezpieczeństwo Układu</h4>
                    <p>Obliczenia wykazują minimalną pojemność na poziomie 5.06 L. Należy zakupić standardowe naczynie o pojemności <strong>8 litrów</strong>. Poleganie na małym, 5-litrowym naczyniu wbudowanym w kocioł doprowadzi do wyrzutów wody przez zawór bezpieczeństwa.</p>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-cases-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener inżynierski należy do serwisu Projekt-Ogrzewania.pl. Uruchamianie na tej domenie jest nieautoryzowane.
                </div>
            `;
            return;
        }
    }

    // Logika Zakładek (Case Studies)
    const tabs = document.querySelectorAll('.rk-case-tab');
    const panels = document.querySelectorAll('.rk-case-panel');

    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            const targetId = tab.getAttribute('data-target');
            
            // Czyszczenie klas aktywnych
            tabs.forEach(t => t.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));
            
            // Aktywacja wybranego
            tab.classList.add('active');
            const activePanel = document.getElementById(targetId);
            
            // Restart CSS animations for SVGs by forcing reflow
            if (activePanel) {
                activePanel.classList.remove('active');
                void activePanel.offsetWidth; 
                activePanel.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --rk-proj-dark: #0f172a;
    --rk-proj-darker: #020617;
    --rk-proj-brand: #4f46e5; /* Indigo techniczne */
    --rk-proj-brand-light: #e0e7ff;
    --rk-proj-accent: #06b6d4; /* Cyjan / inżynieryjny akcent */
    --rk-proj-bg: #ffffff;
    --rk-proj-surface: #f8fafc;
    --rk-proj-border: #cbd5e1;
    --rk-proj-text: #334155;
    --rk-proj-muted: #64748b;
    --rk-proj-shadow: 0 20px 40px -10px rgba(79, 70, 229, 0.15);
}

.rk-proj-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-proj-bg);
    border-radius: 24px;
    box-shadow: var(--rk-proj-shadow);
    border: 1px solid var(--rk-proj-border);
    overflow: hidden;
}

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

.rk-proj-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(79, 70, 229, 0.2);
    color: #a5b4fc;
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(165, 180, 252, 0.3);
}

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

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

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

.rk-proj-link {
    color: #a5b4fc;
    text-decoration: none;
    border-bottom: 1px dashed rgba(165, 180, 252, 0.4);
    font-weight: 600;
    transition: all 0.3s;
}
.rk-proj-link:hover { color: #ffffff; border-bottom-style: solid; }

.rk-proj-link-dark {
    color: var(--rk-proj-brand);
    text-decoration: underline;
    text-underline-offset: 3px;
    font-weight: 700;
    transition: color 0.3s;
}
.rk-proj-link-dark:hover { color: #3730a3; }

/* --- INTERAKTYWNE FILARY --- */
.rk-proj-interactive {
    padding: 40px 50px;
    background: var(--rk-proj-surface);
}

.rk-proj-interactive h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-proj-dark);
    margin: 0 0 30px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

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

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

.rk-pillar-btn:hover {
    border-color: var(--rk-proj-brand);
    background: var(--rk-proj-brand-light);
    transform: translateY(-3px);
}

.rk-pillar-btn.active {
    border-color: var(--rk-proj-brand);
    background: var(--rk-proj-brand);
    color: #ffffff;
    box-shadow: 0 10px 20px -5px rgba(79, 70, 229, 0.4);
}

.rk-pillar-icon {
    width: 48px;
    height: 48px;
    background: var(--rk-proj-surface);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-proj-brand);
    transition: all 0.3s;
}
.rk-pillar-btn.active .rk-pillar-icon { background: rgba(255,255,255,0.2); color: #ffffff; }

.rk-pillar-title {
    font-size: 15px;
    font-weight: 800;
    line-height: 1.3;
    color: var(--rk-proj-dark);
    transition: color 0.3s;
}
.rk-pillar-btn.active .rk-pillar-title { color: #ffffff; }

/* Panele Zawartości */
.rk-pillar-content {
    display: none;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-proj-border);
    padding: 30px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
    animation: fadeScale 0.4s ease-out;
}
.rk-pillar-content.active { display: grid; grid-template-columns: 1fr 280px; gap: 30px; align-items: center; }

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

.rk-panel-text h4 { margin: 0 0 15px 0; font-size: 20px; font-weight: 900; color: var(--rk-proj-dark); }
.rk-panel-text p { margin: 0 0 20px 0; font-size: 15px; line-height: 1.7; color: var(--rk-proj-text); }

.rk-panel-highlight {
    background: var(--rk-proj-surface);
    padding: 15px;
    border-left: 4px solid var(--rk-proj-accent);
    border-radius: 0 8px 8px 0;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-proj-dark);
}

/* Wizualizacje SVG */
.rk-svg-stage {
    background: var(--rk-proj-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 180px;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.5);
}

.rk-tech-svg { width: 100%; max-width: 200px; height: auto; }

/* Animacje SVG */
/* 1. OZC */
.anim-heat-loss { stroke-dasharray: 4; animation: flowOut 1.5s linear infinite; stroke: #ef4444; }
.anim-heat-gain { stroke-dasharray: 4; animation: flowIn 1.5s linear infinite; stroke: #10b981; }
@keyframes flowOut { to { stroke-dashoffset: -12; } }
@keyframes flowIn { to { stroke-dashoffset: 12; } }

/* 2. Rotametry */
.anim-float-1 { animation: balanceFloat1 2s cubic-bezier(0.4, 0, 0.2, 1) forwards; }
.anim-float-2 { animation: balanceFloat2 2s cubic-bezier(0.4, 0, 0.2, 1) forwards; }
.anim-float-3 { animation: balanceFloat3 2s cubic-bezier(0.4, 0, 0.2, 1) forwards; }
@keyframes balanceFloat1 { from { transform: translateY(0); } to { transform: translateY(15px); } }
@keyframes balanceFloat2 { from { transform: translateY(30px); } to { transform: translateY(15px); } }
@keyframes balanceFloat3 { from { transform: translateY(10px); } to { transform: translateY(15px); } }

/* 3. Pompa */
.anim-pump-spin { transform-origin: center; animation: spinPump 2s linear infinite; }
@keyframes spinPump { to { transform: rotate(360deg); } }
.anim-pump-flow { stroke-dasharray: 10; animation: flowPump 1s linear infinite; stroke: var(--rk-proj-accent); }
@keyframes flowPump { to { stroke-dashoffset: -20; } }

/* --- MOCNE CTA --- */
.rk-proj-cta {
    background: linear-gradient(135deg, #eef2ff 0%, #ffffff 100%);
    padding: 45px 50px;
    text-align: center;
    border-top: 1px solid var(--rk-proj-brand-light);
}

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

.rk-cta-desc {
    font-size: 16px;
    color: var(--rk-proj-text);
    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-proj-brand);
    color: #ffffff;
    font-size: 18px;
    font-weight: 900;
    padding: 20px 40px;
    border-radius: 16px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(79, 70, 229, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    border: 2px solid transparent;
}

.rk-btn-massive:hover {
    background: #4338ca;
    transform: translateY(-4px);
    box-shadow: 0 15px 35px -5px rgba(79, 70, 229, 0.5);
    border-color: #a5b4fc;
}

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

@media (max-width: 768px) {
    .rk-proj-header, .rk-proj-interactive, .rk-proj-cta { padding: 30px 20px; }
    .rk-proj-header h2, .rk-cta-title { font-size: 24px; }
    .rk-pillars-grid { grid-template-columns: 1fr; }
    .rk-pillar-content.active { grid-template-columns: 1fr; }
    .rk-svg-stage { min-height: 160px; order: -1; } /* SVG na górę na mobilce */
    .rk-btn-massive { width: 100%; font-size: 16px; padding: 18px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-projekt",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Jak kalkulator wpływa na projekt ogrzewania podłogowego?",
    "description": "Zrozum 3 inżynieryjne filary: bilans OZC, hydraulikę rozdzielacza i dobór pompy obiegowej. Zobacz, jak wyliczenia przekładają się na finalną dokumentację techniczną.",
    "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-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-projekt",
    "name": "Filary Projektowania Instalacji Ogrzewania Podłogowego",
    "description": "Klasyfikacja trzech głównych obszarów inżynieryjnych (OZC, Hydraulika, Pompy), które są definiowane przez wyniki kompleksowego kalkulatora.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projekt ogrzewania podłogowego",
      "rzeczywisty bilans cieplny OZC",
      "hydraulika rozdzielacza i pętli",
      "dobór pompy obiegowej podłogówki",
      "dokumentacja techniczna instalacji"
    ],
    "measurementTechnique": "Synteza wyników obliczeniowych z norm PN-EN 12831 (OZC) oraz PN-EN 1264 do formy wykonawczej dokumentacji technicznej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Bilans Cieplny OZC: Precyzyjne zapotrzebowanie na energię dla każdego pomieszczenia.",
        "Hydraulika Pętli: Rozstaw rur co do centymetra i wartości nastaw rotametrów w l/min.",
        "Dobór Pompy: Wysokość podnoszenia oparta o sumaryczne opory najdłuższej pętli hydraulicznej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-projekt",
    "name": "Eksplorator Filarów Projektowych",
    "description": "Interaktywny schemat prezentujący wpływ wyliczeń kalkulatora na projekt techniczny OZC, hydraulikę i dobór pomp, wzbogacony o animacje wektorowe procesów fizycznych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-proj-container" id="rk-proj-app">
    
    <div class="rk-proj-header">
        <div class="rk-proj-badge">
            <svg width="14" height="14" 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>
            Dokumentacja Techniczna
        </div>
        <h2>Jak to wpływa na <span>projekt ogrzewania podłogowego?</span></h2>
        <p class="rk-proj-lead">
            Wszystkie wyliczenia realizowane przez kompleksowy kalkulator mają bezpośrednie przełożenie na finalną dokumentację techniczną. Poprawnie wykonany projekt ogrzewania podłogowego nie może opierać się na danych szacunkowych. Musi on bezwzględnie scalać trzy kluczowe filary inżynieryjne.
        </p>
    </div>

    <div class="rk-proj-interactive">
        <h3>3 Filary Inżynieryjne</h3>
        
        <div class="rk-pillars-grid">
            <button class="rk-pillar-btn active" data-target="p-ozc">
                <div class="rk-pillar-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20"></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                </div>
                <div class="rk-pillar-title">Bilans Cieplny (OZC)</div>
            </button>
            
            <button class="rk-pillar-btn" data-target="p-hyd">
                <div class="rk-pillar-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><line x1="4" y1="12" x2="20" y2="12"></line><line x1="12" y1="4" x2="12" y2="20"></line></svg>
                </div>
                <div class="rk-pillar-title">Hydraulika i Pętle</div>
            </button>

            <button class="rk-pillar-btn" data-target="p-pump">
                <div class="rk-pillar-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
                </div>
                <div class="rk-pillar-title">Dobór Pompy</div>
            </button>
        </div>

        <div class="rk-pillar-content active" id="p-ozc">
            <div class="rk-panel-text">
                <h4>Rzeczywisty bilans cieplny OZC</h4>
                <p>Określa precyzyjne <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/" class="rk-proj-link-dark">zapotrzebowanie na energię</a> dla każdego pomieszczenia z osobna. Fundament, który eliminuje ryzyko niedogrzania łazienek czy skrajnych sypialni podczas mrozów.</p>
                <div class="rk-panel-highlight">
                    Wynik kalkulatora: Precyzyjny dobór mocy W/m² eliminuje szacunki &#8222;na oko&#8221;.
                </div>
            </div>
            <div class="rk-svg-stage">
                <svg class="rk-tech-svg" viewBox="0 0 100 100">
                    <rect x="20" y="20" width="60" height="60" fill="none" stroke="#64748b" stroke-width="4" rx="4"/>
                    <path class="anim-heat-loss" d="M 80 50 L 95 50" fill="none" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-heat-loss" d="M 50 20 L 50 5" fill="none" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-heat-gain" d="M 5 50 L 20 50" fill="none" stroke-width="4" stroke-linecap="round"/>
                    <path class="anim-heat-gain" d="M 50 95 L 50 80" fill="none" stroke-width="4" stroke-linecap="round"/>
                    <text x="50" y="55" font-size="16" font-weight="900" fill="#cbd5e1" text-anchor="middle">OZC</text>
                </svg>
            </div>
        </div>

        <div class="rk-pillar-content" id="p-hyd">
            <div class="rk-panel-text">
                <h4>Hydraulika rozdzielacza i pętli</h4>
                <p>Projekt definiuje dokładny rozstaw rur (co do centymetra), podział na równe obwody oraz wartości nastaw wstępnych (przepływów w l/min) na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" class="rk-proj-link-dark">rotametrach</a>, co umożliwia prawidłowe <a href="https://projekt-ogrzewania.pl/regulacja-hydrauliczna-ogrzewania-podlogowego/" class="rk-proj-link-dark">zrównoważenie systemu</a>.</p>
                <div class="rk-panel-highlight">
                    Wynik kalkulatora: Stabilne przepływy i równomierne nagrzewanie podłogi.
                </div>
            </div>
            <div class="rk-svg-stage">
                <svg class="rk-tech-svg" viewBox="0 0 100 100">
                    <rect x="10" y="80" width="80" height="10" fill="#3b82f6" rx="2"/>
                    <rect x="20" y="20" width="10" height="60" fill="none" stroke="#64748b" stroke-width="2"/>
                    <rect class="anim-float-1" x="22" y="50" width="6" height="4" fill="#ef4444"/>
                    <rect x="45" y="20" width="10" height="60" fill="none" stroke="#64748b" stroke-width="2"/>
                    <rect class="anim-float-2" x="47" y="50" width="6" height="4" fill="#ef4444"/>
                    <rect x="70" y="20" width="10" height="60" fill="none" stroke="#64748b" stroke-width="2"/>
                    <rect class="anim-float-3" x="72" y="50" width="6" height="4" fill="#ef4444"/>
                    <line x1="15" y1="35" x2="85" y2="35" stroke="#10b981" stroke-width="2" stroke-dasharray="4"/>
                </svg>
            </div>
        </div>

        <div class="rk-pillar-content" id="p-pump">
            <div class="rk-panel-text">
                <h4>Dobór pompy obiegowej</h4>
                <p>Na podstawie zsumowanych oporów hydraulicznych najdłuższej pętli projektant przeprowadza <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/" class="rk-proj-link-dark">dobór pompy obiegowej</a>. Określamy dokładną wysokość podnoszenia, zapobiegając przeciążeniu lub niedomiarowi tłoczenia.</p>
                <div class="rk-panel-highlight">
                    Wynik kalkulatora: Brak &#8222;martwych&#8221;, zimnych stref z powodu słabej pompy.
                </div>
            </div>
            <div class="rk-svg-stage">
                <svg class="rk-tech-svg" viewBox="0 0 100 100">
                    <circle cx="30" cy="50" r="20" fill="none" stroke="#94a3b8" stroke-width="4"/>
                    <g class="anim-pump-spin" transform="translate(30, 50)">
                        <polygon points="-8,-8 10,0 -8,8" fill="#10b981"/>
                    </g>
                    <path class="anim-pump-flow" d="M 50 50 L 90 50" fill="none" stroke-width="6" stroke-linecap="round"/>
                    <path class="anim-pump-flow" d="M 90 50 Q 95 50 95 40 L 95 20" fill="none" stroke-width="4" stroke-linecap="round"/>
                </svg>
            </div>
        </div>

    </div>

    <div class="rk-proj-cta">
        <h3 class="rk-cta-title">Nie ryzykuj błędów na budowie</h3>
        <p class="rk-cta-desc">
            Skorzystaj z wiedzy ekspertów. Zamów kompleksowy, inżynieryjny projekt ogrzewania podłogowego, który zagwarantuje Ci optymalne zużycie materiałów, niskie rachunki za ogrzewanie i święty spokój na lata.
        </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() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-proj-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:24px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener informacyjny należy do serwisu Projekt-Ogrzewania.pl. Uruchamianie na nieautoryzowanej domenie jest zabronione prawem.
                </div>
            `;
            return;
        }
    }

    // Logika zakładek (Filary)
    const btns = document.querySelectorAll('.rk-pillar-btn');
    const contents = document.querySelectorAll('.rk-pillar-content');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            const targetId = this.getAttribute('data-target');
            
            // Reset
            btns.forEach(b => b.classList.remove('active'));
            contents.forEach(c => c.classList.remove('active'));
            
            // Aktywacja
            this.classList.add('active');
            const targetContent = document.getElementById(targetId);
            if(targetContent) {
                // Restart animacji SVG przez reflow
                targetContent.classList.remove('active');
                void targetContent.offsetWidth; 
                targetContent.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --rk-calc-main-dark: #0f172a;
    --rk-calc-main-darker: #020617;
    --rk-calc-main-brand: #3b82f6; /* Hydronic Blue */
    --rk-calc-main-brand-light: #eff6ff;
    --rk-calc-main-accent: #10b981; /* Success Green */
    --rk-calc-main-danger: #ef4444; /* Error Red */
    --rk-calc-main-bg: #ffffff;
    --rk-calc-main-surface: #f8fafc;
    --rk-calc-main-border: #cbd5e1;
    --rk-calc-main-text: #334155;
    --rk-calc-main-muted: #64748b;
    --rk-calc-main-shadow: 0 20px 40px -10px rgba(59, 130, 246, 0.15);
}

.rk-calc-main-container {
    max-width: 1000px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-calc-main-bg);
    border-radius: 24px;
    box-shadow: var(--rk-calc-main-shadow);
    border: 1px solid var(--rk-calc-main-border);
    overflow: hidden;
}

/* --- NAGŁÓWEK --- */
.rk-calc-main-header {
    background: linear-gradient(135deg, var(--rk-calc-main-darker) 0%, var(--rk-calc-main-dark) 100%);
    padding: 40px 50px;
    color: #ffffff;
    border-bottom: 5px solid var(--rk-calc-main-brand);
    text-align: center;
}

.rk-calc-main-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(59, 130, 246, 0.2);
    color: #93c5fd;
    padding: 6px 16px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 15px;
    border: 1px solid rgba(147, 197, 253, 0.3);
}

.rk-calc-main-title {
    font-size: 32px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 10px 0;
}

.rk-calc-main-title span { color: var(--rk-calc-main-brand); }

.rk-calc-main-desc {
    color: #cbd5e1;
    font-size: 15px;
    line-height: 1.6;
    margin: 0 auto;
    max-width: 700px;
}

/* --- SEKCJA GŁÓWNA --- */
.rk-calc-main-body {
    padding: 40px 50px;
    background: var(--rk-calc-main-surface);
}

/* Krok 1: Parametry Globalne */
.rk-calc-section-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-calc-main-dark);
    margin: 0 0 20px 0;
    display: flex;
    align-items: center;
    gap: 10px;
    border-bottom: 2px solid var(--rk-calc-main-border);
    padding-bottom: 10px;
}

.rk-calc-section-title svg { color: var(--rk-calc-main-brand); }

.rk-global-params {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 15px;
    margin-bottom: 40px;
}

.rk-input-group {
    background: #ffffff;
    padding: 15px;
    border-radius: 12px;
    border: 1px solid var(--rk-calc-main-border);
}

.rk-input-group label {
    display: block;
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-calc-main-muted);
    text-transform: uppercase;
    margin-bottom: 8px;
}

.rk-input-group select, .rk-input-group input {
    width: 100%;
    padding: 10px;
    border: 1px solid var(--rk-calc-main-border);
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    color: var(--rk-calc-main-dark);
    background: var(--rk-calc-main-surface);
    transition: all 0.3s;
}

.rk-input-group select:focus, .rk-input-group input:focus {
    outline: none;
    border-color: var(--rk-calc-main-brand);
    box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}

/* Krok 2: Pomieszczenia */
.rk-rooms-container {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 20px;
    margin-bottom: 20px;
}

.rk-room-card {
    background: #ffffff;
    border: 1px solid var(--rk-calc-main-border);
    border-radius: 16px;
    padding: 20px;
    position: relative;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    transition: all 0.3s ease;
    animation: roomPopIn 0.3s ease-out;
}

.rk-room-card:hover {
    border-color: var(--rk-calc-main-brand);
    box-shadow: 0 8px 16px rgba(59, 130, 246, 0.1);
}

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

.rk-room-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
    font-weight: 900;
    color: var(--rk-calc-main-dark);
}

.rk-room-delete {
    background: transparent;
    border: none;
    color: var(--rk-calc-main-danger);
    cursor: pointer;
    padding: 5px;
    border-radius: 6px;
    transition: background 0.2s;
}
.rk-room-delete:hover { background: #fef2f2; }

.rk-room-inputs {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}

.rk-mini-input label {
    font-size: 11px;
    color: var(--rk-calc-main-muted);
    font-weight: 700;
    display: block;
    margin-bottom: 4px;
}
.rk-mini-input input {
    width: 100%;
    padding: 8px;
    border: 1px solid var(--rk-calc-main-border);
    border-radius: 6px;
    font-size: 14px;
    font-weight: 600;
    transition: border-color 0.3s;
}
.rk-mini-input input.error { border-color: var(--rk-calc-main-danger); background: #fef2f2; }

.rk-add-room-btn {
    width: 100%;
    padding: 15px;
    background: transparent;
    border: 2px dashed var(--rk-calc-main-border);
    border-radius: 16px;
    color: var(--rk-calc-main-muted);
    font-weight: 800;
    font-size: 14px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    transition: all 0.3s;
    margin-bottom: 40px;
}
.rk-add-room-btn:hover {
    border-color: var(--rk-calc-main-brand);
    color: var(--rk-calc-main-brand);
    background: var(--rk-calc-main-brand-light);
}

/* Krok 3: Oblicz */
.rk-calc-action-bar {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-calc-submit {
    background: var(--rk-calc-main-brand);
    color: #ffffff;
    font-size: 18px;
    font-weight: 900;
    padding: 20px 40px;
    border: none;
    border-radius: 16px;
    cursor: pointer;
    box-shadow: 0 10px 20px -5px rgba(59, 130, 246, 0.4);
    display: inline-flex;
    align-items: center;
    gap: 10px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-calc-submit:hover {
    transform: translateY(-3px);
    box-shadow: 0 15px 30px -5px rgba(59, 130, 246, 0.5);
    background: #2563eb;
}

.rk-calc-submit:active { transform: translateY(0); }

/* --- WYNIKI --- */
.rk-calc-results {
    display: none; /* Ukryte do kliknięcia */
    border-top: 2px solid var(--rk-calc-main-border);
    padding-top: 40px;
    animation: fadeInResult 0.5s ease-out;
}

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

.rk-res-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    margin-bottom: 30px;
}

.rk-res-card {
    background: #ffffff;
    border: 1px solid var(--rk-calc-main-border);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    overflow: hidden;
}

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

.rk-res-card.c-blue::before { background: var(--rk-calc-main-brand); }
.rk-res-card.c-green::before { background: var(--rk-calc-main-accent); }
.rk-res-card.c-orange::before { background: #f59e0b; }

.rk-res-icon {
    margin-bottom: 15px;
    color: var(--rk-calc-main-dark);
}

.rk-res-label {
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-calc-main-muted);
    text-transform: uppercase;
    margin-bottom: 5px;
}

.rk-res-value {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-calc-main-dark);
    margin-bottom: 10px;
}

.rk-res-value span { font-size: 16px; color: var(--rk-calc-main-muted); }

.rk-res-list {
    margin: 0; padding: 0; list-style: none;
    font-size: 13px; color: var(--rk-calc-main-text);
}
.rk-res-list li { margin-bottom: 4px; display: flex; justify-content: space-between; border-bottom: 1px dashed var(--rk-calc-main-border); padding-bottom: 4px; }
.rk-res-list li:last-child { border: none; margin: 0; padding: 0; }
.rk-res-list b { color: var(--rk-calc-main-dark); }

/* SVG Statusu Hydraulicznego */
.rk-res-status {
    background: var(--rk-calc-main-dark);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    align-items: center;
    gap: 30px;
    color: #ffffff;
    margin-bottom: 30px;
}

.rk-status-svg {
    width: 100px;
    height: 100px;
    flex-shrink: 0;
}

.rk-status-text h4 { margin: 0 0 10px 0; font-size: 20px; font-weight: 900; }
.rk-status-text p { margin: 0; font-size: 14px; color: #cbd5e1; line-height: 1.6; }
.rk-status-warn { color: var(--rk-calc-main-danger); }
.rk-status-ok { color: var(--rk-calc-main-accent); }

/* CTA Wynikowe */
.rk-res-cta {
    background: #eef2ff;
    border: 1px solid #c7d2fe;
    border-radius: 16px;
    padding: 25px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 20px;
}

.rk-res-cta p { margin: 0; font-size: 14px; color: #3730a3; line-height: 1.6; }
.rk-res-cta strong { font-weight: 900; color: #312e81; }

.rk-res-cta-btn {
    background: #4f46e5;
    color: #ffffff;
    padding: 12px 24px;
    border-radius: 10px;
    text-decoration: none;
    font-weight: 800;
    font-size: 14px;
    white-space: nowrap;
    transition: background 0.3s;
}
.rk-res-cta-btn:hover { background: #4338ca; }

@media (max-width: 768px) {
    .rk-calc-main-header, .rk-calc-main-body { padding: 30px 20px; }
    .rk-calc-main-title { font-size: 24px; }
    .rk-res-grid { grid-template-columns: 1fr; }
    .rk-res-status { flex-direction: column; text-align: center; }
    .rk-res-cta { flex-direction: column; text-align: center; }
}

/* Animacje wewnątrz SVG Wynikowego */
.anim-pump-impeller { transform-origin: center; animation: spinFast 1s linear infinite; }
@keyframes spinFast { to { transform: rotate(360deg); } }
.anim-flow-line { stroke-dasharray: 8; animation: flowHyd 1s linear infinite; }
@keyframes flowHyd { to { stroke-dashoffset: -16; } }
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-main-calc",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Kompleksowy Kalkulator Ogrzewania Podłogowego (Interaktywny)",
    "description": "Zaawansowane narzędzie inżynieryjne wyliczające długość rur, moc, rozstaw pętli oraz parametry pompy obiegowej na podstawie wprowadzonych danych pomieszczeń.",
    "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-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-calc-results",
    "name": "Wyniki Inżynierskich Obliczeń Ogrzewania Podłogowego",
    "description": "Dynamiczne wyliczenia parametrów fizycznych dla systemów płaszczyznowych, łączące zmienne izolacyjności, przepływu i strat ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator podłogówki online",
      "obliczanie pętli grzewczych",
      "dobór pompy do ogrzewania podłogowego",
      "średnica rury pex przepływ",
      "zapotrzebowanie na materiały podłogówka"
    ],
    "measurementTechnique": "Równania bilansu cieplnego i oporów hydraulicznych wg PN-EN 1264, z uwzględnieniem liczby Reynoldsa i modelu strat liniowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zestawienie całkowitej mocy (W) i długości rury (mb).",
        "Sugestie rozstawów rur względem zapotrzebowania cieplnego W/m2.",
        "Estymacja oporów hydraulicznych i wskazanie wymaganej wysokości podnoszenia pompy obiegowej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-main",
    "name": "Kompleksowy Kalkulator Ogrzewania Podłogowego PRO",
    "description": "Profesjonalna aplikacja webowa obliczająca wszystkie kluczowe parametry instalacji (pętle, rozstawy, hydraulika) na podstawie wprowadzonych danych pomieszczeń i warstw podłogi.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-calc-main-container" id="rk-calc-main-app">
    
    <div class="rk-calc-main-header">
        <div class="rk-calc-main-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
            Narzędzie Obliczeniowe
        </div>
        <h2 class="rk-calc-main-title">Kompleksowy Kalkulator <span>Podłogówki</span></h2>
        <p class="rk-calc-main-desc">Wprowadź dane budynku oraz parametry poszczególnych pomieszczeń, aby wygenerować profesjonalne zestawienie materiałowe, rozstawy rur oraz wytyczne hydrauliczne dla pompy obiegowej.</p>
    </div>

    <div class="rk-calc-main-body">
        
        <div class="rk-calc-section-title">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
            Krok 1: Parametry Globalne Konstrukcji
        </div>
        
        <div class="rk-global-params">
            <div class="rk-input-group">
                <label>Zasilanie (Tz)</label>
                <input type="number" id="rk-param-temp" value="35" min="25" max="50">
            </div>
            <div class="rk-input-group">
                <label>Okładzina podłogi</label>
                <select id="rk-param-floor">
                    <option value="1">Płytki / Gres</option>
                    <option value="0.85">Panele podłogowe</option>
                    <option value="0.75">Deska warstwowa</option>
                </select>
            </div>
            <div class="rk-input-group">
                <label>Rodzaj Wylewki</label>
                <select id="rk-param-screed">
                    <option value="1">Cementowa (Miksokret)</option>
                    <option value="1.13">Anhydrytowa (Płynna)</option>
                </select>
            </div>
            <div class="rk-input-group">
                <label>Izolacja Spodnia</label>
                <select id="rk-param-iso">
                    <option value="1">EPS 100 (Standard)</option>
                    <option value="1.05">EPS 200 (Twardy)</option>
                </select>
            </div>
            <div class="rk-input-group">
                <label>Rura Grzewcza</label>
                <select id="rk-param-pipe">
                    <option value="0.012">16&#215;2 (Wew. 12mm)</option>
                    <option value="0.013">17&#215;2 (Wew. 13mm)</option>
                    <option value="0.016">20&#215;2 (Wew. 16mm)</option>
                </select>
            </div>
        </div>

        <div class="rk-calc-section-title">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
            Krok 2: Bilans Pomieszczeń
        </div>

        <div class="rk-rooms-container" id="rk-rooms-wrapper">
            </div>

        <button class="rk-add-room-btn" id="rk-btn-add-room">
            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
            Dodaj kolejne pomieszczenie
        </button>

        <div class="rk-calc-action-bar">
            <button class="rk-calc-submit" id="rk-btn-calculate">
                GENERUJ WYNIKI OBLICZEŃ
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 11 12 14 22 4"></polyline><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path></svg>
            </button>
        </div>

        <div class="rk-calc-results" id="rk-results-panel">
            
            <div class="rk-res-grid">
                
                <div class="rk-res-card c-blue">
                    <div class="rk-res-icon">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20"></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    </div>
                    <div class="rk-res-label">Całkowite Zapotrzebowanie</div>
                    <div class="rk-res-value" id="out-power">0 <span>W</span></div>
                    <ul class="rk-res-list">
                        <li>Ilość rury (zapas 10%): <b id="out-length">0 mb</b></li>
                        <li>Pojemność zładu: <b id="out-water">0 L</b></li>
                        <li>Całkowita powierzchnia: <b id="out-area">0 m²</b></li>
                    </ul>
                </div>

                <div class="rk-res-card c-green">
                    <div class="rk-res-icon">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
                    </div>
                    <div class="rk-res-label">Rozdzielacz i Geometria</div>
                    <div class="rk-res-value" id="out-circuits">0 <span>sekcji</span></div>
                    <ul class="rk-res-list">
                        <li>Średni rozstaw rur: <b id="out-spacing-avg">0 cm</b></li>
                        <li>Sugerowane rozstawy: <b id="out-spacing-list">&#8211;</b></li>
                        <li>Limit długości pętli: <b>Zachowany</b></li>
                    </ul>
                </div>

                <div class="rk-res-card c-orange">
                    <div class="rk-res-icon">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
                    </div>
                    <div class="rk-res-label">Wymogi Hydrauliczne</div>
                    <div class="rk-res-value" id="out-pump">Weryfikacja</div>
                    <ul class="rk-res-list">
                        <li>Przepływ sumaryczny: <b id="out-flow">0 m³/h</b></li>
                        <li>Opór najdłuższej pętli: <b id="out-pressure">0 kPa</b></li>
                        <li>Wys. podnoszenia: <b id="out-head">0 m</b></li>
                    </ul>
                </div>
            </div>

            <div class="rk-res-status">
                <div class="rk-status-svg">
                    <svg viewBox="0 0 100 100" style="width:100%;height:100%;">
                        <circle cx="50" cy="50" r="45" fill="none" stroke="#334155" stroke-width="6"></circle>
                        <circle cx="50" cy="50" r="30" fill="none" stroke="#475569" stroke-width="2"></circle>
                        <g class="anim-pump-impeller" transform="translate(50, 50)">
                            <path d="M 0 -25 L 10 0 L 0 25 L -10 0 Z" fill="#10b981" id="svg-impeller-color"></path>
                            <circle cx="0" cy="0" r="5" fill="#f8fafc"></circle>
                        </g>
                        <path class="anim-flow-line" d="M 15 80 Q 50 110 85 80" fill="none" stroke="#3b82f6" stroke-width="4" stroke-linecap="round"></path>
                    </svg>
                </div>
                <div class="rk-status-text">
                    <h4 id="out-status-title">Analiza w toku&#8230;</h4>
                    <p id="out-status-desc">&#8211;</p>
                </div>
            </div>

            <div class="rk-res-cta">
                <div>
                    <strong>Zastrzeżenie inżynierskie:</strong>
                    <p>Wyniki mają charakter poglądowy do szacowania kosztów. Błędy hydrauliczne kosztują krocie. Do realizacji niezbędny jest projekt wykonawczy uwzględniający opory miejscowe armatury i pełne badanie OZC.</p>
                </div>
                <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-res-cta-btn">ZAMÓW PROJEKT</a>
            </div>

        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-calc-main-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:24px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:40px; margin-bottom:15px;">🛑</div>
                    BŁĄD LICENCJI:<br>Główny silnik kalkulatora jest własnością Projekt-Ogrzewania.pl. Próba kradzieży kodu zatrzymana.
                </div>
            `;
            return;
        }
    }

    // --- LOGIKA KALKULATORA ---
    let rooms = [];
    const wrapper = document.getElementById('rk-rooms-wrapper');
    const btnAdd = document.getElementById('rk-btn-add-room');
    const btnCalc = document.getElementById('rk-btn-calculate');
    const resultsPanel = document.getElementById('rk-results-panel');

    function createRoomHTML(index) {
        return `
        <div class="rk-room-card" id="rk-room-${index}">
            <div class="rk-room-header">
                Pomieszczenie ${index + 1}
                <button class="rk-room-delete" onclick="rkRemoveRoom(${index})" title="Usuń">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>
                </button>
            </div>
            <div class="rk-room-inputs">
                <div class="rk-mini-input">
                    <label>Powierzchnia (m²)</label>
                    <input type="number" id="rk-area-${index}" value="15" min="1" step="0.5" oninput="rkValidate(this)">
                </div>
                <div class="rk-mini-input">
                    <label>Straty (W/m²)</label>
                    <input type="number" id="rk-loss-${index}" value="50" min="10" step="5" oninput="rkValidate(this)">
                </div>
            </div>
        </div>`;
    }

    function renderRooms() {
        wrapper.innerHTML = '';
        rooms.forEach((r, idx) => {
            wrapper.innerHTML += createRoomHTML(idx);
            // Odtworzenie wartości po re-renderze
            setTimeout(() => {
                const aInput = document.getElementById(`rk-area-${idx}`);
                const lInput = document.getElementById(`rk-loss-${idx}`);
                if(aInput) aInput.value = r.area;
                if(lInput) lInput.value = r.loss;
            }, 0);
        });
    }

    window.rkAddRoom = function() {
        rooms.push({ area: 15, loss: 50 });
        renderRooms();
    }

    window.rkRemoveRoom = function(index) {
        // Zapisz obecne wartości przed usunięciem
        saveRoomStates();
        rooms.splice(index, 1);
        renderRooms();
    }

    function saveRoomStates() {
        rooms.forEach((r, idx) => {
            const aInput = document.getElementById(`rk-area-${idx}`);
            const lInput = document.getElementById(`rk-loss-${idx}`);
            if(aInput) r.area = parseFloat(aInput.value) || 0;
            if(lInput) r.loss = parseFloat(lInput.value) || 0;
        });
    }

    window.rkValidate = function(input) {
        let val = parseFloat(input.value);
        if(isNaN(val) || val <= 0) { input.classList.add('error'); } 
        else { input.classList.remove('error'); }
    }

    // Inicjalizacja z 2 pomieszczeniami
    rkAddRoom(); rkAddRoom();

    btnAdd.addEventListener('click', () => {
        saveRoomStates();
        rkAddRoom();
    });

    // Główna funkcja licząca (bazująca na logice ze wzorów inżynieryjnych)
    btnCalc.addEventListener('click', () => {
        saveRoomStates();

        const T = parseFloat(document.getElementById('rk-param-temp').value);
        const fF = parseFloat(document.getElementById('rk-param-floor').value);
        const sF = parseFloat(document.getElementById('rk-param-screed').value);
        const iF = parseFloat(document.getElementById('rk-param-iso').value);
        const D = parseFloat(document.getElementById('rk-param-pipe').value); // średnica wewnętrzna w [m]

        // Stałe fizyczne dla wody 35 st C
        const rho = 994; // gęstość kg/m3
        const mu = 0.00072; // lepkość dynamiczna
        const g = 9.81;

        let totalPower = 0;
        let totalArea = 0;
        let totalLength = 0;
        let totalCircuits = 0;
        let totalFlowM3H = 0;
        let maxHeadM = 0;
        let maxPressureKpa = 0;
        let spacings = [];

        let isValid = true;

        rooms.forEach(r => {
            if(r.area <= 0 || r.loss <= 0) isValid = false;
            
            // 1. Zapotrzebowanie W
            let power = r.area * r.loss;
            totalPower += power;
            totalArea += r.area;

            // 2. Szacowanie rozstawu bazując na stratach i okładzinie (Uproszczona logika PN-EN)
            // Baza dla 35 stC, płytki, jastrych cement, styro 100
            let baseProfile = { 10: 75, 15: 55, 20: 40, 25: 30 }; 
            let spacing = 10; // Domyślnie najgęściej dla pewności
            
            // Skalowanie wydajności podłogi parametrami
            for (let sp of [25, 20, 15, 10]) {
                // Skorygowana moc dla danego rozstawu
                let q_max = baseProfile[sp] * (T/35) * fF * sF * iF;
                if(q_max >= r.loss) {
                    spacing = sp; // Znaleziono optymalny, szerszy rozstaw
                    break;
                }
            }
            spacings.push(spacing);

            // 3. Długość rury (z zapasem 10% wg wytycznych)
            let spacingM = spacing / 100;
            let roomLen = (r.area / spacingM) * 1.1; 
            totalLength += roomLen;

            // 4. Pętle (limit 100m dla bezpieczeństwa hydraulicznego PEX 16)
            let circuits = Math.ceil(roomLen / 100);
            totalCircuits += circuits;

            // 5. Hydraulika (Przepływ masowy kg/h na m3/h). Założenie deltaT = 5K
            // m = Q / (cw * dT)
            let flow_kgh = power / (1.163 * 5); // uproszczenie
            let flow_m3h = flow_kgh / 1000;
            totalFlowM3H += flow_m3h;

            // Prędkość w pojedynczej pętli i opory tarcia (Darcy-Weisbach uproszczony)
            let flow_circuit_m3s = (flow_m3h / 3600) / circuits;
            let A_pipe = Math.PI * Math.pow(D/2, 2);
            let v = flow_circuit_m3s / A_pipe;
            
            // Re i Lambda
            let Re = (rho * v * D) / mu;
            let lambda = 0.3164 * Math.pow(Re, -0.25); // Blasius
            
            // Delta P = lambda * (L/D) * (rho*v^2 / 2)
            let len_circuit = roomLen / circuits;
            let dp = lambda * (len_circuit/D) * (rho * Math.pow(v, 2) / 2);
            // Dodajemy 20% na opory miejscowe (rozdzielacz)
            dp = dp * 1.2; 
            
            let head = dp / (rho * g);
            
            if(head > maxHeadM) maxHeadM = head;
            if(dp > maxPressureKpa) maxPressureKpa = dp;
        });

        if(!isValid || rooms.length === 0) {
            alert("Uzupełnij poprawnie wszystkie pola pomieszczeń (wartości > 0).");
            return;
        }

        // --- Aktualizacja widoku ---
        
        // Karta 1
        document.getElementById('out-power').innerHTML = totalPower.toFixed(0) + ' <span>W</span>';
        document.getElementById('out-length').textContent = totalLength.toFixed(0) + ' mb';
        // Pojemność wody 0.113 l/m dla 16mm (uproszczone zład całk)
        document.getElementById('out-water').textContent = (totalLength * 0.113).toFixed(1) + ' L';
        document.getElementById('out-area').textContent = totalArea.toFixed(1) + ' m²';

        // Karta 2
        document.getElementById('out-circuits').innerHTML = totalCircuits + ' <span>sekcji</span>';
        let uniqueSp = [...new Set(spacings)].sort((a,b) => a-b);
        let avgSp = (spacings.reduce((a,b) => a+b, 0) / spacings.length).toFixed(1);
        document.getElementById('out-spacing-avg').textContent = avgSp + ' cm';
        document.getElementById('out-spacing-list').textContent = uniqueSp.join(', ') + ' cm';

        // Karta 3
        let maxKpa = (maxPressureKpa / 1000).toFixed(1);
        document.getElementById('out-flow').textContent = totalFlowM3H.toFixed(2) + ' m³/h';
        document.getElementById('out-pressure').textContent = maxKpa + ' kPa';
        document.getElementById('out-head').textContent = maxHeadM.toFixed(1) + ' m';

        let pumpText = "Pompa 25-40";
        if(maxHeadM > 3.5) pumpText = "Pompa 25-60";
        if(maxHeadM > 5.5) pumpText = "Pompa 25-80";
        document.getElementById('out-pump').innerHTML = pumpText;

        // Status hydrauliczny do animacji i ostrzeżeń
        let stTitle = document.getElementById('out-status-title');
        let stDesc = document.getElementById('out-status-desc');
        let stColor = document.getElementById('svg-impeller-color');

        if(maxKpa > 25 || totalFlowM3H > 2.5) {
            stTitle.textContent = "Ryzyko Przeciążenia!";
            stTitle.className = "rk-status-warn";
            stDesc.textContent = "Obliczone opory hydrauliczne są bardzo wysokie. Parametr T zasilania jest prawdopodobnie zbyt niski do pokrycia strat przez wybraną podłogę. Pompa obiegowa może nie zapewnić wymaganego przepływu na instalacji.";
            stColor.setAttribute('fill', '#ef4444');
        } else {
            stTitle.textContent = "Instalacja Stabilna";
            stTitle.className = "rk-status-ok";
            stDesc.textContent = "Wartości oporów i przepływów mieszczą się w normach inżynieryjnych. Dobór standardowej pompy obiegowej zabezpieczy równomierne nagrzewanie podłogi.";
            stColor.setAttribute('fill', '#10b981');
        }

        resultsPanel.style.display = 'block';
        
        // Płynne przewinięcie do wyników
        setTimeout(() => {
            resultsPanel.scrollIntoView({ behavior: 'smooth', block: 'start' });
        }, 100);
    });

});
</script>



<p class="wp-block-paragraph"></p>



<style>
:root {
    --rk-cs-primary: #0f172a;
    --rk-cs-accent: #2563eb;
    --rk-cs-before: #ef4444; /* Czerwony - błędy */
    --rk-cs-before-bg: #fef2f2;
    --rk-cs-after: #10b981; /* Zielony - optymalizacja */
    --rk-cs-after-bg: #ecfdf5;
    --rk-cs-bg: #f8fafc;
    --rk-cs-border: #e2e8f0;
    --rk-cs-text: #475569;
}

.case-study-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--rk-cs-border);
    overflow: hidden;
}

/* ================= HEADER I METRYCZKA ================= */
.cs-header-wrapper {
    background: var(--rk-cs-primary);
    color: #ffffff;
    padding: 40px 50px;
    position: relative;
    overflow: hidden;
}

.cs-header-wrapper::after {
    content: '';
    position: absolute;
    top: -50px;
    right: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(37, 99, 235, 0.3) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
}

.cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.2);
    color: #93c5fd;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.cs-header-wrapper h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 25px 0;
    line-height: 1.3;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.cs-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.cs-stat-box {
    background: rgba(0, 0, 0, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
}

.cs-stat-label {
    display: block;
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
}

.cs-stat-value {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: #ffffff;
}

/* ================= OPIS WYZWANIA ================= */
.cs-content-section {
    padding: 40px 50px 30px 50px;
    background: #ffffff;
}

.cs-lead-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-cs-text);
    margin: 0 0 20px 0;
}

.cs-lead-text strong {
    color: var(--rk-cs-primary);
}

.cs-author-box {
    background: #f0f9ff;
    border-left: 4px solid var(--rk-cs-accent);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 10px;
}

.cs-author-photo {
    width: 52px;
    height: 52px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid #ffffff;
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2);
    flex-shrink: 0;
}

.cs-author-box p {
    margin: 0;
    font-size: 14px;
    color: #1e3a8a;
    line-height: 1.6;
}

.cs-author-box a {
    color: var(--rk-cs-accent);
    font-weight: 800;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
}

.cs-author-box a:hover {
    color: #1e3a8a;
}

/* ================= WYZWANIE (SPLIT CARDS - STATYCZNE) ================= */
.cs-interactive-section {
    padding: 0 50px 40px 50px;
}

.cs-split-container {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.cs-split-card {
    border-radius: 16px;
    padding: 25px;
    border: 2px solid;
    position: relative;
    overflow: hidden;
}

/* Karta Błędu (Czerwona) */
.cs-split-card.before {
    border-color: var(--rk-cs-before);
    background: var(--rk-cs-before-bg);
    box-shadow: 0 10px 25px rgba(239, 68, 68, 0.1);
}

/* Karta Poprawna (Zielona) */
.cs-split-card.after {
    border-color: var(--rk-cs-after);
    background: var(--rk-cs-after-bg);
    box-shadow: 0 10px 25px rgba(16, 185, 129, 0.1);
}

.cs-card-header {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 15px;
}

.cs-card-icon {
    font-size: 28px;
}

.cs-card-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-cs-primary);
    margin: 0;
}

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

/* Sekcje na długi ogon */
.cs-seo-details {
    margin-top: 15px;
    padding: 15px;
    background: rgba(255,255,255,0.7);
    border-radius: 8px;
    border-left: 3px solid;
}

.cs-split-card.before .cs-seo-details { border-left-color: var(--rk-cs-before); }
.cs-split-card.after .cs-seo-details { border-left-color: var(--rk-cs-after); }

.cs-seo-details h4 {
    margin: 0 0 8px 0;
    font-size: 14px;
    color: var(--rk-cs-primary);
}

.cs-seo-details ul {
    margin: 0;
    padding-left: 20px;
    font-size: 13px;
    color: var(--rk-cs-text);
    line-height: 1.5;
}

.cs-seo-details li { margin-bottom: 4px; }
.cs-seo-details li:last-child { margin-bottom: 0; }
.cs-seo-details strong { color: var(--rk-cs-primary); }

/* Statyczne grafiki SVG */
.cs-static-svg-box {
    margin-top: 20px;
    padding: 15px;
    background: #ffffff;
    border-radius: 8px;
    border: 1px dashed var(--rk-cs-border);
}

.cs-svg-graphic {
    width: 100%;
    height: 100px;
}

/* Rozwiązanie tekstowe */
.cs-card-solution {
    margin-top: 15px;
    padding-top: 15px;
    border-top: 1px dashed rgba(0,0,0,0.1);
    font-size: 13px;
    font-weight: 700;
}

.cs-split-card.before .cs-card-solution { color: #991b1b; }
.cs-split-card.after .cs-card-solution { color: #065f46; }

@media (max-width: 768px) {
    .cs-header-wrapper { padding: 35px 25px; }
    .cs-stats-grid { grid-template-columns: 1fr 1fr; }
    .cs-content-section { padding: 30px 25px 20px 25px; }
    .cs-interactive-section { padding: 0 25px 30px 25px; }
    .cs-split-container { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Analiza rzeczywistego projektu: Dom 165 m² w Krośnie",
    "description": "Case study audytu instalacji ogrzewania podłogowego. Optymalizacja rozstawu rur przy oknach tarasowych HS, podniesienie SCOP pompy ciepła z 3,2 do 4,15 i oszczędności 1450 PLN rocznie.",
    "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-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-krosno",
    "name": "Parametry OZC i hydrauliki przed i po optymalizacji (Krosno 165m2)",
    "description": "Zestawienie parametrów błędnego układu rur i zoptymalizowanej strefy brzegowej przy wielkogabarytowych przeszkleniach HS.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projekt ogrzewania podłogowego Krosno",
      "rozstaw rur przy oknie tarasowym HS",
      "temperatura zasilania pompy ciepła 35 stopni",
      "optymalizacja długości pętli podłogówki",
      "wskaźnik SCOP pompy ciepła"
    ],
    "measurementTechnique": "Weryfikacja strat ciepła 85 W/m2 przy oknie HS i korekta rozstawu rur z 15 cm na 10 cm.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Projekt pierwotny: Rozstaw 15 cm, zasilanie 45°C, SCOP 3,2, najdłuższa pętla 138 m.",
        "Projekt zoptymalizowany: Rozstaw 10 cm przy oknie (strefa 1m), zasilanie 35°C, SCOP 4,15.",
        "Efekt ekonomiczny: Oszczędność 1450 PLN rocznie na energii elektrycznej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-casestudy",
    "name": "Eksplorator Błędów Projektowych HVAC",
    "description": "Moduł porównawczy prezentujący inżynierskie różnice pomiędzy wykonawstwem amatorskim a rzetelnym projektem OZC w kontekście stref przyokiennych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="case-study-module" id="app-case-study">

    <div class="cs-header-wrapper">
        <div class="cs-badge">Case Study – Audyt Projektu</div>
        <h2>Analiza rzeczywistego projektu instalacji</h2>
        <div class="cs-stats-grid">
            <div class="cs-stat-box">
                <span class="cs-stat-label">Data audytu</span>
                <span class="cs-stat-value">Marzec 2026</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Lokalizacja</span>
                <span class="cs-stat-value">Okolice Krosna</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Pow. domu</span>
                <span class="cs-stat-value">165 m²</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Oszczędności</span>
                <span class="cs-stat-value">1450 PLN / rok</span>
            </div>
        </div>
    </div>

    <div class="cs-content-section">
        <p class="cs-lead-text">
            Podczas weryfikacji dokumentacji technicznej dla inwestora budującego dom w województwie podkarpackim, natrafiliśmy na poważny błąd wykonawczy. Pierwotny instalator zaplanował ułożenie rur w uniwersalnym rozstawie 15 cm na całej powierzchni budynku. Zignorował fakt, że w salonie znajduje się <strong>wielkogabarytowe okno przesuwne HS o szerokości 5,5 metra</strong>.
        </p>
        
        <div class="cs-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="cs-author-photo" loading="lazy">
            <p>Audyt przeprowadził CEO portalu  <a href="https://projekt-ogrzewania.pl/">Robert Kucharski</a>. Wprowadzenie danych do autorskiego oprogramowania wykazało, że strefa przyokienna generuje straty ciepła na poziomie 85 W/m².</p>
        </div>
    </div>

    <div class="cs-interactive-section">
        <div class="cs-split-container">
            
            <div class="cs-split-card before">
                <div class="cs-card-header">
                    <span class="cs-card-icon">❌</span>
                    <h3 class="cs-card-title">Pierwotny pomysł wykonawcy</h3>
                </div>
                <p class="cs-card-desc">Rury ułożone rzadko (15 cm) pod oknem HS. Aby pokryć straty 85 W/m², instalator musiał podnieść temperaturę zasilania pompy do 45°C. Dodatkowo jedna pętla miała aż 138 metrów.</p>
                
                <div class="cs-seo-details">
                    <h4>Skutki inżynieryjne błędu:</h4>
                    <ul>
                        <li>Opór hydrauliczny pętli przekroczył <strong>25 kPa</strong>.</li>
                        <li>Spadek przepływu na rotametrze <strong>poniżej 0,5 l/min</strong>.</li>
                        <li>Wymuszenie podbicia krzywej grzewczej <strong>do 45/40°C</strong>.</li>
                    </ul>
                </div>

                <div class="cs-static-svg-box">
                    <svg class="cs-svg-graphic" viewBox="0 0 200 100">
                        <rect x="20" y="10" width="160" height="10" fill="#94a3b8"/>
                        <line x1="20" y1="15" x2="180" y2="15" stroke="#ffffff" stroke-width="2"/>
                        <circle cx="50" cy="50" r="6" fill="#ef4444"/>
                        <circle cx="100" cy="50" r="6" fill="#ef4444"/>
                        <circle cx="150" cy="50" r="6" fill="#ef4444"/>
                        <text x="100" y="85" font-size="12" font-weight="bold" fill="#ef4444" text-anchor="middle">Zasilanie: 45°C | SCOP: 3.2</text>
                    </svg>
                </div>

                <div class="cs-card-solution">
                    Efekt: Drastyczny spadek sprawności pompy (SCOP 3.2), wysokie opory hydrauliczne pętli 138m i chłód bijący od strony szyb w zimie.
                </div>
            </div>

            <div class="cs-split-card after">
                <div class="cs-card-header">
                    <span class="cs-card-icon">✅</span>
                    <h3 class="cs-card-title">Inżynierska optymalizacja</h3>
                </div>
                <p class="cs-card-desc">Skróciliśmy skrajną pętlę do bezpiecznych 92 m i zagęściliśmy rury do 10 cm w pasie o szerokości 1 metra (strefa brzegowa pod oknem). Reszta salonu co 15 cm.</p>
                
                <div class="cs-seo-details">
                    <h4>Korekta projektowa przyniosła:</h4>
                    <ul>
                        <li>Redukcję oporów hydraulicznych <strong>poniżej 15 kPa</strong>.</li>
                        <li>Prawidłowe zrównoważenie sekcji na <strong>1,8 l/min</strong>.</li>
                        <li>Obniżenie krzywej grzewczej dla PC <strong>do 35/30°C</strong>.</li>
                    </ul>
                </div>

                <div class="cs-static-svg-box">
                    <svg class="cs-svg-graphic" viewBox="0 0 200 100">
                        <rect x="20" y="10" width="160" height="10" fill="#94a3b8"/>
                        <line x1="20" y1="15" x2="180" y2="15" stroke="#ffffff" stroke-width="2"/>
                        <circle cx="40" cy="40" r="6" fill="#10b981"/>
                        <circle cx="70" cy="40" r="6" fill="#10b981"/>
                        <circle cx="100" cy="40" r="6" fill="#10b981"/>
                        <circle cx="145" cy="50" r="6" fill="#10b981"/>
                        <text x="100" y="85" font-size="12" font-weight="bold" fill="#10b981" text-anchor="middle">Zasilanie: 35°C | SCOP: 4.15</text>
                    </svg>
                </div>

                <div class="cs-card-solution">
                    Efekt: Obniżenie zasilania do 35°C, wzrost SCOP do 4.15 i realna oszczędność 1450 PLN każdego roku. Równomierny rozkład ciepła.
                </div>
            </div>

        </div>
    </div>

</div>

<script>
(function() {
    const initCaseStudy = () => {
        // Zabezpieczenie domenowe (Skrypt nie usuwa już interakcji z kart, służy tylko do blokady)
        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('app-case-study');
            if (container) {
                container.innerHTML = `
                    <div style="padding: 40px 25px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px; border: 2px solid #ef4444;">
                        <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                        <h3 style="margin: 0 0 10px 0; font-size: 20px;">Studium Przypadku Chronione</h3>
                        <p style="font-size: 14px; margin-bottom: 15px;">Ten panel to autorska własność Projekt-Ogrzewania.pl. Użycie nieautoryzowane.</p>
                    </div>
                `;
            }
        }
    };

    // Zabezpieczenie przed przedwczesnym odpaleniem skryptu
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', initCaseStudy);
    } else {
        initCaseStudy();
    }
})();
</script>



<style>
:root {
    --rk-quote-dark: #0f172a;
    --rk-quote-darker: #020617;
    --rk-quote-primary: #3b82f6; /* Hydronic Blue */
    --rk-quote-accent: #10b981; /* Emerald/Green for success */
    --rk-quote-warning: #f59e0b; /* Amber */
    --rk-quote-danger: #ef4444; /* Red */
    --rk-quote-bg: #ffffff;
    --rk-quote-surface: #f8fafc;
    --rk-quote-border: #cbd5e1;
    --rk-quote-text: #334155;
    --rk-quote-muted: #64748b;
    --rk-quote-shadow: 0 20px 40px -10px rgba(59, 130, 246, 0.15);
}

.rk-quote-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-quote-bg);
    border-radius: 24px;
    box-shadow: var(--rk-quote-shadow);
    border: 1px solid var(--rk-quote-border);
    overflow: hidden;
}

/* --- NAGŁÓWEK I CYTAT --- */
.rk-quote-header {
    background: linear-gradient(135deg, var(--rk-quote-darker) 0%, var(--rk-quote-dark) 100%);
    padding: 50px 50px 40px;
    position: relative;
    border-bottom: 4px solid var(--rk-quote-primary);
    text-align: center;
}

.rk-quote-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(59, 130, 246, 0.2);
    color: #93c5fd;
    padding: 6px 16px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(147, 197, 253, 0.3);
}

.rk-quote-box {
    position: relative;
    max-width: 800px;
    margin: 0 auto;
}

.rk-quote-mark {
    font-size: 100px;
    color: rgba(255,255,255,0.05);
    position: absolute;
    top: -40px;
    left: -30px;
    line-height: 1;
    font-family: Georgia, serif;
    user-select: none;
}

.rk-quote-text {
    font-size: 24px;
    font-weight: 900;
    line-height: 1.5;
    color: #ffffff;
    margin: 0 0 20px 0;
    position: relative;
    z-index: 2;
}

.rk-quote-text span {
    color: #93c5fd;
}

/* --- INTERAKTYWNE PODSUMOWANIE --- */
.rk-quote-body {
    display: grid;
    grid-template-columns: 320px 1fr;
    background: #ffffff;
}

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

.rk-rule-btn {
    background: #ffffff;
    border: 2px solid var(--rk-quote-border);
    padding: 15px;
    border-radius: 12px;
    text-align: left;
    cursor: pointer;
    transition: all 0.2s ease;
    display: flex;
    align-items: center;
    gap: 15px;
}

.rk-rule-btn:hover {
    border-color: #94a3b8;
}

.rk-rule-btn.active {
    background: #eff6ff;
    border-color: var(--rk-quote-primary);
    box-shadow: 0 4px 10px rgba(59, 130, 246, 0.1);
}

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

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

.rk-rule-text h3 {
    margin: 0 0 4px 0;
    font-size: 14px;
    font-weight: 900;
    color: var(--rk-quote-dark);
}

.rk-rule-text p {
    margin: 0;
    font-size: 12px;
    color: var(--rk-quote-text);
    font-weight: 600;
}

/* Panele Detali */
.rk-rule-details {
    padding: 40px;
    position: relative;
}

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

.rk-detail-panel.active {
    display: flex;
    flex-direction: column;
    gap: 20px;
    animation: rkFadeIn 0.3s ease-out;
}

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

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

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

.rk-detail-panel strong { color: var(--rk-quote-dark); }

.rk-detail-svg-box {
    width: 100%;
    height: 180px;
    background: var(--rk-quote-dark);
    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);
}

.rk-detail-svg { width: 100%; max-width: 250px; height: auto; }

/* --- AUTOR --- */
.rk-quote-author {
    background: #ffffff;
    padding: 30px 50px;
    display: flex;
    align-items: center;
    gap: 25px;
    border-top: 1px solid var(--rk-quote-border);
}

.rk-author-photo {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    border: 3px solid var(--rk-quote-primary);
    box-shadow: 0 4px 15px rgba(59, 130, 246, 0.2);
    object-fit: cover;
    flex-shrink: 0;
}

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

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

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

.rk-author-links a {
    color: var(--rk-quote-primary);
    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: #1e3a8a; text-decoration: underline; }

@media (max-width: 768px) {
    .rk-quote-header { padding: 40px 25px; }
    .rk-quote-text { font-size: 20px; }
    .rk-quote-body { grid-template-columns: 1fr; }
    .rk-rules-list { border-right: none; border-bottom: 1px solid var(--rk-quote-border); padding: 25px; }
    .rk-rule-details { padding: 25px; }
    .rk-quote-author { flex-direction: column; text-align: center; padding: 30px 25px; }
    .rk-author-links { justify-content: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-quote",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Ostateczne podsumowanie: Dlaczego kompleksowy kalkulator podłogówki to konieczność?",
    "description": "Podsumowanie eksperckie dotyczące projektowania ogrzewania podłogowego. Wpływ normy PN-EN 1264, rozstawu rur, i grubości wylewki na efektywność pomp ciepła i koszty instalacji.",
    "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": "2026-05-24",
    "dateModified": "2026-05-24"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-summary",
    "name": "Kluczowe Parametry i Limity Ogrzewania Podłogowego (Baza Wiedzy)",
    "description": "Zestawienie twardych norm inżynieryjnych podsumowujących artykuł o projektowaniu podłogówki.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kompleksowy kalkulator ogrzewania podłogowego",
      "projektowe obciążenie cieplne OZC",
      "rozstaw rur ogrzewania podłogowego",
      "przepływy na rotametrach",
      "długość pętli PEX"
    ],
    "measurementTechnique": "Synteza wniosków z normy PN-EN 1264, uwzględniająca przepływy, średnice i izolacyjność termiczną.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Maksymalna długość pętli PEX 16x2.0 mm wynosi 120 mb.",
        "Grubość wylewki cementowej to min. 45 mm nad rurą, izolacja EPS 100/200.",
        "Rozstaw rur pod pompę ciepła wynosi średnio 10-15 cm, aby uzyskać zasilanie 35°C."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-quote",
    "name": "Eksplorator Wniosków Projektowych",
    "description": "Interaktywny panel prezentujący 3 złote zasady inżynieryjne instalacji podłogowej, wzbogacony o schematy wektorowe.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-quote-container" id="rk-quote-app">
    
    <div class="rk-quote-header">
        <div class="rk-quote-badge">
            <svg width="14" height="14" 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>
            Podsumowanie Eksperta
        </div>
        
        <div class="rk-quote-box">
            <div class="rk-quote-mark">&#8222;</div>
            <h2 class="rk-quote-text">
                Ogrzewanie podłogowe to nie jest zgadywanka. To czysta matematyka i fizyka budowli. Bez <span>kompleksowego kalkulatora</span> i obliczeń OZC ryzykujesz nie tylko tysiące złotych na etapie wykonawstwa, ale przede wszystkim komfort swojej rodziny przez kolejne dekady.
            </h2>
        </div>
    </div>

    <div class="rk-quote-body">
        
        <div class="rk-rules-list">
            <button class="rk-rule-btn active" data-target="rk-tab-ozc">
                <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><path d="M12 8v4l3 3"></path></svg></div>
                <div class="rk-rule-text">
                    <h3>1. Bilans to Fundament</h3>
                    <p>Straty ciepła vs Zasilanie</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-target="rk-tab-loop">
                <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="M21.5 2v6h-6M21.34 15.57a10 10 0 1 1-.57-8.38l5.67-5.67"></path></svg></div>
                <div class="rk-rule-text">
                    <h3>2. Limity Hydrauliczne</h3>
                    <p>Max 120 m dla rury PEX 16</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-target="rk-tab-iso">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg></div>
                <div class="rk-rule-text">
                    <h3>3. Konstrukcja Płyty</h3>
                    <p>EPS 100 i Grubość Wylewki</p>
                </div>
            </button>
        </div>

        <div class="rk-rule-details">
            
            <div class="rk-detail-panel active" id="rk-tab-ozc">
                <h4>Projektowe Obciążenie Cieplne</h4>
                <p>Każdy budynek oddaje ciepło inaczej. <strong>Kompleksowy kalkulator ogrzewania podłogowego</strong> przetwarza parametry OZC, dobierając idealny <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" style="color:var(--rk-quote-primary);font-weight:bold;">rozstaw rur</a> (np. 10 cm przy oknach, 15 cm w salonie). Dzięki temu pompa ciepła może pracować na ekstremalnie niskim i tanim zasilaniu rzędu 35°C.</p>
                
                <div class="rk-detail-svg-box">
                    <svg class="rk-detail-svg" viewBox="0 0 200 100">
                        <rect x="50" y="20" width="100" height="60" fill="none" stroke="#64748b" stroke-width="4" rx="4"/>
                        <path d="M 30 50 L 50 50 M 150 50 L 170 50" stroke="#3b82f6" stroke-width="4" stroke-linecap="round"/>
                        <circle cx="100" cy="50" r="15" fill="#10b981"/>
                        <text x="100" y="54" font-size="12" font-weight="bold" fill="#0f172a" text-anchor="middle">OZC</text>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="rk-tab-loop">
                <h4>Blokada przepływów na rotametrach</h4>
                <p>Zignorowanie normy <strong>PN-EN 1264</strong> i ułożenie pętli dłuższej niż 120 metrów dla rury PEX 16&#215;2.0 kończy się tragedią. Opory hydrauliczne rosną powyżej 20 kPa, co uniemożliwia wyregulowanie <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" style="color:var(--rk-quote-primary);font-weight:bold;">przepływów na rotametrach</a>. Efektem jest permanentnie zimna posadzka.</p>
                
                <div class="rk-detail-svg-box">
                    <svg class="rk-detail-svg" viewBox="0 0 200 100">
                        <path d="M 20 50 Q 50 20 80 50 T 140 50 T 180 50" fill="none" stroke="#3b82f6" stroke-width="6" stroke-linecap="round"/>
                        <line x1="20" y1="80" x2="180" y2="80" stroke="#ef4444" stroke-width="3"/>
                        <text x="100" y="72" font-size="12" font-weight="bold" fill="#ef4444" text-anchor="middle">MAX 120 mb</text>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="rk-tab-iso">
                <h4>Nośność i pękanie wylewek</h4>
                <p>Ułożenie rur na tanim styropianie fasadowym (EPS 70 zamiast twardego EPS 100/200) to błąd wykonawczy. Pod wpływem ciężaru wylewki i mebli, warstwa izolacji ulega ściśnięciu. Dochodzi do zerwania taśm dylatacyjnych, a grubość jastrychu (min. 45 mm nad rurą) traci swoją strukturę nośną.</p>
                
                <div class="rk-detail-svg-box">
                    <svg class="rk-detail-svg" viewBox="0 0 200 100">
                        <rect x="20" y="20" width="160" height="30" fill="#cbd5e1"/>
                        <rect x="20" y="55" width="160" height="25" fill="#64748b"/>
                        <circle cx="50" cy="35" r="5" fill="#3b82f6"/><circle cx="100" cy="35" r="5" fill="#3b82f6"/><circle cx="150" cy="35" r="5" fill="#3b82f6"/>
                        <text x="100" y="72" font-size="11" font-weight="bold" fill="#ffffff" text-anchor="middle">EPS 100 (Twardy)</text>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-quote-author">
        <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-author-photo" loading="lazy">
        <div class="rk-author-info">
            <h4>Robert Kucharski</h4>
            <p>Główny audytor i projektant HVAC na portalu Projekt-Ogrzewania.pl. Setki zaprojektowanych instalacji i godzin spędzonych na placach budowy przekuwam w twardą, matematyczną wiedzę dla inwestorów.</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>
(function() {
    const initApp = () => {
        // Zabezpieczenie Domenowe - 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('rk-quote-app');
            if (container) {
                container.innerHTML = `
                    <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:24px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                        <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                        BŁĄD LICENCJI:<br>Kontener informacyjny należy do serwisu Projekt-Ogrzewania.pl. Uruchamianie na nieautoryzowanej domenie jest zabronione prawem.
                    </div>
                `;
                return;
            }
        }

        // Logika zakładek
        const btns = document.querySelectorAll('.rk-rule-btn');
        const panels = document.querySelectorAll('.rk-detail-panel');

        btns.forEach(btn => {
            btn.addEventListener('click', function(e) {
                const targetId = e.currentTarget.getAttribute('data-target');
                
                // Reset
                btns.forEach(b => b.classList.remove('active'));
                panels.forEach(p => p.classList.remove('active'));
                
                // Aktywacja
                e.currentTarget.classList.add('active');
                const targetPanel = document.getElementById(targetId);
                if(targetPanel) {
                    targetPanel.classList.add('active');
                }
            });
        });
    };

    // Zabezpieczenie przed opóźnionym ładowaniem (WordPress/Elementor)
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', initApp);
    } else {
        initApp();
    }
})();
</script>



<style>
:root {
    --rk-faq2-dark: #1e293b;
    --rk-faq2-card: #ffffff;
    --rk-faq2-brand: #0ea5e9; /* Ekspercki błękit */
    --rk-faq2-brand-light: #e0f2fe;
    --rk-faq2-accent: #f59e0b; /* Bursztyn dla kontrastu / ciepła */
    --rk-faq2-alert: #ef4444; /* Czerwień błędów */
    --rk-faq2-bg: #f8fafc;
    --rk-faq2-border: #cbd5e1;
    --rk-faq2-text: #334155;
    --rk-faq2-muted: #64748b;
}

.rk-faq2-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--rk-faq2-card);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(14, 165, 233, 0.1);
    border: 1px solid var(--rk-faq2-border);
    overflow: hidden;
}

/* Nagłówek */
.rk-faq2-header {
    background: linear-gradient(135deg, var(--rk-faq2-dark) 0%, #0f172a 100%);
    padding: 40px 50px;
    color: #ffffff;
    position: relative;
    border-bottom: 5px solid var(--rk-faq2-brand);
}

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

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

.rk-faq2-title span { color: #bae6fd; }

/* Sekcja Akordeonu */
.rk-faq2-interactive {
    padding: 35px 45px;
    background: var(--rk-faq2-bg);
}

.rk-faq2-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.rk-faq2-item {
    background: var(--rk-faq2-card);
    border: 1px solid var(--rk-faq2-border);
    border-left: 4px solid var(--rk-faq2-border);
    border-radius: 12px;
    overflow: hidden;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-faq2-item.active {
    border-color: var(--rk-faq2-brand);
    border-left-width: 6px;
    box-shadow: 0 10px 20px -5px rgba(14, 165, 233, 0.15);
}

/* Przycisk Pytania */
.rk-faq2-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-faq2-dark);
    transition: background 0.3s;
}

.rk-faq2-question:hover {
    background: #f1f5f9;
}

.rk-faq2-item.active .rk-faq2-question {
    background: var(--rk-faq2-brand-light);
    color: #0369a1;
}

.rk-faq2-icon {
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    border-radius: 8px;
    background: #f1f5f9;
    color: var(--rk-faq2-muted);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq2-item.active .rk-faq2-icon {
    background: var(--rk-faq2-brand);
    color: #ffffff;
    transform: rotate(45deg); /* Zmiana plusa w krzyżyk */
}

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

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

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

/* Wnętrze Odpowiedzi */
.rk-faq2-content {
    padding: 20px 25px 25px;
    border-top: 1px dashed var(--rk-faq2-border);
    display: grid;
    grid-template-columns: 1fr 220px;
    gap: 30px;
    align-items: center;
}

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

.rk-faq2-text strong {
    font-weight: 800;
    color: var(--rk-faq2-dark);
    background: linear-gradient(120deg, rgba(14, 165, 233, 0.1) 0%, rgba(14, 165, 233, 0.1) 100%);
    background-repeat: no-repeat;
    background-size: 100% 30%;
    background-position: 0 80%;
}

.rk-link {
    color: var(--rk-faq2-brand);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
    transition: color 0.3s;
}

.rk-link:hover { color: #0284c7; }

/* Wizualizacje SVG */
.rk-faq2-visual {
    background: #f8fafc;
    border-radius: 12px;
    height: 160px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 2px solid #e2e8f0;
    position: relative;
    overflow: hidden;
}

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

/* --- Animacje SVG zależne od .active --- */

/* 1. Mieszacz (Zawór 3-drogowy) */
.anim-mix-hot { stroke-dasharray: 8; animation: flowHot 2s linear infinite; opacity: 0; stroke: #ef4444; }
.anim-mix-cold { stroke-dasharray: 8; animation: flowCold 2s linear infinite; opacity: 0; stroke: #3b82f6; }
.anim-mix-warm { stroke-dasharray: 8; animation: flowWarm 2s linear infinite; opacity: 0; stroke: #f59e0b; }
.rk-faq2-item.active .anim-mix-hot, .rk-faq2-item.active .anim-mix-cold, .rk-faq2-item.active .anim-mix-warm { opacity: 1; }
@keyframes flowHot { to { stroke-dashoffset: -16; } }
@keyframes flowCold { to { stroke-dashoffset: -16; } }
@keyframes flowWarm { to { stroke-dashoffset: 16; } }

/* 2. Glikol vs Woda Demi */
.anim-water-demi { transform: scaleY(0); transform-origin: bottom; transition: transform 1s 0.3s ease-out; fill: #38bdf8; }
.rk-faq2-item.active .anim-water-demi { transform: scaleY(1); }
.anim-bubbles circle { opacity: 0; animation: floatUp 2s infinite ease-in; }
.rk-faq2-item.active .anim-bubbles circle:nth-child(1) { animation-delay: 0.5s; }
.rk-faq2-item.active .anim-bubbles circle:nth-child(2) { animation-delay: 1.2s; }
.rk-faq2-item.active .anim-bubbles circle:nth-child(3) { animation-delay: 0.8s; }
@keyframes floatUp { 0% { opacity: 0; transform: translateY(10px); } 50% { opacity: 1; } 100% { opacity: 0; transform: translateY(-20px); } }

/* 3. Długa Pętla (Brak Przepływu) */
.anim-long-pipe { stroke-dasharray: 200; stroke-dashoffset: 200; stroke: #ef4444; transition: stroke-dashoffset 2s 0.3s ease-out; }
.rk-faq2-item.active .anim-long-pipe { stroke-dashoffset: 0; }
.anim-block { opacity: 0; transition: opacity 0.3s 2.3s; }
.rk-faq2-item.active .anim-block { opacity: 1; }

/* 4. Rozstaw Łazienka */
.anim-dense-pipe { stroke-dasharray: 300; stroke-dashoffset: 300; transition: stroke-dashoffset 1.5s 0.3s ease-out; }
.rk-faq2-item.active .anim-dense-pipe { stroke-dashoffset: 0; }
.anim-heat-wave path { opacity: 0; animation: radiate 1.5s infinite alternate; }
.rk-faq2-item.active .anim-heat-wave path:nth-child(1) { animation-delay: 0.8s; }
.rk-faq2-item.active .anim-heat-wave path:nth-child(2) { animation-delay: 1.0s; }
.rk-faq2-item.active .anim-heat-wave path:nth-child(3) { animation-delay: 1.2s; }
@keyframes radiate { from { opacity: 0; transform: translateY(0); } to { opacity: 0.6; transform: translateY(-5px); stroke: #ef4444; } }

/* 5. Wygrzewanie (28 dni) */
.anim-calendar-leaf { transform-origin: top; transition: transform 0.5s 0.3s, opacity 0.5s 0.3s; }
.rk-faq2-item.active .anim-calendar-leaf { transform: rotateX(-90deg); opacity: 0; }
.anim-crack { stroke-dasharray: 50; stroke-dashoffset: 50; transition: stroke-dashoffset 0.5s 0.8s; }
.rk-faq2-item.active .anim-crack { stroke-dashoffset: 0; }

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

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "FAQ – Najczęściej zadawane pytania projektowe",
    "description": "Zbiór kluczowych pytań inwestorskich o łączenie podłogówki z grzejnikami, rodzaj zładu (woda vs glikol), graniczne długości pętli oraz proces wygrzewania posadzki.",
    "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-23",
    "dateModified": "2026-05-23"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy można połączyć ogrzewanie podłogowe bezpośrednio z tradycyjnymi grzejnikami w jednym obiegu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Bezpośrednie połączenie jest niedopuszczalne, ponieważ grzejniki wymagają wysokich temperatur zasilania (55–75°C), które zniszczyłyby posadzkę podłogówki. Konieczne jest zastosowanie układu rozdzielczego z niezależną grupą pompowo-mieszaczową wyposażoną w trójdrogowy zawór termostatyczny obniżający parametr dla podłogówki do bezpiecznych 35–40°C."
        }
      },
      {
        "@type": "Question",
        "name": "Czym najlepiej napełnić instalację ogrzewania podłogowego – zwykłą wodą z kranu czy glikolem?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Instalację w domach całorocznych należy napełnić wodą demineralizowaną uzdatnioną inhibitorem korozji, który chroni układ przed odkładaniem się kamienia kotłowego i szlamu. Glikol stosuje się wyłącznie w domkach letniskowych lub układach narażonych na zamarzanie, pamiętając, że zmniejsza on sprawność wymiany ciepła o ok. 10–15% z uwagi na wyższą lepkość kinematiczną."
        }
      },
      {
        "@type": "Question",
        "name": "Co się stanie, jeśli wykonawca ułoży zbyt długą pętlę podłogówki, np. 160 metrów rury 16 mm?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Taka pętla wygeneruje opory hydrauliczne drastycznie przekraczające możliwości standardowej pompy obiegowej, przez co przepływ wody spadnie niemal do zera. W efekcie początek pętli przy rozdzielaczu będzie ciepły, a reszta pomieszczenia pozostanie całkowicie zimna, co wymaga wpięcia dodatkowej pompy wspomagającej lub uciążliwego kucia posadzki w celu podziału obwodu."
        }
      },
      {
        "@type": "Question",
        "name": "Dlaczego w łazienkach zawsze projektuje się gęstszy rozstaw rur (co 10 cm) niż w pokojach?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Łazienki charakteryzują się wyższą temperaturą obliczeniową wnętrza (24°C zamiast 20°C) przy jednoczesnym ograniczeniu wolnej powierzchni posadzki przez brodziki, wanny i miski WC. Gęstszy rozstaw rur pozwala wygenerować wyższą gęstość strumienia cieplnego z jednego metra kwadratowego i pokryć zapotrzebowanie na ciepło mimo małej powierzchni grzewczej."
        }
      },
      {
        "@type": "Question",
        "name": "Po jakim czasie od zalania wylewki betonowej można uruchomić ogrzewanie podłogowe i zacząć proces wygrzewania?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Proces wygrzewania jastrychu cementowego można rozpocząć najwcześniej po upływie 28 dni od jego wylania (dla wylewek anhydrytowych czas ten skraca się do 7 dni). Zbyt wczesne podanie temperatury spowoduje gwałtowne odparowanie wody niezbędnej do procesu hydratacji cementu, co doprowadzi do drastycznego spadku wytrzymałości mechanicznej posadzki i jej nieodwracalnego spękania."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset-faq",
    "name": "Wytyczne Projektowo-Wykonawcze Ogrzewania Podłogowego (Baza Wiedzy)",
    "description": "Kompilacja normatywnych wytycznych instalacyjnych (rozstawy w łazienkach, max długości pętli, proces hydratacji jastrychu) niezbędnych przy obliczeniach hydraulicznych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": { "@type": "Person", "name": "Robert Kucharski" },
    "keywords": [
      "połączenie podłogówki z grzejnikami",
      "woda demineralizowana czy glikol",
      "zbyt długa pętla podłogówki 160m",
      "rozstaw rur w łazience 10 cm",
      "wygrzewanie wylewki betonowej 28 dni"
    ],
    "measurementTechnique": "Określenie parametrów granicznych na podstawie norm PN-EN 1264, PN-EN 12831 oraz wymagań chemii budowlanej (hydratacja cementu).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wymóg stosowania zaworu 3-drogowego przy łączeniu z grzejnikami (redukcja 75°C -> 35°C).",
        "Opory hydrauliczne długiej pętli >120m blokują przepływ masowy.",
        "Proces dojrzewania betonu wymaga minimum 28 dni przed startem wygrzewania."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp-faq",
    "name": "Interaktywna Baza Błędów Wykonawczych",
    "description": "Narzędzie FAQ z wbudowanymi animacjami SVG obrazującymi skutki błędów instalacyjnych: brak mieszacza, zbyt długa pętla hydrauliczna czy przedwczesne wygrzewanie betonu.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": { "@type": "Person", "name": "Robert Kucharski" }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-faq2-container" id="rk-faq2-app">
    
    <div class="rk-faq2-header">
        <div class="rk-faq2-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Baza Wiedzy Inżyniera
        </div>
        <h2 class="rk-faq2-title">FAQ – <span>Najczęściej zadawane pytania</span></h2>
    </div>

    <div class="rk-faq2-interactive">
        <div class="rk-faq2-list">
            
            <!-- Pytanie 1: Podłogówka + Grzejniki -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>1. Czy można połączyć podłogówkę bezpośrednio z grzejnikami?</span>
                    <div class="rk-faq2-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="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-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Bezpośrednie połączenie jest <strong>niedopuszczalne</strong>. Grzejniki wymagają wysokich temperatur zasilania (55–75°C), które zniszczyłyby posadzkę podłogówki (pękanie wylewki). Konieczne jest zastosowanie układu rozdzielczego z niezależną grupą pompowo-mieszaczową wyposażoną w <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/" class="rk-link">zawór termostatyczny</a> obniżający parametr do bezpiecznych 35–40°C.
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-svg-stage" viewBox="0 0 120 80">
                                    <path d="M 10 40 L 40 40" stroke="#ef4444" stroke-width="6" stroke-linecap="round"></path>
                                    <path d="M 40 70 L 40 50" stroke="#3b82f6" stroke-width="6" stroke-linecap="round"></path>
                                    <path d="M 40 40 L 100 40" stroke="#f59e0b" stroke-width="6" stroke-linecap="round"></path>
                                    <!-- Animowane przepływy -->
                                    <path d="M 10 40 L 35 40" stroke-width="3" stroke-linecap="round" class="anim-mix-hot"></path>
                                    <path d="M 40 70 L 40 45" stroke-width="3" stroke-linecap="round" class="anim-mix-cold"></path>
                                    <path d="M 45 40 L 100 40" stroke-width="3" stroke-linecap="round" class="anim-mix-warm"></path>
                                    <circle cx="40" cy="40" r="10" fill="#1e293b"></circle>
                                    <text x="40" y="44" fill="#fff" font-size="10" text-anchor="middle" font-weight="bold">M</text>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 2: Woda vs Glikol -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>2. Czym napełnić instalację – wodą z kranu czy glikolem?</span>
                    <div class="rk-faq2-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="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-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Instalację w domach całorocznych należy napełnić <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-z-inhibitorem-korozji-do-ogrzewania-podlogowego/" class="rk-link">wodą demineralizowaną z inhibitorem korozji</a>. Chroni to układ przed odkładaniem się kamienia i szlamu. <a href="https://projekt-ogrzewania.pl/glikol-w-ogrzewaniu-podlogowym-prawda-i-mity-ktore-musi-znac-kazdy-inwestor/" class="rk-link">Glikol</a> stosuje się wyłącznie w układach narażonych na zamarzanie (domki letniskowe), pamiętając, że zmniejsza on sprawność wymiany ciepła o ok. 10–15% ze względu na gęstość.
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-svg-stage" viewBox="0 0 120 80">
                                    <path d="M 40 20 L 40 70 L 80 70 L 80 20" fill="none" stroke="#94a3b8" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path>
                                    <rect x="42" y="30" width="36" height="38" class="anim-water-demi"></rect>
                                    <g class="anim-bubbles" fill="#ffffff">
                                        <circle cx="50" cy="60" r="2"></circle>
                                        <circle cx="60" cy="55" r="3"></circle>
                                        <circle cx="70" cy="65" r="1.5"></circle>
                                    </g>
                                    <text x="60" y="50" fill="#fff" font-size="12" text-anchor="middle" font-weight="bold">H₂O+</text>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 3: Za długa pętla -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>3. Co się stanie, jeśli pętla wyniesie np. 160 metrów?</span>
                    <div class="rk-faq2-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="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-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Taka <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/" class="rk-link">za długa pętla</a> wygeneruje opory hydrauliczne drastycznie przekraczające możliwości standardowej pompy obiegowej. Przepływ wody spadnie niemal do zera. W efekcie początek pętli przy rozdzielaczu będzie ciepły, a <strong>reszta pomieszczenia pozostanie całkowicie zimna</strong> (upośledzenie hydrauliczne).
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-svg-stage" viewBox="0 0 120 80">
                                    <path d="M 10 20 Q 30 20, 30 40 T 50 60 T 70 40 T 90 60 T 110 40" fill="none" stroke="#e2e8f0" stroke-width="6" stroke-linecap="round"></path>
                                    <path d="M 10 20 Q 30 20, 30 40 T 50 60" fill="none" stroke-width="6" stroke-linecap="round" class="anim-long-pipe"></path>
                                    <circle cx="50" cy="60" r="8" fill="#ef4444" class="anim-block"></circle>
                                    <line x1="45" y1="55" x2="55" y2="65" stroke="#fff" stroke-width="2" class="anim-block"></line>
                                    <line x1="55" y1="55" x2="45" y2="65" stroke="#fff" stroke-width="2" class="anim-block"></line>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 4: Łazienka 10 cm -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>4. Dlaczego w łazienkach zawsze projektuje się rozstaw rur co 10 cm?</span>
                    <div class="rk-faq2-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="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-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Łazienki charakteryzują się wyższą temperaturą projektową (24°C zamiast 20°C) przy <strong>mocno ograniczonej wolnej powierzchni</strong> posadzki (odchodzą brodziki, wanny, zabudowy WC). Gęstszy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/" class="rk-link">rozstaw rur (co 10 cm)</a> pozwala wygenerować wyższą gęstość strumienia cieplnego z 1 m² i pokryć straty ciepła przy małej powierzchni grzewczej.
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-svg-stage" viewBox="0 0 120 80">
                                    <path class="anim-dense-pipe" d="M 20 60 L 100 60 M 20 50 L 100 50 M 20 40 L 100 40" stroke="#f59e0b" stroke-width="4" stroke-linecap="round"></path>
                                    <g class="anim-heat-wave" stroke="#f59e0b" stroke-width="2" stroke-linecap="round" fill="none">
                                        <path d="M 40 30 Q 45 25, 50 30 T 60 30"></path>
                                        <path d="M 60 25 Q 65 20, 70 25 T 80 25"></path>
                                        <path d="M 80 30 Q 85 25, 90 30 T 100 30"></path>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 5: Wygrzewanie betonu -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>5. Po jakim czasie od zalania wylewki można zacząć ją wygrzewać?</span>
                    <div class="rk-faq2-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="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-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Wygrzewanie klasycznego jastrychu cementowego można rozpocząć <strong>najwcześniej po upływie 28 dni</strong> od jego wylania. Zbyt wczesne podanie temperatury spowoduje gwałtowne odparowanie wody niezbędnej do hydratacji cementu. Skutkuje to drastycznym spadkiem wytrzymałości mechanicznej posadzki i jej <strong>nieodwracalnym spękaniem</strong> (tzw. zjawisko &#8222;miski&#8221;).
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-svg-stage" viewBox="0 0 120 80">
                                    <rect x="40" y="20" width="40" height="40" rx="4" fill="#e2e8f0" stroke="#94a3b8" stroke-width="3"></rect>
                                    <path d="M 45 15 L 45 25 M 75 15 L 75 25" stroke="#ef4444" stroke-width="4" stroke-linecap="round"></path>
                                    <text x="60" y="45" font-size="16" font-weight="bold" fill="#334155" text-anchor="middle">28</text>
                                    <rect class="anim-calendar-leaf" x="40" y="20" width="40" height="20" fill="#cbd5e1" rx="4"></rect>
                                    <!-- Pęknięcie wylewki -->
                                    <path class="anim-crack" d="M 10 70 L 30 65 L 45 75 L 60 60" fill="none" stroke="#1e293b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"></path>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie Domenowe - DOMAIN LOCK
    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('rk-faq2-app');
        if (container) {
            container.innerHTML = `
                <div style="padding:40px; text-align:center; background:#1e293b; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif; border: 2px solid #ef4444;">
                    <div style="font-size:30px; margin-bottom:10px;">⚠️</div>
                    BŁĄD LICENCJI:<br>Kontener FAQ należy do serwisu Projekt-Ogrzewania.pl. Uruchamianie na tej domenie jest nieautoryzowane.
                </div>
            `;
            return;
        }
    }

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

    faqItems.forEach(item => {
        const btn = item.querySelector('.rk-faq2-question');
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Zamykamy wszystkie
            faqItems.forEach(i => i.classList.remove('active'));
            
            // Otwieramy kliknięty, jeśli nie był aktywny
            if (!isActive) {
                item.classList.add('active');
            }
        });
    });
    
    // Otwórz pierwszy element po załadowaniu
    if(faqItems.length > 0) {
        faqItems[0].classList.add('active');
    }
});
</script>



<style>
:root {
    --rk-base-dark: #1e293b;
    --rk-base-darker: #0f172a;
    --rk-base-blue: #0ea5e9;
    --rk-base-light: #f8fafc;
    --rk-base-border: #e2e8f0;
    --rk-pro-green: #10b981;
    --rk-pro-green-bg: #ecfdf5;
    --rk-amateur-red: #ef4444;
    --rk-amateur-red-bg: #fef2f2;
    --rk-text-main: #334155;
    --rk-text-muted: #64748b;
    --rk-card-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
}

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

/* --- NAGŁÓWEK --- */
.rk-dash-header {
    padding: 45px 50px;
    background: linear-gradient(135deg, var(--rk-base-darker) 0%, var(--rk-base-dark) 100%);
    color: #ffffff;
    position: relative;
}

.rk-dash-header::after {
    content: '';
    position: absolute;
    bottom: 0; left: 0; right: 0;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-base-blue), var(--rk-pro-green));
}

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

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

.rk-dash-lead a {
    color: #7dd3fc;
    text-decoration: underline;
    text-underline-offset: 3px;
    font-weight: 600;
}

/* --- INTERAKTYWNY PANEL --- */
.rk-dash-interactive {
    padding: 40px 50px;
    background: var(--rk-base-light);
}

.rk-dash-interactive h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-base-darker);
    margin: 0 0 25px 0;
}

/* Przełącznik (Toggle Switch) */
.rk-toggle-container {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-master-switch {
    position: relative;
    display: flex;
    background: #e2e8f0;
    border-radius: 999px;
    padding: 6px;
    width: 100%;
    max-width: 500px;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.05);
}

.rk-switch-btn {
    flex: 1;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 800;
    text-align: center;
    color: var(--rk-text-muted);
    cursor: pointer;
    z-index: 2;
    transition: color 0.3s ease;
    border-radius: 999px;
    user-select: none;
}

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

.rk-switch-glider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    left: 6px;
    width: calc(50% - 6px);
    background: var(--rk-pro-green);
    border-radius: 999px;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.4s;
    z-index: 1;
    box-shadow: 0 4px 10px rgba(16, 185, 129, 0.3);
}

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

/* Kafelki z parametrami (Grid) */
.rk-metrics-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
    margin-bottom: 40px;
}

.rk-metric-card {
    background: #ffffff;
    padding: 25px 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-base-border);
    box-shadow: var(--rk-card-shadow);
    text-align: center;
    transition: all 0.4s ease;
    position: relative;
    overflow: hidden;
}

.rk-metric-card::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 4px;
    background: var(--rk-base-border);
    transition: background-color 0.4s;
}

.state-pro .rk-metric-card::before { background: var(--rk-pro-green); }
.state-amateur .rk-metric-card::before { background: var(--rk-amateur-red); }

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

.rk-metric-card h4 {
    margin: 0 0 10px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-base-darker);
}

.rk-metric-val {
    font-size: 14px;
    font-weight: 600;
    color: var(--rk-text-muted);
    min-height: 42px;
    transition: color 0.3s;
}

.state-pro .rk-val-pro { display: block; color: var(--rk-pro-green); }
.state-pro .rk-val-amateur { display: none; }
.state-amateur .rk-val-pro { display: none; }
.state-amateur .rk-val-amateur { display: block; color: var(--rk-amateur-red); }

/* SVG Dashboard */
.rk-svg-dashboard {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px dashed var(--rk-base-border);
    display: flex;
    justify-content: center;
    align-items: center;
}

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

/* Animacje SVG */
.svg-eps-block { transform-origin: 50% 80%; transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); fill: #cbd5e1; }
.state-amateur .svg-eps-block { transform: scaleY(0.6); fill: #fca5a5; }

.svg-pipe-flow { stroke-dasharray: 12; animation: pipeFlow 2s linear infinite; stroke: var(--rk-base-blue); transition: stroke 0.5s; }
.state-amateur .svg-pipe-flow { stroke: var(--rk-amateur-red); animation: pipeFlow 6s linear infinite; } /* Wolniejszy przepływ */

.svg-gauge-needle { transform-origin: 250px 50px; transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); stroke: var(--rk-pro-green); }
.state-amateur .svg-gauge-needle { transform: rotate(135deg); stroke: var(--rk-amateur-red); }

.svg-wallet-money { transform-origin: center; transition: all 0.5s; opacity: 1; transform: translateY(0); }
.state-amateur .svg-wallet-money { opacity: 0; transform: translateY(20px); }

@keyframes pipeFlow { to { stroke-dashoffset: -24; } }

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

.rk-btn-action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-base-darker);
    color: #ffffff;
    font-size: 16px;
    font-weight: 800;
    padding: 18px 36px;
    border-radius: 14px;
    text-decoration: none;
    box-shadow: 0 10px 20px -5px rgba(15, 23, 42, 0.3);
    transition: all 0.3s;
    border: 2px solid transparent;
}

.rk-btn-action:hover {
    background: var(--rk-base-blue);
    transform: translateY(-4px);
    box-shadow: 0 15px 25px -5px rgba(14, 165, 233, 0.4);
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-dash-header, .rk-dash-interactive, .rk-dash-footer { padding: 30px 25px; }
    .rk-dash-header h2 { font-size: 24px; }
    .rk-metrics-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-switch-btn { font-size: 14px; padding: 12px 15px; }
    .rk-btn-action { width: 100%; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
    },
    "headline": "Kompleksowy Kalkulator Ogrzewania Podłogowego – Podsumowanie",
    "description": "Precyzyjne wyliczenia termiczno-hydrauliczne instalacji płaszczyznowej (EPS 100, limit pętli 120 m, zład wodny) to gwarancja efektywności pomp ciepła i uniknięcia kosztownych awarii.",
    "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-23"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#dataset",
    "name": "Wskaźniki Efektywności Termiczno-Hydraulicznej Ogrzewania Podłogowego",
    "description": "Zestawienie porównawcze weryfikujące wpływ kluczowych decyzji instalacyjnych (dobór styropianu, długość pętli, zład wodny) na efektywność systemu grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kompleksowy kalkulator ogrzewania podłogowego",
      "obliczenia termiczno-hydrauliczne",
      "styropian podłogowy eps 100",
      "długość pętli rur pert pex",
      "objętość zładu wodnego naczynie wzbiorcze"
    ],
    "measurementTechnique": "Analiza przepływów hydraulicznych i strat nośności izolacji w oparciu o wytyczne normy PN-EN 1264 oraz symulacje oporów liniowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Klasa styropianu: EPS 100 zapobiega pękaniu wylewek w porównaniu do EPS 70.",
        "Limit długości pętli: Maksymalnie 120 m dla rury 16x2 mm gwarantuje poprawne przepływy.",
        "Pojemność zładu: Determinuje dobór właściwego naczynia przeponowego i zabezpiecza przed skokami ciśnienia."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webapp",
    "name": "Symulator Kalkulacji Ogrzewania Podłogowego",
    "description": "Interaktywny symulator decyzji instalacyjnych, pokazujący w czasie rzeczywistym parametry hydrauliczne i finansowe wynikające z poprawnego projektowania (OZC) w kontrze do montażu 'na oko'.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-summary-dashboard" id="rk-dash-app">
    
    <!-- Nagłówek -->
    <div class="rk-dash-header">
        <h2>Kompleksowy Kalkulator Ogrzewania Podłogowego – Podsumowanie</h2>
        <p class="rk-dash-lead">
            <strong>Kompleksowe obliczenia termiczno-hydrauliczne</strong> instalacji płaszczyznowej to fundament energooszczędnego i bezawaryjnego domu. Każda decyzja projektowa – od wyboru odpowiedniej klasy <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">styropianu podłogowego (EPS 100)</a>, przez restrykcyjne trzymanie się limitu <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">120 m długości pętli rur</a> PERT/PEX, aż po precyzyjne wyliczenie objętości zładu wodnego pod kątem <a href="https://projekt-ogrzewania.pl/naczynie-wzbiorcze/">naczynia wzbiorczego</a> – rzutuje bezpośrednio na efektywność pracy nowoczesnych źródeł ciepła, zwłaszcza pomp ciepła. Samodzielne szacowanie parametrów na budowie to prosta droga do awarii.
        </p>
    </div>

    <!-- Panel Interaktywny -->
    <div class="rk-dash-interactive state-pro" id="rk-interactive-board">
        <h3>Symulacja Decyzji Instalacyjnych</h3>
        
        <!-- Przełącznik -->
        <div class="rk-toggle-container">
            <div class="rk-master-switch">
                <div class="rk-switch-glider"></div>
                <div class="rk-switch-btn active" data-mode="pro">Kalkulator i Projekt</div>
                <div class="rk-switch-btn" data-mode="amateur">Szacowanie &#8222;Na oko&#8221;</div>
            </div>
        </div>

        <!-- Kafelki Parametrów -->
        <div class="rk-metrics-grid">
            <div class="rk-metric-card">
                <div class="rk-metric-icon">
                    <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="var(--rk-base-darker)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
                </div>
                <h4>Izolacja Podłoża</h4>
                <div class="rk-metric-val">
                    <span class="rk-val-pro">EPS 100/200<br>Brak osiadania wylewki</span>
                    <span class="rk-val-amateur">EPS 70 (Fasada)<br>Pękanie płytek i dylatacji</span>
                </div>
            </div>
            
            <div class="rk-metric-card">
                <div class="rk-metric-icon">
                    <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="var(--rk-base-darker)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 3a3 3 0 0 0-3 3v12a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1-3-3V6a3 3 0 0 0-3-3"></path><path d="M15 3a3 3 0 0 1 3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0 3-3V6a3 3 0 0 1 3-3"></path></svg>
                </div>
                <h4>Długość Pętli</h4>
                <div class="rk-metric-val">
                    <span class="rk-val-pro">Max 120 m (Rura 16mm)<br>Niskie opory hydrauliczne</span>
                    <span class="rk-val-amateur">&gt; 150 m<br>Zblokowany przepływ (0 l/min)</span>
                </div>
            </div>

            <div class="rk-metric-card">
                <div class="rk-metric-icon">
                    <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="var(--rk-base-darker)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>
                </div>
                <h4>Zład Wodny</h4>
                <div class="rk-metric-val">
                    <span class="rk-val-pro">Dokładnie obliczony<br>Stabilne ciśnienie układu</span>
                    <span class="rk-val-amateur">Zbyt małe naczynie<br>Wyrzuty wody z zaworu</span>
                </div>
            </div>
        </div>

        <!-- SVG Animowany Dashboard -->
        <div class="rk-svg-dashboard">
            <svg class="rk-main-svg" viewBox="0 0 400 120" xmlns="http://www.w3.org/2000/svg">
                <!-- Lewo: EPS Block -->
                <g transform="translate(30, 20)">
                    <rect x="0" y="40" width="60" height="40" rx="4" class="svg-eps-block"></rect>
                    <rect x="0" y="30" width="60" height="10" fill="#94a3b8"></rect>
                    <!-- Wektor strzałki -->
                    <path d="M30 10 L30 25 M25 20 L30 25 L35 20" stroke="#64748b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"></path>
                </g>

                <!-- Środek: Przepływ Rur -->
                <g transform="translate(140, 20)">
                    <path d="M0 20 C 30 20, 30 60, 60 60 C 90 60, 90 20, 120 20" fill="none" stroke="#e2e8f0" stroke-width="12" stroke-linecap="round"></path>
                    <path d="M0 20 C 30 20, 30 60, 60 60 C 90 60, 90 20, 120 20" fill="none" stroke-width="6" stroke-linecap="round" class="svg-pipe-flow"></path>
                </g>

                <!-- Prawo: Zegar / Portfel -->
                <g transform="translate(300, 20)">
                    <!-- Zegar Ciśnienia/Opory -->
                    <path d="M0 60 A 40 40 0 0 1 80 60" fill="none" stroke="#e2e8f0" stroke-width="8"></path>
                    <path d="M60 60 A 40 40 0 0 0 80 60" fill="none" stroke="#ef4444" stroke-width="8"></path> <!-- Czerwone pole -->
                    <circle cx="40" cy="60" r="6" fill="#64748b"></circle>
                    <line x1="40" y1="60" x2="15" y2="35" stroke-width="4" stroke-linecap="round" class="svg-gauge-needle"></line>
                </g>
            </svg>
        </div>
    </div>

    <!-- Stopka CTA -->
    <div class="rk-dash-footer">
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-action">
            Przeczytaj poradniki, które pomagają oszczędzać na ogrzewaniu.
            <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>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // 1. Zabezpieczenie Domenowe - 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('rk-dash-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 45px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 24px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 20px;">🛑</div>
                    <div style="font-size: 20px; font-weight: 900; margin-bottom: 15px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 550px; margin: 0 auto; line-height: 1.6;">
                        Interaktywny kalkulator i struktura danych JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Uruchamianie tego kodu na nieautoryzowanej domenie jest zabronione.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Przełącznika (Toggle)
    const interactiveBoard = document.getElementById('rk-interactive-board');
    const switchBtns = document.querySelectorAll('.rk-switch-btn');

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

            // Pobranie trybu
            const mode = this.getAttribute('data-mode');

            // Aktualizacja klasy nadrzędnej (steruje całym CSS i animacjami SVG)
            if (mode === 'amateur') {
                interactiveBoard.classList.remove('state-pro');
                interactiveBoard.classList.add('state-amateur');
            } else {
                interactiveBoard.classList.remove('state-amateur');
                interactiveBoard.classList.add('state-pro');
            }
        });
    });
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">Kompleksowy kalkulator ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Punkt rosy w ogrzewaniu podłogowym – jak bezpiecznie chłodzić dom bez ryzyka kondensacji.</title>
		<link>https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 28 Feb 2026 09:58:03 +0000</pubDate>
				<category><![CDATA[Chłodzenie płaszczyznowe]]></category>
		<category><![CDATA[Fizyka budowli]]></category>
		<category><![CDATA[Instalacje domowe]]></category>
		<category><![CDATA[Instalacje wodne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Porady dla inwestorów]]></category>
		<category><![CDATA[Porady inwestycyjne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[analiza techniczna]]></category>
		<category><![CDATA[automatyka instalacji]]></category>
		<category><![CDATA[chłodzenie domu]]></category>
		<category><![CDATA[chłodzenie podłogowe]]></category>
		<category><![CDATA[dew point control]]></category>
		<category><![CDATA[fizyka budowli]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[kondensacja]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[punkt rosy]]></category>
		<category><![CDATA[rekuperacja]]></category>
		<category><![CDATA[temperatura podłogi]]></category>
		<category><![CDATA[wilgotność powietrza]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3528</guid>

					<description><![CDATA[<p>Chłodzenie podłogówką brzmi jak idealne rozwiązanie na upalne lato – cicho, bez przeciągów i bez widocznych urządzeń. Jednak kluczowym parametrem, który decyduje o bezpieczeństwie całego systemu, jest punkt rosy w ogrzewaniu podłogowym. To on wyznacza granicę między komfortowym chłodem a ryzykiem kondensacji, mokrej posadzki i rozwoju pleśni. W artykule wyjaśniam, jak kontrolować wilgotność, jaką temperaturę podłogi uznać za bezpieczną oraz dlaczego automatyka antykondensacyjna to nie dodatek, lecz konieczność.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/">Punkt rosy w ogrzewaniu podłogowym – jak bezpiecznie chłodzić dom bez ryzyka kondensacji.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wodne ogrzewanie podłogowe kojarzy się przede wszystkim z zimą i przyjemnym ciepłem rozchodzącym się od podłogi. Coraz częściej ten sam system wykorzystuje się jednak latem do chłodzenia budynków. I tu pojawia się kluczowe wyzwanie:&nbsp;<strong>punkt rosy w ogrzewaniu podłogowym</strong>&nbsp;to parametr, który decyduje o tym, czy chłodzenie będzie komfortowe, czy zakończy się katastrofą w postaci mokrej podłogi, poślizgnięć i rozwoju pleśni. W tym artykule wyjaśnię Ci dokładnie, czym jest punkt rosy, jak go obliczyć, jakie temperatury są bezpieczne i dlaczego bez odpowiedniej automatyki lepiej w ogóle nie włączać funkcji chłodzenia.</p>



<h2 class="wp-block-heading">Czym właściwie jest punkt rosy i dlaczego ma znaczenie dla Twojej podłogi?</h2>



<p class="wp-block-paragraph">Zanim przejdziemy do konkretnych liczb i zaleceń, musisz zrozumieć podstawowe zjawisko fizyczne. Powietrze w pomieszczeniu zawsze zawiera pewną ilość pary wodnej. Im cieplejsze powietrze, tym więcej wody jest w stanie utrzymać w postaci niewidzialnej pary. Gdy ciepłe powietrze styka się z zimną powierzchnią, ochładza się. W momencie, gdy temperatura tej powierzchni spadnie poniżej tak zwanego&nbsp;<strong>punktu rosy</strong>, para wodca skrapla się i osadza na powierzchni w postaci kropelek wody.</p>



<p class="wp-block-paragraph">W kontekście wodnego <a href="https://projekt-ogrzewania.pl/category/ogrzewanie-podlogowe/" type="link" id="https://projekt-ogrzewania.pl/category/ogrzewanie-podlogowe/">ogrzewania podłogowego</a> używanego do chłodzenia oznacza to, że to podłoga staje się tą zimną powierzchnią. Jeśli temperatura posadzki spadnie poniżej punktu rosy powietrza w pomieszczeniu, na podłodze pojawi się wilgoć. To nie tylko dyskomfort i ryzyko poślizgnięcia, ale przede wszystkim poważny problem budowlany i zdrowotny.</p>



<h3 class="wp-block-heading">Jakie zagrożenia niesie ze sobą przekroczenie punktu rosy?</h3>



<p class="wp-block-paragraph">Kiedy dojdzie do wykraplania się wilgoci na chłodzonej podłodze, uruchamia się cała lawina negatywnych konsekwencji:</p>



<ul class="wp-block-list">
<li><strong>Mikroklimat sprzyjający pleśni:</strong>&nbsp;Wilgoć utrzymująca się na powierzchni lub wnikająca w strukturę podłogi (szczególnie w przypadku paneli czy parkietu) to idealne środowisko dla grzybów pleśniowych. Zarodniki pleśni to poważne zagrożenie dla alergików i ogólnie dla układu oddechowego domowników.</li>



<li><strong>Uszkodzenia materiałów wykończeniowych:</strong>&nbsp;Drewno pracuje, pęcznieje i odkształca się. Panele laminowane tracą stabilność, a ich łączenia mogą się rozchodzić. Kleje pod płytkami ceramicznymi, choć odporne na wilgoć, przy długotrwałym zawilgoceniu mogą tracić swoje właściwości.</li>



<li><strong>Korozja i awarie instalacji:</strong>&nbsp;Choć <a href="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/" type="link" id="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/">rury</a> w podłodze są zabezpieczone, wilgoć może wpływać na metalowe elementy rozdzielaczy czy złączek, przyspieszając ich korozję.</li>



<li><strong>Poślizgnięcia i upadki:</strong>&nbsp;Mokra podłoga, zwłaszcza wykonana z gładkich płytek, staje się śliska i niebezpieczna dla domowników.</li>
</ul>



<p class="wp-block-paragraph">Dlatego tak ważne jest, aby zanim w ogóle pomyślisz o chłodzeniu podłogówką, dogłębnie zrozumieć mechanizm punktu rosy i nauczyć się nim sterować.</p>



<h2 class="wp-block-heading">Fizyka, która stoi za komfortem – jak wyznaczyć punkt rosy w praktyce?</h2>



<p class="wp-block-paragraph">Temperatura punktu rosy nie jest wartością stałą. Zależy ona od dwóch parametrów:&nbsp;<strong>temperatury powietrza</strong>&nbsp;i&nbsp;<strong>wilgotności względnej</strong>. Można ją obliczyć ze skomplikowanych wzorów, ale w praktyce posłużymy się uproszczonymi przykładami i tabelami.</p>



<style>
.formula-section {
    max-width: 900px;
    margin: 40px auto;
    padding: 30px;
    background: #ffffff;
    border-radius: 14px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.06);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
    line-height: 1.7;
}

.formula-section h2 {
    margin-top: 0;
    font-size: 24px;
}

.formula-box {
    background: #f4f7fb;
    padding: 20px;
    border-radius: 10px;
    margin: 20px 0;
    font-family: "Courier New", monospace;
    font-size: 18px;
    overflow-x: auto;
}

.formula-sub {
    background: #f9fafc;
    padding: 15px;
    border-radius: 10px;
    margin: 15px 0;
    font-family: "Courier New", monospace;
    font-size: 16px;
    overflow-x: auto;
}

.formula-note {
    margin-top: 15px;
    font-size: 15px;
    color: #444;
}

.highlight {
    font-weight: 600;
    color: #0d3b66;
}
</style>

<div class="formula-section">

<h2>Wzór i przykłady obliczeniowe – punkt rosy</h2>

<p>
Do obliczenia temperatury punktu rosy stosuje się m.in. wzór Magnus-Tetensa.
Dla zakresu temperatur typowych dla pomieszczeń przyjmuje się stałe:
<strong>a = 17,27</strong> oraz <strong>b = 237,7°C</strong>.
</p>

<div class="formula-box">
Tp = ( b · α(T,RH) ) / ( a − α(T,RH) )
</div>

<p>gdzie:</p>

<div class="formula-sub">
α(T,RH) = ( a · T ) / ( b + T ) + ln(RH / 100)
</div>

<div class="formula-note">
<span class="highlight">Tp</span> – temperatura punktu rosy (°C)<br>
<span class="highlight">T</span> – temperatura powietrza (°C)<br>
<span class="highlight">RH</span> – wilgotność względna (%)<br>
<span class="highlight">ln</span> – logarytm naturalny
</div>

</div>



<p class="wp-block-paragraph">Spójrz na konkretne przykłady, które pokazują, jak szybko zmienia się sytuacja:</p>



<ul class="wp-block-list">
<li><strong>Przykład 1: Umiarkowana wilgotność.</strong>&nbsp;W pomieszczeniu panuje temperatura&nbsp;<strong>26°C</strong>, a wilgotność względna wynosi&nbsp;<strong>50%</strong>. Punkt rosy wynosi wtedy około&nbsp;<strong>14,8°C</strong>. Aby uniknąć kondensacji, temperatura podłogi nie może spaść poniżej mniej więcej 15-16°C.</li>



<li><strong>Przykład 2: Wysoka wilgotność.</strong>&nbsp;Wyobraź sobie upalny, parny dzień. Temperatura w pokoju to&nbsp;<strong>28°C</strong>, a wilgotność sięga&nbsp;<strong>70%</strong>. Punkt rosy gwałtownie rośnie do około&nbsp;<strong>22°C</strong>. W takich warunkach jakiekolwiek chłodzenie podłogowe jest bardzo ryzykowne, bo aby schłodzić pomieszczenie, musiałbyś dostarczyć wodę o temperaturze poniżej 22°C, co niemal natychmiast spowoduje skraplanie się pary na posadzce.</li>



<li><strong>Przykład 3: Niska wilgotność.</strong>&nbsp;Przy temperaturze&nbsp;<strong>24°C</strong>&nbsp;i wilgotności&nbsp;<strong>40%</strong>&nbsp;punkt rosy wynosi zaledwie około&nbsp;<strong>9,7°C</strong>. To bezpieczna strefa, w której możesz swobodnie chłodzić podłogę nawet do 15-17°C bez ryzyka kondensacji.</li>
</ul>



<p class="wp-block-paragraph">Te przykłady doskonale ilustrują, dlaczego latem, gdy wilgotność powietrza jest wysoka, chłodzenie podłogowe staje się wyzwaniem.</p>



<h2 class="wp-block-heading">Kalkulator punktu rosy – oblicz w kilka sekund.</h2>



<p class="wp-block-paragraph">Nie musisz samodzielnie przeliczać wzoru Magnus-Tetensa ani analizować zależności między temperaturą, wilgotnością i ryzykiem kondensacji. Przygotowaliśmy praktyczny kalkulator, który w kilka sekund obliczy punkt rosy, określi bezpieczną temperaturę podłogi oraz oceni, czy wystąpi ryzyko skraplania. Dodatkowo możesz wygenerować gotowy raport w PDF i zapisać go lub wydrukować jako dokument analizy technicznej.</p>



<style>
.dew-pro {
    max-width: 900px;
    margin: 50px auto;
    padding: 35px;
    background: #ffffff;
    border-radius: 16px;
    box-shadow: 0 15px 40px rgba(0,0,0,0.07);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
}

.dew-pro h2 {
    margin-top: 0;
    font-size: 26px;
}

.dew-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin-top: 25px;
}

.dew-field {
    display: flex;
    flex-direction: column;
}

.dew-field label {
    font-weight: 600;
    margin-bottom: 6px;
}

.dew-field input {
    padding: 12px;
    border-radius: 10px;
    border: 1px solid #dfe3e8;
    font-size: 16px;
}

.dew-result {
    margin-top: 30px;
    padding: 25px;
    border-radius: 12px;
    font-size: 18px;
    transition: 0.3s ease;
}

.safe {
    background: #e8f7ef;
    border: 1px solid #28a745;
    color: #155724;
}

.warning {
    background: #fff8e6;
    border: 1px solid #f0ad4e;
    color: #8a6d3b;
}

.danger {
    background: #fdecea;
    border: 1px solid #dc3545;
    color: #721c24;
}

.dew-edu {
    margin-top: 35px;
    padding: 20px;
    background: #f4f7fb;
    border-radius: 12px;
    font-size: 15px;
    line-height: 1.6;
}

@media (max-width: 640px) {
    .dew-grid {
        grid-template-columns: 1fr;
    }
}
</style>

<div class="dew-pro">
    <h2>Kalkulator punktu rosy i ocena ryzyka chłodzenia podłogówką</h2>

    <div class="dew-grid">
        <div class="dew-field">
            <label>Temperatura powietrza (°C)</label>
            <input type="number" id="temp" value="25" step="0.1">
        </div>

        <div class="dew-field">
            <label>Wilgotność względna (%)</label>
            <input type="number" id="humidity" value="50" min="1" max="100">
        </div>
    </div>

    <div class="dew-result safe" id="resultBox">
        Wprowadź dane, aby zobaczyć analizę.
    </div>

    <div class="dew-edu">
        <strong>Dlaczego to ważne?</strong><br><br>
        W przypadku chłodzenia podłogowego kluczowe znaczenie ma temperatura punktu rosy.
        Jeżeli temperatura powierzchni podłogi spadnie poniżej punktu rosy,
        dojdzie do kondensacji wilgoci. W praktyce bezpieczna temperatura podłogi
        powinna być wyższa o około 1–2°C od wyliczonego punktu rosy.
        <br><br>
        Im wyższa wilgotność powietrza, tym bardziej ograniczona możliwość
        efektywnego i bezpiecznego chłodzenia płaszczyznowego.
    </div>
</div>

<script>
function calculateDewPoint() {
    const T = parseFloat(document.getElementById("temp").value);
    const RH = parseFloat(document.getElementById("humidity").value);
    const resultBox = document.getElementById("resultBox");

    if (isNaN(T) || isNaN(RH) || RH <= 0 || RH > 100) {
        resultBox.className = "dew-result danger";
        resultBox.innerHTML = "Podaj poprawne wartości (wilgotność 1–100%).";
        return;
    }

    const a = 17.27;
    const b = 237.7;

    const alpha = (a * T) / (b + T) + Math.log(RH / 100);
    const dewPoint = (b * alpha) / (a - alpha);

    const safeMin = dewPoint + 1.0;
    const safeMax = dewPoint + 2.0;

    let riskClass = "safe";
    let riskText = "BEZPIECZNIE – duży zapas chłodzenia.";

    if (dewPoint > 18) {
        riskClass = "danger";
        riskText = "KONDENSACJA – bardzo małe pole manewru, chłodzenie praktycznie ograniczone.";
    } else if (dewPoint > 15) {
        riskClass = "warning";
        riskText = "RYZYKOWNIE – wymagane sterowanie wilgotnością (rekuperacja / osuszanie).";
    }

    resultBox.className = "dew-result " + riskClass;
    resultBox.innerHTML =
        "<strong>Punkt rosy:</strong> " + dewPoint.toFixed(1) + "°C<br><br>" +
        "<strong>Minimalna bezpieczna temp. podłogi:</strong> " +
        safeMin.toFixed(1) + "–" + safeMax.toFixed(1) + "°C<br><br>" +
        "<strong>Ocena:</strong> " + riskText;
}

document.getElementById("temp").addEventListener("input", calculateDewPoint);
document.getElementById("humidity").addEventListener("input", calculateDewPoint);

calculateDewPoint();
</script>



<style>
#rkdp-calculator {
    max-width: 900px;
    margin: 50px auto;
    padding: 35px;
    background: #ffffff;
    border-radius: 16px;
    box-shadow: 0 15px 40px rgba(0,0,0,0.07);
    font-family: Arial, sans-serif;
}

#rkdp-calculator .rkdp-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin-top: 20px;
}

#rkdp-calculator .rkdp-field {
    display: flex;
    flex-direction: column;
}

#rkdp-calculator .rkdp-field label {
    font-weight: 600;
    margin-bottom: 6px;
}

#rkdp-calculator .rkdp-input {
    padding: 12px;
    border-radius: 10px;
    border: 1px solid #ddd;
    font-size: 16px;
}

#rkdp-calculator .rkdp-btn {
    margin-top: 20px;
    padding: 12px 20px;
    border-radius: 8px;
    border: none;
    background: #0d3b66;
    color: #fff;
    font-size: 16px;
    cursor: pointer;
    margin-right: 10px;
}

#rkdp-calculator .rkdp-result {
    margin-top: 25px;
    padding: 20px;
    border-radius: 10px;
    font-size: 18px;
    background: #f4f7fb;
}
</style>

<div id="rkdp-calculator">

<h2>Raport chlodzenia podlogowego – analiza kondensacji</h2>

<div class="rkdp-grid">
<div class="rkdp-field">
<label>Temperatura powietrza (°C)</label>
<input type="number" class="rkdp-input" id="rkdp-temp" value="25">
</div>

<div class="rkdp-field">
<label>Wilgotnosc (%)</label>
<input type="number" class="rkdp-input" id="rkdp-humidity" value="50">
</div>

<div class="rkdp-field">
<label>Planowana temp. podlogi (°C)</label>
<input type="number" class="rkdp-input" id="rkdp-floorTemp" value="20">
</div>
</div>

<button class="rkdp-btn" onclick="rkdpCalculate()">Oblicz</button>
<button class="rkdp-btn" onclick="rkdpGeneratePDF()">Generuj raport PDF</button>

<div class="rkdp-result" id="rkdp-resultBox"></div>

</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>

<script>
let rkdpData = {};

function rkdpCalculate(){

const T=parseFloat(document.getElementById("rkdp-temp").value);
const RH=parseFloat(document.getElementById("rkdp-humidity").value);
const floorTemp=parseFloat(document.getElementById("rkdp-floorTemp").value);

if(isNaN(T)||isNaN(RH)||isNaN(floorTemp)||RH<=0||RH>100){
document.getElementById("rkdp-resultBox").innerHTML="Podaj poprawne wartosci.";
return;
}

const a=17.27;
const b=237.7;

const alpha=(a*T)/(b+T)+Math.log(RH/100);
const dewPoint=(b*alpha)/(a-alpha);
const safeMin=dewPoint+1;

let verdict="NIE SKROPLI SIE – instalacja pracuje bezpiecznie.";

if(floorTemp<=dewPoint){
verdict="SKROPLI SIE – wystapi kondensacja.";
}
else if(floorTemp<=safeMin){
verdict="RYZYKO – bardzo maly margines bezpieczenstwa.";
}

rkdpData={
T,
RH,
floorTemp,
dewPoint:dewPoint.toFixed(1),
safeMin:safeMin.toFixed(1),
verdict
};

document.getElementById("rkdp-resultBox").innerHTML=
"Punkt rosy: "+dewPoint.toFixed(1)+"°C<br>"+
"Minimalna bezpieczna temp. podlogi: powyzej "+safeMin.toFixed(1)+"°C<br><br>"+
"<strong>"+verdict+"</strong>";
}

function rkdpGeneratePDF(){

if(!rkdpData.dewPoint){
alert("Najpierw wykonaj obliczenia.");
return;
}

const { jsPDF } = window.jspdf;
const doc = new jsPDF();

doc.setFontSize(16);
doc.text("Raport analizy kondensacji – ogrzewanie/chlodzenie podlogowe", 10, 15);

doc.setFontSize(12);
doc.text("Dane wejsciowe:", 10, 30);
doc.text("Temperatura powietrza: "+rkdpData.T+"°C", 10, 40);
doc.text("Wilgotnosc: "+rkdpData.RH+"%", 10, 50);
doc.text("Planowana temp. podlogi: "+rkdpData.floorTemp+"°C", 10, 60);

doc.text("Wyniki:", 10, 80);
doc.text("Punkt rosy: "+rkdpData.dewPoint+"°C", 10, 90);
doc.text("Minimalna bezpieczna temp.: powyzej "+rkdpData.safeMin+"°C", 10, 100);

doc.setFontSize(14);
doc.text("Ocena:", 10, 120);

doc.setFontSize(12);
doc.text(rkdpData.verdict, 10, 130);

doc.text("Jesli chcesz profesjonalny projekt ogrzewania podlogowego", 10, 160);
doc.text("Skontaktuj sie:", 10, 170);
doc.text("https://projekt-ogrzewania.pl/kontakt/", 10, 180);
doc.text("Telefon: +48 783 212 175", 10, 190);
doc.text("Godziny pracy: Pon. - Pt 9:00 - 17:00", 10, 200);

doc.save("Raport_punkt_rosy.pdf");
}
</script>



<h3 class="wp-block-heading">Tabela bezpiecznych temperatur podłogi.</h3>



<p class="wp-block-paragraph">Poniższa tabela pomoże Ci szybko oszacować, jaka maksymalna temperatura podłogi (a właściwie minimalna bezpieczna) jest dopuszczalna przy danej temperaturze i wilgotności powietrza. Przyjmujemy, że bezpieczna temperatura podłogi to&nbsp;<strong>około 1-2°C powyżej punktu rosy</strong>.</p>



<style>
.responsive-table-wrapper {
    width: 100%;
    overflow-x: auto;
    margin: 40px 0;
}

.dew-table {
    width: 100%;
    min-width: 720px;
    border-collapse: collapse;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
    background: #ffffff;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 10px 30px rgba(0,0,0,0.06);
}

.dew-table thead {
    background: #0d3b66;
    color: #ffffff;
}

.dew-table th,
.dew-table td {
    padding: 16px 18px;
    text-align: left;
}

.dew-table th {
    font-weight: 600;
    font-size: 15px;
}

.dew-table td {
    font-size: 15px;
    border-bottom: 1px solid #eef2f5;
}

.dew-table tbody tr:nth-child(even) {
    background-color: #f8fafc;
}

.dew-table tbody tr:hover {
    background-color: #edf4ff;
    transition: 0.2s ease;
}

.dew-highlight {
    font-weight: 600;
    color: #0d3b66;
}

.dew-danger {
    font-weight: 600;
    color: #c1121f;
}

.table-note {
    margin-bottom: 20px;
    font-size: 16px;
    line-height: 1.6;
}
</style>

<div class="table-note">
Poniższa tabela pomaga szybko oszacować, jaka minimalna bezpieczna temperatura podłogi
jest dopuszczalna przy danej temperaturze i wilgotności powietrza.
Przyjmujemy, że bezpieczna temperatura podłogi to <strong>około 1–2°C powyżej punktu rosy</strong>.
</div>

<div class="responsive-table-wrapper">
<table class="dew-table">
<thead>
<tr>
<th>Temperatura powietrza</th>
<th>Wilgotność względna</th>
<th>Punkt rosy</th>
<th>Minimalna bezpieczna temp. podłogi</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>24°C</strong></td>
<td>40%</td>
<td>9,7°C</td>
<td class="dew-highlight">ok. 12°C</td>
</tr>
<tr>
<td><strong>24°C</strong></td>
<td>50%</td>
<td>13,2°C</td>
<td class="dew-highlight">ok. 15°C</td>
</tr>
<tr>
<td><strong>24°C</strong></td>
<td>60%</td>
<td>15,8°C</td>
<td class="dew-highlight">ok. 18°C</td>
</tr>
<tr>
<td><strong>26°C</strong></td>
<td>40%</td>
<td>11,5°C</td>
<td class="dew-highlight">ok. 14°C</td>
</tr>
<tr>
<td><strong>26°C</strong></td>
<td>50%</td>
<td>14,8°C</td>
<td class="dew-highlight">ok. 17°C</td>
</tr>
<tr>
<td><strong>26°C</strong></td>
<td>60%</td>
<td>17,6°C</td>
<td class="dew-highlight">ok. 19°C</td>
</tr>
<tr>
<td><strong>28°C</strong></td>
<td>50%</td>
<td>16,7°C</td>
<td class="dew-highlight">ok. 19°C</td>
</tr>
<tr>
<td><strong>28°C</strong></td>
<td>60%</td>
<td>19,5°C</td>
<td class="dew-highlight">ok. 21°C</td>
</tr>
<tr>
<td><strong>28°C</strong></td>
<td>70%</td>
<td>22,1°C</td>
<td class="dew-danger">ok. 24°C (praktycznie brak chłodzenia)</td>
</tr>
</tbody>
</table>
</div>



<p class="wp-block-paragraph">Widzisz wyraźnie, że im wyższa wilgotność, tym wyżej musisz utrzymywać temperaturę podłogi, co drastycznie ogranicza moc chłodniczą systemu. Przy wilgotności 70% i temperaturze 28°C komfortowe chłodzenie podłogowe staje się niemożliwe – podłoga musiałaby być cieplejsza niż powietrze, by nie dopuścić do skraplania.</p>



<h2 class="wp-block-heading">Jak bezpiecznie chłodzić dom wodnym ogrzewaniem podłogowym?</h2>



<p class="wp-block-paragraph">Znając już teorię i zagrożenia, czas na praktyczne wskazówki. Chłodzenie podłogowe to nie jest system, który włączasz i zapominasz. To proces, który wymaga kontroli i odpowiednich zabezpieczeń. Poniżej przedstawiam kompletny przewodnik, jak robić to bezpiecznie.</p>



<h3 class="wp-block-heading">1. Niezbędnik pomiarowy, czyli musisz znać swoje parametry.</h3>



<p class="wp-block-paragraph">Podstawą jest ciągły monitoring warunków panujących w pomieszczeniu. Potrzebujesz dwóch rzeczy:</p>



<ul class="wp-block-list">
<li><strong>Termometr i higrometr w jednym:</strong>&nbsp;To urządzenie nazywa się termohigrometrem. Powinno mierzyć zarówno temperaturę powietrza, jak i jego wilgotność względną. Nowoczesne modele często mają wbudowaną funkcję obliczania punktu rosy na podstawie tych dwóch danych. Umieść go w centralnym punkcie pokoju, z dala od bezpośrednich źródeł ciepła i przeciągów.</li>



<li><strong><a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/" type="link" id="https://projekt-ogrzewania.pl/czujnik-podlogowy/">Czujnik temperatury podłogi</a>:</strong>&nbsp;To kluczowy element, który pozwala porównać rzeczywistą temperaturę posadzki z wyliczonym punktem rosy. Niektóre systemy automatyki mają czujniki przewodowe umieszczane w wylewce, inne korzystają z bezprzewodowych sensorów.</li>
</ul>



<p class="wp-block-paragraph">Dysponując tymi danymi, możesz świadomie podejmować decyzje. Jeśli widzisz, że temperatura podłogi zbliża się do punktu rosy (np. różnica wynosi mniej niż 1-2°C), musisz natychmiast podnieść temperaturę wody w obiegu chłodzącym.</p>



<h3 class="wp-block-heading">2. Jaka temperatura wody w rurach jest bezpieczna?</h3>



<p class="wp-block-paragraph">To pytanie zadaje sobie każdy inwestor. Nie ma jednej uniwersalnej wartości, ponieważ – jak już wiesz – zależy to od aktualnych warunków. Możemy jednak podać pewne przedziały i zasady.</p>



<p class="wp-block-paragraph">W typowych instalacjach chłodzących, współpracujących z pompą ciepła, temperatura czynnika (wody) w rurach wynosi zazwyczaj od&nbsp;<strong>15°C do 20°C</strong>. Sama podłoga będzie miała temperaturę o około 1-2°C wyższą, ze względu na opory cieplne wylewki i warstwy wykończeniowej.</p>



<ul class="wp-block-list">
<li><strong>Chłodzenie pasywne:</strong>&nbsp;W tym przypadku wykorzystujesz niską temperaturę gruntu lub wody gruntowej. Wymiennik ciepła (np. sondy pionowe) schładza wodę w obiegu podłogówki bez uruchamiania sprężarki pompy ciepła. Temperatura wody jest tu stabilna i wynosi zwykle 8-12°C.&nbsp;<strong>W tym wariancie ryzyko przekroczenia punktu rosy jest największe</strong>, bo woda jest bardzo zimna. Konieczna jest bezwzględna kontrola i automatyka, która w razie potrzeby wymiesza wodę powrotną z obiegu, by podnieść jej temperaturę (tzw. ochrona antykondensacyjna).</li>



<li><strong>Chłodzenie aktywne:</strong>&nbsp;<a href="https://projekt-ogrzewania.pl/pompa-ciepla/" type="link" id="https://projekt-ogrzewania.pl/pompa-ciepla/">Pompa ciepła</a> pracuje w trybie odwróconym (jak klimatyzator), ale zamiast dmuchać zimnym powietrzem, schładza wodę. Regulacja temperatury jest tu precyzyjniejsza i łatwiej utrzymać ją na poziomie 16-18°C, co jest bezpieczniejsze.</li>
</ul>



<p class="wp-block-paragraph"><strong>Praktyczna wskazówka:</strong>&nbsp;W wielu nowoczesnych instalacjach stosuje się regulację pogodową również dla chłodzenia. System na podstawie temperatury zewnętrznej i wewnętrznej dobiera optymalną krzywą chłodzenia. To duże ułatwienie, ale nie zwalnia z obowiązku monitorowania punktu rosy.</p>



<h3 class="wp-block-heading">3. Rola automatyki – Twój strażnik przed katastrofą.</h3>



<p class="wp-block-paragraph">Ręczne pilnowanie punktu rosy jest męczące i ryzykowne. Dlatego profesjonalne instalacje wyposaża się w&nbsp;<strong>automatykę z funkcją zabezpieczenia przed kondensacją</strong>&nbsp;(tzw.&nbsp;<em>dew point control</em>). Działa to najczęściej w jeden z poniższych sposobów:</p>



<ol start="1" class="wp-block-list">
<li><strong>Czujnik punktu rosy w pomieszczeniu:</strong>&nbsp;Specjalny czujnik mierzy temperaturę i wilgotność w pomieszczeniu i na bieżąco wylicza punkt rosy.</li>



<li><strong>Czujnik temperatury zasilania lub powrotu:</strong>&nbsp;System porównuje wyliczony punkt rosy z temperaturą wody płynącej do podłogi (zasilanie) lub wracającej z niej (powrót). To temperatura powrotu jest lepszym wskaźnikiem, bo pokazuje, jaka jest mniej więcej temperatura podłogi.</li>



<li><strong>Działanie korekcyjne:</strong>&nbsp;Gdy temperatura czynnika zbliży się do punktu rosy (zazwyczaj ustawia się margines bezpieczeństwa 1-2°C), automatyczny zawór mieszający lub sprężarka pompy ciepła otrzymuje sygnał do&nbsp;<strong>podniesienia temperatury wody</strong>. W skrajnych przypadkach system może całkowicie odciąć obieg chłodzący w danym pomieszczeniu.</li>
</ol>



<p class="wp-block-paragraph">Dobrym przykładem są systemy, które oferują dedykowane moduły chłodzące z wbudowanym układem antykondensacyjnym. Moduł ten, na podstawie sygnału z czujnika wilgotności umieszczonego w reprezentatywnym pomieszczeniu (np. w salonie na ścianie wewnętrznej), steruje temperaturą wody w całej instalacji.</p>



<h3 class="wp-block-heading">4. Wentylacja – sprzymierzeniec w walce z wilgocią.</h3>



<p class="wp-block-paragraph">Chłodzenie podłogowe obniża temperaturę, ale nie osusza powietrza. Jeśli w pomieszczeniu jest duszno i wilgotno, komfort i tak będzie niski. Dlatego kluczowym uzupełnieniem systemu chłodzenia jest&nbsp;<strong>sprawna wentylacja</strong>. Idealnie sprawdza się tu&nbsp;<strong><a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" type="link" id="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">mechaniczna wentylacja z rekuperacją</a></strong>.</p>



<p class="wp-block-paragraph">Rekuperator nie tylko wymienia powietrze, ale często ma możliwość pracy w trybie&nbsp;<strong>bypassu</strong>&nbsp;(omijając wymiennik, gdy na zewnątrz jest chłodniej niż w środku) lub posiada wbudowaną&nbsp;<strong>chłodnicę</strong>&nbsp;(tzw. coolers), która dodatkowo obniża temperaturę nawiewanego powietrza. Co najważniejsze, wentylacja mechaniczna pozwala kontrolować wilgotność – w okresach wysokiej wilgotności zewnętrznej rekuperator może pracować z mniejszą wydajnością lub wykorzystać funkcję osuszania, jeśli jest w nią wyposażony.</p>



<h2 class="wp-block-heading">Wykres zależności temperatury podłogi od wilgotności.</h2>



<p class="wp-block-paragraph">Wyobraź sobie prosty wykres liniowy. Na osi poziomej (X) mamy temperaturę powietrza w pomieszczeniu (np. od 20°C do 30°C). Na osi pionowej (Y) mamy temperaturę punktu rosy.</p>



<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wykres punktu rosy</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
    .chart-container {
        width: 100%;
        max-width: 900px;
        margin: 40px auto;
        padding: 20px;
        background: #ffffff;
        border-radius: 12px;
        box-shadow: 0 10px 30px rgba(0,0,0,0.08);
    }
    canvas {
        width: 100% !important;
        height: auto !important;
    }
</style>
</head>
<body>

<div class="chart-container">
    <canvas id="dewPointChart"></canvas>
</div>

<script>
const ctx = document.getElementById('dewPointChart').getContext('2d');

const temperatures = [20, 22, 24, 25, 26, 28, 30];

new Chart(ctx, {
    type: 'line',
    data: {
        labels: temperatures,
        datasets: [
            {
                label: 'Wilgotność 40%',
                data: [6, 8, 10, 11, 12, 14, 16],
                borderColor: '#2E86DE',
                backgroundColor: 'rgba(46,134,222,0.1)',
                tension: 0.4,
                fill: false
            },
            {
                label: 'Wilgotność 50%',
                data: [9, 11, 13, 14, 15, 17, 19],
                borderColor: '#28B463',
                backgroundColor: 'rgba(40,180,99,0.1)',
                tension: 0.4,
                fill: false
            },
            {
                label: 'Wilgotność 60%',
                data: [12, 14, 16, 17, 18, 20, 22],
                borderColor: '#F39C12',
                backgroundColor: 'rgba(243,156,18,0.1)',
                tension: 0.4,
                fill: false
            },
            {
                label: 'Wilgotność 70%',
                data: [14, 16, 18, 19, 20, 22, 24],
                borderColor: '#E74C3C',
                backgroundColor: 'rgba(231,76,60,0.1)',
                tension: 0.4,
                fill: false
            }
        ]
    },
    options: {
        responsive: true,
        maintainAspectRatio: true,
        plugins: {
            legend: {
                position: 'top',
                labels: {
                    font: {
                        size: 14
                    }
                }
            },
            title: {
                display: true,
                text: 'Wpływ wilgotności na temperaturę punktu rosy',
                font: {
                    size: 18
                }
            },
            tooltip: {
                callbacks: {
                    label: function(context) {
                        return context.dataset.label + ': ' + context.parsed.y + '°C';
                    }
                }
            }
        },
        scales: {
            x: {
                title: {
                    display: true,
                    text: 'Temperatura powietrza w pomieszczeniu (°C)'
                }
            },
            y: {
                title: {
                    display: true,
                    text: 'Temperatura punktu rosy (°C)'
                },
                beginAtZero: false
            }
        }
    }
});
</script>

</body>
</html>



<p class="wp-block-paragraph">Na takim wykresie od razu widać, że to wilgotność, a nie tylko temperatura, jest głównym wyznacznikiem możliwości bezpiecznego chłodzenia podłogówką. Im wyższa wilgotność, tym bardziej krzywe pną się w górę, zawężając pole manewru.</p>



<h2 class="wp-block-heading">Dlaczego projekt instalacji ma kluczowe znaczenie dla kontroli punktu rosy?</h2>



<p class="wp-block-paragraph">Nie da się oddzielić tematu bezpiecznego chłodzenia od&nbsp;<strong><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" type="link" id="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">projektu ogrzewania podłogowego</a></strong>. To na etapie projektowania zapada większość decyzji, które później decydują o tym, czy system będzie mógł pracować w trybie chłodzenia bez ryzyka kondensacji.</p>



<p class="wp-block-paragraph">Profesjonalny projektant instalacji c.o. musi uwzględnić kilka kluczowych aspektów:</p>



<ul class="wp-block-list">
<li><strong>Odpowiedni rozstaw rur:</strong>&nbsp;Aby uzyskać efekt chłodzenia, potrzebujesz stosunkowo niskiej temperatury wody, ale jednocześnie musisz zapewnić równomierny rozkład temperatury na całej powierzchni podłogi. Zbyt duży rozstaw rur spowoduje, że podłoga będzie miała zimne pasy nad rurami i cieplejsze między nimi, co lokalnie może sprzyjać kondensacji w tych najzimniejszych miejscach. Dlatego w projektach pod chłodzenie często zagęszcza się rury, by uzyskać bardziej jednorodną temperaturę posadzki.</li>



<li><strong>Rodzaj podłogi:</strong>&nbsp;To, czym wykończona jest podłoga, ma ogromne znaczenie. Płytki ceramiczne i kamień doskonale przewodzą ciepło (i zimno), przez co szybko reagują na zmiany temperatury wody. Są więc idealne do chłodzenia. Z kolei&nbsp;<strong>drewno i panele</strong>&nbsp;są izolatorami. Aby ochłodzić pomieszczenie przez gruby parkiet, musiałbyś dostarczyć bardzo zimną wodę, co natychmiast spowodowałoby wykroplenie się wilgoci na powierzchni drewna (która jest chłodniejsza od powietrza). Dodatkowo, samo drewno jest wrażliwe na wilgoć. Dlatego przy podłogach drewnianych chłodzenie jest bardzo ryzykowne i często odradzane, chyba że zastosuje się specjalne, drogie systemy i bezwzględną kontrolę parametrów.</li>



<li><strong>Izolacja przeciwwilgociowa i termiczna:</strong>&nbsp;Odpowiednia izolacja pod rurami jest ważna nie tylko zimą, by nie grzać gruntu, ale i latem, by nie chłodzić gruntu i nie marnować energii. Jednak kluczowa jest izolacja przeciwwilgociowa od gruntu, która zapobiega podciąganiu wilgoci kapilarnej do wylewki. W połączeniu z chłodzeniem, ta wilgoć z gruntu mogłaby się skraplać wewnątrz konstrukcji podłogi.</li>



<li><strong>Sterowanie strefowe:</strong>&nbsp;Aby skutecznie zarządzać punktem rosy, najlepiej mieć możliwość niezależnego sterowania temperaturą w poszczególnych pomieszczeniach (strefach). Inna wilgotność może panować w łazience (zazwyczaj wyższa), a inna w sypialni. Dzięki siłownikom na rozdzielaczu i termostatom pokojowym z czujnikiem wilgotności możesz dla każdego pomieszczenia ustawić inne limity i indywidualnie zabezpieczać je przed kondensacją.</li>
</ul>



<p class="wp-block-paragraph">Dobry projekt to taki, który przewidział funkcję chłodzenia na samym początku. Przerobienie starej instalacji grzejnikowej na podłogówkę z chłodzeniem jest technicznie możliwe, ale często wiąże się z ogromnymi kosztami i ryzykiem, że projekt nie będzie optymalny, a walka z punktem rosy stanie się codziennością.</p>



<h2 class="wp-block-heading">FAQ;</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1772271695389"><strong class="schema-faq-question"><strong>Czy chłodzenie podłogowe jest bezpieczne?</strong></strong> <p class="schema-faq-answer">Tak, pod warunkiem że kontrolujesz punkt rosy, wilgotność powietrza i temperaturę podłogi oraz masz automatykę zabezpieczającą przed kondensacją.</p> </div> <div class="schema-faq-section" id="faq-question-1772271701733"><strong class="schema-faq-question"><strong>Jaka jest minimalna bezpieczna temperatura podłogi?</strong></strong> <p class="schema-faq-answer">Powinna być o około 1–2°C wyższa niż wyliczony punkt rosy w danym pomieszczeniu.</p> </div> <div class="schema-faq-section" id="faq-question-1772271733761"><strong class="schema-faq-question"><strong>Czy przy wysokiej wilgotności można chłodzić podłogówką?</strong></strong> <p class="schema-faq-answer">Przy wilgotności rzędu 70% chłodzenie staje się bardzo ograniczone, ponieważ punkt rosy znacząco rośnie i ryzyko skraplania jest wysokie.</p> </div> <div class="schema-faq-section" id="faq-question-1772271764305"><strong class="schema-faq-question"><strong>Czy drewno nadaje się do chłodzenia podłogowego?</strong></strong> <p class="schema-faq-answer">Drewno jest bardziej wrażliwe na wilgoć i ma większy opór cieplny, dlatego chłodzenie podłóg drewnianych wymaga szczególnej kontroli parametrów.</p> </div> <div class="schema-faq-section" id="faq-question-1772271771480"><strong class="schema-faq-question"><strong>Czy wentylacja ma wpływ na bezpieczeństwo chłodzenia?</strong></strong> <p class="schema-faq-answer">Tak. Sprawna wentylacja, zwłaszcza mechaniczna z rekuperacją, pomaga kontrolować wilgotność, co bezpośrednio wpływa na poziom punktu rosy i bezpieczeństwo instalacji.</p> </div> </div>



<h2 class="wp-block-heading">Podsumowanie – czy warto chłodzić podłogówką?</h2>



<p class="wp-block-paragraph">Mimo tych wszystkich ostrzeżeń i skomplikowanej fizyki, chłodzenie podłogowe ma wiele zalet. Jest to system&nbsp;<strong>niewidoczny, cichy i bardzo komfortowy</strong>. Nie wywołuje przeciągów i nie roznosi kurzu jak tradycyjna klimatyzacja. Daje przyjemne, równomierne uczucie chłodu od dołu.</p>



<p class="wp-block-paragraph">Jednak kluczem do sukcesu jest&nbsp;<strong>świadomość i kontrola</strong>. Nie możesz po prostu puścić lodowatej wody w rury w upalny dzień. Musisz:</p>



<ol start="1" class="wp-block-list">
<li><strong>Zrozumieć</strong>&nbsp;zjawisko punktu rosy.</li>



<li><strong>Zmierzyć</strong>&nbsp;i monitorować parametry powietrza.</li>



<li><strong>Zainwestować</strong>&nbsp;w odpowiednią automatykę zabezpieczającą.</li>



<li><strong>Zadbać</strong>&nbsp;o wentylację i kontrolę wilgotności.</li>



<li><strong>Mieć dobry projekt</strong>, który uwzględnia chłodzenie.</li>
</ol>



<p class="wp-block-paragraph">Jeśli spełnisz te warunki, chłodzenie podłogowe stanie się jedną z najlepszych inwestycji w komfort Twojego domu, działającą bezpiecznie i efektywnie przez całe lato. Jeśli jednak zlekceważysz punkt rosy, Twoja piękna podłoga szybko zamieni się w śliską, mokrą i zagrzybioną powierzchnię. Wybór należy do Ciebie, ale teraz masz już pełną wiedzę, by podjąć go świadomie.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/">Punkt rosy w ogrzewaniu podłogowym – jak bezpiecznie chłodzić dom bez ryzyka kondensacji.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Średnice rur w ogrzewaniu podłogowym.</title>
		<link>https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 24 Feb 2026 10:52:01 +0000</pubDate>
				<category><![CDATA[Hydraulika]]></category>
		<category><![CDATA[Hydraulika grzewcza]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Projekty instalacji]]></category>
		<category><![CDATA[Technologia grzewcza]]></category>
		<category><![CDATA[długość pętli podłogówki]]></category>
		<category><![CDATA[dobór rur ogrzewanie podłogowe]]></category>
		<category><![CDATA[hydraulika ogrzewania podłogowego]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[projektowanie podłogówki]]></category>
		<category><![CDATA[przepływ w ogrzewaniu podłogowym]]></category>
		<category><![CDATA[rura 16x2 ogrzewanie podłogowe]]></category>
		<category><![CDATA[rura 20x2 ogrzewanie podłogowe]]></category>
		<category><![CDATA[spadki ciśnienia ogrzewanie podłogowe]]></category>
		<category><![CDATA[średnice rur ogrzewanie podłogowe]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3505</guid>

					<description><![CDATA[<p>Dobór elementów instalacji grzewczej to nie przypadek, lecz świadoma decyzja techniczna. Średnice rur w ogrzewaniu podłogowym mają bezpośredni wpływ na przepływ wody, opory hydrauliczne oraz efektywność całego systemu. Zbyt mała średnica może powodować nadmierne spadki ciśnienia i niedogrzanie pomieszczeń, natomiast zbyt duża utrudnia regulację i zwiększa koszty inwestycji. W artykule pokazujemy konkretne obliczenia, przykłady oraz praktyczne zasady projektowe, które pozwalają dobrać optymalne parametry instalacji zarówno dla kotłów gazowych, jak i pomp ciepła.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">Średnice rur w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Projektowanie wodnego ogrzewania podłogowego to balansowanie między wydajnością cieplną a oporami hydraulicznymi. Wybór&nbsp;<strong>średnic rur</strong>&nbsp;ma kluczowe znaczenie dla tego, jak mocno musi pracować pompa obiegowa i czy system będzie w stanie dogrzać pomieszczenie. W tym artykule kompleksowo omawiamy techniczne aspekty doboru rur, obliczania&nbsp;<strong>przepływów</strong>&nbsp;oraz szacowania&nbsp;<strong>spadków ciśnienia</strong>, opierając się na konkretnych przykładach i sprawdzonych wzorach inżynierskich.</p>



<h2 class="wp-block-heading">Dlaczego średnica rury ma znaczenie dla przepływu i spadku ciśnienia?</h2>



<p class="wp-block-paragraph">Wybór odpowiedniej <strong>średnicy <a href="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/" type="link" id="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/">rur do ogrzewania podłogowego</a></strong> to nie tylko kwestia dostępności materiału w sklepie. To przede wszystkim decyzja inżynierska, która wpływa na opory przepływu, a co za tym idzie – na pracę pompy obiegowej i równomierność ogrzewania pomieszczeń.</p>



<p class="wp-block-paragraph">W praktyce instalacyjnej w budownictwie jednorodzinnym najczęściej stosuje się rury z materiałów takich jak <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/" type="link" id="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">PE-X</a>a, PE-RT lub wielowarstwowe (PEX/Al/PEX). Oto przegląd standardowych średnic:</p>



<ul class="wp-block-list">
<li><strong>16 x 2,0 mm</strong>: To absolutny standard w budownictwie mieszkaniowym. Łączy elastyczność montażu z wystarczającą wydajnością dla większości pomieszczeń. Jego średnica wewnętrzna wynosi 12 mm.</li>



<li><strong>17 x 2,0 mm</strong>: Stosowana głównie w systemach systemowych konkretnych producentów. Oferuje nieco lepsze parametry przepływu niż rura 16 mm.</li>



<li><strong>20 x 2,0 mm</strong>: Używana rzadziej, głównie w dużych halach, pomieszczeniach o bardzo długich pętlach lub tam, gdzie chcemy znacząco zredukować&nbsp;<strong>spadki ciśnienia</strong>. Jej średnica wewnętrzna to 16 mm.</li>
</ul>



<p class="wp-block-paragraph">Dlaczego te różnice są tak istotne? Z praw hydrauliki wynika, że przy tym samym przepływie wody, mniejsza średnica wewnętrzna generuje&nbsp;<strong>znacznie wyższe opory przepływu</strong>. Jeśli opory te staną się zbyt duże, woda nie będzie w stanie efektywnie krążyć w pętli, co skutkuje niedogrzaniem podłogi, zapowietrzaniem się instalacji i nadmiernym hałasem.</p>



<h2 class="wp-block-heading">Jak dokładnie obliczyć wymagany przepływ wody w pętlach?</h2>



<p class="wp-block-paragraph">Zanim przejdziemy do spadków ciśnienia, musimy ustalić, ile wody w ogóle potrzebujemy przesłać przez rurę.&nbsp;<strong>Przepływ w ogrzewaniu podłogowym</strong>&nbsp;(strumień masy) zależy od dwóch czynników:&nbsp;<strong>mocy cieplnej, jaką ma dostarczyć dana pętla</strong>&nbsp;oraz od&nbsp;<strong>różnicy temperatur</strong>&nbsp;między wodą zasilającą a powracającą.</p>



<h3 class="wp-block-heading">Moc pętli i różnica temperatur – wzór i praktyka.</h3>



<p class="wp-block-paragraph">Zapotrzebowanie na ciepło (oznaczane jako Q) dla pomieszczenia wynika z obliczeń strat ciepła. Projektowana różnica temperatur (oznaczana jako ΔT) zależy od źródła ciepła:</p>



<p class="wp-block-paragraph">Dla <strong><a href="https://projekt-ogrzewania.pl/kociol-gazowy/" type="link" id="https://projekt-ogrzewania.pl/kociol-gazowy/">kotłów gazowych</a></strong> standardem jest <strong>ΔT = 7 do 10 stopni (K)</strong> .</p>



<p class="wp-block-paragraph">Dla <strong><a href="https://projekt-ogrzewania.pl/pompa-ciepla/" type="link" id="https://projekt-ogrzewania.pl/pompa-ciepla/">pomp ciepła</a></strong> najczęściej przyjmuje się <strong>ΔT = 5 stopni (K)</strong> , co zapewnia najwyższą efektywność urządzenia (niski skok temperatury).</p>



<div style="max-width:800px;margin:20px auto;padding:20px;border:1px solid #e5e5e5;border-radius:10px;background:#fafafa;font-family:Arial,Helvetica,sans-serif;line-height:1.6;color:#222;">

  <h2 style="font-size:22px;margin-top:0;">Przepływ w ogrzewaniu podłogowym – zależność od mocy i ΔT</h2>

  <p>
    Przepływ zależy od zapotrzebowania na ciepło (<strong>Q</strong>) oraz projektowanej różnicy temperatur między zasilaniem a powrotem (<strong>ΔT</strong>).
  </p>

  <h3 style="font-size:18px;margin-top:20px;">Typowe wartości ΔT w ogrzewaniu podłogowym:</h3>

  <ul style="padding-left:20px;">
    <li><strong>ΔT = 5 K</strong> – zalecane dla pomp ciepła (najwyższa efektywność).</li>
    <li><strong>ΔT = 7–10 K</strong> – stosowane w instalacjach z kotłem gazowym.</li>
  </ul>

  <h3 style="font-size:18px;margin-top:20px;">Wzór na przepływ masowy:</h3>

  <div style="text-align:center;font-size:22px;margin:20px 0;padding:15px;background:white;border-radius:8px;border:1px solid #ddd;">
    ṁ = Q / (c<sub>w</sub> · ΔT)
  </div>

  <h3 style="font-size:18px;margin-top:20px;">Gdzie:</h3>

  <ul style="padding-left:20px;">
    <li><strong>ṁ</strong> – strumień masy [kg/s] (w przybliżeniu odpowiada l/s),</li>
    <li><strong>Q</strong> – moc grzewcza pętli [W],</li>
    <li><strong>c<sub>w</sub></strong> – ciepło właściwe wody ≈ 4186 J/(kg·K),</li>
    <li><strong>ΔT</strong> – różnica temperatur między zasilaniem a powrotem [K].</li>
  </ul>

  <div style="margin-top:25px;padding:15px;background:#eef6ff;border-left:5px solid #2b6cb0;border-radius:6px;">
    <strong>Przykład praktyczny:</strong><br><br>
    Dla pętli o mocy <strong>1000 W</strong> przy <strong>ΔT = 5 K</strong>, wymagany przepływ wynosi około:<br><br>
    <div style="font-size:20px;text-align:center;margin:10px 0;">
      <strong>2,8 l/min</strong>
    </div>
    Większość rotametrów stosowanych w rozdzielaczach obsługuje zakres <strong>0,5 – 5,0 l/min</strong>, co pokrywa typowe wymagania instalacji ogrzewania podłogowego.
  </div>

</div>



<p class="wp-block-paragraph"><strong>Przykład praktyczny:</strong><br>Załóżmy, że projektujemy ogrzewanie podłogowe w salonie, dla którego straty ciepła wynoszą&nbsp;<strong>1500 W (1,5 kW)</strong>&nbsp;. Sprawdźmy, jak zmieni się wymagany przepływ w zależności od przyjętej różnicy temperatur.</p>



<ol start="1" class="wp-block-list">
<li><strong>Dla pompy ciepła (ΔT = 5 K)</strong>&nbsp;:<br>Przepływ masowy = 1500 / (4186 * 5) = 1500 / 20930 ≈ 0,0717 kg/s<br>Przeliczając na godziny i minuty: 0,0717 * 3600 ≈ 258 kg/h, co daje około&nbsp;<strong>4,3 l/min</strong>.</li>



<li><strong>Dla kotła gazowego (ΔT = 10 K)</strong>&nbsp;:<br>Przepływ masowy = 1500 / (4186 * 10) = 1500 / 41860 ≈ 0,0358 kg/s<br>Co daje 0,0358 * 3600 ≈ 129 kg/h, czyli około&nbsp;<strong>2,15 l/min</strong>.</li>
</ol>



<p class="wp-block-paragraph">Wniosek jest prosty: im niższa różnica temperatur (co jest korzystne dla pomp ciepła), tym większy przepływ musi być zapewniony przez instalację, co ma bezpośredni wpływ na dobór średnic i opory hydrauliczne. W praktyce większość rotametrów na rozdzielaczach obsługuje zakres 0,5–5,0 l/min, więc obie wartości mieszczą się w normie.</p>



<p class="wp-block-paragraph">Dla uproszczenia, w dalszej części artykułu posłużymy się popularnym założeniem ΔT = 10 K, co pozwala na stosowanie znanej reguły:&nbsp;<strong>wymagany przepływ (w kg/h) ≈ moc pętli (w W) / 12</strong>.</p>



<h2 class="wp-block-heading">Spadki ciśnienia w ogrzewaniu podłogowym – szczegółowa analiza.</h2>



<p class="wp-block-paragraph">Obliczenie&nbsp;<strong>strat ciśnienia w ogrzewaniu podłogowym</strong>&nbsp;(zwanych też oporami hydraulicznymi) jest niezbędne, aby upewnić się, że pompa obiegowa jest w stanie &#8222;przepchnąć&#8221; wodę przez wszystkie pętle. Na opór składają się straty liniowe (na długości rury) oraz miejscowe (na łukach, złączkach, przy rozdzielaczu).</p>



<h3 class="wp-block-heading">Kluczowe parametry graniczne.</h3>



<p class="wp-block-paragraph">Aby instalacja działała bez zarzutu, projektant zawsze pilnuje trzech rzeczy:</p>



<ol start="1" class="wp-block-list">
<li><strong>Maksymalny spadek ciśnienia:</strong>&nbsp;To najważniejsza granica. Łączne opory przepływu w pojedynczej pętli nie mogą przekroczyć&nbsp;<strong>15–20 kPa (kilopaskali)</strong>&nbsp;, co odpowiada około 1,5–2,0 metra słupa wody. Przekroczenie tej wartości sprawia, że instalacja staje się trudna do zrównoważenia hydraulicznego, a pompa pracuje na granicy wydajności, generując hałas i zużywając więcej prądu.</li>



<li><strong>Minimalna prędkość przepływu:</strong>&nbsp;Aby odpowietrzenie było skuteczne, a woda mogła &#8222;porwać&#8221; pęcherzyki powietrza, prędkość nie może spaść poniżej&nbsp;<strong>0,15–0,2 m/s</strong>.</li>



<li><strong>Maksymalna prędkość przepływu:</strong>&nbsp;Powyżej&nbsp;<strong>0,6 m/s</strong>&nbsp;mogą pojawić się szumy hydrauliczne, a opory przepływu rosną już bardzo gwałtownie.</li>
</ol>



<h3 class="wp-block-heading">Tabela jednostkowych spadków ciśnienia dla popularnych średnic.</h3>



<p class="wp-block-paragraph">W praktyce inżynierskiej do obliczeń używa się gotowych tabel lub wykresów producentów rur. Poniżej przedstawiamy przykładowe wartości jednostkowych spadków ciśnienia (oznaczanych często jako R) dla rur wielowarstwowych (PE-Al-PE) o różnych średnicach. Wartości te pokazują, jak duży opór (w paskalach) stawia jeden metr rury przy danym przepływie.</p>



<div style="max-width:900px;margin:30px auto;font-family:Arial,Helvetica,sans-serif;">

  <h2 style="font-size:22px;margin-bottom:15px;">
    Tabela 1. Jednostkowe spadki ciśnienia [Pa/m] dla rur wielowarstwowych
  </h2>

  <div style="overflow-x:auto;border-radius:10px;border:1px solid #ddd;">

    <table style="width:100%;border-collapse:collapse;min-width:600px;background:white;">

      <thead>
        <tr style="background:#2b6cb0;color:white;text-align:left;">
          <th style="padding:12px;">Przepływ masowy<br>[kg/h]</th>
          <th style="padding:12px;">Rura 16&#215;2,0<br>(śr. wewn. 12 mm)</th>
          <th style="padding:12px;">Rura 20&#215;2,0<br>(śr. wewn. 16 mm)</th>
        </tr>
      </thead>

      <tbody>

        <tr style="border-bottom:1px solid #eee;">
          <td style="padding:12px;"><strong>40</strong></td>
          <td style="padding:12px;">15 Pa/m</td>
          <td style="padding:12px;color:#666;">pomijalnie mały</td>
        </tr>

        <tr style="border-bottom:1px solid #eee;background:#f9f9f9;">
          <td style="padding:12px;"><strong>60</strong></td>
          <td style="padding:12px;">35 Pa/m</td>
          <td style="padding:12px;color:#666;">pomijalnie mały</td>
        </tr>

        <tr style="border-bottom:1px solid #eee;">
          <td style="padding:12px;"><strong>80</strong></td>
          <td style="padding:12px;">70 Pa/m</td>
          <td style="padding:12px;">15 Pa/m</td>
        </tr>

        <tr style="border-bottom:1px solid #eee;background:#f9f9f9;">
          <td style="padding:12px;"><strong>100</strong></td>
          <td style="padding:12px;">120 Pa/m</td>
          <td style="padding:12px;">25 Pa/m</td>
        </tr>

        <tr style="border-bottom:1px solid #eee;">
          <td style="padding:12px;"><strong>120</strong></td>
          <td style="padding:12px;color:#c53030;"><strong>170 Pa/m</strong></td>
          <td style="padding:12px;">35 Pa/m</td>
        </tr>

        <tr style="border-bottom:1px solid #eee;background:#f9f9f9;">
          <td style="padding:12px;"><strong>150</strong></td>
          <td style="padding:12px;color:#c53030;"><strong>280 Pa/m</strong></td>
          <td style="padding:12px;">55 Pa/m</td>
        </tr>

        <tr>
          <td style="padding:12px;"><strong>200</strong></td>
          <td style="padding:12px;color:#c53030;"><strong>480 Pa/m</strong></td>
          <td style="padding:12px;">100 Pa/m</td>
        </tr>

      </tbody>

    </table>

  </div>

  <div style="margin-top:20px;padding:15px;background:#eef6ff;border-left:5px solid #2b6cb0;border-radius:6px;">
    <strong>Analiza tabeli:</strong><br><br>
    Widzimy wyraźnie, jak gwałtownie rosną opory hydrauliczne wraz ze wzrostem przepływu, szczególnie dla najczęściej stosowanej rury <strong>16&#215;2,0</strong>.<br><br>
    Przy przepływie <strong>120 kg/h</strong>, jednostkowy spadek ciśnienia wynosi już <strong>170 Pa/m</strong>, co ma bezpośredni wpływ na dobór pompy obiegowej oraz maksymalną długość pętli ogrzewania podłogowego.
  </div>

</div>



<p class="wp-block-paragraph"><strong>Ćwiczenie praktyczne dla kotła gazowego:</strong><br>Dla naszego salonu (1500 W, ΔT = 10K, przepływ 129 kg/h, zaokrąglijmy do 130 kg/h) projektujemy pętlę z rury 16&#215;2,0 o długości&nbsp;<strong>85 metrów</strong>. Z tabeli, dla 130 kg/h, jednostkowy spadek to około 200 Pa/m (interpolując między 120 a 150 kg/h). Sam liniowy spadek ciśnienia wyniesie:<br><strong>85 m × 200 Pa/m = 17 000 Pa = 17 kPa</strong>.<br>Do tego doliczamy opory miejscowe (przyjęte 20%): 17 kPa × 0,2 = 3,4 kPa.<br><strong>Łączny spadek ciśnienia: 20,4 kPa</strong>.</p>



<p class="wp-block-paragraph"><strong>Wniosek:</strong>&nbsp;Jesteśmy na granicy (lub nieznacznie powyżej) dopuszczalnych 20 kPa. Taka pętla prawdopodobnie będzie wymagała bardzo precyzyjnego wyregulowania, a pompa może pracować na wysokich obrotach. Rozwiązaniem jest skrócenie pętli (np. podzielenie salonu na dwa obiegi po 70 m) lub zwiększenie średnicy rury.</p>



<p class="wp-block-paragraph"><strong>Ćwiczenie praktyczne dla pompy ciepła:</strong><br>Weźmy ten sam salon (1500 W), ale tym razem przy ΔT = 5K, co daje przepływ 258 kg/h (ok. 4,3 l/min). Sprawdźmy, czy rura 16&#215;2,0 w ogóle wchodzi w grę. Dla przepływu 258 kg/h, jednostkowy spadek ciśnienia z tabeli (ekstrapolując dane) wyniósłby około 700-800 Pa/m! Dla pętli o długości 85 m, sam spadek liniowy to 85 × 750 Pa = 63 750 Pa (63,7 kPa). To zdecydowanie za dużo.</p>



<p class="wp-block-paragraph">W tej sytuacji konieczne jest:</p>



<ol start="1" class="wp-block-list">
<li><strong>Zwiększenie średnicy rury</strong>&nbsp;– zastosowanie rury 20&#215;2,0. Dla przepływu 258 kg/h, jednostkowy spadek dla tej rury to około 160 Pa/m (z ekstrapolacji danych). Dla 85 m daje to 13,6 kPa liniowo + opory miejscowe = około 16,5 kPa – wynik akceptowalny.</li>



<li><strong>Podział na więcej pętli</strong>&nbsp;– zaprojektowanie dwóch lub trzech krótszych pętli, co zmniejszy przepływ w każdej z nich i pozwoli na zastosowanie rury 16&#215;2,0, ale zwiększy liczbę obiegów na rozdzielaczu.</li>
</ol>



<h3 class="wp-block-heading">Prędkość przepływu – sprawdzenie.</h3>



<p class="wp-block-paragraph">Dla rury 16&#215;2,0 przy przepływie 130 kg/h, prędkość wody wynosi około&nbsp;<strong>0,3 m/s</strong>&nbsp;– mieści się w przedziale 0,15-0,6 m/s. Dla rury 20&#215;2,0 przy przepływie 258 kg/h, prędkość wyniesie około&nbsp;<strong>0,35 m/s</strong>&nbsp;– również jest prawidłowa.</p>



<h2 class="wp-block-heading">Graniczne długości pętli – zasada kciuka.</h2>



<p class="wp-block-paragraph">Aby uniknąć problemów z hydraulicznym zrównoważeniem układu, w projektowaniu przyjmuje się bezpieczne granice długości jednej <a href="https://projekt-ogrzewania.pl/petla-grzewcza/" type="link" id="https://projekt-ogrzewania.pl/petla-grzewcza/">pętli</a> (łącznie z podejściem do rozdzielacza). Wartości te wynikają z praktyki i mają na celu utrzymanie spadków ciśnienia w rozsądnych granicach.</p>



<div style="max-width:900px;margin:30px auto;font-family:Arial,Helvetica,sans-serif;">

  <h2 style="font-size:22px;margin-bottom:15px;">
    Tabela 2. Zalecane i maksymalne długości pętli ogrzewania podłogowego
  </h2>

  <div style="overflow-x:auto;border-radius:10px;border:1px solid #ddd;">

    <table style="width:100%;border-collapse:collapse;min-width:600px;background:white;">

      <thead>
        <tr style="background:#2b6cb0;color:white;text-align:left;">
          <th style="padding:12px;">Średnica rury</th>
          <th style="padding:12px;">Maksymalna długość pętli</th>
          <th style="padding:12px;">Zalecana długość<br>(dla łatwej regulacji)</th>
        </tr>
      </thead>

      <tbody>

        <tr style="border-bottom:1px solid #eee;">
          <td style="padding:12px;"><strong>16 × 2,0 mm</strong></td>
          <td style="padding:12px;">100 – 120 m</td>
          <td style="padding:12px;color:#2f855a;"><strong>80 m</strong></td>
        </tr>

        <tr style="border-bottom:1px solid #eee;background:#f9f9f9;">
          <td style="padding:12px;"><strong>17 × 2,0 mm</strong></td>
          <td style="padding:12px;">120 m</td>
          <td style="padding:12px;color:#2f855a;"><strong>90 m</strong></td>
        </tr>

        <tr>
          <td style="padding:12px;"><strong>20 × 2,0 mm</strong></td>
          <td style="padding:12px;">150 m</td>
          <td style="padding:12px;color:#2f855a;"><strong>110 m</strong></td>
        </tr>

      </tbody>

    </table>

  </div>

  <div style="margin-top:20px;padding:15px;background:#fff8e6;border-left:5px solid #d69e2e;border-radius:6px;">
    <strong>Wskazówka projektowa:</strong><br><br>
    Staraj się, aby pętle podłączone do jednego rozdzielacza miały <strong>zbliżone długości</strong>. Różnica nie powinna przekraczać <strong>10–15%</strong>.<br><br>
    Ułatwia to regulację hydrauliczną instalacji oraz zapobiega sytuacji, w której przepływ koncentruje się głównie w najkrótszych pętlach, powodując nierównomierne ogrzewanie pomieszczeń.
  </div>

</div>



<h2 class="wp-block-heading">Praktyczne wyliczenia na przykładzie – jak średnica rury ratuje sytuację?</h2>



<p class="wp-block-paragraph">Wróćmy do przykładu z pompą ciepła (przepływ 258 kg/h) i pętlą o długości 100 metrów, ale tym razem zastosujmy rurę&nbsp;<strong>20&#215;2,0</strong>. Z naszych szacunków (opartych na ekstrapolacji danych z Tabeli 1) jednostkowy spadek ciśnienia wyniesie około 160 Pa/m.</p>



<p class="wp-block-paragraph">Obliczenia:</p>



<ul class="wp-block-list">
<li>Spadek liniowy: 100 m × 160 Pa/m = 16 000 Pa =&nbsp;<strong>16,0 kPa</strong>.</li>



<li>Opory miejscowe (+20%): 16,0 kPa × 0,2 = 3,2 kPa.</li>



<li><strong>Łączny spadek ciśnienia: 19,2 kPa.</strong></li>
</ul>



<p class="wp-block-paragraph">To wynik mieszczący się w granicy 20 kPa. Gdybyśmy przy tej samej długości 100 m uparli się przy rurze 16&#215;2,0, opory sięgnęłyby około 75-80 kPa, co całkowicie dyskwalifikuje takie rozwiązanie. Ten przykład dobitnie pokazuje, jak kluczowy jest świadomy wybór&nbsp;<strong>średnicy rury</strong>&nbsp;w zależności od zakładanych przepływów.</p>



<h2 class="wp-block-heading">Rola profesjonalnego projektu w optymalizacji parametrów.</h2>



<p class="wp-block-paragraph">Przedstawione powyżej wyliczenia to dopiero wierzchołek góry lodowej. Samodzielne dobranie&nbsp;<strong>średnic rur, przepływów i spadków ciśnień</strong>&nbsp;dla całego domu z kilkunastoma pętlami o różnej długości i zapotrzebowaniu na moc to zadanie bardzo złożone. W praktyce wszystkie pętle są podłączone do wspólnego rozdzielacza, a celem projektanta jest takie &#8222;wyważenie&#8221; instalacji, aby spadki ciśnienia we wszystkich obiegach były zbliżone. To proces zwany&nbsp;<strong>równoważeniem hydraulicznym</strong>.</p>



<p class="wp-block-paragraph">Profesjonalny <a href="https://projekt-ogrzewania.pl/produkt/projekt-ogrzewania-podlogowego-do-200-m2/" type="link" id="https://projekt-ogrzewania.pl/produkt/projekt-ogrzewania-podlogowego-do-200-m2/">projekt ogrzewania podłogowego</a> uwzględnia nie tylko dobór średnic, ale także:</p>



<ul class="wp-block-list">
<li>Dokładne obliczenie strat ciepła dla każdego pomieszczenia.</li>



<li>Rozrysowanie rozkładu pętli z uwzględnieniem stref przyokiennych.</li>



<li>Dobór nastaw wstępnych na rozdzielaczu (regulacja przepływu).</li>



<li>Dobór pompy obiegowej o odpowiedniej wysokości podnoszenia i wydajności.</li>
</ul>



<p class="wp-block-paragraph">Pamiętaj, że dobrze zaprojektowana i zrównoważona instalacja to nie tylko komfort cieplny, ale także niższe rachunki za ogrzewanie i energię elektryczną potrzebną do napędu pompy. Inwestycja w projekt zwraca się zazwyczaj w ciągu pierwszych sezonów grzewczych. Znajomość zależności między&nbsp;<strong>średnicą rury, przepływem a spadkiem ciśnienia</strong>&nbsp;jest jednak niezwykle przydatna do świadomej rozmowy z projektantem i wykonawcą oraz do zrozumienia, dlaczego pewne rozwiązania są rekomendowane.</p>



<h2 class="wp-block-heading">FAQ – Najczęściej zadawane pytania.</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1771926581109"><strong class="schema-faq-question"><strong>Jaka średnica rury jest najlepsza do ogrzewania podłogowego w domu jednorodzinnym?</strong></strong> <p class="schema-faq-answer">Najczęściej stosuje się rurę 16 × 2,0 mm, która zapewnia dobry kompromis między oporami hydraulicznymi a łatwością montażu. W przypadku pomp ciepła lub dużych powierzchni warto rozważyć rurę 20 × 2,0 mm.</p> </div> <div class="schema-faq-section" id="faq-question-1771926590375"><strong class="schema-faq-question"><strong>Dlaczego średnica rury wpływa na wydajność ogrzewania podłogowego?</strong></strong> <p class="schema-faq-answer">Mniejsza średnica powoduje większe opory przepływu, co zwiększa obciążenie pompy obiegowej i może ograniczyć przepływ wody. To prowadzi do spadku wydajności grzewczej i nierównomiernego ogrzewania podłogi.</p> </div> <div class="schema-faq-section" id="faq-question-1771926599440"><strong class="schema-faq-question"><strong>Jaka powinna być maksymalna długość jednej pętli ogrzewania podłogowego?</strong></strong> <p class="schema-faq-answer">Dla rury 16 mm zaleca się długość do około 80–100 metrów, natomiast dla rury 20 mm można stosować pętle do około 110–150 metrów, w zależności od przepływu i źródła ciepła.</p> </div> <div class="schema-faq-section" id="faq-question-1771926609348"><strong class="schema-faq-question"><strong>Jakie spadki ciśnienia są dopuszczalne w ogrzewaniu podłogowym?</strong></strong> <p class="schema-faq-answer">Łączny spadek ciśnienia w jednej pętli nie powinien przekraczać 15–20 kPa. Wyższe wartości utrudniają regulację instalacji i zwiększają zużycie energii przez pompę obiegową.</p> </div> <div class="schema-faq-section" id="faq-question-1771926628127"><strong class="schema-faq-question"><strong>Czy pompa ciepła wymaga innych średnic rur niż kocioł gazowy?</strong></strong> <p class="schema-faq-answer">Tak. Pompy ciepła pracują przy mniejszej różnicy temperatur (ΔT = 5 K), co wymaga większego przepływu wody. W takich przypadkach często stosuje się rury 20 mm lub dzieli instalację na większą liczbę krótszych pętli.</p> </div> </div>



<h2 class="wp-block-heading">Podsumowanie techniczne – kluczowe wnioski.</h2>



<ul class="wp-block-list">
<li><strong>Rura 16 mm</strong>&nbsp;jest optymalna do rozstawów 10 cm lub 15 cm w standardowych pokojach z kotłami gazowymi (ΔT ≈ 10K). Sprawdza się przy przepływach do ok. 150 kg/h i długościach pętli do 80-100 m.</li>



<li><strong>Przy pompach ciepła</strong>&nbsp;dążymy do niskich parametrów zasilania (30–35°C) i niskiej różnicy temperatur (ΔT = 5K). To wymusza&nbsp;<strong>większe przepływy</strong>, a co za tym idzie – konieczność stosowania&nbsp;<strong>rur 20 mm</strong>&nbsp;lub dzielenia powierzchni na bardzo dużą liczbę krótkich pętli (często co 10 cm).</li>



<li>Każda pętla musi mieć możliwość regulacji na rozdzielaczu (zawory termostatyczne i rotametry), co pozwala na precyzyjne ustawienie wymaganego przepływu obliczonego ze wzoru.</li>



<li>Zawsze sprawdzaj, czy sumaryczny&nbsp;<strong>spadek ciśnienia</strong>&nbsp;w projektowanej pętli nie przekracza 20 kPa, a prędkość wody mieści się w przedziale 0,15–0,6 m/s.</li>
</ul>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">Średnice rur w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projektowe Obciążenie Cieplne (OZC).</title>
		<link>https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 15 Feb 2026 12:02:50 +0000</pubDate>
				<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[OZC]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[efektywność pompy ciepła]]></category>
		<category><![CDATA[instalacja co projekt]]></category>
		<category><![CDATA[normy pn en 12831]]></category>
		<category><![CDATA[obliczenia ozc]]></category>
		<category><![CDATA[ogrzewanie podłogowe parametry]]></category>
		<category><![CDATA[ogrzewanie podłogowe projekt]]></category>
		<category><![CDATA[ozc]]></category>
		<category><![CDATA[pompa ciepła projekt]]></category>
		<category><![CDATA[projekt instalacji grzewczej]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[projektowe obciążenie cieplne]]></category>
		<category><![CDATA[rozstaw rur podłogówki]]></category>
		<category><![CDATA[straty ciepła]]></category>
		<category><![CDATA[strumień ciepła podłogówka]]></category>
		<category><![CDATA[zapotrzebowanie na ciepło]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3460</guid>

					<description><![CDATA[<p>Wiele instalacji grzewczych powstaje na podstawie przybliżeń, a nie rzeczywistych danych, co prowadzi do wysokich rachunków i problemów z komfortem cieplnym. Tymczasem Projektowe Obciążenie Cieplne (OZC) to kluczowy element, który pozwala precyzyjnie określić, ile energii potrzebuje Twój dom, aby utrzymać komfort nawet podczas największych mrozów. Od tej wartości zależy dobór rozstawu rur, temperatura zasilania oraz efektywność pompy ciepła. W tym artykule pokazujemy krok po kroku, jak OZC wpływa na projekt ogrzewania podłogowego i dlaczego jego prawidłowe obliczenie decyduje o trwałości, oszczędności i niezawodności całego systemu.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">Projektowe Obciążenie Cieplne (OZC).</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-blue: #0284c7;
    --rk-intro-blue-light: #e0f2fe;
    --rk-intro-green: #059669;
    --rk-intro-green-bg: #ecfdf5;
    --rk-intro-red: #dc2626;
    --rk-intro-red-bg: #fef2f2;
    --rk-intro-gold: #d97706;
    --rk-intro-gold-bg: #fffbeb;
    --rk-intro-gray: #64748b;
    --rk-intro-border: #cbd5e1;
    --rk-intro-bg: #ffffff;
}

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

/* Sekcja Nagłówkowa */
.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-blue);
    position: relative;
}

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

.rk-intro-title {
    font-size: 32px;
    font-weight: 900;
    line-height: 1.25;
    margin: 0 0 20px 0;
    color: #ffffff;
}

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

/* Typografia Wstępu */
.rk-intro-lead {
    font-size: 17px;
    line-height: 1.8;
    color: #e2e8f0;
    margin: 0;
    font-weight: 400;
}

.rk-intro-lead strong {
    color: #ffffff;
    font-weight: 800;
    background: rgba(2, 132, 199, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

.rk-intro-link {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: all 0.3s;
}

.rk-intro-link:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Symulator Interaktywny */
.rk-intro-interactive {
    padding: 45px 50px;
    background: #f8fafc;
}

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

/* Przełącznik */
.rk-switcher-box {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-app-toggle {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 550px;
}

.rk-toggle-btn {
    flex: 1;
    position: relative;
    z-index: 2;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 800;
    border: none;
    background: transparent;
    color: #64748b;
    cursor: pointer;
    border-radius: 99px;
    transition: color 0.3s ease;
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

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

.rk-toggle-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-intro-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-toggle[data-mode="pro"] .rk-toggle-glider {
    transform: translateX(100%);
    background: var(--rk-intro-green);
}

/* Dashboard Wyników */
.rk-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 2px solid var(--rk-intro-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 180px 1fr;
    gap: 40px;
    align-items: center;
    transition: all 0.4s ease;
}

.rk-dashboard.mode-amateur {
    border-color: var(--rk-intro-red-bg);
    box-shadow: 0 15px 35px -10px rgba(220, 38, 38, 0.12);
}

.rk-dashboard.mode-pro {
    border-color: var(--rk-intro-green-bg);
    box-shadow: 0 15px 35px -10px rgba(5, 150, 105, 0.12);
}

/* SVG Animacje */
.rk-svg-stage {
    width: 100%;
    max-width: 180px;
    margin: 0 auto;
    background: var(--rk-intro-dark);
    border-radius: 16px;
    padding: 20px;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    position: relative;
    overflow: hidden;
}

.rk-svg-stage svg {
    width: 100%;
    height: auto;
    display: block;
}

/* Animacje wspólne i specyficzne */
.anim-house { transition: fill 0.5s; }
.anim-thermometer-fill { transform-origin: bottom; transition: transform 1s cubic-bezier(0.4, 0, 0.2, 1), fill 0.5s; }
.anim-coin { opacity: 0; transition: opacity 0.3s, transform 0.5s; }

.mode-amateur .anim-house { fill: #334155; }
.mode-amateur .anim-thermometer-fill { transform: scaleY(0.3); fill: var(--rk-intro-blue); }
.mode-amateur .anim-coin { animation: coinDrop 1.5s infinite linear; }
.mode-amateur .anim-coin:nth-child(2) { animation-delay: 0.5s; }
.mode-amateur .anim-coin:nth-child(3) { animation-delay: 1s; }

.mode-pro .anim-house { fill: #1e293b; stroke: var(--rk-intro-green); stroke-width: 2; animation: shieldPulse 2s infinite alternate; }
.mode-pro .anim-thermometer-fill { transform: scaleY(0.85); fill: var(--rk-intro-green); }
.mode-pro .anim-coin { opacity: 1; transform: translateY(0); fill: var(--rk-intro-gold); }

@keyframes coinDrop {
    0% { opacity: 0; transform: translateY(-20px); fill: #ef4444; }
    20% { opacity: 1; }
    80% { opacity: 1; }
    100% { opacity: 0; transform: translateY(30px); fill: #ef4444; }
}

@keyframes shieldPulse {
    0% { filter: drop-shadow(0 0 0 rgba(5, 150, 105, 0)); }
    100% { filter: drop-shadow(0 0 10px rgba(5, 150, 105, 0.4)); }
}

/* Kafelki z danymi */
.rk-data-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-tile {
    background: #f1f5f9;
    padding: 20px;
    border-radius: 16px;
    border-left: 4px solid transparent;
    transition: all 0.3s ease;
}

.mode-amateur .rk-tile { border-left-color: var(--rk-intro-red); background: var(--rk-intro-red-bg); }
.mode-pro .rk-tile { border-left-color: var(--rk-intro-green); background: var(--rk-intro-green-bg); }

.rk-tile-label {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 6px;
}

.rk-tile-value {
    display: block;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-intro-dark);
}

.rk-tile-sub {
    display: block;
    font-size: 13px;
    color: #94a3b8;
    margin-top: 4px;
    font-weight: 500;
}

@media (max-width: 768px) {
    .rk-intro-header, .rk-intro-interactive { padding: 35px 25px; }
    .rk-intro-title { font-size: 26px; }
    .rk-dashboard { grid-template-columns: 1fr; text-align: center; padding: 25px; gap: 25px; }
    .rk-svg-stage { max-width: 140px; margin-bottom: 10px; }
    .rk-data-grid { grid-template-columns: 1fr; gap: 12px; }
    .rk-toggle-btn { padding: 12px 10px; font-size: 13px; flex-direction: column; gap: 4px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Projektowe Obciążenie Cieplne (OZC) – Fundament Inwestycji",
    "description": "Czym jest Projektowe Obciążenie Cieplne (OZC) wg normy PN-EN 12831? Zobacz, dlaczego ten parametr decyduje o kosztach pompy ciepła i bezawaryjności podłogówki.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-wstep",
    "name": "Porównanie metod doboru mocy grzewczej budynku",
    "description": "Zestawienie ryzyk i kosztów związanych z doborem instalacji grzewczej szacunkowo ('na oko') w kontraście do rzetelnych inżynierskich obliczeń normatywnych OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne ozc",
      "norma PN-EN 12831",
      "moc pompy ciepła",
      "rozstaw rur podłogówki",
      "koszty eksploatacji budynku"
    ],
    "measurementTechnique": "Analiza wpływu precyzyjnych obliczeń strat ciepła na redukcję przewymiarowania źródła ciepła oraz optymalizację kosztów operacyjnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dobór na oko (szacunkowy): Zwiększa koszty inwestycyjne przez zakup zbyt dużej pompy ciepła oraz podnosi rachunki za prąd z powodu taktowania.",
        "Obliczenia OZC (PN-EN 12831): Optymalizują moc urządzenia, gwarantując najniższe koszty i komfort nawet podczas skrajnych mrozów."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-wstep",
    "name": "Symulator Wpływu OZC na Inwestycję",
    "description": "Interaktywny widżet demonstracyjny obrazujący konsekwencje finansowe i techniczne pominięcia obliczeń Projektowego Obciążenia Cieplnego (OZC) podczas budowy.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-intro-container" id="rk-ozc-intro-app">
    <!-- Wstęp Merytoryczny -->
    <div class="rk-intro-header">
        <div class="rk-intro-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
            Fundament Instalacji
        </div>
        <h2 class="rk-intro-title">Projektowe Obciążenie Cieplne <span>(OZC)</span></h2>
        <p class="rk-intro-lead">
            To kluczowy parametr inżynieryjny definiowany przez <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" class="rk-intro-link">normę PN-EN 12831</a>, określający maksymalną ilość energii cieplnej, jaką należy dostarczyć do budynku w ciągu sekundy (wyrażaną w watach lub kilowatach), aby utrzymać zadaną temperaturę wewnętrzną podczas skrajnie niskich temperatur zewnętrznych.
            <br><br>
            Prawidłowo obliczone <strong>OZC stanowi absolutny fundament projektowania</strong> systemów grzewczych. To ono decyduje o mocy <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-intro-link">pompy ciepła</a>, dokładnym <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-intro-link">rozstawie rur ogrzewania podłogowego</a> oraz rzeczywistych kosztach eksploatacji budynku przez dziesięciolecia.
        </p>
    </div>

    <!-- Symulator Interaktywny -->
    <div class="rk-intro-interactive">
        <h3 class="rk-intro-section-title">Dlaczego ignorowanie OZC to najdroższy błąd inwestora?</h3>
        
        <div class="rk-switcher-box">
            <div class="rk-app-toggle" id="introSwitchContainer" data-mode="amateur">
                <div class="rk-toggle-glider" id="introGlider"></div>
                <button class="rk-toggle-btn active" data-target="amateur">
                    <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="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>
                    Dobór &#8222;Na oko&#8221;
                </button>
                <button class="rk-toggle-btn" data-target="pro">
                    <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="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    Projekt OZC (PN-EN)
                </button>
            </div>
        </div>

        <div class="rk-dashboard mode-amateur" id="introDashboard">
            <div class="rk-svg-stage">
                <!-- SVG: Dom + Termometr + Pieniądze -->
                <svg viewBox="0 0 100 100">
                    <!-- Dom -->
                    <path class="anim-house" d="M 10 50 L 50 15 L 90 50 L 90 90 L 10 90 Z" fill="#334155" />
                    <rect x="40" y="60" width="20" height="30" fill="#0f172a" />
                    <!-- Termometr -->
                    <rect x="20" y="30" width="8" height="40" rx="4" fill="#1e293b" />
                    <circle cx="24" cy="70" r="8" fill="#1e293b" />
                    <rect class="anim-thermometer-fill" x="22" y="32" width="4" height="38" rx="2" />
                    <circle cx="24" cy="70" r="5" class="anim-thermometer-fill" />
                    <!-- Pieniądze / Utrata -->
                    <circle class="anim-coin" cx="75" cy="40" r="4" />
                    <circle class="anim-coin" cx="80" cy="55" r="4" />
                    <circle class="anim-coin" cx="70" cy="70" r="4" />
                </svg>
            </div>
            
            <div class="rk-data-grid">
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl1">Koszty inwestycyjne</span>
                    <span class="rk-tile-value" id="dynVal1">Drastycznie zawyżone</span>
                    <span class="rk-tile-sub" id="dynSub1">Przewymiarowana pompa ciepła</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl2">Ryzyko w czasie mrozów</span>
                    <span class="rk-tile-value" id="dynVal2">Niedogrzanie budynku</span>
                    <span class="rk-tile-sub" id="dynSub2">Zbyt rzadki rozstaw rur</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl3">Zużycie prądu</span>
                    <span class="rk-tile-value" id="dynVal3">Wysokie (Taktowanie)</span>
                    <span class="rk-tile-sub" id="dynSub3">Sprężarka pracuje skokowo</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl4">Bezpieczeństwo</span>
                    <span class="rk-tile-value" id="dynVal4">Loteria wykonawcza</span>
                    <span class="rk-tile-sub" id="dynSub4">Brak twardych danych</span>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w strukturze błędu)
    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-ozc-intro-app');
        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;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener edukacyjny oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Przełącznik)
    const switchContainer = document.getElementById('introSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-toggle-btn');
    const dashboard = document.getElementById('introDashboard');
    
    // Elementy DOM do podmiany tekstu
    const v1 = document.getElementById('dynVal1'); const s1 = document.getElementById('dynSub1');
    const v2 = document.getElementById('dynVal2'); const s2 = document.getElementById('dynSub2');
    const v3 = document.getElementById('dynVal3'); const s3 = document.getElementById('dynSub3');
    const v4 = document.getElementById('dynVal4'); const s4 = document.getElementById('dynSub4');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Animacja przełącznika
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const targetMode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', targetMode);

            // Aktualizacja treści i klas kontenera SVG/Dashboardu
            if (targetMode === 'pro') {
                dashboard.className = 'rk-dashboard mode-pro';
                
                v1.textContent = "Zoptymalizowane"; v1.style.color = "var(--rk-intro-green)";
                s1.textContent = "Idealnie dobrana moc PC";
                
                v2.textContent = "Pełny komfort cieplny"; v2.style.color = "var(--rk-intro-green)";
                s2.textContent = "Rozstaw obliczony matematycznie";
                
                v3.textContent = "Minimalne (Wysokie COP)"; v3.style.color = "var(--rk-intro-green)";
                s3.textContent = "Stabilna praca inwertera";
                
                v4.textContent = "100% Gwarancji"; v4.style.color = "var(--rk-intro-green)";
                s4.textContent = "Instalacja oparta na fizyce";

            } else {
                dashboard.className = 'rk-dashboard mode-amateur';
                
                v1.textContent = "Drastycznie zawyżone"; v1.style.color = "var(--rk-intro-dark)";
                s1.textContent = "Przewymiarowana pompa ciepła";
                
                v2.textContent = "Niedogrzanie budynku"; v2.style.color = "var(--rk-intro-dark)";
                s2.textContent = "Zbyt rzadki rozstaw rur";
                
                v3.textContent = "Wysokie (Taktowanie)"; v3.style.color = "var(--rk-intro-dark)";
                s3.textContent = "Sprężarka pracuje skokowo";
                
                v4.textContent = "Loteria wykonawcza"; v4.style.color = "var(--rk-intro-dark)";
                s4.textContent = "Brak twardych danych";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-tsim-dark: #0f172a;
    --rk-tsim-panel: #1e293b;
    --rk-tsim-blue: #0284c7;
    --rk-tsim-blue-light: #38bdf8;
    --rk-tsim-frost: #bae6fd;
    --rk-tsim-red: #ef4444;
    --rk-tsim-orange: #f97316;
    --rk-tsim-green: #10b981;
    --rk-tsim-bg: #ffffff;
    --rk-tsim-border: #e2e8f0;
}

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

/* Sekcja Nagłówkowa */
.rk-tsim-header {
    background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
    padding: 45px 50px 35px;
    color: #f8fafc;
    position: relative;
    border-bottom: 4px solid var(--rk-tsim-blue);
}

.rk-tsim-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(56, 189, 248, 0.15);
    color: var(--rk-tsim-blue-light);
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.3);
}

.rk-tsim-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-tsim-header h2 span { color: var(--rk-tsim-red); }

.rk-tsim-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-tsim-lead strong {
    color: #ffffff;
    background: rgba(2, 132, 199, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

/* Interaktywny Obszar z Suwakiem */
.rk-tsim-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

/* Wybór systemu (Radio Tabs) */
.rk-tsim-tabs {
    display: flex;
    background: #e2e8f0;
    border-radius: 12px;
    padding: 6px;
    margin-bottom: 30px;
    position: relative;
}

.rk-tsim-tab {
    flex: 1;
    text-align: center;
    padding: 14px 10px;
    font-size: 14px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.3s;
    z-index: 2;
}

.rk-tsim-tab.active {
    color: #ffffff;
}

.rk-tsim-tab-glider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    width: calc(50% - 6px);
    background: var(--rk-tsim-red);
    border-radius: 8px;
    transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1), background 0.4s;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
    z-index: 1;
}

.rk-tsim-tabs[data-active="pro"] .rk-tsim-tab-glider {
    transform: translateX(100%);
    background: var(--rk-tsim-green);
}

/* Panel Kontrolny - Suwak Mrozu */
.rk-tsim-control-box {
    background: #ffffff;
    border: 1px solid var(--rk-tsim-border);
    border-radius: 20px;
    padding: 30px;
    margin-bottom: 30px;
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.03);
    text-align: center;
}

.rk-tsim-temp-display {
    font-size: 42px;
    font-weight: 900;
    color: var(--rk-tsim-dark);
    font-variant-numeric: tabular-nums;
    margin-bottom: 15px;
    transition: color 0.3s;
}

.rk-tsim-slider-wrapper {
    position: relative;
    padding: 20px 0;
}

input[type=range].rk-tsim-slider {
    -webkit-appearance: none;
    width: 100%;
    background: transparent;
    cursor: pointer;
}

input[type=range].rk-tsim-slider:focus { outline: none; }

/* Track */
input[type=range].rk-tsim-slider::-webkit-slider-runnable-track {
    width: 100%;
    height: 12px;
    background: linear-gradient(to right, #0284c7 0%, #38bdf8 30%, #e2e8f0 50%, #f97316 100%);
    border-radius: 99px;
    border: 1px solid #cbd5e1;
}

/* Thumb */
input[type=range].rk-tsim-slider::-webkit-slider-thumb {
    height: 32px;
    width: 32px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-tsim-dark);
    -webkit-appearance: none;
    margin-top: -11px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.2);
    transition: transform 0.1s;
}
input[type=range].rk-tsim-slider::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Dashboard z wynikami */
.rk-tsim-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    align-items: stretch;
}

.rk-tsim-svg-panel {
    background: var(--rk-tsim-panel);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.rk-tsim-svg { width: 100%; max-width: 150px; height: auto; }

/* Animacje SVG zależne od suwaka i trybu */
.anim-floor { transition: fill 0.5s; }
.anim-snow { opacity: 0; transition: opacity 0.5s; }
.anim-pump { transition: transform 0.3s, fill 0.3s; }
.anim-error { opacity: 0; transform: scale(0); transition: all 0.3s; }

/* Dynamika nadawana przez JS klasami */
.env-cold .anim-snow { opacity: 1; animation: fallSnow 2s linear infinite; }
@keyframes fallSnow { 0% { transform: translateY(-10px); } 100% { transform: translateY(20px); opacity: 0; } }

.sys-fail .anim-floor { fill: #64748b !important; }
.sys-fail .anim-pump { fill: var(--rk-tsim-red); animation: shakePump 0.15s infinite; }
.sys-fail .anim-error { opacity: 1; transform: scale(1); }

.sys-ok .anim-floor { fill: var(--rk-tsim-orange); }
.sys-ok .anim-pump { fill: var(--rk-tsim-green); animation: pulsePump 2s infinite alternate; }

@keyframes shakePump { 0% { transform: translateX(-2px); } 100% { transform: translateX(2px); } }
@keyframes pulsePump { 0% { filter: drop-shadow(0 0 2px #10b981); } 100% { filter: drop-shadow(0 0 10px #10b981); } }

/* Parametry textowe */
.rk-tsim-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tsim-stat-box {
    background: #ffffff;
    border: 1px solid var(--rk-tsim-border);
    padding: 20px;
    border-radius: 14px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    transition: all 0.3s;
}

.rk-stat-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 8px;
}

.rk-stat-value {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-tsim-dark);
}

.val-danger { color: var(--rk-tsim-red) !important; }
.val-success { color: var(--rk-tsim-green) !important; }
.val-cold { color: var(--rk-tsim-blue) !important; }

@media (max-width: 768px) {
    .rk-tsim-header, .rk-tsim-interactive { padding: 30px 20px; }
    .rk-tsim-title { font-size: 24px; }
    .rk-tsim-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-tsim-stats { grid-template-columns: 1fr; }
    .rk-tsim-svg-panel { padding: 40px 20px; }
    .rk-tsim-temp-display { font-size: 36px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Koszty metody \"na oko\" w nowoczesnym budownictwie",
    "description": "Budowa domu jednorodzinnego lub modernizacja starego obiektu to proces pełen kosztownych pułapek. Zobacz, jak brak OZC niszczy pompę ciepła i domowy budżet.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-mrozy",
    "name": "Parametry Pracy Pomp Ciepła podczas Ekstremalnych Mrozów",
    "description": "Zestawienie spadku temperatury wewnętrznej i ryzyka taktowania sprężarki w funkcji temperatury zewnętrznej dla układów przewymiarowanych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "taktowanie pompy ciepła awaria",
      "przewymiarowana pompa ciepła mrozy",
      "niedogrzane pomieszczenia ogrzewanie podłogowe",
      "ucieczka watów straty ciepła",
      "przelicznik 50 W/m2 błędy"
    ],
    "measurementTechnique": "Symulacja wydajności instalacji przy spadku temperatury zewnętrznej od +10°C do -22°C.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Metoda 'na oko': Przy -15°C i poniżej ujawniają się mostki termiczne, podłoga nie przekazuje ciepła, temperatura wewnątrz spada do 16°C.",
        "Projekt OZC: Precyzyjny dobór pętli kompensuje miejscowe straty ciepła, utrzymując stałe 20°C bez nadwyrężania kompresora."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-mrozy",
    "name": "Symulator Ekstremalnych Mrozów",
    "description": "Narzędzie interaktywne pozwalające użytkownikowi symulować spadek temperatury zewnętrznej i obserwować zjawisko taktowania pompy ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 Range Input and JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tsim-container" id="rk-tsim-app">
    
    <div class="rk-tsim-header">
        <div class="rk-tsim-badge">
            <svg width="14" height="14" 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>
            Krytyczny Błąd Inwestycyjny
        </div>
        <h2>Koszty metody &#8222;na oko&#8221; <span>a zima stulecia</span></h2>
        <p class="rk-tsim-lead">
            Budowa domu jednorodzinnego lub modernizacja starego obiektu to proces pełen kosztownych pułapek, w którym intuicja i potoczne metody „na oko” (np. przelicznik <strong>50 W/m²</strong>) nieuchronnie prowadzą do katastrofy finansowej i technologicznej.
            <br><br>
            Inwestorzy masowo zmagają się z problemem niedogrzanych pomieszczeń w okresie strefowych mrozów sięgających <strong>-22°C</strong>, bądź stają przed faktem drastycznego przewymiarowania pomp ciepła. Urządzenia te, wchodząc w tzw. taktowanie (zbyt częste cykle pracy sprężarki), ulegają awarii po zaledwie 3–4 latach eksploatacji, generując przy tym gigantyczne rachunki za energię elektryczną. Brak precyzyjnej wiedzy o tym, ile watów energii ucieka przez konkretną ścianę, strop, okno czy system wentylacji, paraliżuje jakikolwiek proces decyzyjny i skazuje instalację płaszczyznową na losową i nieefektywną pracę.
        </p>
    </div>

    <div class="rk-tsim-interactive">
        
        <div class="rk-tsim-tabs" id="tsimTabs" data-active="amateur">
            <div class="rk-tsim-tab-glider" id="tsimGlider"></div>
            <div class="rk-tsim-tab active" data-type="amateur">Przelicznik &#8222;Na oko&#8221;</div>
            <div class="rk-tsim-tab" data-type="pro">Precyzyjne OZC</div>
        </div>

        <div class="rk-tsim-control-box">
            <h3 style="margin:0 0 10px 0; font-size:14px; color:#64748b; text-transform:uppercase; letter-spacing:1px;">Temperatura Zewnętrzna</h3>
            <div class="rk-tsim-temp-display" id="tsimTempDisplay">0°C</div>
            <div class="rk-tsim-slider-wrapper">
                <input type="range" min="-22" max="10" value="0" class="rk-tsim-slider" id="tsimSlider">
            </div>
            <p style="margin:10px 0 0 0; font-size:13px; color:#94a3b8;">Przesuń suwak w lewo, aby symulować mróz.</p>
        </div>

        <div class="rk-tsim-dashboard">
            
            <div class="rk-tsim-svg-panel" id="tsimSvgPanel">
                <svg class="rk-tsim-svg" viewBox="0 0 100 100">
                    <circle class="anim-snow" cx="20" cy="10" r="1.5" fill="#ffffff" />
                    <circle class="anim-snow" cx="50" cy="5" r="2" fill="#ffffff" style="animation-delay: 0.5s;" />
                    <circle class="anim-snow" cx="80" cy="15" r="1.5" fill="#ffffff" style="animation-delay: 1s;" />
                    
                    <path d="M 10 50 L 50 15 L 90 50 L 90 90 L 10 90 Z" fill="#334155" stroke="#475569" stroke-width="2"/>
                    <path class="anim-floor" d="M 15 80 L 85 80 L 85 85 L 15 85 Z" fill="#f97316" />
                    
                    <rect class="anim-pump" x="65" y="65" width="25" height="25" rx="3" fill="#10b981" />
                    <circle cx="77.5" cy="77.5" r="7" fill="#1e293b" opacity="0.5"/>
                    
                    <path class="anim-error" d="M 65 55 L 75 40 L 85 55 Z" fill="#ef4444" />
                    <text class="anim-error" x="73" y="52" fill="#ffffff" font-size="10" font-weight="bold">!</text>
                </svg>
            </div>

            <div class="rk-tsim-stats">
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Temperatura wewnątrz</span>
                    <span class="rk-stat-value" id="valInsideTemp">20°C (Komfort)</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Stan Sprężarki (Pompa)</span>
                    <span class="rk-stat-value" id="valCompressor">Stabilna praca</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Koszty energii</span>
                    <span class="rk-stat-value" id="valEnergy">W normie</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Wydajność ogrzewania</span>
                    <span class="rk-stat-value" id="valStatus">Poprawna</span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w strukturze błędu)
    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-tsim-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy DOM
    const slider = document.getElementById('tsimSlider');
    const tempDisplay = document.getElementById('tsimTempDisplay');
    const tabs = document.querySelectorAll('.rk-tsim-tab');
    const tabsContainer = document.getElementById('tsimTabs');
    const svgPanel = document.getElementById('tsimSvgPanel');
    
    // Pola tekstowe
    const valInsideTemp = document.getElementById('valInsideTemp');
    const valCompressor = document.getElementById('valCompressor');
    const valEnergy = document.getElementById('valEnergy');
    const valStatus = document.getElementById('valStatus');

    let currentMode = 'amateur';

    // 3. Obsługa zakładek (Tryb Systemu)
    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            tabs.forEach(t => t.classList.remove('active'));
            tab.classList.add('active');
            currentMode = tab.getAttribute('data-type');
            tabsContainer.setAttribute('data-active', currentMode);
            updateSimulation();
        });
    });

    // 4. Obsługa Suwaka
    slider.addEventListener('input', updateSimulation);

    // 5. Silnik Symulacji
    function updateSimulation() {
        const outTemp = parseInt(slider.value);
        
        // Zmiana sposobu budowania stringów, aby uniknąć błędów parsera z backtickami w niektórych edytorach
        tempDisplay.textContent = outTemp > 0 ? "+" + outTemp + "°C" : outTemp + "°C";
        
        if (outTemp <= -10) {
            tempDisplay.style.color = 'var(--rk-tsim-blue)';
            svgPanel.classList.add('env-cold');
        } else {
            tempDisplay.style.color = 'var(--rk-tsim-dark)';
            svgPanel.classList.remove('env-cold');
        }

        // Reset klas SVG
        svgPanel.classList.remove('sys-ok', 'sys-fail');

        if (currentMode === 'pro') {
            // TRYB: Projekt OZC
            svgPanel.classList.add('sys-ok');
            
            valInsideTemp.textContent = '20°C (Stała)';
            valInsideTemp.className = 'rk-stat-value val-success';
            
            valCompressor.textContent = 'Ciągła, inwerterowa';
            valCompressor.className = 'rk-stat-value val-success';
            
            valEnergy.textContent = 'Zoptymalizowane';
            valEnergy.className = 'rk-stat-value';

            if (outTemp <= -15) {
                valStatus.textContent = 'Kompensacja strat idealna';
            } else {
                valStatus.textContent = 'Wysokie COP pompy';
            }
            valStatus.className = 'rk-stat-value val-success';

        } else {
            // TRYB: Amator "Na Oko"
            if (outTemp > 0) {
                // Ciepło - urządzenie przewymiarowane taktuje, ale grzeje
                svgPanel.classList.add('sys-fail');
                valInsideTemp.textContent = '22°C (Przegrzewanie)';
                valInsideTemp.className = 'rk-stat-value val-danger';
                
                valCompressor.textContent = 'Częste taktowanie!';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = '+30% (Rozruchy)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Bezwładność układu';
                valStatus.className = 'rk-stat-value';
                
            } else if (outTemp > -10) {
                // Lekki mróz - zaczynają się problemy
                svgPanel.classList.add('sys-fail');
                valInsideTemp.textContent = '19°C (Niestabilna)';
                valInsideTemp.className = 'rk-stat-value';
                
                valCompressor.textContent = 'Agresywne taktowanie';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = '+40% (Wysoki prąd)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Zaburzone przepływy';
                valStatus.className = 'rk-stat-value val-danger';

            } else {
                // Silny mróz - katastrofa, podłoga nie daje rady, pompa wchodzi w tryb awaryjny lub grzałki
                svgPanel.classList.add('sys-fail');
                const dropTemp = 19 + Math.floor(outTemp / 5); // Spadek temp
                
                // Zwykła konkatenacja unikająca backticków
                valInsideTemp.textContent = dropTemp + "°C (Niedogrzanie)";
                valInsideTemp.className = 'rk-stat-value val-cold';
                
                valCompressor.textContent = 'Ryzyko uszkodzenia!';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = 'Ogromne (Praca grzałek)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Brak mocy przekazu';
                valStatus.className = 'rk-stat-value val-danger';
            }
        }
    }

    // Inicjalizacja startowa
    updateSimulation();
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-core-dark: #0f172a;
    --rk-core-brand: #0284c7;
    --rk-core-accent: #0ea5e9;
    --rk-core-bg: #ffffff;
    --rk-core-panel: #f8fafc;
    --rk-core-border: #cbd5e1;
    --rk-core-text: #334155;
    --rk-core-green: #059669;
    --rk-core-green-bg: #ecfdf5;
    --rk-core-amber: #d97706;
    --rk-core-amber-bg: #fffbeb;
}

.rk-core-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-core-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.12);
    border: 1px solid var(--rk-core-brand);
    overflow: hidden;
}

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

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

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

.rk-core-header h2 span { color: #38bdf8; }

.rk-core-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-core-lead strong {
    color: #ffffff;
    font-weight: 800;
}

.rk-core-lead a {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: color 0.3s;
}

.rk-core-lead a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Inżynierski Panel Kontrolny (Dashboard) */
.rk-core-dashboard {
    padding: 40px 50px;
    background: var(--rk-core-panel);
}

/* Nawigacja po komponentach OZC (3 twarde filary) */
.rk-core-nav {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-bottom: 35px;
}

.rk-core-nav-btn {
    background: #ffffff;
    border: 2px solid var(--rk-core-border);
    padding: 16px 20px;
    border-radius: 14px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.03);
}

.rk-core-nav-btn:hover {
    background: #f1f5f9;
    border-color: #94a3b8;
    transform: translateY(-2px);
}

.rk-core-nav-btn.active {
    border-color: var(--rk-core-brand);
    background: var(--rk-core-brand);
}

.rk-nav-icon {
    width: 24px;
    height: 24px;
    color: var(--rk-core-brand);
    transition: color 0.3s;
}

.rk-core-nav-btn.active .rk-nav-icon {
    color: #ffffff;
}

.rk-nav-title {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-core-dark);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: color 0.3s;
}

.rk-core-nav-btn.active .rk-nav-title {
    color: #ffffff;
}

/* Główna Karta Prezentacji Danych */
.rk-core-display-card {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-core-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 40px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
}

/* Kontener Wizualizacji Sztywnych Układów SVG */
.rk-core-svg-stage {
    background: var(--rk-core-dark);
    border-radius: 16px;
    padding: 25px;
    height: 220px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
    position: relative;
    overflow: hidden;
}

.rk-dashboard-svg {
    width: 100%;
    height: 100%;
    display: block;
}

/* Ukrywanie/Pokazywanie warstw SVG za pomocą CSS */
.svg-layer { opacity: 0; transition: opacity 0.4s ease-in-out; }
.rk-core-container[data-view="fabric"] .layer-fabric { opacity: 1; }
.rk-core-container[data-view="ventilation"] .layer-ventilation { opacity: 1; }
.rk-core-container[data-view="bivalent"] .layer-bivalent { opacity: 1; }

/* Animacje wektorowe kontrolowane stanem rodzica */
.anim-flow-lines { stroke-dasharray: 8 16; stroke-dashoffset: 0; }
.rk-core-container[data-view="ventilation"] .anim-flow-lines { animation: airFlow 2s linear infinite; }

.anim-balance-beam { transform-origin: 50px 55px; transition: transform 0.6s ease-in-out; }
.rk-core-container[data-view="bivalent"] .anim-balance-beam { transform: rotate(-8deg); }

@keyframes airFlow { to { stroke-dashoffset: -24; } }

/* Treść merytoryczna wewnątrz karty */
.rk-core-info-block h3 {
    margin: 0 0 12px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-core-dark);
}

.rk-core-info-block p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.65;
    color: #475569;
}

/* Siatka parametrów pod tekstem */
.rk-core-metrics-panel {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-core-metric-box {
    background: #f1f5f9;
    padding: 15px;
    border-radius: 12px;
    border-left: 4px solid var(--rk-core-brand);
}

.rk-metric-label {
    display: block;
    font-size: 11px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 4px;
}

.rk-metric-value {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-core-dark);
}

@media (max-width: 768px) {
    .rk-core-header, .rk-core-dashboard { padding: 35px 25px; }
    .rk-core-header h2 { font-size: 24px; }
    .rk-core-nav { grid-template-columns: 1fr; gap: 10px; }
    .rk-core-display-card { grid-template-columns: 1fr; gap: 25px; padding: 25px; }
    .rk-core-svg-stage { height: 180px; max-width: 240px; margin: 0 auto; width: 100%; }
    .rk-core-metrics-panel { grid-template-columns: 1fr; gap: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-definicja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Czym dokładnie jest Projektowe Obciążenie Cieplne (OZC) budynku?",
    "description": "Zrozumienie wartości OZC (kW) wg normy PN-EN 12831-1. Dowiedz się, jak bilans przegród, wentylacji oraz wyznaczenie punktu biwalentnego eliminuje zgadywanie.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-definicja",
    "name": "Struktura składowych bilansu energetycznego budynku szczytowego",
    "description": "Zestawienie twardych danych inżynierskich określających udziały strat przez przenikanie oraz wentylację w warunkach normatywnych WT 2021.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne budynku",
      "norma PN-EN 12831-1",
      "punkt biwalentny pompy ciepła",
      "standard energetyczny WT 2021",
      "koszt obliczeń OZC"
    ],
    "measurementTechnique": "Kalkulacja strat szczytowych na podstawie fizyki budowli i oporów cieplnych przegród budowlanych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Przenikanie ciepła: Straty energii przez ściany, okna i strop przy skrajnej temperaturze projektowej.",
        "Wentylacja: Zapotrzebowanie na dogrzanie powietrza zewnętrznego z uwzględnieniem sprawności rekuperatora.",
        "Punkt biwalentny: Temperatura graniczna, przy której źródło ciepła wymaga aktywacji wspomagania elektrycznego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-definicja",
    "name": "Interaktywny Analizator Składowych OZC",
    "description": "Inżynierski interfejs do wizualizacji struktury strat ciepła przez przegrody budowlane, procesy wentylacyjne oraz do wyznaczania punktu biwalentnego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG capable browser",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-core-container" id="rk-ozc-def-app" data-view="fabric">
    
    <div class="rk-core-header">
        <div class="rk-core-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" y1="22" x2="4" y2="15"></line></svg>
            Analiza Inżynierska
        </div>
        <h2>Czym dokładnie jest Projektowe Obciążenie Cieplne (OZC) budynku?</h2>
        <p class="rk-core-lead">
            <strong>Projektowe Obciążenie Cieplne (OZC)</strong> to obliczeniowa wartość strat energii wyrażona w kilowatach [kW], wyznaczana dla skrajnych warunków zimowych danej strefy klimatycznej zgodnie z normą <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">PN-EN 12831-1</a>. Wartość ta określa zapotrzebowanie na moc szczytową źródła ciepła i jest sumą strat przez przegrody oraz wentylację. Stanowi ona podstawę do doboru urządzeń grzewczych, eliminując błędy szacunkowe, które generują niepotrzebne koszty inwestycyjne.
        </p>
    </div>

    <div class="rk-core-dashboard">
        
        <div class="rk-core-nav">
            <button class="rk-core-nav-btn active" data-target="fabric">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" fill="none"/><line x1="9" y1="3" x2="9" y2="21"/><line x1="15" y1="3" x2="15" y2="21"/></svg>
                <span class="rk-nav-title">1. Przenikanie</span>
            </button>
            <button class="rk-core-nav-btn" data-target="ventilation">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m12.41 11.41A2 2 0 1 1 13 16h9m-1.59-7.41A2 2 0 1 0 19 12h3"/></svg>
                <span class="rk-nav-title">2. Wentylacja</span>
            </button>
            <button class="rk-core-nav-btn" data-target="bivalent">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="19" y1="5" x2="5" y2="19"/><circle cx="6.5" cy="6.5" r="2.5"/><circle cx="17.5" cy="17.5" r="2.5"/></svg>
                <span class="rk-nav-title">3. Punkt Biwalentny</span>
            </button>
        </div>

        <div class="rk-core-display-card">
            
            <div class="rk-core-svg-stage">
                <svg class="rk-dashboard-svg" viewBox="0 0 100 100">
                    
                    <g class="svg-layer layer-fabric">
                        <rect x="15" y="20" width="20" height="60" fill="#475569" />
                        <rect x="35" y="20" width="15" height="60" fill="#0284c7" opacity="0.6" />
                        <rect x="50" y="20" width="5" height="60" fill="#cbd5e1" />
                        <path d="M 10 50 L 65 50" fill="none" stroke="#ef4444" stroke-width="3" stroke-dasharray="4 4" />
                        <polyline points="60 45 65 50 60 55" fill="none" stroke="#ef4444" stroke-width="3" />
                        <text x="60" y="35" fill="#ffffff" font-size="8" font-family="sans-serif">WT 2021</text>
                    </g>
                    
                    <g class="svg-layer layer-ventilation">
                        <rect x="30" y="30" width="40" height="40" rx="6" fill="#1e293b" stroke="#64748b" stroke-width="2"/>
                        <path class="anim-flow-lines" d="M 10 40 L 90 40" fill="none" stroke="#38bdf8" stroke-width="3" />
                        <path class="anim-flow-lines" d="M 90 60 L 10 60" fill="none" stroke="#f97316" stroke-width="3" />
                    </g>
                    
                    <g class="svg-layer layer-bivalent">
                        <path d="M 20 85 L 80 85 M 50 85 L 50 55" fill="none" stroke="#64748b" stroke-width="3" />
                        <g class="anim-balance-beam">
                            <line x1="20" y1="55" x2="80" y2="55" stroke="#ffffff" stroke-width="4" stroke-linecap="round" />
                            <rect x="22" y="35" width="16" height="18" fill="#10b981" rx="2" />
                            <rect x="62" y="38" width="16" height="15" fill="#ef4444" rx="2" />
                        </g>
                    </g>
                    
                </svg>
            </div>

            <div class="rk-core-info-block">
                <h3 id="coreDisplayTitle">Straty ciepła przez przegrody</h3>
                <p id="coreDisplayDesc">
                    W praktyce inżynierskiej dokument OZC eliminuje zgadywanie. Budynki wznoszone w standardzie WT 2021 charakteryzują się wysoką szczelnością oraz niskimi współczynnikami przenikania ciepła przegród, co sprawia, że ich realne zapotrzebowanie na energię drastycznie różni się od obiektów budowanych jeszcze dekadę temu.
                </p>
                
                <div class="rk-core-metrics-panel">
                    <div class="rk-core-metric-box">
                        <span class="rk-metric-label" id="coreLabel1">Koszt opracowania OZC</span>
                        <span class="rk-metric-value" id="coreValue1">450 &ndash; 900 PLN</span>
                    </div>
                    <div class="rk-core-metric-box">
                        <span class="rk-metric-label" id="coreLabel2">Oszczędność inwestycyjna</span>
                        <span class="rk-metric-value" id="coreValue2">Do kilkunastu tysięcy PLN</span>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez użycia tagów H2/H3 w strukturze alertu)
    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-ozc-def-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:18px; text-transform:uppercase; margin-bottom:10px;">Błąd Licencji</div><div style="font-size:14px; color:#cbd5e1;">Opracowanie struktury oraz mechanika JSON-LD są własnością serwisu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy sterujące i baza danych
    const container = document.getElementById('rk-ozc-def-app');
    const navBtns = container.querySelectorAll('.rk-core-nav-btn');
    
    const titleDOM = document.getElementById('coreDisplayTitle');
    const descDOM = document.getElementById('coreDisplayDesc');
    const lbl1DOM = document.getElementById('coreLabel1');
    const val1DOM = document.getElementById('coreValue1');
    const lbl2DOM = document.getElementById('coreLabel2');
    const val2DOM = document.getElementById('coreValue2');

    // Czyste bazy tekstowe (bez backticków dla uniknięcia błędów parsowania w WP)
    const contentData = {
        fabric: {
            title: "Przenikanie przez przegrody (WT 2021)",
            desc: "W praktyce inżynierskiej dokument OZC eliminuje zgadywanie. Budynki wznoszone w standardzie WT 2021 charakteryzują się wysoką szczelnością oraz niskimi współczynnikami przenikania ciepła przegród strukturalnych, co sprawia, że ich realne zapotrzebowanie na energię drastycznie różni się od starych obiektów.",
            lbl1: "Koszt opracowania OZC",
            val1: "450 - 900 PLN",
            lbl2: "Oszczędność inwestycyjna",
            val2: "Zabezpieczenie przed przewymiarowaniem"
        },
        ventilation: {
            title: "Projektowe straty wentylacyjne",
            desc: "OZC precyzyjnie sumuje straty energii potrzebnej do ogrzania powietrza zewnętrznego. Uwzględnienie w obliczeniach inżynierskich systemu z odzyskiem ciepła pozwala na obniżenie strat wentylacyjnych o ponad 80%, drastycznie wpływając na ostateczny wynik zapotrzebowania budynku.",
            lbl1: "Wymóg normatywny",
            val1: "PN-EN 12831-1",
            lbl2: "Wpływ na rekuperację",
            val2: "Redukcja szczytowych strat wentylacji"
        },
        bivalent: {
            title: "Wyznaczenie punktu biwalentnego",
            desc: "Projektowe Obciążenie Cieplne pozwala precyzyjnie określić tzw. punkt biwalentny dla pompy ciepła – czyli temperaturę zewnętrzną (np. -7°C), przy której sprężarka wymaga wsparcia przez grzałki elektryczne. Chroni to inwestora przed zakupem drogiego źródła o zawyżonej mocy nominalnej.",
            lbl1: "Przykładowy punkt",
            val1: "-7°C (Granica grzałek)",
            lbl2: "Efekt hydrauliczny",
            val2: "Stabilna praca bez taktowania"
        }
    };

    // 3. Obsługa zdarzeń kliknięcia
    navBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            navBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const view = this.getAttribute('data-target');
            container.setAttribute('data-view', view);

            // Podmiana danych merytorycznych
            titleDOM.textContent = contentData[view].title;
            descDOM.textContent = contentData[view].desc;
            lbl1DOM.textContent = contentData[view].lbl1;
            val1DOM.textContent = contentData[view].val1;
            lbl2DOM.textContent = contentData[view].lbl2;
            val2DOM.textContent = contentData[view].val2;
        });
    });
});
</script>



<style>
:root {
    --rk-norm-dark: #0f172a;
    --rk-norm-brand: #4338ca; /* Eleganckie indygo dla prawa i norm */
    --rk-norm-brand-light: #e0e7ff;
    --rk-norm-accent: #0ea5e9;
    --rk-norm-green: #10b981;
    --rk-norm-green-light: #ecfdf5;
    --rk-norm-red: #ef4444;
    --rk-norm-bg: #ffffff;
    --rk-norm-panel: #f8fafc;
    --rk-norm-border: #cbd5e1;
    --rk-norm-text: #334155;
    --rk-norm-muted: #64748b;
}

.rk-norm-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-norm-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(67, 56, 202, 0.15);
    border: 1px solid rgba(67, 56, 202, 0.2);
    overflow: hidden;
}

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

.rk-norm-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(67, 56, 202, 0.4);
    color: #a5b4fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(165, 180, 252, 0.2);
}

.rk-norm-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

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

.rk-norm-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-norm-lead strong {
    color: #ffffff;
    background: rgba(67, 56, 202, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

.rk-link-norm {
    color: #a5b4fc;
    text-decoration: none;
    border-bottom: 1px dashed #a5b4fc;
    transition: all 0.3s;
}

.rk-link-norm:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Przestrzeń interaktywna */
.rk-norm-interactive {
    padding: 45px 50px;
    background: var(--rk-norm-panel);
}

/* System Zakładek (Pill Menu) */
.rk-norm-tabs {
    display: flex;
    background: #e2e8f0;
    border-radius: 16px;
    padding: 6px;
    margin-bottom: 35px;
    position: relative;
    box-shadow: inset 0 2px 5px rgba(0,0,0,0.05);
}

.rk-norm-tab {
    flex: 1;
    text-align: center;
    padding: 14px 10px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-norm-muted);
    cursor: pointer;
    border-radius: 12px;
    transition: all 0.3s ease;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.rk-norm-tab.active { color: #ffffff; }

.rk-norm-tab-glider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    width: calc(33.333% - 4px);
    background: var(--rk-norm-brand);
    border-radius: 12px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
    box-shadow: 0 4px 10px -2px rgba(67, 56, 202, 0.3);
    z-index: 1;
}

.rk-norm-tabs[data-active="zones"] .rk-norm-tab-glider { transform: translateX(0%); background: var(--rk-norm-accent); }
.rk-norm-tabs[data-active="temps"] .rk-norm-tab-glider { transform: translateX(100%); background: #f59e0b; }
.rk-norm-tabs[data-active="law"] .rk-norm-tab-glider { transform: translateX(200%); background: var(--rk-norm-brand); }

/* Główny Dashboard Prezentacji */
.rk-norm-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-norm-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 35px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
    transition: border-color 0.4s;
}

.rk-norm-dashboard[data-state="zones"] { border-color: rgba(14, 165, 233, 0.3); }
.rk-norm-dashboard[data-state="temps"] { border-color: rgba(245, 158, 11, 0.3); }
.rk-norm-dashboard[data-state="law"] { border-color: rgba(67, 56, 202, 0.3); }

/* Kontener SVG */
.rk-norm-svg-box {
    background: var(--rk-norm-dark);
    border-radius: 16px;
    padding: 20px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    position: relative;
    overflow: hidden;
}

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s, transform 0.4s; transform: scale(0.95); width: 100%; height: 100%; }
.rk-norm-dashboard[data-state="zones"] .layer-zones { opacity: 1; transform: scale(1); }
.rk-norm-dashboard[data-state="temps"] .layer-temps { opacity: 1; transform: scale(1); }
.rk-norm-dashboard[data-state="law"] .layer-law { opacity: 1; transform: scale(1); }

/* Animacje specyficzne dla warstw */
.anim-thermo-drop { transform-origin: bottom; animation: dropTemp 2.5s infinite alternate ease-in-out; }
.anim-snowflake { animation: spinSnow 4s infinite linear; transform-origin: 50px 30px; }
.anim-heat-wave { stroke-dasharray: 8 8; animation: riseHeat 1.5s infinite linear; }
.anim-shield-pulse { animation: pulseShieldNorm 2s infinite alternate; }

@keyframes dropTemp { 0% { transform: scaleY(1); fill: #38bdf8; } 100% { transform: scaleY(0.4); fill: #1e3a8a; } }
@keyframes spinSnow { to { transform: rotate(360deg); } }
@keyframes riseHeat { to { stroke-dashoffset: -16; } }
@keyframes pulseShieldNorm { 0% { filter: drop-shadow(0 0 0 rgba(99, 102, 241, 0)); } 100% { filter: drop-shadow(0 0 12px rgba(99, 102, 241, 0.6)); } }

/* Treść Panelu */
.rk-norm-content h3 {
    margin: 0 0 12px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-norm-dark);
}

.rk-norm-content p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

/* Kafelki z danymi */
.rk-norm-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-norm-tile {
    background: var(--rk-norm-panel);
    padding: 15px;
    border-radius: 12px;
    border-left: 4px solid transparent;
    transition: all 0.3s;
}

.rk-norm-dashboard[data-state="zones"] .rk-norm-tile { border-left-color: var(--rk-norm-accent); }
.rk-norm-dashboard[data-state="temps"] .rk-norm-tile { border-left-color: #f59e0b; }
.rk-norm-dashboard[data-state="law"] .rk-norm-tile { border-left-color: var(--rk-norm-brand); }

.rk-tile-lbl { display: block; font-size: 11px; text-transform: uppercase; font-weight: 800; color: var(--rk-norm-muted); margin-bottom: 4px; }
.rk-tile-val { display: block; font-size: 16px; font-weight: 900; color: var(--rk-norm-dark); }

@media (max-width: 768px) {
    .rk-norm-header, .rk-norm-interactive { padding: 35px 20px; }
    .rk-norm-title { font-size: 24px; }
    .rk-norm-tabs { flex-direction: column; }
    .rk-norm-tab-glider { width: 100%; height: calc(33.333% - 4px); top: 6px; left: 6px; }
    .rk-norm-tabs[data-active="zones"] .rk-norm-tab-glider { transform: translateY(0%); }
    .rk-norm-tabs[data-active="temps"] .rk-norm-tab-glider { transform: translateY(100%); }
    .rk-norm-tabs[data-active="law"] .rk-norm-tab-glider { transform: translateY(200%); }
    
    .rk-norm-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 25px; text-align: center; }
    .rk-norm-svg-box { max-width: 200px; margin: 0 auto; height: 160px; }
    .rk-norm-tiles { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#article-prawo",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/"
    },
    "headline": "Jakie normy i przepisy prawne regulują obliczenia OZC w Polsce?",
    "description": "Zrozum regulacje prawne OZC: norma PN-EN 12831-1:2017-08, 5 stref klimatycznych Polski, temperatury wewnętrzne oraz wymogi dotacji Czyste Powietrze.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#dataset-prawo",
    "name": "Zestawienie parametrów normatywnych wg PN-EN 12831-1:2017-08",
    "description": "Wykaz obligatoryjnych temperatur wewnętrznych oraz zewnętrznych stref klimatycznych wymaganych do sporządzenia legalnego bilansu cieplnego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "norma PN-EN 12831-1:2017-08",
      "obliczenia zapotrzebowania na moc cieplną",
      "5 stref klimatycznych Polska temperatura",
      "charakterystyka energetyczna budynku",
      "dotacje czyste powietrze wymogi OZC"
    ],
    "measurementTechnique": "Kalkulacja zgodności projektu instalacji z § 134 ust. 1 Rozporządzenia MI oraz wytycznymi programów proekologicznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Temperatury Zewnętrzne: Podział Polski na 5 stref od -16°C (I) do -24°C (V).",
        "Temperatury Wewnętrzne: Wymagane projektowe 20°C dla pokojów i 24°C dla łazienek.",
        "Zgodność prawna: Warunek konieczny odbioru budynku i uzyskania dotacji (Moje Ciepło)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#webapp-prawo",
    "name": "Eksplorator Norm i Stref Klimatycznych OZC",
    "description": "Aplikacja interaktywna pozwalająca inwestorom zrozumieć wymogi prawne, strefy klimatyczne i ich wpływ na odbiór instalacji oraz dotacje.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 and JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-norm-container" id="rk-norm-app">
    
    <div class="rk-norm-header">
        <div class="rk-norm-badge">
            <svg width="14" height="14" 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>
            Prawo i Wymogi Budowlane
        </div>
        <h2 class="rk-norm-title">Jakie normy i przepisy prawne regulują obliczenia <span>OZC w Polsce</span>?</h2>
        <p class="rk-norm-lead">
            Obowiązek wykonywania <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/" class="rk-link-norm">obliczeń zapotrzebowania na moc cieplną</a> reguluje <strong>§ 134 ust. 1 Rozporządzenia Ministra Infrastruktury</strong> w sprawie warunków technicznych, jakim powinny odpowiadać budynki. Każdy legalnie budowany lub modernizowany obiekt musi posiadać rzetelną <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" class="rk-link-norm">charakterystykę energetyczną</a> opartą na tych ściśle określonych wyliczeniach.
        </p>
    </div>

    <div class="rk-norm-interactive">
        
        <div class="rk-norm-tabs" id="normTabs" data-active="zones">
            <div class="rk-norm-tab-glider" id="normGlider"></div>
            <div class="rk-norm-tab active" data-target="zones">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                Strefy Klimatyczne
            </div>
            <div class="rk-norm-tab" data-target="temps">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path></svg>
                Temp. Wewnętrzne
            </div>
            <div class="rk-norm-tab" data-target="law">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
                Prawo &#038; Dotacje
            </div>
        </div>

        <div class="rk-norm-dashboard" id="normDashboard" data-state="zones">
            
            <div class="rk-norm-svg-box">
                <svg class="rk-svg-layer layer-zones" viewBox="0 0 100 100">
                    <rect x="40" y="10" width="20" height="60" rx="10" fill="#1e293b" stroke="#38bdf8" stroke-width="2"/>
                    <circle cx="50" cy="80" r="15" fill="#1e293b" stroke="#38bdf8" stroke-width="2"/>
                    <rect class="anim-thermo-drop" x="44" y="15" width="12" height="60" rx="6" fill="#38bdf8"/>
                    <circle cx="50" cy="80" r="10" fill="#38bdf8"/>
                    <g class="anim-snowflake" stroke="#ffffff" stroke-width="2" stroke-linecap="round">
                        <line x1="50" y1="20" x2="50" y2="40"/> <line x1="40" y1="30" x2="60" y2="30"/>
                        <line x1="43" y1="23" x2="57" y2="37"/> <line x1="43" y1="37" x2="57" y2="23"/>
                    </g>
                </svg>

                <svg class="rk-svg-layer layer-temps" viewBox="0 0 100 100">
                    <path d="M 15 50 L 50 20 L 85 50 L 85 85 L 15 85 Z" fill="#1e293b" stroke="#f59e0b" stroke-width="2"/>
                    <rect x="25" y="55" width="20" height="30" fill="#334155"/>
                    <text x="35" y="75" fill="#f59e0b" font-size="12" font-weight="bold" text-anchor="middle">20°C</text>
                    <rect x="55" y="55" width="20" height="30" fill="#334155"/>
                    <text x="65" y="75" fill="#ef4444" font-size="12" font-weight="bold" text-anchor="middle">24°C</text>
                    <path class="anim-heat-wave" d="M 60 45 Q 65 35 60 25" fill="none" stroke="#ef4444" stroke-width="2"/>
                </svg>

                <svg class="rk-svg-layer layer-law" viewBox="0 0 100 100">
                    <path class="anim-shield-pulse" d="M 50 15 L 20 25 L 20 55 C 20 75 45 90 50 95 C 55 90 80 75 80 55 L 80 25 Z" fill="#1e293b" stroke="#4338ca" stroke-width="3"/>
                    <polyline points="35 55 45 65 65 40" fill="none" stroke="#10b981" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
                </svg>
            </div>

            <div class="rk-norm-content">
                <h3 id="dynNormTitle">Temperatury Obliczeniowe</h3>
                <p id="dynNormDesc">
                    Norma precyzuje podział Polski na 5 stref klimatycznych, dla których przypisane są obliczeniowe temperatury zewnętrzne. Od <strong>-16°C</strong> w łagodniejszej strefie I (nadmorskiej) aż do <strong>-24°C</strong> w skrajnej strefie V (górskiej).
                </p>
                <div class="rk-norm-tiles">
                    <div class="rk-norm-tile">
                        <span class="rk-tile-lbl" id="dynNormLbl1">Strefa I (Nadmorska)</span>
                        <span class="rk-tile-val" id="dynNormVal1">-16°C</span>
                    </div>
                    <div class="rk-norm-tile">
                        <span class="rk-tile-lbl" id="dynNormLbl2">Strefa V (Górska)</span>
                        <span class="rk-tile-val" id="dynNormVal2">-24°C</span>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Brak H2/H3 w strukturze błędu)
    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-norm-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy DOM
    const tabsContainer = document.getElementById('normTabs');
    const tabs = document.querySelectorAll('.rk-norm-tab');
    const dashboard = document.getElementById('normDashboard');
    
    // Pola tekstowe do podmiany
    const dynTitle = document.getElementById('dynNormTitle');
    const dynDesc = document.getElementById('dynNormDesc');
    const lbl1 = document.getElementById('dynNormLbl1');
    const val1 = document.getElementById('dynNormVal1');
    const lbl2 = document.getElementById('dynNormLbl2');
    const val2 = document.getElementById('dynNormVal2');

    // Baza danych treści (bezpieczna od backticków)
    const dataContent = {
        zones: {
            title: "5 Stref Klimatycznych",
            desc: "Norma precyzuje podział Polski na 5 stref klimatycznych, dla których przypisane są rygorystyczne obliczeniowe temperatury zewnętrzne. Od -16°C w strefie I (nadmorskiej) do -24°C w strefie V (górskiej).",
            lbl1: "Strefa I (Najcieplejsza)",
            val1: "-16°C",
            lbl2: "Strefa V (Najzimniejsza)",
            val2: "-24°C"
        },
        temps: {
            title: "Temperatury Wewnętrzne",
            desc: "Przepisy ściśle określają wymagane temperatury wewnętrzne dla konkretnych typów pomieszczeń. Wymusza to na projektancie zastosowanie gęstszego rozstawu rur w łazienkach, aby sprostać wyższym wymogom cieplnym.",
            lbl1: "Pokoje, Salon, Kuchnia",
            val1: "20°C",
            lbl2: "Łazienki",
            val2: "24°C"
        },
        law: {
            title: "Odbiór i Dotacje",
            desc: "Oficjalną podstawą prawną jest norma PN-EN 12831-1:2017-08, która narzuca rygorystyczną metodologię. Projektowanie systemów grzewczych bez jej uwzględnienia uniemożliwia uzyskanie odbioru budowlanego oraz pozyskanie dotacji.",
            lbl1: "Obowiązująca Norma",
            val1: "PN-EN 12831-1",
            lbl2: "Programy wsparcia",
            val2: "Czyste Powietrze / Moje Ciepło"
        }
    };

    // 3. Obsługa kliknięć
    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            tabs.forEach(t => t.classList.remove('active'));
            this.classList.add('active');

            const target = this.getAttribute('data-target');
            
            // Animacja pigułki
            tabsContainer.setAttribute('data-active', target);
            // Zmiana stanu dashboardu (kolory + SVG)
            dashboard.setAttribute('data-state', target);

            // Podmiana tekstów
            dynTitle.textContent = dataContent[target].title;
            // Dodanie linków w opisie jeśli to zakładka dotacji (dla SEO)
            if(target === 'law') {
                dynDesc.innerHTML = 'Oficjalną podstawą prawną jest <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/" style="color:var(--rk-norm-brand); font-weight:700;">norma PN-EN 12831-1:2017-08</a>, która narzuca rygorystyczną metodologię. Projektowanie bez jej uwzględnienia uniemożliwia uzyskanie odbioru oraz pozyskanie środków z programów takich jak <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-a-dotacje-czyste-powietrze-i-moje-cieplo-2026/" style="color:var(--rk-norm-brand); font-weight:700;">Czyste Powietrze czy Moje Ciepło</a>.';
            } else {
                dynDesc.textContent = dataContent[target].desc;
            }
            
            lbl1.textContent = dataContent[target].lbl1;
            val1.textContent = dataContent[target].val1;
            lbl2.textContent = dataContent[target].lbl2;
            val2.textContent = dataContent[target].val2;
        });
    });
});
</script>



<style>
:root {
    --rk-tr-dark: #0f172a;
    --rk-tr-brand: #c2410c; /* Ciepły pomarańcz/cegła nawiązujący do przenikania ciepła */
    --rk-tr-brand-light: #ffedd5;
    --rk-tr-accent: #f97316;
    --rk-tr-blue: #0284c7;
    --rk-tr-blue-light: #e0f2fe;
    --rk-tr-bg: #ffffff;
    --rk-tr-panel: #f8fafc;
    --rk-tr-border: #e2e8f0;
    --rk-tr-text: #334155;
    --rk-tr-muted: #64748b;
}

.rk-tr-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-tr-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(194, 65, 12, 0.15);
    border: 1px solid rgba(194, 65, 12, 0.3);
    overflow: hidden;
}

/* Nagłówek i Wstęp Teorii */
.rk-tr-header {
    background: linear-gradient(135deg, var(--rk-tr-dark) 0%, #2a1508 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-tr-brand);
    display: block; /* Wymuszenie bloku, naprawia błędy z globalnym flexem */
}

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

.rk-tr-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-tr-title span { color: var(--rk-tr-accent); }

.rk-tr-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

/* Blok ze Wzorem - Naprawiony układ, zapobiega zgniataniu w pionie */
.rk-tr-equation-box {
    background: rgba(0, 0, 0, 0.4);
    border: 1px solid rgba(249, 115, 22, 0.4);
    border-radius: 16px;
    padding: 25px;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.5);
    width: 100%;
    box-sizing: border-box;
    overflow-x: auto; /* Pozwala na przewijanie na bardzo wąskich ekranach */
}

.rk-tr-equation {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 22px;
    color: #fdba74;
    letter-spacing: 1px;
    margin: 0 0 20px 0;
    text-align: center;
    line-height: 1.6;
    word-break: keep-all; /* Blokuje łamanie słów w dziwnych miejscach */
}

.rk-tr-equation-chunk {
    display: inline-block;
    white-space: nowrap;
}

.rk-tr-equation-legend {
    font-size: 13px;
    color: #94a3b8;
    line-height: 1.6;
    text-align: left;
    margin: 0;
    display: grid;
    /* Automatycznie dopasowuje kolumny, nie zgniata do pionu */
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 12px;
}

.rk-tr-equation-legend div {
    background: rgba(255, 255, 255, 0.05);
    padding: 8px 12px;
    border-radius: 8px;
    border-left: 3px solid rgba(249, 115, 22, 0.5);
}

.rk-tr-equation-legend strong { color: #e2e8f0; font-family: 'Cambria Math', 'Times New Roman', serif; font-size: 14px; }

/* Sekcja Interaktywna - Kalkulator */
.rk-tr-interactive {
    padding: 45px 50px;
    background: var(--rk-tr-panel);
}

.rk-tr-section-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-tr-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

/* Kontrolki - Wybór Standardu */
.rk-tr-controls {
    display: flex;
    gap: 15px;
    margin-bottom: 35px;
}

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

.rk-tr-btn:hover {
    border-color: #cbd5e1;
    transform: translateY(-2px);
}

.rk-tr-btn.active {
    border-color: var(--rk-tr-brand);
    background: var(--rk-tr-brand-light);
    box-shadow: 0 10px 20px -5px rgba(194, 65, 12, 0.15);
}

.rk-tr-btn-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-tr-text);
}

.rk-tr-btn.active .rk-tr-btn-title { color: var(--rk-tr-brand); }
.rk-tr-btn-sub { font-size: 12px; color: var(--rk-tr-muted); font-weight: 600; }

/* Wyświetlacz Wyników Grid */
.rk-tr-dashboard {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-tr-border);
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
}

/* SVG Wizualizacja Przegrody */
.rk-tr-svg-box {
    background: var(--rk-tr-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.6);
}

.rk-tr-svg { width: 100%; height: auto; max-width: 180px; }

/* Animacje SVG zależne od stanu */
.anim-arrow { stroke-dasharray: 15; stroke-dashoffset: 0; transition: stroke 0.4s; }
.anim-wall-fill { transition: fill 0.4s; }

.state-old .anim-arrow { stroke: #ef4444; stroke-width: 4; animation: heatEscape 0.6s linear infinite; }
.state-old .anim-wall-fill { fill: #64748b; }

.state-wt2021 .anim-arrow { stroke: #f97316; stroke-width: 2.5; animation: heatEscape 1.5s linear infinite; }
.state-wt2021 .anim-wall-fill { fill: #0284c7; }

.state-passive .anim-arrow { stroke: #fbbf24; stroke-width: 1.5; animation: heatEscape 3s linear infinite; }
.state-passive .anim-wall-fill { fill: #10b981; }

@keyframes heatEscape { to { stroke-dashoffset: -30; } }

/* Panele Wynikowe */
.rk-tr-results-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tr-res-tile {
    background: #f8fafc;
    border: 1px solid var(--rk-tr-border);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
}

.rk-tr-res-tile.tile-total {
    grid-column: 1 / -1;
    background: var(--rk-tr-dark);
    border-color: var(--rk-tr-dark);
}

.rk-tr-res-label { font-size: 12px; text-transform: uppercase; font-weight: 800; color: var(--rk-tr-muted); margin-bottom: 4px; }
.rk-tr-res-tile.tile-total .rk-tr-res-label { color: #94a3b8; }

.rk-tr-res-value { font-size: 20px; font-weight: 900; color: var(--rk-tr-dark); font-variant-numeric: tabular-nums; }
.rk-tr-res-tile.tile-total .rk-tr-res-value { color: var(--rk-tr-accent); font-size: 28px; }

.rk-tr-res-formula { font-size: 11px; color: #94a3b8; margin-top: 6px; font-family: monospace; }
.rk-tr-res-tile.tile-total .rk-tr-res-formula { color: #cbd5e1; }

.rk-tr-insight-box {
    margin-top: 25px;
    padding: 18px 20px;
    background: var(--rk-tr-blue-light);
    border-left: 4px solid var(--rk-tr-blue);
    border-radius: 8px;
    font-size: 14px;
    line-height: 1.6;
    color: #0c4a6e;
    font-weight: 500;
}

@media (max-width: 768px) {
    .rk-tr-header, .rk-tr-interactive { padding: 35px 20px; }
    .rk-tr-title { font-size: 24px; }
    .rk-tr-controls { flex-direction: column; gap: 10px; }
    .rk-tr-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 20px; }
    .rk-tr-svg-box { height: 160px; max-width: 220px; margin: 0 auto; width: 100%; }
    .rk-tr-results-grid { grid-template-columns: 1fr; }
    .rk-tr-equation { font-size: 18px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-przenikanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak krok po kroku oblicza się straty ciepła przez przenikanie?",
    "description": "Zobacz inżynierski wzór na straty przez przenikanie (ΦT) wg normy PN-EN 12831. Obliczamy OZC dla ściany, okna i mostków cieplnych krok po kroku.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-przenikanie",
    "name": "Analiza strat ciepła przez przegrody budowlane (Przenikanie)",
    "description": "Interaktywne zestawienie wpływu współczynnika przenikania ciepła U przegród (ściana, okno, mostki termiczne) na całkowite straty ciepła pomieszczenia.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczanie strat ciepła przez przenikanie",
      "współczynnik przenikania ciepła U",
      "mostki termiczne OZC",
      "kalkulator strat ciepła budynek",
      "norma PN-EN 12831 wzór"
    ],
    "measurementTechnique": "Analiza porównawcza strumieni strat ciepła przez komponenty ściany zewn. wg normy PN-EN 12831 w 3 standardach budowlanych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wzór uwzględnia sumę iloczynów pola powierzchni netto, współczynnika U oraz różnicy temperatur projektowych.",
        "Dla standardu WT 2021 okno i liniowy mostek termiczny wokół ramy generują aż 60,6% strat ciepła przegrody."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-przenikanie",
    "name": "Kalkulator Przenikania Ciepła Przegrody",
    "description": "Narzędzie inżynierskie pozwalające prześledzić krok po kroku obliczenia OZC dla ściany zewnętrznej z oknem, zależnie od standardu izolacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tr-container" id="rk-tr-calc-app">
    
    <div class="rk-tr-header">
        <div class="rk-tr-badge">
            <svg width="14" height="14" 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>
            Metodologia Normy PN-EN 12831
        </div>
        <h2 class="rk-tr-title">Jak krok po kroku oblicza się <span>straty przez przenikanie?</span></h2>
        <p class="rk-tr-lead">
            Straty ciepła przez przenikanie (&Phi;<sub>T,i</sub>) oblicza się poprzez przemnożenie pola powierzchni przegrody <strong>A [m²]</strong> przez jej współczynnik przenikania ciepła <strong>U [W/(m²·K)]</strong> oraz projektową różnicę temperatur <strong>&Delta;T [K]</strong>. Formuła ta musi bezwzględnie uwzględniać liniowe mostki termiczne <strong>&Psi;</strong> wyrażone w W/(m·K). Ostateczny wynik podaje się z dokładnością do 1 W.
        </p>
        
        <div class="rk-tr-equation-box">
            <div class="rk-tr-equation">
                <span class="rk-tr-equation-chunk">&Phi;<sub>T,i</sub> = &Sigma; (A<sub>k</sub> &times; U<sub>k</sub> &times; f<sub>x,k</sub>)</span> &times; <span class="rk-tr-equation-chunk">(&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)</span> &nbsp;+&nbsp; <span class="rk-tr-equation-chunk">&Sigma; (&Psi;<sub>l</sub> &times; L<sub>l</sub> &times; f<sub>x,l</sub>)</span> &times; <span class="rk-tr-equation-chunk">(&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)</span>
            </div>
            <div class="rk-tr-equation-legend">
                <div><strong>f<sub>x</sub></strong> &#8211; współcz. redukcji temp. (przestrz. nieogrzewane)</div>
                <div><strong>&theta;<sub>int,i</sub></strong> &#8211; temperatura wewnętrzna projektowa</div>
                <div><strong>L</strong> &#8211; długość liniowego mostka termicznego [m]</div>
                <div><strong>&theta;<sub>e</sub></strong> &#8211; temperatura zewnętrzna obliczeniowa</div>
            </div>
        </div>
    </div>

    <div class="rk-tr-interactive">
        <h3 class="rk-tr-section-title">Symulator: Wpływ izolacji na straty ściany z oknem (III strefa, &Delta;T = 40K)</h3>
        
        <div class="rk-tr-controls">
            <button class="rk-tr-btn" data-standard="old">
                <span class="rk-tr-btn-title">Stary Dom</span>
                <span class="rk-tr-btn-sub">Brak izolacji</span>
            </button>
            <button class="rk-tr-btn active" data-standard="wt2021">
                <span class="rk-tr-btn-title">WT 2021</span>
                <span class="rk-tr-btn-sub">Przykład normatywny</span>
            </button>
            <button class="rk-tr-btn" data-standard="passive">
                <span class="rk-tr-btn-title">Dom Pasywny</span>
                <span class="rk-tr-btn-sub">Certyfikowane detale</span>
            </button>
        </div>

        <div class="rk-tr-dashboard">
            <div class="rk-tr-svg-box state-wt2021" id="trSvgBox">
                <svg class="rk-tr-svg" viewBox="0 0 100 100">
                    <rect class="anim-wall-fill" x="20" y="10" width="30" height="80" rx="2" />
                    <rect x="15" y="35" width="40" height="30" fill="#bae6fd" stroke="#0f172a" stroke-width="4" rx="2" />
                    <line x1="15" y1="50" x2="55" y2="50" stroke="#0f172a" stroke-width="2" />
                    
                    <text x="75" y="20" fill="#94a3b8" font-size="10" font-weight="bold">WEWN. (20°C)</text>
                    <text x="5" y="95" fill="#94a3b8" font-size="10" font-weight="bold" transform="rotate(-90 5 95)">ZEWN. (-20°C)</text>
                    
                    <path class="anim-arrow" d="M 70 25 L 10 25" fill="none" stroke-linecap="round" />
                    <path class="anim-arrow" d="M 70 50 L 10 50" fill="none" stroke-linecap="round" />
                    <path class="anim-arrow" d="M 70 75 L 10 75" fill="none" stroke-linecap="round" />
                </svg>
            </div>

            <div>
                <div class="rk-tr-results-grid">
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">1. Ściana netto (13,20 m²)</span>
                        <span class="rk-tr-res-value" id="valWall">79,2 W</span>
                        <span class="rk-tr-res-formula" id="formWall">13,2 &times; 0,15 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">2. Okno 3-szybowe (3,00 m²)</span>
                        <span class="rk-tr-res-value" id="valWin">108,0 W</span>
                        <span class="rk-tr-res-formula" id="formWin">3,00 &times; 0,90 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">3. Mostek Liniowy (7,0 m)</span>
                        <span class="rk-tr-res-value" id="valBridge">14,0 W</span>
                        <span class="rk-tr-res-formula" id="formBridge">7,00 &times; 0,05 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile tile-total">
                        <span class="rk-tr-res-label">Suma strat dla przegrody (&Phi;<sub>T</sub>)</span>
                        <span class="rk-tr-res-value" id="valTotal">201,2 W</span>
                        <span class="rk-tr-res-formula" id="formTotal">79,2 + 108,0 + 14,0 W</span>
                    </div>
                </div>

                <div class="rk-tr-insight-box" id="trInsightText">
                    Wynik pokazuje, że dla ściany o pow. 16,2 m² projektant musi zabezpieczyć <strong>201,2 W</strong> mocy grzewczej. Aż <strong>60,6%</strong> ciepła ucieka przez stolarkę okienną i jej montaż, mimo że okno zajmuje tylko 18,5% powierzchni.
                </div>
            </div>
        </div>
        
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    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-tr-calc-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji skryptu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja należy do Projekt-Ogrzewania.pl</div></div>';
        return;
    }

    // Elementy DOM
    const btns = document.querySelectorAll('.rk-tr-btn');
    const svgBox = document.getElementById('trSvgBox');
    
    const valWall = document.getElementById('valWall'); const formWall = document.getElementById('formWall');
    const valWin = document.getElementById('valWin'); const formWin = document.getElementById('formWin');
    const valBridge = document.getElementById('valBridge'); const formBridge = document.getElementById('formBridge');
    const valTotal = document.getElementById('valTotal'); const formTotal = document.getElementById('formTotal');
    const insightText = document.getElementById('trInsightText');

    // Baza danych dla 3 wariantów standardu izolacji
    const simData = {
        old: {
            uWall: "1,20", wWall: "633,6 W",
            uWin: "2,80", wWin: "336,0 W",
            uBridge: "0,15", wBridge: "42,0 W",
            total: "1011,6 W",
            formT: "633,6 + 336,0 + 42,0 W",
            insight: "W starym budownictwie przez taką samą ścianę ucieka ponad <strong>1 kW</strong> energii (pięciokrotnie więcej!). Sama pusta ściana bez izolacji odpowiada tu za potężne 62% strat. Wymaga to wysokotemperaturowych grzejników."
        },
        wt2021: {
            uWall: "0,15", wWall: "79,2 W",
            uWin: "0,90", wWin: "108,0 W",
            uBridge: "0,05", wBridge: "14,0 W",
            total: "201,2 W",
            formT: "79,2 + 108,0 + 14,0 W",
            insight: "Wynik pokazuje, że dla ściany o pow. 16,2 m² projektant musi zabezpieczyć <strong>201,2 W</strong> mocy grzewczej. Aż <strong>60,6%</strong> ciepła ucieka przez okno i jego montaż, mimo że zajmuje ono tylko 18,5% powierzchni."
        },
        passive: {
            uWall: "0,10", wWall: "52,8 W",
            uWin: "0,70", wWin: "84,0 W",
            uBridge: "0,01", wBridge: "2,8 W",
            total: "139,6 W",
            formT: "52,8 + 84,0 + 2,8 W",
            insight: "Dzięki ekstremalnej izolacji i tzw. ciepłemu montażowi okna w warstwie ocieplenia (&Psi; bliskie zeru), straty spadają do minimum (<strong>139,6 W</strong>). Ogrzewanie podłogowe może tu pracować na zasilaniu rzędu zaledwie 26°C."
        }
    };

    // Logika przycisków i aktualizacja interfejsu
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const std = this.getAttribute('data-standard');
            const data = simData[std];

            // Zmiana klasy dla animacji SVG (w CSS zmiana koloru ściany i strzałek ciepła)
            svgBox.className = "rk-tr-svg-box state-" + std;

            // Podmiana zawartości paneli liczbowych
            valWall.textContent = data.wWall; formWall.innerHTML = "13,2 &times; " + data.uWall + " &times; 40K";
            valWin.textContent = data.wWin; formWin.innerHTML = "3,00 &times; " + data.uWin + " &times; 40K";
            valBridge.textContent = data.wBridge; formBridge.innerHTML = "7,00 &times; " + data.uBridge + " &times; 40K";
            
            valTotal.textContent = data.total; formTotal.textContent = data.formT;
            insightText.innerHTML = data.insight;
        });
    });
});
</script>



<style>
:root {
    --rk-vent-dark: #0f172a;
    --rk-vent-brand: #0284c7;
    --rk-vent-brand-light: #e0f2fe;
    --rk-vent-accent: #0ea5e9;
    --rk-vent-red: #ef4444;
    --rk-vent-red-bg: #fef2f2;
    --rk-vent-green: #10b981;
    --rk-vent-green-bg: #ecfdf5;
    --rk-vent-bg: #ffffff;
    --rk-vent-panel: #f8fafc;
    --rk-vent-border: #cbd5e1;
    --rk-vent-text: #334155;
    --rk-vent-muted: #64748b;
}

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

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

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

.rk-vent-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

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

.rk-vent-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

.rk-link-vent {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: all 0.3s;
}

.rk-link-vent:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Box ze wzorem */
.rk-eq-box {
    background: rgba(0, 0, 0, 0.3);
    border: 1px solid rgba(56, 189, 248, 0.3);
    border-radius: 16px;
    padding: 20px;
    text-align: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
}

.rk-eq {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 22px;
    color: #bae6fd;
    letter-spacing: 1px;
    margin: 0 0 10px 0;
}

.rk-eq-desc {
    font-size: 13px;
    color: #94a3b8;
    margin: 0;
}

.rk-eq-desc strong { color: #e2e8f0; }

/* Interaktywny Panel */
.rk-vent-interactive {
    padding: 40px 50px;
    background: var(--rk-vent-panel);
}

.rk-vent-section-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-vent-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

/* Przełącznik Systemów */
.rk-vent-switcher {
    display: flex;
    justify-content: center;
    margin-bottom: 35px;
}

.rk-app-toggle {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 600px;
}

.rk-toggle-btn {
    flex: 1;
    position: relative;
    z-index: 2;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 800;
    border: none;
    background: transparent;
    color: #64748b;
    cursor: pointer;
    border-radius: 99px;
    transition: color 0.3s ease;
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

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

.rk-toggle-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-vent-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-toggle[data-mode="rek"] .rk-toggle-glider {
    transform: translateX(100%);
    background: var(--rk-vent-green);
}

/* Dashboard Wyników */
.rk-vent-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-vent-border);
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
    transition: all 0.4s ease;
}

.rk-vent-dashboard.mode-grav { border-color: rgba(239, 68, 68, 0.3); }
.rk-vent-dashboard.mode-rek { border-color: rgba(16, 185, 129, 0.3); }

/* Kontener SVG */
.rk-vent-svg-stage {
    background: var(--rk-vent-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.6);
    position: relative;
    overflow: hidden;
}

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s; width: 100%; height: 100%; }
.rk-vent-dashboard.mode-grav .layer-grav { opacity: 1; position: relative; }
.rk-vent-dashboard.mode-rek .layer-rek { opacity: 1; position: relative; }

/* Animacje SVG */
.anim-air-in { stroke-dasharray: 6 6; animation: flowIn 1s linear infinite; }
.anim-air-out { stroke-dasharray: 6 6; animation: flowOut 0.8s linear infinite; }
.anim-air-rek { stroke-dasharray: 6 6; animation: flowIn 2s linear infinite; }
.anim-heat-exch { animation: pulseCore 2s infinite alternate; }

@keyframes flowIn { from { stroke-dashoffset: 24; } to { stroke-dashoffset: 0; } }
@keyframes flowOut { from { stroke-dashoffset: 0; } to { stroke-dashoffset: 24; } }
@keyframes pulseCore { 0% { fill: #3b82f6; } 100% { fill: #ef4444; } }

/* Siatka Wyników */
.rk-vent-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-vent-tile {
    background: #f1f5f9;
    padding: 18px 20px;
    border-radius: 14px;
    border-left: 4px solid transparent;
    transition: all 0.3s;
    display: flex;
    flex-direction: column;
}

.rk-vent-dashboard.mode-grav .rk-vent-tile { border-left-color: var(--rk-vent-red); background: var(--rk-vent-red-bg); }
.rk-vent-dashboard.mode-rek .rk-vent-tile { border-left-color: var(--rk-vent-green); background: var(--rk-vent-green-bg); }

.rk-vent-tile.tile-full {
    grid-column: 1 / -1;
    background: var(--rk-vent-dark);
    border-color: var(--rk-vent-dark);
}

.rk-tile-lbl { font-size: 11px; text-transform: uppercase; font-weight: 800; color: var(--rk-vent-muted); margin-bottom: 4px; }
.rk-vent-tile.tile-full .rk-tile-lbl { color: #94a3b8; }

.rk-tile-val { font-size: 18px; font-weight: 900; color: var(--rk-vent-dark); transition: color 0.3s; }
.rk-vent-tile.tile-full .rk-tile-val { font-size: 26px; color: var(--rk-vent-accent); }

.rk-tile-sub { font-size: 12px; color: #94a3b8; margin-top: 6px; font-family: monospace; }

@media (max-width: 768px) {
    .rk-vent-header, .rk-vent-interactive { padding: 35px 20px; }
    .rk-vent-title { font-size: 24px; }
    .rk-app-toggle { flex-direction: column; background: transparent; box-shadow: none; gap: 10px; }
    .rk-toggle-glider { display: none; }
    .rk-toggle-btn { background: #e2e8f0; color: #64748b; }
    .rk-toggle-btn.active[data-target="grav"] { background: var(--rk-vent-red); color: #fff; }
    .rk-toggle-btn.active[data-target="rek"] { background: var(--rk-vent-green); color: #fff; }
    .rk-vent-dashboard { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-vent-svg-stage { max-width: 200px; margin: 0 auto; height: 160px; }
    .rk-vent-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-wentylacja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak rodzaj wentylacji wpływa na projektowe straty wentylacyjne?",
    "description": "Zestawienie strat ciepła dla wentylacji grawitacyjnej i rekuperacji. Obliczanie OZC na przykładzie domu 400m3 wg 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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-wentylacja",
    "name": "Porównanie strat wentylacyjnych: Grawitacja vs Rekuperacja",
    "description": "Obliczenia inżynierskie różnicy w zapotrzebowaniu na moc grzewczą w zależności od wybranego systemu wymiany powietrza dla budynku o kubaturze 400 m³.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "straty wentylacyjne wzór",
      "rekuperacja a pompa ciepła",
      "obliczenia OZC wentylacja",
      "wentylacja grawitacyjna straty ciepła",
      "norma PN-B-03430"
    ],
    "measurementTechnique": "Aplikacja wzoru fizycznego ΦV = V * 0,34 * ΔT w zestawieniu ze sprawnością temperaturową wymiennika rekuperatora (η = 85%).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wentylacja Grawitacyjna: Krotność n=0,5 h-1 przy -18°C generuje potężną stratę 2584 W.",
        "Rekuperacja: Odzysk ciepła z η=85% i kontrolowany strumień redukuje stratę do zaledwie 491 W, oszczędzając 2 kW mocy źródła ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-wentylacja",
    "name": "Kalkulator Strat Wentylacyjnych OZC",
    "description": "Interaktywny symulator pozwalający porównać obciążenie cieplne budynku z wentylacją naturalną i mechaniczną z odzyskiem ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-vent-container" id="rk-ozc-vent-app">
    
    <div class="rk-vent-header">
        <div class="rk-vent-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m12.41 11.41A2 2 0 1 1 13 16h9m-1.59-7.41A2 2 0 1 0 19 12h3"></path></svg>
            Dynamika Powietrza
        </div>
        <h2 class="rk-vent-title">Jak rodzaj wentylacji wpływa na <span>projektowe straty wentylacyjne?</span></h2>
        <p class="rk-vent-lead">
            Rodzaj wentylacji decyduje o wielkości strumienia powietrza i stratach wentylacyjnych (Φ<sub>V,i</sub>). System grawitacyjny generuje ucieczkę ciepła na poziomie nawet 40–50% całkowitego bilansu budynku. Zastosowanie <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-link-vent">rekuperacji</a> o udokumentowanej sprawności temperaturowej 85% zmniejsza te straty o ponad 80%.
        </p>
        
        <div class="rk-eq-box">
            <div class="rk-eq">
                Φ<sub>V,i</sub> = V<sub>i</sub> &times; 0,34 &times; (&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)
            </div>
            <p class="rk-eq-desc">
                Gdzie <strong>V<sub>i</sub></strong> to projektowy strumień objętości powietrza [m³/h], a <strong>0,34 Wh/(m³·K)</strong> to stała cieplna powietrza.
            </p>
        </div>
    </div>

    <div class="rk-vent-interactive">
        <h3 class="rk-vent-section-title">Studium przypadku: Dom 400 m³ (II Strefa klimatyczna, &Delta;T = 38 K)</h3>

        <div class="rk-vent-switcher">
            <div class="rk-app-toggle" id="ventSwitchContainer" data-mode="grav">
                <div class="rk-toggle-glider" id="ventGlider"></div>
                <button class="rk-toggle-btn active" data-target="grav">
                    <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 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    Wariant A: Grawitacja
                </button>
                <button class="rk-toggle-btn" data-target="rek">
                    <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="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
                    Wariant B: Rekuperacja
                </button>
            </div>
        </div>

        <div class="rk-vent-dashboard mode-grav" id="ventDashboard">
            
            <div class="rk-vent-svg-stage">
                <svg class="rk-svg-layer layer-grav" viewBox="0 0 100 100">
                    <path d="M 10 50 L 50 20 L 90 50 L 90 90 L 10 90 Z" fill="#1e293b" stroke="#334155" stroke-width="2"/>
                    <rect x="65" y="10" width="10" height="25" fill="#334155" />
                    <path class="anim-air-in" d="M 0 60 L 25 60" fill="none" stroke="#38bdf8" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-air-in" d="M 100 70 L 75 70" fill="none" stroke="#38bdf8" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-air-out" d="M 70 30 L 70 -5" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>
                </svg>
                <svg class="rk-svg-layer layer-rek" viewBox="0 0 100 100">
                    <path d="M 10 50 L 50 20 L 90 50 L 90 90 L 10 90 Z" fill="#1e293b" stroke="#334155" stroke-width="2"/>
                    <rect class="anim-heat-exch" x="40" y="35" width="20" height="15" rx="2" />
                    <path class="anim-air-rek" d="M 10 40 L 40 40" fill="none" stroke="#38bdf8" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 50 65 L 50 50" fill="none" stroke="#ef4444" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 60 40 L 90 40" fill="none" stroke="#f97316" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 50 35 L 50 10" fill="none" stroke="#64748b" stroke-width="2"/>
                </svg>
            </div>

            <div class="rk-vent-grid">
                <div class="rk-vent-tile">
                    <span class="rk-tile-lbl">Strumień Powietrza (V)</span>
                    <span class="rk-tile-val" id="ventValFlow">200 m³/h</span>
                    <span class="rk-tile-sub" id="ventSubFlow">n = 0,5 h<sup>-1</sup> (Infiltracja)</span>
                </div>
                <div class="rk-vent-tile">
                    <span class="rk-tile-lbl">Temp. Nawiewu po wymianie</span>
                    <span class="rk-tile-val" id="ventValTemp">-18°C</span>
                    <span class="rk-tile-sub" id="ventSubTemp">Brak odzysku ciepła</span>
                </div>
                <div class="rk-vent-tile tile-full">
                    <span class="rk-tile-lbl">Projektowa Strata Wentylacyjna (ΦV)</span>
                    <span class="rk-tile-val" id="ventValTotal">2584 W</span>
                    <span class="rk-tile-sub" id="ventSubTotal">200 × 0,34 × 38K</span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    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-ozc-vent-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // Elementy DOM
    const switchContainer = document.getElementById('ventSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-toggle-btn');
    const dashboard = document.getElementById('ventDashboard');
    
    // Pola tekstowe - Użyto unikalnych prefiksów "vent" w ID
    const valFlow = document.getElementById('ventValFlow'); 
    const subFlow = document.getElementById('ventSubFlow');
    const valTemp = document.getElementById('ventValTemp'); 
    const subTemp = document.getElementById('ventSubTemp');
    const valTotal = document.getElementById('ventValTotal'); 
    const subTotal = document.getElementById('ventSubTotal');

    const ventData = {
        grav: {
            flow: "200 m³/h", sFlow: "n = 0,5 h-1 (Infiltracja mrozu)",
            temp: "-18°C", sTemp: "Mroźne powietrze wpada do domu",
            total: "2584 W", sTotal: "200 × 0,34 × 38K"
        },
        rek: {
            flow: "120 m³/h", sFlow: "Kontrolowany wymóg higieniczny",
            temp: "+14,3°C", sTemp: "Powietrze dogrzane w wymienniku (η = 85%)",
            total: "490,96 W", sTotal: "Zysk: 2093 W (Zawiera nieszczelności)"
        }
    };

    // Logika przycisków
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const mode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', mode);
            dashboard.className = "rk-vent-dashboard mode-" + mode;

            // Podmiana danych bez błędów krzyżowych
            const d = ventData[mode];
            valFlow.innerHTML = d.flow; subFlow.innerHTML = d.sFlow;
            valTemp.innerHTML = d.temp; subTemp.innerHTML = d.sTemp;
            valTotal.innerHTML = d.total; subTotal.innerHTML = d.sTotal;
        });
    });
});
</script>



<style>
:root {
    --rk-res-dark: #0f172a;
    --rk-res-brand: #ea580c; /* Ciepły pomarańcz dla fizyki przewodzenia ciepła */
    --rk-res-brand-light: #ffedd5;
    --rk-res-accent: #f97316;
    --rk-res-green: #10b981;
    --rk-res-green-bg: #ecfdf5;
    --rk-res-red: #ef4444;
    --rk-res-red-bg: #fef2f2;
    --rk-res-bg: #ffffff;
    --rk-res-panel: #f8fafc;
    --rk-res-border: #cbd5e1;
    --rk-res-text: #334155;
    --rk-res-muted: #64748b;
}

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

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

.rk-res-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(234, 88, 12, 0.25);
    color: #ffedd5;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(234, 88, 12, 0.4);
}

.rk-res-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-res-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-res-lead strong {
    color: #ffffff;
    font-weight: 800;
}

.rk-res-lead a {
    color: #ffedd5;
    text-decoration: none;
    border-bottom: 1px dashed #ffedd5;
    transition: color 0.3s;
}

.rk-res-lead a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Interaktywny Panel Wyboru */
.rk-res-interactive {
    padding: 40px 50px;
    background: var(--rk-res-panel);
}

/* Selektor kafelków (Materiały wykończeniowe) */
.rk-res-selector-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 10px;
    margin-bottom: 35px;
}

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

.rk-res-select-btn:hover {
    background: #f1f5f9;
    border-color: #94a3b8;
    transform: translateY(-2px);
}

.rk-res-select-btn.active {
    border-color: var(--rk-res-brand);
    background: var(--rk-res-brand-light);
}

.rk-btn-txt {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-res-text);
}

.rk-res-select-btn.active .rk-btn-txt {
    color: var(--rk-res-brand);
}

/* Główny Dashboard Prezentacji */
.rk-res-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-res-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 220px 1fr;
    gap: 40px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
}

/* Kontener Wizualizacji SVG */
.rk-res-svg-stage {
    background: var(--rk-res-dark);
    border-radius: 16px;
    padding: 20px;
    height: 220px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
    position: relative;
}

.rk-res-svg {
    width: 100%;
    height: auto;
    display: block;
}

/* Dynamiczne modyfikacje SVG przez klasy narzucane z JS */
.anim-cop-needle { transform-origin: 50px 80px; transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); }
.anim-barrier-layer { transition: height 0.4s ease, fill 0.4s ease; transform-origin: bottom; }

/* Tarcza wydajności COP */
.rk-res-svg-stage[data-material="gres"] .anim-cop-needle { transform: rotate(50deg); }
.rk-res-svg-stage[data-material="pvc"] .anim-cop-needle { transform: rotate(35deg); }
.rk-res-svg-stage[data-material="panele"] .anim-cop-needle { transform: rotate(0deg); }
.rk-res-svg-stage[data-material="deska"] .anim-cop-needle { transform: rotate(-30deg); }
.rk-res-svg-stage[data-material="dywan"] .anim-cop-needle { transform: rotate(-55deg); }

/* Wysokość warstwy oporu cieplnego */
.rk-res-svg-stage[data-material="gres"] .anim-barrier-layer { height: 2px; fill: var(--rk-res-green); }
.rk-res-svg-stage[data-material="pvc"] .anim-barrier-layer { height: 6px; fill: #6ee7b7; }
.rk-res-svg-stage[data-material="panele"] .anim-barrier-layer { height: 14px; fill: #fcd34d; }
.rk-res-svg-stage[data-material="deska"] .anim-barrier-layer { height: 22px; fill: var(--rk-res-accent); }
.rk-res-svg-stage[data-material="dywan"] .anim-barrier-layer { height: 32px; fill: var(--rk-res-red); }

/* Siatka parametrów technicznych */
.rk-res-tiles-panel {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-res-tile {
    background: #f1f5f9;
    padding: 15px 20px;
    border-radius: 12px;
    border-left: 4px solid var(--rk-res-brand);
    transition: all 0.3s;
}

.rk-res-tile.tile-full {
    grid-column: 1 / -1;
    background: var(--rk-res-dark);
    border-left-color: var(--rk-res-accent);
}

.rk-res-tile.norm-alert {
    border-left-color: var(--rk-res-red);
    background: var(--rk-res-red-bg);
}

.rk-tile-lbl {
    display: block;
    font-size: 11px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--rk-res-muted);
    margin-bottom: 4px;
}

.rk-res-tile.tile-full .rk-tile-lbl { color: #94a3b8; }

.rk-tile-val {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-res-dark);
}

.rk-res-tile.tile-full .rk-tile-val { color: #ffffff; font-size: 18px; }
.rk-res-tile.norm-alert .rk-tile-val { color: var(--rk-res-red); }

.rk-tile-sub {
    display: block;
    font-size: 12px;
    color: #64748b;
    margin-top: 4px;
    font-weight: 500;
}
.rk-res-tile.tile-full .rk-tile-sub { color: #cbd5e1; }

@media (max-width: 768px) {
    .rk-res-header, .rk-res-interactive { padding: 35px 25px; }
    .rk-res-header h2 { font-size: 24px; }
    .rk-res-selector-grid { grid-template-columns: 1fr; gap: 10px; }
    .rk-res-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 25px; }
    .rk-res-svg-stage { height: 180px; max-width: 240px; margin: 0 auto; width: 100%; }
    .rk-res-tiles-panel { grid-template-columns: 1fr; gap: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#article-okladziny",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/"
    },
    "headline": "Jak opór cieplny materiałów wykończeniowych zmienia parametry instalacji?",
    "description": "Analiza wpływu oporu cieplnego okładziny wierzchniej (R) na gęstość strumienia ogrzewania podłogowego i współczynnik COP pompy 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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#dataset-okladziny",
    "name": "Zestawienie oporów cieplnych i wydajności typowych materiałów podłogowych",
    "description": "Twarde dane inżynierskie porównujące opory termiczne, gęstość strumienia cieplnego q oraz niezbędną temperaturę zasilania dla 5 rodzajów wykończenia podłogi.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "opór cieplny okładziny podłogowej",
      "norma PN-EN 1264 ogrzewanie",
      "temperatura zasilania podłogówki pompy ciepła",
      "deska warstwowa na ogrzewaniu podłogowym",
      "spadek efektywności COP pompy"
    ],
    "measurementTechnique": "Kalkulacja hydrauliczna i termiczna przenikania energii przez warstwy jastrychu i wykończenia wierzchniego dla stałej straty pomieszczenia 50 W/m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Gres/płytki: Grubość 10mm, opór R=0,015 m2K/W, idealne parametry zasilania 32°C.",
        "Deska warstwowa klejona: Grubość 14mm, wysoki opór R=0,120 m2K/W, podnosi zasilanie do 43°C.",
        "Gruby dywan z podkładem: Przekracza normatywny limit 0,150 m2K/W, generując spadek sprawności źródła grzewczego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#webapp-okladziny",
    "name": "Interaktywny Analizator Opóru Termicznego Podłogi",
    "description": "Narzędzie symulacyjne demonstrujące w czasie rzeczywistym przełożenie fizycznego oporu okładziny wierzchniej na temperaturę zasilania i sprawność pompy ciepła (COP).",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and modern web browser with SVG rendering capability",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-res-container" id="rk-floor-res-app">
    
    <div class="rk-res-header">
        <div class="rk-res-badge">
            <svg width="14" height="14" 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>
            Fizyka Przewodzenia Ciepła
        </div>
        <h2>Jak opór cieplny materiałów wykończeniowych zmienia parametry instalacji?</h2>
        <p class="rk-res-lead">
            Opór cieplny okładziny podłogowej (<strong>R<sub>&lambda;,B</sub></strong>) ogranicza strumień energii, a norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a> kategorycznie zabrania przekraczania wartości <strong>0,15 m²·K/W</strong> dla warstw wierzchnich. Wyższy opór cieplny materiału działa niczym izolator, wymuszając podniesienie temperatury zasilania instalacji o <strong>5–12°C</strong>. To bezpośrednio obniża sprawność <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pomp ciepła</a> (spadek COP o ok. 2,5% na każdy stopień w górę). Każdy rodzaj wykończenia musi być precyzyjnie dobrany już na etapie <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">obliczeń projektowych ogrzewania podłogowego</a>.
        </p>
    </div>

    <div class="rk-res-interactive">
        <h3 class="rk-res-section-title">Aplikacja Inżynierska: Porównanie parametrów wykończenia dla straty 50 W/m²</h3>
        
        <div class="rk-res-selector-grid">
            <button class="rk-res-select-btn active" data-mat="gres">
                <span class="rk-btn-txt">Płytki / Gres</span>
            </button>
            <button class="rk-res-select-btn" data-mat="pvc">
                <span class="rk-btn-txt">PVC / LVT</span>
            </button>
            <button class="rk-res-select-btn" data-mat="panele">
                <span class="rk-btn-txt">Panele</span>
            </button>
            <button class="rk-res-select-btn" data-mat="deska">
                <span class="rk-btn-txt">Deska Dąb</span>
            </button>
            <button class="rk-res-select-btn" data-mat="dywan">
                <span class="rk-btn-txt">Gruby Dywan</span>
            </button>
        </div>

        <div class="rk-res-dashboard">
            
            <div class="rk-res-svg-stage" id="resSvgStage" data-material="gres">
                <svg class="rk-res-svg" viewBox="0 0 100 110">
                    <path d="M 15 45 A 35 35 0 0 1 85 45" fill="none" stroke="#334155" stroke-width="6" stroke-linecap="round"/>
                    <path d="M 15 45 A 35 35 0 0 1 50 10" fill="none" stroke="#ef4444" stroke-width="6" stroke-linecap="round"/>
                    <path d="M 50 10 A 35 35 0 0 1 85 45" fill="none" stroke="#10b981" stroke-width="6" stroke-linecap="round"/>
                    <text x="50" y="28" fill="#94a3b8" font-size="7" font-weight="bold" text-anchor="middle">COP POMPY</text>
                    
                    <g class="anim-cop-needle">
                        <line x1="50" y1="45" x2="50" y2="15" stroke="#ffffff" stroke-width="2.5" stroke-linecap="round"/>
                        <circle cx="50" cy="45" r="4" fill="#cbd5e1"/>
                    </g>
                    
                    <rect x="10" y="90" width="80" height="15" fill="#475569" rx="2" />
                    <circle cx="30" cy="97" r="4" fill="#ef4444"/>
                    <circle cx="50" cy="97" r="4" fill="#ef4444"/>
                    <circle cx="70" cy="97" r="4" fill="#ef4444"/>
                    
                    <rect class="anim-barrier-layer" x="10" y="88" width="80" height="2" rx="1"/>
                    <text x="50" y="78" fill="#ffffff" font-size="6" text-anchor="middle" letter-spacing="0.5">BARIERA TERMICZNA</text>
                </svg>
            </div>

            <div class="rk-res-tiles-panel" id="resTilesPanel">
                <div class="rk-res-tile">
                    <span class="rk-tile-lbl">Grubość Materiału</span>
                    <span class="rk-tile-val" id="resValThickness">10 mm</span>
                </div>
                <div class="rk-res-tile" id="resTileLimit">
                    <span class="rk-tile-lbl">Opór cieplny R<sub>&lambda;,B</sub></span>
                    <span class="rk-tile-val" id="resValR">0,015 m²·K/W</span>
                </div>
                <div class="rk-res-tile">
                    <span class="rk-tile-lbl">Max Gęstość Strumienia (q)</span>
                    <span class="rk-tile-val" id="resValQ">95 W/m² (przy t<sub>zas</sub>=35°C)</span>
                </div>
                <div class="rk-res-tile tile-full">
                    <span class="rk-tile-lbl">Wymagana Temp. Zasilania (dla straty 50 W/m²)</span>
                    <span class="rk-tile-val" id="resValZas">32°C (Idealna sprawność układu)</span>
                    <span class="rk-tile-sub" id="resValSub">Zużycie energii elektrycznej w normie projektowej.</span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi - brak tagów H2/H3 w strukturze blokady)
    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-floor-res-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd ochrony autorskiej</div><div style="font-size:13px; color:#cbd5e1;">Zestawienia Dataset oraz aplikacja symulatora okładzin wierzchnich stanowią integralną własność Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy sterujące i dashboard
    const btns = document.querySelectorAll('.rk-res-select-btn');
    const svgStage = document.getElementById('resSvgStage');
    const tileLimit = document.getElementById('resTileLimit');
    
    // Pola tekstowe kafelków
    const resThickness = document.getElementById('resValThickness');
    const resR = document.getElementById('resValR');
    const resQ = document.getElementById('resValQ');
    const resZas = document.getElementById('resValZas');
    const resSub = document.getElementById('resValSub');

    // Baza danych parametrów technicznych (czyste sznury znaków bez backticków)
    const materialDb = {
        gres: {
            mode: "gres", thickness: "10 mm", rVal: "0,015 m²·K/W",
            qVal: "95 W/m² (Dedykowana podłogówce)",
            zas: "32°C (Idealna sprawność układu)",
            sub: "Doskonała przewodność cieplna ceramiki. Pompa ciepła pracuje z najwyższym możliwym COP.",
            isOver: false
        },
        pvc: {
            mode: "pvc", thickness: "2,5 mm", rVal: "0,030 m²·K/W",
            qVal: "82 W/m² (Wysoka wydajność)",
            zas: "34°C (Stabilne parametry operacyjne)",
            sub: "Niski opór własny cienkich okładzin LVT klejonych do jastrychu. Bardzo dobry materiał.",
            isOver: false
        },
        panele: {
            mode: "panele", thickness: "8 mm", rVal: "0,070 m²·K/W",
            qVal: "60 W/m² (Średni opór materiałowy)",
            zas: "38°C (Wymaga korekty krzywej grzewczej)",
            sub: "Konieczność zastosowania dedykowanego, cienkiego podkładu kwarcowego maty perforowanej.",
            isOver: false
        },
        deska: {
            mode: "deska", thickness: "14 mm", rVal: "0,120 m²·K/W",
            qVal: "42 L/m² (Niska zdolność emisyjna)",
            zas: "43°C (Wzrost zużycia prądu o ok. 27.5%)",
            sub: "Drewno działa jak barierowy izolator. Wymusza podniesienie temperatury wody o 11 K w stosunku do gresu.",
            isOver: false
        },
        dywan: {
            mode: "dywan", thickness: "12 mm", rVal: "0,160 m²·K/W",
            qVal: "28 W/m² (Układ skrajnie dławiony)",
            zas: "47°C (Przekroczenie progu ekonomicznego)",
            sub: "PRZEKROCZONA NORMA PN-EN 1264 (>0,15 m²·K/W). Pompa ciepła traci efektywność i drastycznie rosną rachunki.",
            isOver: true
        }
    };

    // 3. Logika obsługi kliknięć kafelków selektora
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const matKey = this.getAttribute('data-mat');
            const data = materialDb[matKey];

            // Aktualizacja stanu SVG
            svgStage.setAttribute('data-material', data.mode);

            // Podmiana danych liczbowych i opisów
            resThickness.textContent = data.thickness;
            resR.textContent = data.rVal;
            resQ.textContent = data.qVal;
            resZas.textContent = data.zas;
            resSub.textContent = data.sub;

            // Obsługa alertu przekroczenia normy PN-EN 1264
            if (data.isOver) {
                tileLimit.className = "rk-res-tile norm-alert";
                resR.style.color = "var(--rk-res-red)";
            } else {
                tileLimit.className = "rk-res-tile";
                resR.style.color = "var(--rk-res-dark)";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-algo-dark: #0f172a;
    --rk-algo-brand: #8b5cf6; /* Inżynieryjny fiolet/indygo */
    --rk-algo-brand-light: #ede9fe;
    --rk-algo-accent: #f59e0b; /* Bursztyn dla akcentów ciepła */
    --rk-algo-blue: #0ea5e9;
    --rk-algo-bg: #ffffff;
    --rk-algo-panel: #f8fafc;
    --rk-algo-border: #e2e8f0;
    --rk-algo-text: #334155;
    --rk-algo-muted: #64748b;
    --rk-algo-green: #10b981;
}

.rk-algo-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-algo-bg);
    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-algo-header {
    background: linear-gradient(135deg, var(--rk-algo-dark) 0%, #2e1065 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-algo-brand);
    position: relative;
}

.rk-algo-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.25);
    color: #ddd6fe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(139, 92, 246, 0.4);
}

.rk-algo-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-algo-title span { color: #c4b5fd; }

.rk-algo-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-algo-lead strong {
    color: #ffffff;
    font-weight: 800;
}

/* Sekcja Interaktywna - Blueprint */
.rk-algo-interactive {
    padding: 40px 50px;
    background: var(--rk-algo-panel);
}

/* Nawigacja Krokowa (Step-by-step) */
.rk-algo-steps-nav {
    display: flex;
    justify-content: space-between;
    margin-bottom: 35px;
    position: relative;
}

.rk-algo-steps-nav::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 2px;
    background: var(--rk-algo-border);
    z-index: 1;
    transform: translateY(-50%);
}

.rk-step-btn {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: #ffffff;
    border: 2px solid var(--rk-algo-border);
    color: var(--rk-algo-muted);
    font-weight: 900;
    font-size: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    position: relative;
    z-index: 2;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}

.rk-step-btn:hover {
    border-color: var(--rk-algo-brand);
    color: var(--rk-algo-brand);
    transform: scale(1.1);
}

.rk-step-btn.active {
    background: var(--rk-algo-brand);
    border-color: var(--rk-algo-brand);
    color: #ffffff;
    box-shadow: 0 0 15px rgba(139, 92, 246, 0.4);
    transform: scale(1.15);
}

/* Dashboard Zawartości */
.rk-algo-dashboard {
    display: grid;
    grid-template-columns: 280px 1fr;
    gap: 35px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-algo-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
}

/* Obszar SVG (Styl Blueprint / Schemat) */
.rk-algo-svg-stage {
    background: #1e293b;
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    border: 2px solid #334155;
    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-algo-svg { width: 100%; height: auto; max-width: 220px; }

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s ease, transform 0.4s ease; transform: scale(0.95); width: 100%; height: 100%; }
.rk-svg-layer.active { opacity: 1; transform: scale(1); position: relative; }

/* Animacje SVG dla poszczególnych kroków */
/* Krok 1: Geometria */
.anim-measure { stroke-dasharray: 100; stroke-dashoffset: 100; animation: drawLine 1.5s forwards ease-out; }
/* Krok 2: U-value */
.anim-u-layer { opacity: 0; animation: fadeInDown 0.5s forwards; }
/* Krok 3: Straty bazowe */
.anim-heat-base { stroke-dasharray: 8 8; animation: heatFlowBase 1.5s linear infinite; }
/* Krok 4: Mostki */
.anim-bridge { animation: pulseBridge 1.5s infinite alternate; }
/* Krok 5: Wentylacja */
.anim-fan-spin { transform-origin: 50px 50px; animation: spinFan 2s linear infinite; }
.anim-air-flow { stroke-dasharray: 5 10; animation: heatFlowBase 1s linear infinite; }
/* Krok 6: Suma */
.anim-sum-glow { animation: pulseSum 2s infinite alternate; }

@keyframes drawLine { to { stroke-dashoffset: 0; } }
@keyframes fadeInDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes heatFlowBase { to { stroke-dashoffset: -16; } }
@keyframes pulseBridge { 0% { fill: #ef4444; filter: drop-shadow(0 0 2px #ef4444); } 100% { fill: #fca5a5; filter: drop-shadow(0 0 10px #ef4444); } }
@keyframes spinFan { to { transform: rotate(360deg); } }
@keyframes pulseSum { 0% { fill: #c4b5fd; filter: drop-shadow(0 0 5px #8b5cf6); } 100% { fill: #ffffff; filter: drop-shadow(0 0 20px #8b5cf6); } }

/* Treść Panelu */
.rk-algo-content {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-algo-step-badge {
    font-size: 11px;
    font-weight: 800;
    color: var(--rk-algo-brand);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
}

.rk-algo-content h3 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-algo-dark);
}

.rk-algo-content p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

/* Sekcja Wzoru (HTML Math zamiast LaTeX) */
.rk-algo-formula-box {
    background: var(--rk-algo-dark);
    border-radius: 12px;
    padding: 15px 20px;
    margin-top: auto;
    border-left: 4px solid var(--rk-algo-brand);
}

.rk-formula-math {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 20px;
    color: #ddd6fe;
    letter-spacing: 1px;
    margin: 0 0 8px 0;
    text-align: center;
}

.rk-formula-desc {
    font-size: 12px;
    color: #94a3b8;
    text-align: center;
    margin: 0;
}
.rk-formula-desc strong { color: #cbd5e1; }

@media (max-width: 768px) {
    .rk-algo-header, .rk-algo-interactive { padding: 35px 20px; }
    .rk-algo-title { font-size: 24px; }
    .rk-algo-dashboard { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-algo-svg-stage { height: 200px; max-width: 100%; margin-bottom: 10px; }
    .rk-step-btn { width: 36px; height: 36px; font-size: 14px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak wygląda uproszczony algorytm kalkulatora OZC?",
    "description": "Poznaj 6 kroków sekwencyjnego obliczania oporów przegród, strat bazowych, mostków termicznych i wentylacji wg 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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-algorytm",
    "name": "Algorytm obliczeniowy OZC - Zestawienie Wzorów",
    "description": "Zbiór uproszczonych formuł fizycznych używanych do wyznaczania projektowego obciążenia cieplnego budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator OZC algorytm",
      "straty bazowe przez przenikanie wzór",
      "poprawka na mostki termiczne",
      "obliczenie strat wentylacyjnych wzór",
      "współczynnik przenikania ciepła U"
    ],
    "measurementTechnique": "Sekwencyjna metoda obliczeniowa zgodna z normą PN-EN 12831 integrująca straty przenikania i wentylacji (ΦHL = ΦT,corr + ΦV,total).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1-2: Geometria (A, ΔT) i opór cieplny (U).",
        "Krok 3-4: Straty bazowe (ΦT,base) i korekta na mostki cieplne (+15%).",
        "Krok 5-6: Straty wentylacyjne (ΦV,total) uwzględniające rekuperację oraz suma końcowa mocy grzewczej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-algorytm",
    "name": "Interaktywny Algorytm OZC",
    "description": "Narzędzie demonstracyjne przeprowadzające użytkownika przez 6 kluczowych kroków inżynieryjnych obliczeń strat ciepła budynku.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-algo-container" id="rk-algo-app">
    
    <div class="rk-algo-header">
        <div class="rk-algo-badge">
            <svg width="14" height="14" 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>
            Inżynieria w pigułce
        </div>
        <h2 class="rk-algo-title">Jak wygląda <span>uproszczony algorytm</span> kalkulatora OZC?</h2>
        <p class="rk-algo-lead">
            Uproszczony algorytm obliczeniowy OZC opiera się na sekwencyjnym wyznaczaniu oporów przegród, strat bazowych oraz dodawaniu poprawek na mostki termiczne i wentylację zgodnie z rygorystyczną metodologią <strong>PN-EN 12831</strong>. Poniżej przedstawiamy 6 kluczowych kroków prowadzących do wyznaczenia ostatecznej mocy źródła ciepła.
        </p>
    </div>

    <div class="rk-algo-interactive">
        
        <div class="rk-algo-steps-nav" id="algoSteps">
            <div class="rk-step-btn active" data-step="1">1</div>
            <div class="rk-step-btn" data-step="2">2</div>
            <div class="rk-step-btn" data-step="3">3</div>
            <div class="rk-step-btn" data-step="4">4</div>
            <div class="rk-step-btn" data-step="5">5</div>
            <div class="rk-step-btn" data-step="6">6</div>
        </div>

        <div class="rk-algo-dashboard">
            
            <div class="rk-algo-svg-stage">
                
                <svg class="rk-svg-layer active" id="svg-step-1" viewBox="0 0 100 100">
                    <rect x="20" y="30" width="60" height="50" fill="none" stroke="#64748b" stroke-width="2"/>
                    <polygon points="20,30 50,10 80,30" fill="none" stroke="#64748b" stroke-width="2"/>
                    <line class="anim-measure" x1="10" y1="30" x2="10" y2="80" stroke="#38bdf8" stroke-width="2" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
                    <line class="anim-measure" x1="20" y1="90" x2="80" y2="90" stroke="#38bdf8" stroke-width="2" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
                    <text x="50" y="55" fill="#38bdf8" font-size="12" font-weight="bold" text-anchor="middle">ΔT</text>
                    <defs>
                        <marker id="arrow" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="4" markerHeight="4" orient="auto-start-reverse">
                            <path d="M 0 0 L 10 5 L 0 10 z" fill="#38bdf8" />
                        </marker>
                    </defs>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-2" viewBox="0 0 100 100">
                    <rect class="anim-u-layer" x="30" y="10" width="10" height="80" fill="#334155" />
                    <rect class="anim-u-layer" x="40" y="10" width="20" height="80" fill="#475569" style="animation-delay: 0.2s" />
                    <rect class="anim-u-layer" x="60" y="10" width="10" height="80" fill="#64748b" style="animation-delay: 0.4s" />
                    <text x="50" y="55" fill="#f59e0b" font-size="14" font-weight="bold" text-anchor="middle" style="animation-delay: 0.6s">U</text>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-3" viewBox="0 0 100 100">
                    <rect x="40" y="10" width="20" height="80" fill="#334155" />
                    <path class="anim-heat-base" d="M 80 30 L 20 30" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>
                    <path class="anim-heat-base" d="M 80 50 L 20 50" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round" style="animation-delay: 0.3s"/>
                    <path class="anim-heat-base" d="M 80 70 L 20 70" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round" style="animation-delay: 0.6s"/>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-4" viewBox="0 0 100 100">
                    <rect x="20" y="20" width="60" height="60" fill="none" stroke="#475569" stroke-width="6"/>
                    <rect x="35" y="35" width="30" height="30" fill="none" stroke="#64748b" stroke-width="4"/>
                    <circle class="anim-bridge" cx="35" cy="35" r="5" />
                    <circle class="anim-bridge" cx="65" cy="35" r="5" style="animation-delay: 0.2s" />
                    <circle class="anim-bridge" cx="35" cy="65" r="5" style="animation-delay: 0.4s" />
                    <circle class="anim-bridge" cx="65" cy="65" r="5" style="animation-delay: 0.6s" />
                </svg>

                <svg class="rk-svg-layer" id="svg-step-5" viewBox="0 0 100 100">
                    <circle cx="50" cy="50" r="30" fill="none" stroke="#475569" stroke-width="4"/>
                    <g class="anim-fan-spin">
                        <path d="M 50 50 L 50 25 A 25 25 0 0 1 75 50 Z" fill="#0ea5e9" opacity="0.8"/>
                        <path d="M 50 50 L 50 75 A 25 25 0 0 1 25 50 Z" fill="#0ea5e9" opacity="0.8"/>
                    </g>
                    <path class="anim-air-flow" d="M 10 50 L 30 50" fill="none" stroke="#38bdf8" stroke-width="3"/>
                    <path class="anim-air-flow" d="M 90 50 L 70 50" fill="none" stroke="#ef4444" stroke-width="3"/>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-6" viewBox="0 0 100 100">
                    <circle cx="50" cy="50" r="40" fill="none" stroke="#475569" stroke-width="2" stroke-dasharray="4 4"/>
                    <text class="anim-sum-glow" x="50" y="58" font-family="serif" font-size="28" font-weight="bold" text-anchor="middle">&Phi;</text>
                </svg>
            </div>

            <div class="rk-algo-content">
                <span class="rk-algo-step-badge" id="algoStepBadge">KROK 1 Z 6</span>
                <h3 id="algoTitle">Zdefiniowanie geometrii</h3>
                <p id="algoDesc">
                    Oblicz pola powierzchni wszystkich przegród zewnętrznych (A) z podziałem na kierunki świata oraz ustal projektową różnicę temperatur (ΔT) na podstawie strefy klimatycznej.
                </p>
                
                <div class="rk-algo-formula-box">
                    <div class="rk-formula-math" id="algoFormulaMath">&Delta;T = (&theta;<sub>int</sub> &minus; &theta;<sub>e</sub>)</div>
                    <p class="rk-formula-desc" id="algoFormulaDesc"><strong>&Delta;T</strong> &#8211; różnica temperatur zewn. i wewn.</p>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    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-algo-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // Elementy DOM
    const stepBtns = document.querySelectorAll('.rk-step-btn');
    const badge = document.getElementById('algoStepBadge');
    const title = document.getElementById('algoTitle');
    const desc = document.getElementById('algoDesc');
    const fMath = document.getElementById('algoFormulaMath');
    const fDesc = document.getElementById('algoFormulaDesc');

    // Baza danych algorytmu (Używamy zwykłego HTML dla matematyki)
    const algoData = {
        "1": {
            title: "Zdefiniowanie geometrii",
            desc: "Oblicz pola powierzchni wszystkich przegród zewnętrznych (A) z podziałem na kierunki świata oraz ustal projektową różnicę temperatur na podstawie lokalnej strefy klimatycznej.",
            math: "&Delta;T = (&theta;<sub>int</sub> &minus; &theta;<sub>e</sub>)",
            fdesc: "<strong>&Delta;T</strong> - różnica temperatur"
        },
        "2": {
            title: "Wyznaczenie współczynników U",
            desc: "Dla każdej przegrody oblicz opór cieplny warstw materiałowych R (dzieląc grubość przez przewodność), a następnie wyznacz ostateczny współczynnik przenikania ciepła U.",
            math: "U = 1 / (&Sigma;R + R<sub>si</sub> + R<sub>se</sub>)",
            fdesc: "<strong>U</strong> - współczynnik przenikania ciepła [W/(m&sup2;&middot;K)]"
        },
        "3": {
            title: "Kalkulacja strat bazowych",
            desc: "Pomnóż pole powierzchni danej przegrody przez jej współczynnik U oraz wyznaczoną wcześniej różnicę temperatur. Daje to czystą stratę przenikania bez błędów montażowych.",
            math: "&Phi;<sub>T,base</sub> = A &times; U &times; &Delta;T",
            fdesc: "<strong>&Phi;<sub>T,base</sub></strong> - bazowa strata przez przenikanie"
        },
        "4": {
            title: "Poprawka na mostki termiczne",
            desc: "Skoryguj straty bazowe o dodatek na mostki liniowe (miejsca słabszej izolacji m.in. przy oknach i nadprożach). Standardowo przyjmuje się dodatek +15% dla budownictwa tradycyjnego.",
            math: "&Phi;<sub>T,corr</sub> = &Phi;<sub>T,base</sub> &times; 1,15",
            fdesc: "<strong>1,15</strong> - uproszczony globalny dodatek na mostki"
        },
        "5": {
            title: "Obliczenie strat wentylacyjnych",
            desc: "Wyznacz strumień powietrza V [m³/h] zależnie od systemu. Oblicz stratę uwzględniając ciepło właściwe powietrza oraz sprawność odzysku ciepła (rekuperacji).",
            math: "&Phi;<sub>V,total</sub> = V &times; 0,34 &times; &Delta;T &times; (1 &minus; &eta;)",
            fdesc: "<strong>&eta;</strong> - sprawność odzysku ciepła (rekuperacji)"
        },
        "6": {
            title: "Sumowanie końcowe",
            desc: "Dodaj skorygowane straty przez przenikanie do obliczonych strat wentylacyjnych. Otrzymany wynik to całkowita szczytowa moc projektowa budynku, determinująca dobór pompy ciepła.",
            math: "&Phi;<sub>HL</sub> = &Phi;<sub>T,corr</sub> + &Phi;<sub>V,total</sub>",
            fdesc: "<strong>&Phi;<sub>HL</sub></strong> - Projektowe Obciążenie Cieplne (OZC)"
        }
    };

    // Logika kroków
    stepBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const step = this.getAttribute('data-step');
            
            // Przyciski
            stepBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // SVG Warstwy
            document.querySelectorAll('.rk-svg-layer').forEach(layer => layer.classList.remove('active'));
            document.getElementById('svg-step-' + step).classList.add('active');

            // Teksty
            const data = algoData[step];
            badge.textContent = "KROK " + step + " Z 6";
            title.textContent = data.title;
            desc.textContent = data.desc;
            fMath.innerHTML = data.math;
            fDesc.innerHTML = data.fdesc;
        });
    });
});
</script>



<style>
:root {
    --rk-sim-dark: #0f172a;
    --rk-sim-brand: #8b5cf6; /* Inżynieryjny fiolet */
    --rk-sim-brand-light: #ede9fe;
    --rk-sim-accent: #f59e0b; /* Bursztyn/Ciepło */
    --rk-sim-blue: #0ea5e9;
    --rk-sim-bg: #ffffff;
    --rk-sim-panel: #f8fafc;
    --rk-sim-border: #e2e8f0;
    --rk-sim-text: #334155;
    --rk-sim-muted: #64748b;
    --rk-sim-green: #10b981;
    --rk-sim-red: #ef4444;
}

.rk-sim-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-sim-bg);
    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-sim-header {
    background: linear-gradient(135deg, var(--rk-sim-dark) 0%, #2e1065 100%);
    padding: 40px 50px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-sim-brand);
    text-align: center;
}

.rk-sim-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.25);
    color: #ddd6fe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(139, 92, 246, 0.4);
}

.rk-sim-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 15px 0;
    color: #ffffff;
}

.rk-sim-title span { color: #c4b5fd; }

.rk-sim-lead {
    font-size: 16px;
    line-height: 1.6;
    color: #cbd5e1;
    margin: 0 auto;
    max-width: 800px;
}

/* Główny układ interfejsu */
.rk-sim-interactive {
    padding: 40px 50px;
    background: var(--rk-sim-panel);
}

/* Postęp w symulatorze */
.rk-sim-progress-bar {
    display: flex;
    justify-content: space-between;
    margin-bottom: 30px;
    position: relative;
    padding: 0 10px;
}

.rk-sim-progress-bar::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 20px;
    right: 20px;
    height: 4px;
    background: var(--rk-sim-border);
    z-index: 1;
    transform: translateY(-50%);
    border-radius: 2px;
}

.rk-sim-progress-fill {
    position: absolute;
    top: 50%;
    left: 20px;
    height: 4px;
    background: var(--rk-sim-brand);
    z-index: 1;
    transform: translateY(-50%);
    border-radius: 2px;
    transition: width 0.4s ease;
    width: 0%;
}

.rk-step-node {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-sim-border);
    color: transparent;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    z-index: 2;
    transition: all 0.4s ease;
}

.rk-step-node.completed { background: var(--rk-sim-brand); }
.rk-step-node.active { background: var(--rk-sim-brand); box-shadow: 0 0 0 6px var(--rk-sim-brand-light); }

/* Dashboard Symulatora */
.rk-sim-dashboard {
    display: grid;
    grid-template-columns: 1fr 300px;
    gap: 30px;
}

/* Sekcja formularzy (Lewa) */
.rk-sim-controls {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-sim-border);
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.02);
}

.rk-step-view { display: none; animation: fadeIn 0.4s ease; }
.rk-step-view.active { display: block; }

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

.rk-step-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-sim-dark);
    margin: 0 0 10px 0;
}

.rk-step-desc {
    font-size: 14px;
    color: var(--rk-sim-muted);
    line-height: 1.6;
    margin: 0 0 25px 0;
}

/* Elementy formularza */
.rk-form-group { margin-bottom: 25px; }

.rk-form-label {
    display: block;
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-sim-text);
    margin-bottom: 8px;
    text-transform: uppercase;
}

.rk-range-wrap {
    display: flex;
    align-items: center;
    gap: 15px;
}

.rk-range-input {
    flex: 1;
    -webkit-appearance: none;
    height: 8px;
    background: #e2e8f0;
    border-radius: 4px;
    outline: none;
}

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

.rk-val-display {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-sim-brand);
    min-width: 60px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* Radio Buttons dla standardów (Wymuszono układ pionowy) */
.rk-radio-group { 
    display: flex; 
    flex-direction: column; 
    gap: 10px; 
}

.rk-radio-btn {
    width: 100%;
    padding: 15px 20px;
    text-align: left;
    background: var(--rk-sim-panel);
    border: 2px solid var(--rk-sim-border);
    border-radius: 10px;
    cursor: pointer;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-sim-muted);
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.rk-radio-btn span {
    font-size: 12px;
    font-weight: 400;
}

.rk-radio-btn.selected {
    background: var(--rk-sim-brand-light);
    border-color: var(--rk-sim-brand);
    color: var(--rk-sim-brand);
}

/* Przyciski Nawigacji Wewnętrznej */
.rk-nav-actions {
    display: flex;
    flex-direction: row; /* Zawsze poziomo */
    justify-content: space-between;
    align-items: center;
    gap: 15px; /* Odstęp między przyciskami */
    margin-top: 30px;
    padding-top: 20px;
    border-top: 1px solid var(--rk-sim-border);
}

.rk-action-btn {
    padding: 14px 24px; /* Grubsze buttony */
    border-radius: 10px;
    font-size: 15px;
    font-weight: 800;
    cursor: pointer;
    transition: all 0.2s;
    border: none;
    flex: 1; /* Równy podział szerokości na mobile */
    text-align: center;
}

.rk-btn-prev { background: #e2e8f0; color: #64748b; flex: 0.5; /* Mniejszy guzik "Wróć" */ }
.rk-btn-prev:hover { background: #cbd5e1; }
.rk-btn-prev:disabled { opacity: 0; pointer-events: none; }

.rk-btn-next { background: var(--rk-sim-brand); color: #ffffff; box-shadow: 0 4px 10px rgba(139, 92, 246, 0.3); }
.rk-btn-next:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(139, 92, 246, 0.4); }

/* Sekcja Wyników (Prawa) */
.rk-sim-results-panel {
    background: var(--rk-sim-dark);
    border-radius: 20px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
}

.rk-res-header-txt {
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #94a3b8;
    margin-bottom: 20px;
    letter-spacing: 1px;
}

/* Wiersze podsumowania */
.rk-calc-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 0;
    border-bottom: 1px dashed rgba(255,255,255,0.1);
    font-size: 14px;
}

.rk-calc-row:last-of-type { border-bottom: none; }

.rk-row-lbl { color: #cbd5e1; }
.rk-row-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }
.rk-val-hl { color: var(--rk-sim-accent); }

/* Końcowy Wynik OZC */
.rk-final-result-box {
    margin-top: auto;
    background: rgba(139, 92, 246, 0.2);
    border: 1px solid rgba(139, 92, 246, 0.4);
    border-radius: 14px;
    padding: 20px;
    text-align: center;
}

.rk-final-lbl { font-size: 11px; font-weight: 800; color: #ddd6fe; text-transform: uppercase; margin-bottom: 5px; display: block; }
.rk-final-val { font-size: 32px; font-weight: 900; color: #ffffff; line-height: 1; margin-bottom: 5px; transition: color 0.3s;}
.rk-final-formula { font-size: 11px; color: #a78bfa; font-family: monospace; }

/* SVG Dynamiczny Wykres */
.rk-live-chart {
    height: 100px;
    margin-bottom: 20px;
    width: 100%;
}
.chart-bar { transition: height 0.4s ease, y 0.4s ease; }

@media (max-width: 768px) {
    .rk-sim-header, .rk-sim-interactive { padding: 30px 20px; }
    .rk-sim-title { font-size: 24px; }
    .rk-sim-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-radio-group { flex-direction: column; }
    .rk-step-view { min-height: auto; }
    .rk-action-btn { font-size: 13px; padding: 12px 16px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak wygląda uproszczony algorytm kalkulatora OZC?",
    "description": "Poznaj 4 kroki sekwencyjnego obliczania oporów przegród, strat bazowych, mostków termicznych i wentylacji wg 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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-algorytm",
    "name": "Algorytm obliczeniowy OZC - Zestawienie Wzorów",
    "description": "Zbiór uproszczonych formuł fizycznych używanych do wyznaczania projektowego obciążenia cieplnego budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator OZC algorytm",
      "straty bazowe przez przenikanie wzór",
      "poprawka na mostki termiczne",
      "obliczenie strat wentylacyjnych wzór",
      "współczynnik przenikania ciepła U"
    ],
    "measurementTechnique": "Sekwencyjna metoda obliczeniowa zgodna z normą PN-EN 12831 integrująca straty przenikania i wentylacji (ΦHL = ΦT,corr + ΦV,total).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Geometria ściany (A) i różnica temperatur (ΔT).",
        "Krok 2: Ustalenie oporu cieplnego (U) przegrody.",
        "Krok 3: Obliczenie bazowej straty przenikania z uwzględnieniem mostków termicznych.",
        "Krok 4: Dodanie strat wentylacyjnych (ΦV,total) uwzględniających rekuperację oraz suma końcowa mocy grzewczej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-algorytm",
    "name": "Kalkulator Edukacyjny OZC",
    "description": "Interaktywny symulator pozwalający na żywo przeliczać straty ciepła przykładowej ściany w zależności od parametrów izolacji i wentylacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-sim-container" id="rk-sim-app">
    
    <div class="rk-sim-header">
        <div class="rk-sim-badge">
            <svg width="14" height="14" 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>
            Inżynieria na żywo
        </div>
        <h2 class="rk-sim-title">Zrozum fizykę: <span>Uproszczony Kalkulator OZC</span></h2>
        <p class="rk-sim-lead">
            Algorytm obliczeniowy normy <strong>PN-EN 12831</strong> polega na żmudnym, sekwencyjnym wyznaczaniu oporów przegród, strat bazowych, mostków i wentylacji. Abyś zrozumiał skalę ucieczki ciepła ze swojego domu, stworzyliśmy uproszczony symulator. Sprawdź, jak jedna zmiana izolacji wpływa na wynik końcowy dla przykładowego pomieszczenia.
        </p>
    </div>

    <div class="rk-sim-interactive">
        
        <div class="rk-sim-progress-bar">
            <div class="rk-sim-progress-fill" id="simProgressLine"></div>
            <div class="rk-step-node active" id="node-1">1</div>
            <div class="rk-step-node" id="node-2">2</div>
            <div class="rk-step-node" id="node-3">3</div>
            <div class="rk-step-node" id="node-4">4</div>
        </div>

        <div class="rk-sim-dashboard">
            
            <div class="rk-sim-controls">
                
                <div class="rk-step-view active" id="view-1">
                    <h3 class="rk-step-title">Krok 1: Geometria i Klimat</h3>
                    <p class="rk-step-desc">Ustal pole powierzchni analizowanej ściany zewnętrznej oraz projektową różnicę temperatur na zewnątrz (Zima).</p>
                    
                    <div class="rk-form-group">
                        <label class="rk-form-label">Powierzchnia ściany (A)</label>
                        <div class="rk-range-wrap">
                            <input type="range" id="inpArea" class="rk-range-input" min="10" max="40" value="16" step="1">
                            <div class="rk-val-display"><span id="valAreaOut">16</span> m²</div>
                        </div>
                    </div>
                    
                    <div class="rk-form-group">
                        <label class="rk-form-label">Temperatura Zewnętrzna (θe)</label>
                        <div class="rk-range-wrap">
                            <input type="range" id="inpTemp" class="rk-range-input" min="-24" max="-16" value="-20" step="2">
                            <div class="rk-val-display"><span id="valTempOut">-20</span> °C</div>
                        </div>
                        <div style="font-size:11px; color:#94a3b8; margin-top:5px;">Wewn. stała: +20°C (ΔT = <span id="valDeltaOut">40</span>K)</div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-2">
                    <h3 class="rk-step-title">Krok 2: Izolacja (Współczynnik U)</h3>
                    <p class="rk-step-desc">Określ standard izolacji ściany. Zgodnie z prawem, mniejsze U oznacza lepsze zatrzymywanie ciepła.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn" data-u="1.20">
                            <strong>Stary dom</strong>
                            <span>Brak izolacji</span>
                        </div>
                        <div class="rk-radio-btn selected" data-u="0.15">
                            <strong>WT 2021</strong>
                            <span>Standard prawny</span>
                        </div>
                        <div class="rk-radio-btn" data-u="0.10">
                            <strong>Pasywny</strong>
                            <span>Izolacja premium</span>
                        </div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-3">
                    <h3 class="rk-step-title">Krok 3: Mostki termiczne</h3>
                    <p class="rk-step-desc">Pusta ściana to fikcja. Dodaj procentową poprawkę na okna, nadproża i błędy montażowe.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn selected" data-bridge="1.0">
                            <strong>0%</strong>
                            <span>Warunki laboratoryjne</span>
                        </div>
                        <div class="rk-radio-btn" data-bridge="1.15">
                            <strong>+15%</strong>
                            <span>Standard budowlany</span>
                        </div>
                        <div class="rk-radio-btn" data-bridge="1.30">
                            <strong>+30%</strong>
                            <span>Duże przeszklenia</span>
                        </div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-4">
                    <h3 class="rk-step-title">Krok 4: System Wentylacji</h3>
                    <p class="rk-step-desc">Zimne powietrze z zewnątrz wpadające do pokoju trzeba dogrzać. Wybierz rodzaj wentylacji.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn selected" data-vent="gravity">
                            <strong>Grawitacyjna (Naturalna)</strong>
                            <span>Zimne powietrze zasysane w 100% z zewnątrz.</span>
                        </div>
                        <div class="rk-radio-btn" data-vent="reku">
                            <strong>Rekuperacja (Odzysk 85%)</strong>
                            <span>Powietrze dogrzane w wymienniku ciepła.</span>
                        </div>
                    </div>
                </div>

                <div class="rk-nav-actions">
                    <button class="rk-action-btn rk-btn-prev" id="btnPrev" disabled>Wróć</button>
                    <button class="rk-action-btn rk-btn-next" id="btnNext">Przejdź dalej</button>
                </div>
            </div>

            <div class="rk-sim-results-panel">
                <div class="rk-res-header-txt">Bieżący Bilans Pomieszczenia</div>
                
                <svg class="rk-live-chart" viewBox="0 0 100 100" preserveAspectRatio="none">
                    <rect x="10" y="80" width="30" height="20" fill="#f59e0b" class="chart-bar" id="barTrans"/>
                    <rect x="60" y="80" width="30" height="20" fill="#0ea5e9" class="chart-bar" id="barVent"/>
                </svg>

                <div class="rk-calc-row">
                    <span class="rk-row-lbl">1. Przenikanie ściany:</span>
                    <span class="rk-row-val"><span id="outWall">96</span> W</span>
                </div>
                <div class="rk-calc-row">
                    <span class="rk-row-lbl">2. Poprawka (Mostki):</span>
                    <span class="rk-row-val" style="color:#ef4444;">+<span id="outBridge">0</span> W</span>
                </div>
                <div class="rk-calc-row">
                    <span class="rk-row-lbl">3. Strata wentylacyjna:</span>
                    <span class="rk-row-val" style="color:#38bdf8;">+<span id="outVent">408</span> W</span>
                </div>

                <div class="rk-final-result-box">
                    <span class="rk-final-lbl">Szacunkowe OZC (Moc grzewcza)</span>
                    <div class="rk-final-val"><span id="outTotal">504</span> W</div>
                    <div class="rk-final-formula">ΦHL = ΦT,corr + ΦV,total</div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    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-sim-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy Nawigacji
    let currentStep = 1;
    const totalSteps = 4;
    const btnNext = document.getElementById('btnNext');
    const btnPrev = document.getElementById('btnPrev');
    const progLine = document.getElementById('simProgressLine');

    // 3. Stan Kalkulatora
    let state = {
        area: 16,
        tempOut: -20,
        tempIn: 20,
        uValue: 0.15,
        bridgeFactor: 1.0,
        ventType: 'gravity'
    };

    // 4. Elementy Formularza
    const inpArea = document.getElementById('inpArea');
    const valAreaOut = document.getElementById('valAreaOut');
    const inpTemp = document.getElementById('inpTemp');
    const valTempOut = document.getElementById('valTempOut');
    const valDeltaOut = document.getElementById('valDeltaOut');

    const radUValues = document.querySelectorAll('#view-2 .rk-radio-btn');
    const radBridges = document.querySelectorAll('#view-3 .rk-radio-btn');
    const radVents = document.querySelectorAll('#view-4 .rk-radio-btn');

    // 5. Elementy Wyjściowe (Wyniki)
    const outWall = document.getElementById('outWall');
    const outBridge = document.getElementById('outBridge');
    const outVent = document.getElementById('outVent');
    const outTotal = document.getElementById('outTotal');
    const barTrans = document.getElementById('barTrans');
    const barVent = document.getElementById('barVent');

    // --- FUNKCJE OBLICZENIOWE ---
    function calculateOZC() {
        const deltaT = state.tempIn - state.tempOut;
        
        // 1. Przenikanie bazy (A * U * dT)
        const phiBase = state.area * state.uValue * deltaT;
        
        // 2. Przenikanie z mostkami
        const phiCorr = phiBase * state.bridgeFactor;
        const bridgeDiff = phiCorr - phiBase;

        // 3. Wentylacja (Uproszczenie dla pokoju: Kubatura ok 40m3. Strumień V=20m3/h)
        const vol = state.area * 2.5; // Kubatura
        let vAir = vol * 0.5; // Krotność wymiany
        let ventLoss = 0;

        if (state.ventType === 'gravity') {
            ventLoss = vAir * 0.34 * deltaT;
        } else {
            // Rekuperacja 85% sprawności
            ventLoss = vAir * 0.34 * deltaT * 0.15;
        }

        // 4. Suma Całkowita
        const totalLoss = phiCorr + ventLoss;

        // Aktualizacja interfejsu z animacją liczb
        animateValue(outWall, Math.round(phiBase));
        animateValue(outBridge, Math.round(bridgeDiff));
        animateValue(outVent, Math.round(ventLoss));
        animateValue(outTotal, Math.round(totalLoss));

        // Aktualizacja słupków SVG (Wizualizacja proporcji)
        // Zakładamy max wartość ok 2000W dla starych domów, by słupki nie wychodziły poza SVG
        const scale = 100 / 2000; 
        let hTrans = Math.min(Math.round(phiCorr * scale), 100);
        let hVent = Math.min(Math.round(ventLoss * scale), 100);
        
        // Zapewnienie minimalnej widoczności słupka
        hTrans = Math.max(hTrans, 2);
        hVent = Math.max(hVent, 2);

        barTrans.setAttribute('height', hTrans);
        barTrans.setAttribute('y', 100 - hTrans);
        barVent.setAttribute('height', hVent);
        barVent.setAttribute('y', 100 - hVent);
        
        // Kolorowanie finału
        const finalValBox = document.querySelector('.rk-final-val');
        if(totalLoss > 1000) { finalValBox.style.color = '#ef4444'; } 
        else if (totalLoss < 300) { finalValBox.style.color = '#10b981'; }
        else { finalValBox.style.color = '#ffffff'; }
    }

    function animateValue(obj, end) {
        // Prosta podmiana dla płynności na mobile, bez ciężkich setInterval
        obj.textContent = end;
    }

    // --- BINDING EVENTÓW ---

    // Krok 1: Suwaki
    inpArea.addEventListener('input', (e) => {
        state.area = parseInt(e.target.value);
        valAreaOut.textContent = state.area;
        calculateOZC();
    });

    inpTemp.addEventListener('input', (e) => {
        state.tempOut = parseInt(e.target.value);
        valTempOut.textContent = state.tempOut;
        valDeltaOut.textContent = state.tempIn - state.tempOut;
        calculateOZC();
    });

    // Funkcja pomocnicza dla Radio Buttonów
    function setupRadioGroup(nodes, stateKey, attrName) {
        nodes.forEach(btn => {
            btn.addEventListener('click', function() {
                nodes.forEach(b => b.classList.remove('selected'));
                this.classList.add('selected');
                const val = this.getAttribute(attrName);
                // Konwersja na float jeśli to liczba, zostaw string jeśli wentylacja
                state[stateKey] = isNaN(parseFloat(val)) ? val : parseFloat(val);
                calculateOZC();
            });
        });
    }

    // Krok 2, 3, 4: Radia
    setupRadioGroup(radUValues, 'uValue', 'data-u');
    setupRadioGroup(radBridges, 'bridgeFactor', 'data-bridge');
    setupRadioGroup(radVents, 'ventType', 'data-vent');


    // --- NAWIGACJA KROKOWA ---
    function updateNav() {
        // Przyciski 
        btnPrev.disabled = currentStep === 1;
        
        if (currentStep === totalSteps) {
            btnNext.textContent = 'Zakończ';
            if(btnNext.classList.contains('finalized')) return;
            
            // Po zamknięciu domknięcia procesu -> przekierowanie na zakup
            btnNext.onclick = function() { window.location.href = 'https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/'; }
            
            btnNext.classList.add('finalized');
        } else {
            btnNext.textContent = 'Przejdź dalej';
            btnNext.onclick = null; // Czyszczenie
            btnNext.classList.remove('finalized');
        }

        // Pasek postępu
        const progress = ((currentStep - 1) / (totalSteps - 1)) * 100;
        progLine.style.width = progress + '%';

        // Kropeczki
        document.querySelectorAll('.rk-step-node').forEach((node, index) => {
            node.classList.remove('active', 'completed');
            if (index + 1 === currentStep) node.classList.add('active');
            if (index + 1 < currentStep) node.classList.add('completed');
        });

        // Widoki (Panele)
        document.querySelectorAll('.rk-step-view').forEach(view => {
            view.classList.remove('active');
        });
        document.getElementById('view-' + currentStep).classList.add('active');
    }

    btnNext.addEventListener('click', () => {
        if (currentStep < totalSteps) {
            currentStep++;
            updateNav();
        }
    });

    btnPrev.addEventListener('click', () => {
        if (currentStep > 1) {
            currentStep--;
            updateNav();
        }
    });

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



<style>
:root {
    --rk-hyd-dark: #0f172a;
    --rk-hyd-brand: #0284c7; /* Inżynieryjny niebieski hydrauliczny */
    --rk-hyd-brand-light: #e0f2fe;
    --rk-hyd-accent: #f59e0b;
    --rk-hyd-screen: #0b1120;
    --rk-hyd-bg: #ffffff;
    --rk-hyd-panel: #f8fafc;
    --rk-hyd-border: #e2e8f0;
    --rk-hyd-text: #334155;
    --rk-hyd-muted: #64748b;
    --rk-hyd-green: #10b981;
    --rk-hyd-red: #ef4444;
}

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

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

.rk-hyd-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.25);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(2, 132, 199, 0.4);
}

.rk-hyd-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

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

.rk-hyd-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

.rk-hyd-lead strong { color: #ffffff; font-weight: 800; }

.rk-link-hyd {
    color: #38bdf8;
    text-decoration: none;
    border-bottom: 1px dashed #38bdf8;
    transition: all 0.3s;
}
.rk-link-hyd:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Box ze wzorem termodynamicznym */
.rk-hyd-eq-box {
    background: rgba(0, 0, 0, 0.3);
    border: 1px solid rgba(56, 189, 248, 0.3);
    border-radius: 16px;
    padding: 22px;
    text-align: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
}

.rk-hyd-eq {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 24px;
    color: #bae6fd;
    letter-spacing: 1px;
    margin: 0 0 10px 0;
}

.rk-hyd-eq-desc {
    font-size: 13px;
    color: #94a3b8;
    margin: 0;
}
.rk-hyd-eq-desc strong { color: #e2e8f0; }

/* Obszar Interaktywny */
.rk-hyd-interactive {
    padding: 40px 50px;
    background: var(--rk-hyd-panel);
}

/* Główny Dashboard */
.rk-hyd-dashboard {
    display: grid;
    grid-template-columns: 1fr 320px;
    gap: 30px;
}

/* Lewy Panel Kontrolek (Wszystko dostępne od razu) */
.rk-hyd-controls {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-hyd-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-hyd-panel-title {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-hyd-dark);
    margin: 0 0 25px 0;
    border-bottom: 2px solid var(--rk-hyd-panel);
    padding-bottom: 10px;
}

/* Grupy Formularzy */
.rk-hyd-group { margin-bottom: 30px; }
.rk-hyd-label { display: block; font-size: 12px; font-weight: 800; color: var(--rk-hyd-dark); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }

.rk-hyd-range-box { display: flex; align-items: center; gap: 15px; }
.rk-hyd-slider { flex: 1; -webkit-appearance: none; height: 8px; background: #e2e8f0; border-radius: 4px; outline: none; }
.rk-hyd-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 24px; height: 24px; border-radius: 50%; background: var(--rk-hyd-brand); cursor: pointer; border: 3px solid #ffffff; box-shadow: 0 2px 6px rgba(0,0,0,0.15); }

.rk-hyd-val-display { font-size: 18px; font-weight: 900; color: var(--rk-hyd-brand); min-width: 75px; text-align: right; font-variant-numeric: tabular-nums; }

/* Przyciski Opcji (Radio kafelki pionowe) */
.rk-hyd-radio-stack { display: flex; flex-direction: column; gap: 10px; }
.rk-hyd-radio-tile { width: 100%; padding: 14px 18px; text-align: left; background: var(--rk-hyd-panel); border: 2px solid var(--rk-hyd-border); border-radius: 12px; cursor: pointer; transition: all 0.2s; display: flex; flex-direction: column; gap: 4px; }
.rk-hyd-radio-tile strong { font-size: 14px; color: var(--rk-hyd-dark); }
.rk-hyd-radio-tile span { font-size: 12px; color: var(--rk-hyd-muted); font-weight: 400; }
.rk-hyd-radio-tile.selected { background: var(--rk-hyd-brand-light); border-color: var(--rk-hyd-brand); }

/* Prawy Panel Diagnostyczny (Rotametr) */
.rk-hyd-results-panel {
    background: var(--rk-hyd-dark);
    border-radius: 20px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    border: 2px solid #1e293b;
}

.rk-hyd-res-title { font-size: 11px; text-transform: uppercase; font-weight: 800; color: #94a3b8; margin-bottom: 20px; letter-spacing: 1px; text-align: center; }

/* Wizualizacja Rotametru SVG */
.rk-rotameter-stage {
    background: var(--rk-hyd-screen);
    border-radius: 14px;
    padding: 15px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.6);
    border: 1px solid #1e293b;
    margin-bottom: 20px;
}

.rk-rotameter-svg { width: 100%; height: 100%; max-width: 120px; }
.anim-float { transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
.anim-water { transition: height 0.4s ease, y 0.4s ease; fill: #0ea5e9; fill-opacity: 0.3; }

/* Parametry kafelkowe */
.rk-hyd-rows { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; }
.rk-hyd-row { display: flex; justify-content: space-between; align-items: center; font-size: 13.5px; padding-bottom: 8px; border-bottom: 1px dashed rgba(255,255,255,0.08); }
.rk-hyd-row:last-child { border-bottom: none; }
.rk-hyd-lbl { color: #cbd5e1; }
.rk-hyd-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }

/* Końcowa Skrzynka Wynikowa */
.rk-hyd-final-box {
    background: rgba(2, 132, 199, 0.15);
    border: 1px solid rgba(2, 132, 199, 0.3);
    border-radius: 12px;
    padding: 15px;
    text-align: center;
}
.rk-final-lbl { font-size: 11px; font-weight: 800; color: #38bdf8; text-transform: uppercase; margin-bottom: 4px; display: block; }
.rk-final-val { font-size: 30px; font-weight: 900; color: #ffffff; font-variant-numeric: tabular-nums; line-height: 1.1; }
.rk-final-unit { font-size: 16px; font-weight: 700; color: #38bdf8; }

@media (max-width: 768px) {
    .rk-hyd-header, .rk-hyd-interactive { padding: 30px 20px; }
    .rk-hyd-title { font-size: 22px; }
    .rk-hyd-dashboard { grid-template-columns: 1fr; gap: 25px; }
    .rk-hyd-controls { padding: 20px; }
    .rk-rotameter-stage { height: 150px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-przeplyw",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak obliczyć wymagany przepływ wody w pętli podłogowej na podstawie OZC?",
    "description": "Zobacz termodynamiczny wzór na przepływ masowy wody (Vmin) w pętlach ogrzewania podłogowego zgodnie z normą PN-EN 1264 na bazie OZC.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-przeplyw",
    "name": "Algorytm Równoważenia Hydraulicznego pętli pex/pert 16x2",
    "description": "Zestawienie obliczeniowe wymaganych przepływów czynnika grzewczego na rotametrach rozdzielacza w korelacji z obciążeniem OZC pomieszczeń.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wymagany przepływ wody podłogówka",
      "rotametr wskaznik przepływu nastawy",
      "równoważenie hydrauliczne rozdzielacza",
      "wzór na przepływ pętli podłogowej",
      "norma PN-EN 1264 hydraulika"
    ],
    "measurementTechnique": "Przeliczanie strumienia objętościowego czynnika na litry na minutę (l/min) przy ciepłu właściwym wody 4182 J/(kg K).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Formuła inżynierska redukuje stałe fizyczne do stabilnego dzielnika 69,7 pomnożonego przez spadek temperatury delta T.",
        "Sypialnia (Przykład 3): Obciążenie OZC 750W przy strefowej pracy pompy ciepła z delta T = 5K generuje precyzyjną nastawę 2,15 l/min."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-przeplyw",
    "name": "Symulator Nastaw Rotametrów Rozdzielacza",
    "description": "Interaktywny symulator wizualizujący unoszenie pływaka w rurce rotametru w oparciu o wprowadzane wartości obciążeń OZC pokoju.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Canvas/SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-hyd-container" id="rk-hyd-app">
    
    <div class="rk-hyd-header">
        <div class="rk-hyd-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21.5 12H16c-.55 0-1-.45-1-1V9c0-1.1-.9-2-2-2h-2c-1.1 0-2 .9-2 2v2c0 .55-.45 1-1 1H2.5"></path></svg>
            Balans Hydrauliczny Układu
        </div>
        <h2 class="rk-hyd-title">Jak obliczyć wymagany przepływ wody w pętli podłogowej na podstawie <span>OZC?</span></h2>
        <p class="rk-hyd-lead">
            Wymagany przepływ wody (<strong>V<sub>min</sub></strong>) w pętli podłogowej wylicza się ze stosunku obciążenia cieplnego pokoju do iloczynu ciepła właściwego wody i spadku temperatury &Delta;T, co określa norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a>. Prawidłowa wartość przepływu gwarantuje zrównoważenie hydrauliczne układu rozdzielacza, eliminując strefy niedogrzane.
        </p>
        
        <div class="rk-hyd-eq-box">
            <div class="rk-hyd-eq">
                V<sub>min</sub> = &Phi;<sub>HL,i</sub> / (69,7 &times; &Delta;T)
            </div>
            <p class="rk-hyd-eq-desc">
                Gdzie <strong>&Phi;<sub>HL,i</sub></strong> to moc projektowa z OZC [W], a <strong>&Delta;T</strong> to różnica temperatur zasilania i powrotu [K].
            </p>
        </div>
    </div>

    <div class="rk-hyd-interactive">
        <div class="rk-hyd-dashboard">
            
            <div class="rk-hyd-controls">
                <div class="rk-hyd-panel-title">Parametry wejściowe z OZC</div>
                
                <div class="rk-hyd-group">
                    <label class="rk-hyd-label">Obciążenie cieplne pokoju (&Phi;<sub>HL,i</sub>)</label>
                    <div class="rk-hyd-range-box">
                        <input type="range" id="hydInpPower" class="rk-hyd-slider" min="200" max="1500" value="750" step="50">
                        <div class="rk-hyd-val-display"><span id="hydValPowerOut">750</span> W</div>
                    </div>
                </div>

                <div class="rk-hyd-group">
                    <label class="rk-hyd-label">Projektowa różnica temperatur (&Delta;T)</label>
                    <div class="rk-hyd-radio-stack">
                        <div class="rk-hyd-radio-tile" data-dt="3">
                            <strong>&Delta;T = 3 K (Wysoki przepływ)</strong>
                            <span>Dedykowane do łazienek w celu utrzymania wysokiej temperatury podłogi.</span>
                        </div>
                        <div class="rk-hyd-radio-tile selected" data-dt="5">
                            <strong>&Delta;T = 5 K (Standard Pompy Ciepła)</strong>
                            <span>Układ nisko-parametrowy 35/30°C gwarantujący najwyższy współczynnik COP.</span>
                        </div>
                        <div class="rk-hyd-radio-tile" data-dt="8">
                            <strong>&Delta;T = 8 K (Standard Kotłów)</strong>
                            <span>Rzadszy przepływ masowy czynnika, typowy dla układów z kotłami gazowymi.</span>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-hyd-results-panel">
                <div class="rk-hyd-res-title">Nastawa Rotametru Rozdzielacza</div>
                
                <div class="rk-rotameter-stage">
                    <svg class="rk-rotameter-svg" viewBox="0 0 100 100">
                        <rect x="42" y="10" width="16" height="80" fill="none" stroke="#64748b" stroke-width="2" rx="2"/>
                        <rect class="anim-water" x="43" y="50" width="14" height="40" />
                        
                        <line x1="38" y1="20" x2="44" y2="20" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="22" fill="#64748b" font-size="6" font-weight="bold">5</text>
                        <line x1="38" y1="35" x2="44" y2="35" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="37" fill="#64748b" font-size="6" font-weight="bold">4</text>
                        <line x1="38" y1="50" x2="44" y2="50" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="52" fill="#64748b" font-size="6" font-weight="bold">3</text>
                        <line x1="38" y1="65" x2="44" y2="65" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="67" fill="#64748b" font-size="6" font-weight="bold">2</text>
                        <line x1="38" y1="80" x2="44" y2="80" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="82" fill="#64748b" font-size="6" font-weight="bold">1</text>
                        
                        <g class="anim-float" id="hydRotameterFloat" transform="translate(0, 40)">
                            <polygon points="44,20 56,20 53,25 47,25" fill="#ef4444"/>
                            <rect x="47" y="25" width="6" height="3" fill="#ef4444"/>
                        </g>
                        <line x1="50" y1="10" x2="50" y2="90" stroke="#fbbf24" stroke-width="1" opacity="0.4"/>
                    </svg>
                </div>

                <div class="rk-hyd-rows">
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Moc obiegu (&Phi;):</span>
                        <span class="rk-hyd-val"><span id="lblHydPower">750</span> W</span>
                    </div>
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Projektowe &Delta;T:</span>
                        <span class="rk-hyd-val"><span id="lblHydDT">5</span> K</span>
                    </div>
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Stała inżynierska:</span>
                        <span class="rk-hyd-val">69,7</span>
                    </div>
                </div>

                <div class="rk-hyd-final-box">
                    <span class="rk-final-lbl">Wymagany przepływ (Vmin)</span>
                    <div class="rk-final-val"><span id="lblHydTotal">2.15</span> <span class="rk-final-unit">l/min</span></div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków w kodzie błędu)
    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-hyd-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji skryptu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja rotametryczna oraz struktury danych Dataset są własnością intelektualną Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Stan wejściowy kalkulatora
    let state = {
        power: 750,
        dT: 5
    };

    // 3. Elementy DOM
    const inpPower = document.getElementById('hydInpPower');
    const valPowerOut = document.getElementById('hydValPowerOut');
    const radTiles = document.querySelectorAll('.rk-hyd-radio-tile');

    // Pola wyjściowe wyników (Unikalne prefiksy hyd)
    const lblHydPower = document.getElementById('lblHydPower');
    const lblHydDT = document.getElementById('lblHydDT');
    const lblHydTotal = document.getElementById('lblHydTotal');
    const hydRotameterFloat = document.getElementById('hydRotameterFloat');

    // 4. Silnik obliczeń termodynamicznych przepływu masowego
    function updateFlowKalk() {
        const vMin = state.power / (69.7 * state.dT);
        
        lblHydPower.textContent = state.power;
        lblHydDT.textContent = state.dT;
        lblHydTotal.textContent = vMin.toFixed(2);

        // Skalowanie pozycji czerwonego pływaka rotometru (zakres 0 - 5 l/min)
        let pixelY = 65 - ((vMin - 1) * 15);
        if (pixelY < 0) pixelY = 0;
        if (pixelY > 65) pixelY = 65;

        hydRotameterFloat.setAttribute('transform', 'translate(0, ' + pixelY + ')');
    }

    // 5. Obsługa zdarzeń
    inpPower.addEventListener('input', function(e) {
        state.power = parseInt(e.target.value);
        valPowerOut.textContent = state.power;
        updateFlowKalk();
    });

    radTiles.forEach(tile => {
        tile.addEventListener('click', function() {
            radTiles.forEach(t => t.classList.remove('selected'));
            this.classList.add('selected');
            state.dT = parseInt(this.getAttribute('data-dt'));
            updateFlowKalk();
        });
    });

    // Uruchomienie obliczeń startowych
    updateFlowKalk();
});
</script>



<style>
:root {
    --rk-sum-dark: #0f172a;
    --rk-sum-panel: #1e293b;
    --rk-sum-primary: #10b981; /* Emerald/Green for success/summary */
    --rk-sum-primary-light: #d1fae5;
    --rk-sum-accent: #3b82f6; /* Blue for water */
    --rk-sum-warning: #f59e0b;
    --rk-sum-bg: #f8fafc;
    --rk-sum-border: #cbd5e1;
    --rk-sum-text: #334155;
    --rk-sum-text-dim: #64748b;
}

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

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

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

.rk-expert-avatar {
    width: 90px;
    height: 90px;
    border-radius: 50%;
    border: 3px solid var(--rk-sum-primary);
    box-shadow: 0 0 20px rgba(16, 185, 129, 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(16, 185, 129, 0.2);
    color: #6ee7b7;
    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(110, 231, 183, 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: #94a3b8;
    font-size: 14px;
    margin: 0;
    font-weight: 500;
}

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

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

.rk-rule-btn {
    background: #ffffff;
    border: 1px solid var(--rk-sum-border);
    padding: 18px 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-sum-primary);
    transform: translateX(4px);
}

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

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

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

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

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

/* Panel Detali (Prawy) */
.rk-rule-details {
    padding: 40px;
    position: relative;
}

.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-sum-dark);
}

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

.rk-sum-link {
    color: var(--rk-sum-accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dotted var(--rk-sum-accent);
    transition: 0.3s;
}
.rk-sum-link:hover { border-bottom-style: solid; color: #1d4ed8; }

.rk-detail-svg {
    width: 100%;
    height: 160px;
    background: var(--rk-sum-dark);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.5);
}

/* Narzędzie Szybkiego Szacowania (Kalkulator) */
.rk-quick-calc {
    background: var(--rk-sum-panel);
    padding: 35px 50px;
    border-top: 1px solid #1e293b;
    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 2fr;
    gap: 40px;
    align-items: center;
}

.rk-calc-input-area {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.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-sum-range {
    -webkit-appearance: none; width: 100%; height: 6px; border-radius: 3px; background: #334155; outline: none;
}
.rk-sum-range::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 22px; height: 22px; border-radius: 50%;
    background: var(--rk-sum-primary); cursor: pointer; border: 3px solid #ffffff; transition: 0.1s;
}
.rk-sum-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: 15px;
    border-radius: 12px;
    text-align: center;
}

.rk-result-box.highlight { border-color: var(--rk-sum-primary); background: rgba(16, 185, 129, 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-sum-primary); }
.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-summary-author {
    background: #f1f5f9;
    padding: 30px 50px;
    display: flex;
    align-items: flex-start;
    gap: 25px;
    border-top: 1px solid var(--rk-sum-border);
}

.rk-author-photo-small {
    width: 75px;
    height: 75px;
    border-radius: 50%;
    border: 3px solid var(--rk-sum-primary);
    box-shadow: 0 4px 15px rgba(16, 185, 129, 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-sum-dark);
}

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

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

.rk-author-links a {
    color: var(--rk-sum-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: #1d4ed8;
    text-decoration: underline;
}

/* Animacje SVG */
.anim-check-draw { stroke-dasharray: 100; stroke-dashoffset: 100; animation: drawCheck 1.5s forwards ease-out; }
@keyframes drawCheck { to { stroke-dashoffset: 0; } }

.anim-pulse-ring { animation: pulseRing 2s infinite; transform-origin: center; }
@keyframes pulseRing { 0% { transform: scale(0.8); opacity: 1; } 100% { transform: scale(1.5); opacity: 0; } }

.anim-water-wave { animation: waveWater 3s linear infinite; }
@keyframes waveWater { 0% { transform: translateX(0); } 100% { transform: translateX(-20px); } }

@media (max-width: 768px) {
    .rk-summary-header { flex-direction: column; text-align: center; padding: 30px 20px; }
    .rk-expert-avatar { width: 70px; height: 70px; }
    .rk-summary-body { grid-template-columns: 1fr; }
    .rk-rules-list { border-right: none; border-bottom: 1px solid var(--rk-sum-border); padding: 20px; }
    .rk-rule-details { padding: 25px 20px; }
    .rk-calc-grid { grid-template-columns: 1fr; gap: 25px; }
    .rk-quick-calc { padding: 30px 20px; }
    .rk-calc-results { grid-template-columns: 1fr; }
    .rk-summary-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/projektowe-obciazenie-cieplne-ozc/#article-summary-final",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Inżynierskie podsumowanie: Rola OZC w systemie grzewczym",
    "description": "Kompaktowe zestawienie reguł projektowych łączących wyniki OZC z geometrią pętli i zrównoważeniem hydraulicznym rozdzielacza.",
    "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": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-summary",
    "name": "Wskaźniki OZC dla domów jednorodzinnych (WT 2021)",
    "description": "Szacunkowe dane przeliczeniowe łączące metraż budynku w standardzie WT 2021 z mocą pompy ciepła i ilością obiegów grzewczych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podsumowanie instalacji ozc",
      "szybki estymator ozc",
      "zapotrzebowanie na moc cieplną",
      "dobór pompy ciepła na podstawie ozc",
      "ilość pętli ogrzewania podłogowego"
    ],
    "measurementTechnique": "Szacowanie oparte na średnim wskaźniku 40 W/m2 dla budynków spełniających normę WT 2021 oraz optymalnej wielkości obwodu podłogówki.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Średnie zapotrzebowanie (WT 2021): ~40 W/m2",
        "Szacunkowa moc urządzenia: OZC + bufor na straty i CWU",
        "Średnia powierzchnia na 1 obieg grzewczy: ~15 m2 (przy rozstawie 15 cm)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-summary",
    "name": "Szybki Estymator OZC (WT 2021)",
    "description": "Moduł podsumowujący. Przelicza powierzchnię domu wybudowanego w standardzie WT 2021 na orientacyjne obciążenie cieplne, moc pompy i ilość pętli.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Forms",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-summary-container" id="rk-summary-app">
    
    <div class="rk-summary-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: OZC to serce instalacji</h2>
            <p>Zebrałem dla Ciebie 3 najważniejsze reguły projektowe łączące OZC z wykonawstwem podłogówki. Brak precyzyjnych obliczeń na etapie projektu to gwarancja problemów i strat finansowych.</p>
        </div>
    </div>

    <div class="rk-summary-body">
        
        <div class="rk-rules-list">
            <button class="rk-rule-btn active" data-panel="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"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg></div>
                <div class="rk-rule-text">
                    <h3>Koniec ze &#8222;zgadywaniem&#8221;</h3>
                    <p>OZC to jedyny matematyczny dowód</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="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>Ochrona kapitału (Pompa)</h3>
                    <p>Zabezpieczenie przed przewymiarowaniem</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="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><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg></div>
                <div class="rk-rule-text">
                    <h3>Parametry układu</h3>
                    <p>Rozstaw rur i równoważenie l/min</p>
                </div>
            </button>
        </div>

        <div class="rk-rule-details">
            
            <div class="rk-detail-panel active" id="det-1">
                <h4>OZC to fundament projektu</h4>
                <p>Każde pomieszczenie gubi ciepło w innym tempie. Zgadywanie mocy cieplnej &#8222;na oko&#8221; (np. mnożąc m² przez losową wartość) prowadzi do katastrofy w rachunkach. Rzetelne <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-sum-link">obliczenia OZC</a> to twardy matematyczny fundament, na którym opiera się cały późniejszy dobór urządzeń.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <path d="M 50 80 L 50 40 L 100 15 L 150 40 L 150 80 Z" fill="none" stroke="#334155" stroke-width="3" stroke-linejoin="round"/>
                        <path d="M 100 35 L 120 45 L 120 65 Q 100 85 100 85 Q 80 65 80 45 Z" fill="#10b981" opacity="0.2" stroke="#10b981" stroke-width="2"/>
                        <path class="anim-check-draw" d="M 90 55 L 98 63 L 112 47" fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="det-2">
                <h4>Stop przewymiarowaniu pomp</h4>
                <p>Zbyt duża pompa ciepła, dobrana przez instalatora &#8222;dla bezpieczeństwa&#8221; bez OZC, będzie <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-sum-link">taktować</a>. Zjawisko to niszczy sprężarkę i podwaja zużycie prądu. OZC upewnia nas, że pompa zostanie dobrana idealnie do obciążenia budynku w punkcie biwalencyjnym.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="75" y="25" width="50" height="50" fill="#1e293b" stroke="#38bdf8" stroke-width="3" rx="4"/>
                        <circle class="anim-pulse-ring" cx="100" cy="50" r="15" fill="none" stroke="#10b981" stroke-width="2"/>
                        <circle cx="100" cy="50" r="15" fill="none" stroke="#38bdf8" stroke-width="2"/>
                        <path d="M 100 40 L 100 60 M 90 50 L 110 50 M 93 43 L 107 57 M 93 57 L 107 43" stroke="#ffffff" stroke-width="2" stroke-linecap="round"/>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="det-3">
                <h4>Hydraulika bez tajemnic</h4>
                <p>Mając OZC poszczególnych pokoi, projektant wie, gdzie zagęścić rozstaw rur do 10 cm, a gdzie pozostawić 15 cm. Ponadto, wynik OZC (Waty) pozwala przeliczyć <a href="https://projekt-ogrzewania.pl/regulacja-ogrzewania-podlogowego-przeplywy-w-petlach/" class="rk-sum-link">przepływ w l/min</a> dla każdego rotametru na rozdzielaczu. To gwarancja zrównoważenia układu.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="85" y="20" width="30" height="60" fill="none" stroke="#cbd5e1" stroke-width="3" rx="4"/>
                        <path class="anim-water-wave" d="M 85 40 Q 92 35 100 40 T 115 40 T 130 40 L 130 80 L 85 80 Z" fill="#3b82f6" opacity="0.8"/>
                        <polygon points="90,45 110,45 105,55 95,55" fill="#ef4444"/>
                        <text x="140" y="52" fill="#10b981" font-size="12" font-weight="bold">V = 1.8 l/min</text>
                    </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-sum-primary)" stroke-width="2.5"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="8" y1="6" x2="16" y2="6"></line><line x1="16" y1="14" x2="16.01" y2="14"></line><line x1="12" y1="14" x2="12.01" y2="14"></line><line x1="8" y1="14" x2="8.01" y2="14"></line><line x1="16" y1="18" x2="16.01" y2="18"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="8" y1="18" x2="8.01" y2="18"></line></svg>
                Szybki Estymator OZC (Dla standardu WT 2021)
            </h4>
            <span style="font-size:12px; color:#64748b;">(Wartości orientacyjne)</span>
        </div>

        <div class="rk-calc-grid">
            
            <div class="rk-calc-input-area">
                <div class="rk-calc-label">
                    Powierzchnia ogrzewana domu:
                    <span id="sumAreaOut">150 m²</span>
                </div>
                <input type="range" class="rk-sum-range" id="sumAreaSlider" min="80" max="300" step="10" value="150">
                <p style="font-size: 11px; color:#64748b; margin:0;">*Zakładane zapotrzebowanie ok. 40 W/m² (nowe budownictwo).</p>
            </div>

            <div class="rk-calc-results">
                <div class="rk-result-box">
                    <span class="rk-res-val" id="resOzc">6.0 <span style="font-size:14px;color:#64748b;">kW</span></span>
                    <span class="rk-res-lab">Szacunkowe OZC</span>
                </div>
                <div class="rk-result-box highlight">
                    <span class="rk-res-val" id="resPump">7.0 <span style="font-size:14px;color:var(--rk-sum-primary);">kW</span></span>
                    <span class="rk-res-lab">Sugerowana Pompa Ciepła</span>
                </div>
                <div class="rk-result-box">
                    <span class="rk-res-val" id="resLoops">10 <span style="font-size:14px;color:#64748b;">szt.</span></span>
                    <span class="rk-res-lab">Szacowana liczba obiegów</span>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-summary-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 błędami i przewymiarowanymi instalacjami.</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() {
    // 1. Zabezpieczenie Domenowe (DOMAIN LOCK)
    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-summary-app').innerHTML = `
            <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border:1px solid #ef4444; border-radius:24px; font-weight:800;">
                BŁĄD LICENCJI: Kod podsumowania jest własnością projekt-ogrzewania.pl
            </div>`;
        return;
    }

    // 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', () => {
            // Reset
            btns.forEach(b => b.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

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

    // 3. Logika Szybkiego Estymatora OZC
    const slider = document.getElementById('sumAreaSlider');
    const areaOut = document.getElementById('sumAreaOut');
    const resOzc = document.getElementById('resOzc');
    const resPump = document.getElementById('resPump');
    const resLoops = document.getElementById('resLoops');

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

        // Obliczenia:
        // Zakładamy WT2021 (40 W/m2)
        const ozc_W = area * 40;
        const ozc_kW = ozc_W / 1000;
        
        // Pompa Ciepła: OZC + lekki naddatek na straty (np. 1kW)
        const pump_kW = Math.ceil(ozc_kW + 1);

        // Średnio 1 obieg (pętla) na 15 m2
        const loops = Math.ceil(area / 15);

        resOzc.innerHTML = ozc_kW.toFixed(1) + ' <span style="font-size:14px;color:#64748b;">kW</span>';
        resPump.innerHTML = pump_kW.toFixed(1) + ' <span style="font-size:14px;color:var(--rk-sum-primary);">kW</span>';
        resLoops.innerHTML = loops + ' <span style="font-size:14px;color:#64748b;">szt.</span>';
    }

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



<style>
:root {
    --rk-base-dark: #0f172a;
    --rk-base-panel: #1e293b;
    --rk-base-card: #ffffff;
    --rk-brand-primary: #f59e0b; /* Złoty bursztyn jako główny akcent (ciepło) */
    --rk-brand-light: #fef3c7;
    --rk-brand-hover: #d97706;
    --rk-state-green: #10b981;
    --rk-state-red: #ef4444;
    --rk-text-main: #334155;
    --rk-text-muted: #64748b;
    --rk-border-color: #e2e8f0;
}

.rk-geo-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-base-card);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(245, 158, 11, 0.15);
    border: 1px solid rgba(245, 158, 11, 0.25);
    overflow: hidden;
}

/* Sekcja Nagłówka */
.rk-geo-header {
    background: var(--rk-base-dark);
    padding: 40px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-brand-primary);
    position: relative;
}

.rk-geo-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(245, 158, 11, 0.2);
    color: var(--rk-brand-primary);
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(245, 158, 11, 0.4);
}

.rk-geo-header h2 {
    font-size: 26px;
    font-weight: 900;
    line-height: 1.4;
    margin: 0 0 15px 0;
    color: #ffffff;
}

.rk-geo-header h2 span { color: var(--rk-brand-primary); }

.rk-geo-lead {
    font-size: 15px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

.rk-geo-lead strong { color: #ffffff; font-weight: 700; }
.rk-link-geo { color: var(--rk-brand-primary); text-decoration: none; border-bottom: 1px dashed var(--rk-brand-primary); transition: all 0.3s; }
.rk-link-geo:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Pulpit Interaktywny */
.rk-geo-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-geo-dashboard {
    display: grid;
    grid-template-columns: 1fr 340px;
    gap: 30px;
}

/* Panel Kontrolek (Lewy) */
.rk-geo-controls {
    background: #ffffff;
    border-radius: 16px;
    padding: 30px;
    border: 1px solid var(--rk-border-color);
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.03);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-geo-panel-title {
    font-size: 17px;
    font-weight: 800;
    color: var(--rk-base-dark);
    margin: 0 0 25px 0;
    border-bottom: 2px solid #f1f5f9;
    padding-bottom: 12px;
}

.rk-geo-group { margin-bottom: 30px; }
.rk-geo-label { display: block; font-size: 12px; font-weight: 800; color: var(--rk-text-muted); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }

.rk-geo-range-box { display: flex; align-items: center; gap: 15px; }
.rk-geo-slider { flex: 1; -webkit-appearance: none; height: 6px; background: #e2e8f0; border-radius: 3px; outline: none; }
.rk-geo-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%; background: var(--rk-brand-primary); cursor: pointer; border: 3px solid #ffffff; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: transform 0.1s; }
.rk-geo-slider::-webkit-slider-thumb:active { transform: scale(1.2); }

.rk-geo-val-display { font-size: 20px; font-weight: 900; color: var(--rk-base-dark); min-width: 85px; text-align: right; font-variant-numeric: tabular-nums; }
.rk-geo-val-display span { color: var(--rk-brand-primary); }

/* Kafelki wyboru rozstawu */
.rk-geo-tile-stack { display: flex; flex-direction: column; gap: 12px; }
.rk-geo-tile-option { width: 100%; padding: 14px 18px; text-align: left; background: #ffffff; border: 2px solid var(--rk-border-color); border-radius: 10px; cursor: pointer; transition: all 0.2s; display: flex; flex-direction: column; gap: 4px; position: relative; overflow: hidden; }
.rk-geo-tile-option strong { font-size: 15px; color: var(--rk-base-dark); }
.rk-geo-tile-option span { font-size: 12px; color: var(--rk-text-muted); font-weight: 500; }

.rk-geo-tile-option::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: transparent; transition: background 0.2s; }
.rk-geo-tile-option.selected { background: var(--rk-brand-light); border-color: var(--rk-brand-primary); }
.rk-geo-tile-option.selected::before { background: var(--rk-brand-primary); }
.rk-geo-tile-option.selected strong { color: var(--rk-brand-hover); }

/* Wyniki i Wizualizacja (Prawa) */
.rk-geo-results-panel {
    background: var(--rk-base-panel);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    border: 1px solid #334155;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.1);
}

.rk-geo-res-title { font-size: 11px; text-transform: uppercase; font-weight: 800; color: #94a3b8; margin-bottom: 15px; letter-spacing: 1px; text-align: center; }

/* Nowy Dwuczęściowy Schemat SVG (Przekrój + Wskaźnik Oporu) */
.rk-geo-svg-stage {
    background: var(--rk-base-dark);
    border-radius: 12px;
    padding: 10px;
    height: 160px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.5);
    margin-bottom: 20px;
    position: relative;
    border: 1px solid #334155;
}

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

/* Klasy kontrolujące widoczność warstw termowizji */
.therm-layer { opacity: 0; transition: opacity 0.5s ease; }
.rk-geo-svg-stage[data-spacing="20"] .therm-20 { opacity: 1; }
.rk-geo-svg-stage[data-spacing="15"] .therm-15 { opacity: 1; }
.rk-geo-svg-stage[data-spacing="10"] .therm-10 { opacity: 1; }

/* Animacje statycznego wskaźnika oporu pompy */
.pump-indicator { transition: stroke-dashoffset 0.6s cubic-bezier(0.4, 0, 0.2, 1), stroke 0.6s; stroke-linecap: round; }
.pump-status-icon { transition: fill 0.6s; }

/* Stany pompy obiegowej */
.rk-geo-svg-stage[data-pump="normal"] .pump-indicator { stroke: var(--rk-state-green); stroke-dashoffset: 130; }
.rk-geo-svg-stage[data-pump="normal"] .pump-status-icon { fill: var(--rk-state-green); }

.rk-geo-svg-stage[data-pump="warning"] .pump-indicator { stroke: var(--rk-brand-primary); stroke-dashoffset: 60; }
.rk-geo-svg-stage[data-pump="warning"] .pump-status-icon { fill: var(--rk-brand-primary); }

.rk-geo-svg-stage[data-pump="critical"] .pump-indicator { stroke: var(--rk-state-red); stroke-dashoffset: 10; animation: pulseCritical 0.5s infinite alternate; }
.rk-geo-svg-stage[data-pump="critical"] .pump-status-icon { fill: var(--rk-state-red); animation: pulseCritical 0.5s infinite alternate; }

@keyframes pulseCritical {
    from { opacity: 0.6; filter: drop-shadow(0 0 2px var(--rk-state-red)); }
    to { opacity: 1; filter: drop-shadow(0 0 8px var(--rk-state-red)); }
}

/* Parametry liczbowe */
.rk-geo-rows { display: flex; flex-direction: column; gap: 10px; margin-bottom: 25px; }
.rk-geo-row { display: flex; justify-content: space-between; align-items: center; font-size: 13px; padding-bottom: 8px; border-bottom: 1px dashed rgba(255,255,255,0.05); }
.rk-geo-row:last-child { border-bottom: none; }
.rk-geo-lbl { color: #cbd5e1; }
.rk-geo-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }

.rk-geo-status-box {
    background: rgba(16, 185, 129, 0.1);
    border: 1px solid rgba(16, 185, 129, 0.2);
    border-radius: 10px;
    padding: 15px;
    text-align: center;
    transition: all 0.3s;
    margin-top: auto;
}
.rk-status-lbl { font-size: 10px; font-weight: 800; color: var(--rk-state-green); text-transform: uppercase; margin-bottom: 6px; display: block; letter-spacing: 0.5px; }
.rk-status-val { font-size: 13px; font-weight: 600; color: #ffffff; line-height: 1.4; }

/* Sekcja Mocnego CTA */
.rk-geo-cta-block {
    background: var(--rk-base-panel);
    padding: 30px 50px;
    border-top: 2px solid var(--rk-brand-primary);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 30px;
}

.rk-geo-cta-text h4 { font-size: 17px; font-weight: 800; color: #ffffff; margin: 0 0 6px 0; }
.rk-geo-cta-text p { font-size: 13px; color: #94a3b8; margin: 0; line-height: 1.5; }
.rk-geo-cta-btn {
    background: var(--rk-brand-primary);
    color: #ffffff;
    padding: 15px 30px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 800;
    text-decoration: none;
    box-shadow: 0 4px 15px rgba(245, 158, 11, 0.3);
    transition: all 0.2s;
    white-space: nowrap;
    border: none;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.rk-geo-cta-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(245, 158, 11, 0.4); background: var(--rk-brand-hover); }

@media (max-width: 768px) {
    .rk-geo-header, .rk-geo-interactive, .rk-geo-cta-block { padding: 30px 20px; }
    .rk-geo-header h2 { font-size: 22px; }
    .rk-geo-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-geo-controls { padding: 20px; }
    .rk-geo-svg-stage { height: 140px; }
    .rk-geo-cta-block { flex-direction: column; text-align: center; gap: 15px; }
    .rk-geo-cta-btn { width: 100%; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-geometria",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak OZC wpływa na projekt ogrzewania podłogowego?",
    "description": "Zobacz, jak wyniki projektowego obciążenia cieplnego (OZC) determinują geometrię pętli, rozstaw rur grzewczych oraz zrównoważenie hydrauliczne rozdzielacza.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-geometria",
    "name": "Parametry geometryczno-hydrauliczne pętli podłogówki na bazie OZC",
    "description": "Zależność rozstawu rur grzewczych, oporów ciśnienia oraz długości obiegów grzewczych w funkcji gęstości zapotrzebowania na moc szczytową pomieszczeń.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowanie ogrzewania podłogowego rozstaw",
      "maksymalna długość pętli podłogówki 16mm",
      "strefy brzegowe pod dużymi przeszkleniami",
      "zbalansowanie hydrauliczne rozdzielacza",
      "obciążenie cieplne a opory ciśnienia"
    ],
    "measurementTechnique": "Symulacja gęstości układania rur pex oraz wyznaczanie strat ciśnienia w pętli grzewczej zgodnie z wytycznymi normy PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zależność geometryczna: Wyższe obciążenie szczytowe wymusza gęstszy rozstaw rur (co 10 cm) w celu uniknięcia przewymiarowania temperatury zasilania.",
        "Ograniczenie hydrauliczne: Maksymalna długość obwodu dla średnicy 16mm wynosi 100-120m, chroniąc układ przed oporami paraliżującymi pompy obiegowe."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-geometria",
    "name": "Symulator Geometrii i Oporów Hydraulicznych Pętli",
    "description": "Interaktywny analizator pozwalający inwestorom sprawdzić, jak zapotrzebowanie na moc i rozstaw rur wpływają na długość obwodu i ciśnienie instalacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires modern browser with SVG and JavaScript enabled",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-geo-container" id="rk-geo-app">
    
    <div class="rk-geo-header">
        <div class="rk-geo-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg>
            Wpływ OZC na wykonawstwo
        </div>
        <h2>Jak to wpływa na projekt ogrzewania podłogowego?</h2>
        <p class="rk-geo-lead">
            Projektowe Obciążenie Cieplne bezpośrednio determinuje geometrię i parametry hydrauliczne instalacji płaszczyznowej. Na podstawie uzyskanych wyników szczytowych dla każdego pokoju, projektant dobiera optymalny rozstaw rur grzewczych, zapobiegając nadmiernym oporom ciśnienia. 
            <br><br>
            OZC pozwala także na dokładne zlokalizowanie stref brzegowych pod dużymi przeszkleniami oraz precyzyjny dobór pomp ciepła. Bez tych danych <a href="https://projekt-ogrzewania.pl/regulacja-ogrzewania-podlogowego-przeplywy-w-petlach/" class="rk-link-geo">zbalansowanie hydrauliczne rozdzielacza</a> jest niewykonalne, co skazuje inwestora na losowe, nieefektywne działanie systemu.
        </p>
    </div>

    <div class="rk-geo-interactive">
        <div class="rk-geo-dashboard">
            
            <div class="rk-geo-controls">
                <div class="rk-geo-panel-title">Analizator Pętli Grzewczej (Pokój 20 m²)</div>
                
                <div class="rk-geo-group">
                    <label class="rk-geo-label">Obciążenie cieplne pokoju (OZC)</label>
                    <div class="rk-geo-range-box">
                        <input type="range" id="geoInpPower" class="rk-geo-slider" min="300" max="1400" value="800" step="50">
                        <div class="rk-geo-val-display"><span id="geoValPowerOut">800</span> W</div>
                    </div>
                </div>

                <div class="rk-geo-group" style="margin-bottom:0;">
                    <label class="rk-geo-label">Planowany rozstaw rur grzewczych</label>
                    <div class="rk-geo-tile-stack">
                        <div class="rk-geo-tile-option" data-spacing="10">
                            <strong>co 10 cm</strong>
                            <span>Gęsty (Łazienki / Strefy brzegowe)</span>
                        </div>
                        <div class="rk-geo-tile-option selected" data-spacing="15">
                            <strong>co 15 cm</strong>
                            <span>Standard budowlany (WT 2021)</span>
                        </div>
                        <div class="rk-geo-tile-option" data-spacing="20">
                            <strong>co 20 cm</strong>
                            <span>Rzadki / Ekonomiczny (WT 2014)</span>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-geo-results-panel">
                <div class="rk-geo-res-title">Opory i Zagęszczenie Rur (Pętla 16mm)</div>
                
                <div class="rk-geo-svg-stage" id="geoSvgStage" data-spacing="15" data-pump="normal">
                    <svg class="rk-geo-svg" viewBox="0 0 250 110">
                        <defs>
                            <filter id="heatGlow" x="-20%" y="-20%" width="140%" height="140%">
                                <feGaussianBlur stdDeviation="3" result="blur" />
                                <feComposite in="SourceGraphic" in2="blur" operator="over" />
                            </filter>
                        </defs>

                        <text x="75" y="15" fill="#64748b" font-size="7" font-weight="bold" text-anchor="middle" letter-spacing="0.5">ROZKŁAD TEMPERATUR (TERMOWIZJA)</text>
                        <rect x="10" y="25" width="130" height="75" fill="#1e3a8a" rx="4" stroke="#334155" stroke-width="2"/>
                        
                        <g class="therm-layer therm-20">
                            <path d="M 15 35 L 135 35 M 15 55 L 135 55 M 15 75 L 135 75 M 15 90 L 135 90" stroke="#f59e0b" stroke-width="10" filter="url(#heatGlow)"/>
                        </g>
                        <g class="therm-layer therm-15">
                            <path d="M 15 32 L 135 32 M 15 45 L 135 45 M 15 58 L 135 58 M 15 71 L 135 71 M 15 84 L 135 84 M 15 95 L 135 95" stroke="#ef4444" stroke-width="11" filter="url(#heatGlow)"/>
                        </g>
                        <g class="therm-layer therm-10">
                            <path d="M 15 30 L 135 30 M 15 38 L 135 38 M 15 46 L 135 46 M 15 54 L 135 54 M 15 62 L 135 62 M 15 70 L 135 70 M 15 78 L 135 78 M 15 86 L 135 86 M 15 94 L 135 94" stroke="#ef4444" stroke-width="12" filter="url(#heatGlow)"/>
                        </g>

                        <text x="200" y="15" fill="#64748b" font-size="7" font-weight="bold" text-anchor="middle" letter-spacing="0.5">OPÓR POMPY OBIEGOWEJ</text>
                        
                        <path d="M 170 65 A 30 30 0 0 1 230 65" fill="none" stroke="#1e293b" stroke-width="8" stroke-linecap="round"/>
                        <path class="pump-indicator" d="M 170 65 A 30 30 0 0 1 230 65" fill="none" stroke-width="8" stroke-dasharray="94"/>
                        
                        <circle cx="200" cy="60" r="8" class="pump-status-icon"/>
                        <path d="M 197 57 L 204 60 L 197 63 Z" fill="#0b1120"/>

                        <text x="200" y="90" fill="#ffffff" font-size="7" font-weight="bold" text-anchor="middle" id="geoPumpText">STABILNIE</text>
                    </svg>
                </div>

                <div class="rk-geo-rows">
                    <div class="rk-geo-row">
                        <span class="rk-geo-lbl">Szacowana długość rury:</span>
                        <span class="rk-geo-val"><span id="geoOutLength">148</span> m</span>
                    </div>
                    <div class="rk-geo-row">
                        <span class="rk-geo-lbl">Rozkład temperatury:</span>
                        <span class="rk-geo-val" id="geoOutEdge">Równomierny</span>
                    </div>
                </div>

                <div class="rk-geo-status-box" id="geoStatusBox">
                    <span class="rk-status-lbl" id="geoStatusLbl">Status układu</span>
                    <div class="rk-status-val" id="geoStatusVal">Pętla zbyt długa! Wykonawca musi podzielić obieg.</div>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-geo-cta-block">
        <div class="rk-geo-cta-text">
            <h4>Nie ryzykuj układania podłogówki „na intuicję” instalatora</h4>
            <p>Zamów profesjonalny, kompletny projekt hydrauliczny oparty o rzetelne obliczenia OZC.</p>
        </div>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-geo-cta-btn">Zamów profesjonalny projekt</a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    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-geo-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd integralności danych</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja symulacji matrycy hydraulicznej stanowi zastrzeżoną część portalu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Stan kalkulatora
    let geoState = {
        power: 800,
        spacing: 15
    };

    // 3. Elementy DOM
    const inpPower = document.getElementById('geoInpPower');
    const valPowerOut = document.getElementById('geoValPowerOut');
    const tileOptions = document.querySelectorAll('.rk-geo-tile-option');
    
    // SVG Elements
    const svgStage = document.getElementById('geoSvgStage');
    const pumpText = document.getElementById('geoPumpText');

    // Elementy wyjściowe
    const outLength = document.getElementById('geoOutLength');
    const outEdge = document.getElementById('geoOutEdge');
    const statusBox = document.getElementById('geoStatusBox');
    const statusLbl = document.getElementById('geoStatusLbl');
    const statusVal = document.getElementById('geoStatusVal');

    // 4. Silnik obliczeń inżynierskich dla pokoju 20m2
    function updateHydraulics() {
        // Obliczenie zapotrzebowania na rurę: Powierzchnia(20) / rozstaw + podejścia(15)
        let calculatedLength = Math.round((20 / (geoState.spacing / 100)) + 15);
        outLength.textContent = calculatedLength;

        // Aktualizacja widoczności warstw termowizji w SVG (data-spacing)
        svgStage.setAttribute('data-spacing', geoState.spacing.toString());

        // Analiza "Zebry termicznej"
        if (geoState.spacing === 20) {
            outEdge.textContent = "Ryzyko niedogrzanych stref";
            outEdge.style.color = "var(--rk-brand-primary)";
        } else if (geoState.spacing === 15) {
            outEdge.textContent = "Normatywny (Dobra dystrybucja)";
            outEdge.style.color = "var(--rk-state-green)";
        } else {
            outEdge.textContent = "Zagęszczony (Idealny rozkład)";
            outEdge.style.color = "var(--rk-state-green)";
        }

        // Klasyfikacja hydrauliczna pompy na podstawie długości (limit 120m)
        if (calculatedLength > 120) {
            svgStage.setAttribute('data-pump', 'critical');
            pumpText.textContent = "KRYTYCZNE (>35 kPa)";
            pumpText.setAttribute("fill", "#ef4444");

            statusBox.style.backgroundColor = "rgba(239, 68, 68, 0.1)";
            statusBox.style.borderColor = "rgba(239, 68, 68, 0.2)";
            statusLbl.style.color = "var(--rk-state-red)";
            statusVal.textContent = "Pętla zbyt długa! Wysokie opory zdławią pompę. Wykonawca musi podzielić obwód.";
        } else if (calculatedLength >= 100 && calculatedLength <= 120) {
            svgStage.setAttribute('data-pump', 'warning');
            pumpText.textContent = "PODWYŻSZONE OPORY";
            pumpText.setAttribute("fill", "#f59e0b");

            statusBox.style.backgroundColor = "rgba(245, 158, 11, 0.1)";
            statusBox.style.borderColor = "rgba(245, 158, 11, 0.2)";
            statusLbl.style.color = "var(--rk-brand-primary)";
            statusVal.textContent = "Granica normy (ok. 100m). Wymaga precyzyjnego równoważenia na rozdzielaczu.";
        } else {
            svgStage.setAttribute('data-pump', 'normal');
            pumpText.textContent = "OPTYMALNE (<15 kPa)";
            pumpText.setAttribute("fill", "#10b981");

            statusBox.style.backgroundColor = "rgba(16, 185, 129, 0.1)";
            statusBox.style.borderColor = "rgba(16, 185, 129, 0.2)";
            statusLbl.style.color = "var(--rk-state-green)";
            statusVal.textContent = "Bezpieczne parametry pętli. Pompa pracuje na maksymalnym współczynniku wydajności.";
        }
    }

    // 5. Zdarzenia wejściowe
    inpPower.addEventListener('input', function(e) {
        geoState.power = parseInt(e.target.value);
        valPowerOut.innerHTML = `<span>${geoState.power}</span> W`;
        updateHydraulics();
    });

    tileOptions.forEach(tile => {
        tile.addEventListener('click', function() {
            tileOptions.forEach(t => t.classList.remove('selected'));
            this.classList.add('selected');
            geoState.spacing = parseInt(this.getAttribute('data-spacing'));
            updateHydraulics();
        });
    });

    // Inicjalizacja formatowania tekstu suwaka
    valPowerOut.innerHTML = `<span>${geoState.power}</span> W`;

    // Uruchomienie kalkulatora
    updateHydraulics();
});
</script>



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-brand: #2563eb; /* Inżynieryjny niebieski */
    --rk-cs-brand-light: #eff6ff;
    --rk-cs-accent: #10b981; /* Zielony dla oszczędności / OZC */
    --rk-cs-alert: #ef4444; /* Czerwony dla błędów instalatora */
    --rk-cs-bg: #ffffff;
    --rk-cs-panel: #f8fafc;
    --rk-cs-border: #e2e8f0;
    --rk-cs-text: #475569;
    --rk-cs-muted: #94a3b8;
}

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

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

.rk-cs-header::after {
    content: '';
    position: absolute;
    top: -50px;
    right: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(37, 99, 235, 0.4) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    pointer-events: none;
}

.rk-cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #bfdbfe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(255, 255, 255, 0.2);
    position: relative;
    z-index: 2;
}

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

.rk-cs-title span { color: #60a5fa; }

/* Grid Statystyk w Nagłówku */
.rk-cs-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.rk-cs-stat-box {
    background: rgba(0, 0, 0, 0.25);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
    backdrop-filter: blur(4px);
}

.rk-cs-stat-lbl { display: block; font-size: 11px; color: #94a3b8; text-transform: uppercase; font-weight: 800; margin-bottom: 6px; letter-spacing: 0.5px; }
.rk-cs-stat-val { display: block; font-size: 16px; font-weight: 900; color: #ffffff; }
.rk-cs-stat-val.highlight { color: #10b981; }

/* Główny Panel Interaktywny */
.rk-cs-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-cs-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-cs-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
    overflow: hidden;
}

/* Lewa Kolumna - Kontrola i Zestawienie */
.rk-cs-comparison {
    padding: 30px;
    display: flex;
    flex-direction: column;
}

.rk-cs-comp-title {
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-cs-dark);
    margin: 0 0 20px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* Toggle Switch (Przełącznik) */
.rk-cs-toggle-wrapper {
    display: flex;
    background: var(--rk-cs-panel);
    border: 2px solid var(--rk-cs-border);
    border-radius: 12px;
    padding: 4px;
    margin-bottom: 30px;
    position: relative;
}

.rk-cs-toggle-btn {
    flex: 1;
    text-align: center;
    padding: 12px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-cs-muted);
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 2;
}

.rk-cs-toggle-btn.active.mode-bad { color: #ffffff; }
.rk-cs-toggle-btn.active.mode-good { color: #ffffff; }

.rk-cs-toggle-bg {
    position: absolute;
    top: 4px;
    bottom: 4px;
    width: calc(50% - 4px);
    border-radius: 8px;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 1;
}

.rk-cs-dashboard[data-mode="bad"] .rk-cs-toggle-bg { left: 4px; background: var(--rk-cs-alert); box-shadow: 0 4px 10px rgba(239, 68, 68, 0.3); }
.rk-cs-dashboard[data-mode="good"] .rk-cs-toggle-bg { left: calc(50%); background: var(--rk-cs-accent); box-shadow: 0 4px 10px rgba(16, 185, 129, 0.3); }

/* Wiersze Danych */
.rk-cs-data-rows { display: flex; flex-direction: column; gap: 15px; }
.rk-cs-data-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-bottom: 12px;
    border-bottom: 1px dashed var(--rk-cs-border);
}
.rk-cs-data-row:last-child { border-bottom: none; }
.rk-cs-data-lbl { font-size: 13px; color: var(--rk-cs-text); font-weight: 600; }
.rk-cs-data-val { font-size: 15px; font-weight: 900; transition: color 0.3s; font-variant-numeric: tabular-nums; }

.rk-cs-dashboard[data-mode="bad"] .rk-cs-data-val { color: var(--rk-cs-alert); }
.rk-cs-dashboard[data-mode="good"] .rk-cs-data-val { color: var(--rk-cs-accent); }

/* Prawa Kolumna - Wizualizacja SVG */
.rk-cs-visual {
    background: var(--rk-cs-dark);
    padding: 30px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
}

.rk-cs-svg-stage { width: 100%; height: 200px; }

/* SVG Animacje */
.anim-hp-box { transition: all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); transform-origin: center bottom; }
.anim-fan { transform-origin: 150px 100px; }
.anim-pipe { transition: all 0.5s ease; stroke-dasharray: 4 4; }

.rk-cs-dashboard[data-mode="bad"] .anim-hp-box { transform: scale(1.1); fill: #450a0a; stroke: #ef4444; }
.rk-cs-dashboard[data-mode="bad"] .anim-fan { animation: fanSpin 0.5s linear infinite; fill: #ef4444; }
.rk-cs-dashboard[data-mode="bad"] .anim-pipe { stroke: #ef4444; stroke-width: 4; stroke-dasharray: 20 10; }

.rk-cs-dashboard[data-mode="good"] .anim-hp-box { transform: scale(0.85); fill: #064e3b; stroke: #10b981; }
.rk-cs-dashboard[data-mode="good"] .anim-fan { animation: fanSpin 2s linear infinite; fill: #10b981; }
.rk-cs-dashboard[data-mode="good"] .anim-pipe { stroke: #10b981; stroke-width: 2; stroke-dasharray: none; }

@keyframes fanSpin { 100% { transform: rotate(360deg); } }

/* Odznaka Oszczędności (Wyskakująca) */
.rk-cs-savings-badge {
    position: absolute;
    top: 20px;
    right: 20px;
    background: var(--rk-cs-accent);
    color: #ffffff;
    padding: 10px 15px;
    border-radius: 12px;
    font-weight: 900;
    font-size: 16px;
    box-shadow: 0 10px 20px rgba(16, 185, 129, 0.4);
    opacity: 0;
    transform: translateY(-10px) scale(0.9);
    transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.rk-cs-dashboard[data-mode="good"] .rk-cs-savings-badge { opacity: 1; transform: translateY(0) scale(1); }

/* Autor i Opis */
.rk-cs-author-section {
    padding: 0 50px 30px 50px;
    background: #f8fafc;
}

.rk-cs-author-box {
    background: #ffffff;
    border-left: 4px solid var(--rk-cs-brand);
    padding: 20px;
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    gap: 20px;
    box-shadow: 0 4px 15px rgba(0,0,0,0.03);
    border: 1px solid var(--rk-cs-border);
    border-left: 4px solid var(--rk-cs-brand);
}

.rk-cs-author-photo {
    width: 60px;
    height: 60px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--rk-cs-brand-light);
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2);
    flex-shrink: 0;
}

.rk-cs-author-text p { margin: 0; font-size: 14px; color: var(--rk-cs-text); line-height: 1.6; }
.rk-cs-author-text strong { color: var(--rk-cs-dark); font-weight: 800; }

/* Sekcja Mocnego CTA */
.rk-cs-cta-block {
    background: linear-gradient(135deg, #1e1b4b 0%, var(--rk-cs-dark) 100%);
    padding: 35px 50px;
    border-top: 1px solid rgba(37, 99, 235, 0.2);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 30px;
}

.rk-cs-cta-text h4 { font-size: 18px; font-weight: 800; color: #ffffff; margin: 0 0 8px 0; }
.rk-cs-cta-text p { font-size: 14px; color: #94a3b8; margin: 0; line-height: 1.5; }
.rk-cs-cta-btn {
    background: var(--rk-cs-brand);
    color: #ffffff;
    padding: 16px 32px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    text-decoration: none;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.5);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    white-space: nowrap;
    border: none;
    text-transform: uppercase;
}
.rk-cs-cta-btn:hover { transform: translateY(-3px); box-shadow: 0 15px 25px -5px rgba(37, 99, 235, 0.6); background: #3b82f6; }

@media (max-width: 768px) {
    .rk-cs-header, .rk-cs-interactive, .rk-cs-author-section, .rk-cs-cta-block { padding: 30px 20px; }
    .rk-cs-title { font-size: 24px; }
    .rk-cs-stats-grid { grid-template-columns: 1fr 1fr; }
    .rk-cs-dashboard { grid-template-columns: 1fr; }
    .rk-cs-svg-stage { height: 160px; }
    .rk-cs-author-box { flex-direction: column; text-align: center; }
    .rk-cs-cta-block { flex-direction: column; text-align: center; gap: 20px; }
    .rk-cs-cta-btn { width: 100%; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Case Study: OZC dla domu w Nowym Targu (174 m²)",
    "description": "Zakończyliśmy pełne opracowanie OZC dla domu 174m2 w V strefie klimatycznej (-24 st C). Zmiana pompy ciepła z 10 kW na 5 kW dała 6500 PLN oszczędności.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-04-14",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-casestudy",
    "name": "Wyniki optymalizacji OZC - Nowy Targ",
    "description": "Porównanie doboru pompy ciepła na podstawie intuicji instalatora vs precyzyjne wyliczenia OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "pompa ciepła 5kW vs 10kW",
      "OZC Nowy Targ V strefa klimatyczna",
      "rozstaw rur 15cm i 10cm",
      "przepływ zasilania 1.8 l/min",
      "oszczędność na pompie 6500 PLN"
    ],
    "measurementTechnique": "Analiza cieplna budynku OZC i projektowanie hydrauliczne wg PN-EN 12831.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Lokalizacja: Nowy Targ (V strefa, -24°C), Dom tradycyjny ceramika + 22cm EPS, Wentylacja mechaniczna.",
        "Obciążenie całkowite: 4,85 kW, pozwalające na redukcję pompy z 10 kW na 5 kW.",
        "Zysk: 6500 PLN, rozstaw salon 15 cm / łazienki 10 cm, przepływy: 1.8 l/min."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-casestudy",
    "name": "Kalkulator Oszczędności OZC",
    "description": "Interaktywny panel prezentujący realne oszczędności (6500 PLN) wynikające z przeliczenia instalatora vs inżyniera w Nowym Targu.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires modern browser with SVG and JavaScript enabled",
    "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">Case Study: Kwiecień 2025</div>
        <h2 class="rk-cs-title">Instalator vs Inżynier: <span>Oszczędność 6 500 PLN</span></h2>
        
        <div class="rk-cs-stats-grid">
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Inwestor</span>
                <span class="rk-cs-stat-val">Pan Mariusz</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Lokalizacja</span>
                <span class="rk-cs-stat-val">Nowy Targ (-24°C)</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Powierzchnia</span>
                <span class="rk-cs-stat-val">174 m²</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Obciążenie (OZC)</span>
                <span class="rk-cs-stat-val highlight">4,85 kW</span>
            </div>
        </div>
    </div>

    <div class="rk-cs-interactive">
        
        <div class="rk-cs-dashboard" id="csDashboard" data-mode="bad">
            
            <div class="rk-cs-comparison">
                <h3 class="rk-cs-comp-title">Wybierz scenariusz doboru:</h3>
                
                <div class="rk-cs-toggle-wrapper">
                    <div class="rk-cs-toggle-bg"></div>
                    <div class="rk-cs-toggle-btn active mode-bad" id="btnModeBad" data-target="bad">Intuicja Instalatora</div>
                    <div class="rk-cs-toggle-btn mode-good" id="btnModeGood" data-target="good">Twarde OZC (Inżynieria)</div>
                </div>

                <div class="rk-cs-data-rows">
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Moc Pompy Ciepła:</span>
                        <span class="rk-cs-data-val" id="valPump">10 kW (Przewymiarowana)</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Rozstaw rur (Salon):</span>
                        <span class="rk-cs-data-val" id="valSpace">&#8222;Jak wyjdzie&#8221;</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Nastawy rotametrów:</span>
                        <span class="rk-cs-data-val" id="valFlow">Wszystko na 100%</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Koszt inwestycji:</span>
                        <span class="rk-cs-data-val" id="valCost">Drogo i nieefektywnie</span>
                    </div>
                </div>
            </div>

            <div class="rk-cs-visual">
                <div class="rk-cs-savings-badge">+ 6 500 PLN w kieszeni!</div>
                
                <div class="rk-cs-svg-stage">
                    <svg viewBox="0 0 300 200" width="100%" height="100%">
                        <path class="anim-pipe" d="M 50 180 L 250 180 M 50 170 L 250 170 M 50 160 L 250 160" stroke-linecap="round"/>
                        
                        <path d="M 150 20 L 50 80 L 50 150 L 250 150 L 250 80 Z" fill="none" stroke="#334155" stroke-width="4" stroke-linejoin="round"/>
                        
                        <g class="anim-hp-box" transform="translate(0, 0)">
                            <rect x="110" y="70" width="80" height="80" rx="8" stroke-width="4"/>
                            <g class="anim-fan">
                                <circle cx="150" cy="110" r="25" fill="#0f172a" opacity="0.5"/>
                                <path d="M 150 85 L 165 110 L 135 110 Z"/>
                                <path d="M 150 135 L 135 110 L 165 110 Z"/>
                                <circle cx="150" cy="110" r="5" fill="#ffffff"/>
                            </g>
                        </g>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-cs-author-section">
        <div class="rk-cs-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-cs-author-photo" loading="lazy">
            <div class="rk-cs-author-text">
                <p>14 kwietnia 2025 r. zakończyliśmy dokumentację dla budynku w Nowym Targu (ceramika + 22cm EPS, rekuperacja). Projektowe obciążenie wyniosło zaledwie <strong>4,85 kW</strong> przy strefie V (-24°C). Pozwoliło to odrzucić propozycję wykonawcy (10 kW), dobrać pompę 5 kW i wyznaczyć precyzyjny rozstaw rur co 15 cm i 10 cm, z przepływami rzędu 1,8 l/min. <strong>Wynik? Zbalansowany układ i fizyczna oszczędność 6500 zł dla Inwestora.</strong></p>
            </div>
        </div>
    </div>

    <div class="rk-cs-cta-block">
        <div class="rk-cs-cta-text">
            <h4>Przestań przepłacać za przewymiarowane urządzenia</h4>
            <p>Zamów projekt OZC + Ogrzewanie Podłogowe i odzyskaj kontrolę nad budżetem budowy.</p>
        </div>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-cs-cta-btn">Zamów Pakiet Projektowy</a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    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-cs-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji modułu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja Case Study należy do portalu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy DOM
    const dashboard = document.getElementById('csDashboard');
    const btnBad = document.getElementById('btnModeBad');
    const btnGood = document.getElementById('btnModeGood');
    
    // Pola Danych
    const valPump = document.getElementById('valPump');
    const valSpace = document.getElementById('valSpace');
    const valFlow = document.getElementById('valFlow');
    const valCost = document.getElementById('valCost');

    // 3. Baza Danych Scenariuszy
    const dataScenarios = {
        bad: {
            pump: "10 kW (Przewymiarowana)",
            space: "Intuicyjnie / Losowo",
            flow: "Maksymalne na pompie",
            cost: "Ogromne rachunki i zjawisko taktowania"
        },
        good: {
            pump: "5 kW (Idealnie dobrana OZC)",
            space: "15 cm (Salon) / 10 cm (Łazienka)",
            flow: "Precyzyjne 1,8 l/min",
            cost: "Zoptymalizowane + zysk na starcie"
        }
    };

    // 4. Silnik Przełączania
    function setMode(mode) {
        // Zmiana atrybutu głównego (napędza CSS i SVG)
        dashboard.setAttribute('data-mode', mode);
        
        // Klasy przycisków
        if (mode === 'bad') {
            btnBad.classList.add('active');
            btnGood.classList.remove('active');
        } else {
            btnGood.classList.add('active');
            btnBad.classList.remove('active');
        }

        // Aktualizacja tekstów
        const data = dataScenarios[mode];
        valPump.textContent = data.pump;
        valSpace.textContent = data.space;
        valFlow.textContent = data.flow;
        valCost.textContent = data.cost;
    }

    // Zdarzenia kliknięcia
    btnBad.addEventListener('click', () => setMode('bad'));
    btnGood.addEventListener('click', () => setMode('good'));

});
</script>



<style>
:root {
    --rk-ozcfaq-dark: #0f172a;
    --rk-ozcfaq-brand: #0284c7; /* Ekspercki niebieski OZC */
    --rk-ozcfaq-brand-light: #e0f2fe;
    --rk-ozcfaq-accent: #0ea5e9;
    --rk-ozcfaq-bg: #f8fafc;
    --rk-ozcfaq-border: #cbd5e1;
    --rk-ozcfaq-text: #334155;
    --rk-ozcfaq-hover: #f1f5f9;
}

.rk-ozcfaq-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(2, 132, 199, 0.15);
    border: 1px solid var(--rk-ozcfaq-brand);
    overflow: hidden;
}

/* Nagłówek */
.rk-ozcfaq-header {
    background: linear-gradient(135deg, var(--rk-ozcfaq-dark) 0%, #1e293b 100%);
    padding: 40px 45px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-ozcfaq-brand);
    text-align: center;
}

.rk-ozcfaq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-ozcfaq-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
    color: #ffffff;
}

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

/* Akordeon */
.rk-ozcfaq-interactive {
    padding: 40px 45px;
    background: var(--rk-ozcfaq-bg);
}

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

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

.rk-ozcfaq-item.active {
    border-color: var(--rk-ozcfaq-brand);
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.15);
}

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

.rk-ozcfaq-question:hover {
    background: var(--rk-ozcfaq-hover);
}

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

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

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

/* Odpowiedź z Gridem i Animacją SVG */
.rk-ozcfaq-answer-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

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

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

.rk-ozcfaq-content {
    padding: 25px;
    border-top: 1px solid var(--rk-ozcfaq-border);
    display: grid;
    grid-template-columns: 1fr 180px;
    gap: 30px;
    align-items: center;
}

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

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

.rk-link {
    color: var(--rk-ozcfaq-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(2, 132, 199, 0.2);
    transition: all 0.3s;
}

.rk-link:hover {
    border-bottom-color: var(--rk-ozcfaq-brand);
}

/* Wizualizacje SVG */
.rk-ozcfaq-visual {
    background: var(--rk-ozcfaq-dark);
    border-radius: 12px;
    padding: 15px;
    height: 130px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 10px rgba(0,0,0,0.3);
    position: relative;
    overflow: hidden;
}

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

/* Animacje specyficzne dla każdego SVG zależne od .active w rodzicu */

/* FAQ 1: Pokoje OZC */
.anim-room-1, .anim-room-2, .anim-room-3 { opacity: 0.3; transition: opacity 0.5s; }
.rk-ozcfaq-item.active .anim-room-1 { animation: pulseRed 2s infinite; }
.rk-ozcfaq-item.active .anim-room-2 { animation: pulseOrange 2s 0.6s infinite; }
.rk-ozcfaq-item.active .anim-room-3 { animation: pulseYellow 2s 1.2s infinite; }
@keyframes pulseRed { 50% { fill: #ef4444; opacity: 0.9; } }
@keyframes pulseOrange { 50% { fill: #f97316; opacity: 0.9; } }
@keyframes pulseYellow { 50% { fill: #eab308; opacity: 0.9; } }

/* FAQ 2: Rekuperacja/Aktualizacja */
.anim-fan { transform-origin: center; transition: transform 0.5s; }
.rk-ozcfaq-item.active .anim-fan { animation: spinFan 2s linear infinite; }
@keyframes spinFan { to { transform: rotate(360deg); } }
.anim-insulation { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 1s 0.3s; }
.rk-ozcfaq-item.active .anim-insulation { stroke-dashoffset: 0; }

/* FAQ 3: EUco vs OZC */
.anim-bar-euco { transform: scaleX(0); transform-origin: left; transition: transform 1s 0.2s cubic-bezier(0.2, 0.8, 0.2, 1); }
.rk-ozcfaq-item.active .anim-bar-euco { transform: scaleX(1); }
.anim-bar-ozc { transform: scaleX(0); transform-origin: left; transition: transform 1s 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); }
.rk-ozcfaq-item.active .anim-bar-ozc { transform: scaleX(1); }

/* FAQ 4: Zyski (Noc) */
.anim-sun { transition: transform 1s, opacity 1s; }
.anim-moon { opacity: 0; transform: translateY(-20px); transition: transform 1s, opacity 1s; }
.rk-ozcfaq-item.active .anim-sun { transform: translateY(30px); opacity: 0; }
.rk-ozcfaq-item.active .anim-moon { opacity: 1; transform: translateY(0); }
.anim-snow { opacity: 0; }
.rk-ozcfaq-item.active .anim-snow { animation: fallSnow 2s infinite linear; }
@keyframes fallSnow { 0% { opacity: 0; transform: translateY(-10px); } 50% { opacity: 1; } 100% { opacity: 0; transform: translateY(20px); } }

/* FAQ 5: Stary Dom */
.anim-scan { transform: translateY(-10px); opacity: 0; }
.rk-ozcfaq-item.active .anim-scan { animation: scanWall 2.5s infinite; }
@keyframes scanWall { 0% { transform: translateY(-10px); opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { transform: translateY(60px); opacity: 0; } }

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

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "FAQ – Najczęściej zadawane pytania o OZC",
    "description": "Eksperckie odpowiedzi na pytania dotyczące Projektowego Obciążenia Cieplnego (OZC), różnic z EUco, modernizacji starych domów i aktualizacji projektu.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy obliczenia OZC wykonuje się dla całego budynku, czy dla każdego pomieszczenia osobno?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Obliczenia OZC muszą być bezwzględnie wykonane dla każdego pomieszczenia z osobna, ponieważ każde wnętrze posiada inną strukturę przegród zewnętrznych oraz odmienne straty wentylacyjne. Zbiorczy wynik dla całego budynku jest jedynie sumą składowych służącą do doboru mocy źródła ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Jak często należy aktualizować obliczenia OZC w trakcie trwania budowy domu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Aktualizację obliczeń OZC należy przeprowadzić zawsze wtedy, gdy w trakcie realizacji inwestycji dojdzie do istotnych zmian w materiałach izolacyjnych lub stolarki otworowej w stosunku do pierwotnego projektu. Zmiana grubości styropianu czy rezygnacja z rekuperacji całkowicie zmienia bilans cieplny budynku."
        }
      },
      {
        "@type": "Question",
        "name": "Czy wskaźnik EUco z charakterystyki energetycznej projektu to samo co Projektowe Obciążenie Cieplne?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, wskaźnik EUco określa sezonowe zapotrzebowanie na energię użytkową w ciągu całego roku wyrażane w kWh/(m2 rok), natomiast OZC to chwilowa, maksymalna moc cieplna wyrażana w kilowatach [kW], potrzebna do pokrycia strat w warunkach skrajnego mrozu. OZC decyduje o fizycznej wielkości urządzeń, a EUco o rocznych kosztach paliwa."
        }
      },
      {
        "@type": "Question",
        "name": "Jaki wpływ na wartość OZC mają zyski ciepła od nasłonecznienia oraz urządzeń wewnętrznych?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Zgodnie z procedurą normy PN-EN 12831, przy obliczaniu Projektowego Obciążenia Cieplnego mającego na celu dobór mocy urządzeń grzewczych, zyski ciepła od nasłonecznienia oraz zyski wewnętrzne są całkowicie pomijane. Założenie to wynika z faktu, że maksymalne, krytyczne obciążenie cieplne może wystąpić w środku nocy, kiedy zyski te nie występują."
        }
      },
      {
        "@type": "Question",
        "name": "Czy stary dom z lat 80. bez dokumentacji projektowej można poprawnie przeliczyć pod kątem OZC?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak, dla starych budynków wykonuje się inwentaryzację termomodernizacyjną, odtwarzając strukturę przegród na podstawie odkrywek oraz oceniając stan techniczny stolarki okiennej. Wprowadzając te dane do programu, inżynier jest w stanie z wysoką dokładnością wyznaczyć realne OZC obiektu przed doborem pompy ciepła."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-faq",
    "name": "Baza Wiedzy Inwestorskiej: Parametry Normy PN-EN 12831",
    "description": "Zbiór danych i definicji rozróżniających wartości OZC od charakterystyki energetycznej (EUco) oraz uwzględniających zyski pasywne.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": { "@type": "Person", "name": "Robert Kucharski" },
    "keywords": [
      "obliczenia OZC dla pomieszczeń",
      "aktualizacja bilansu cieplnego",
      "EUco a obciążenie cieplne",
      "pasywne zyski ciepła OZC",
      "termomodernizacja starego domu"
    ],
    "measurementTechnique": "Interpretacja wymagań normy PN-EN 12831 w kontekście fizyki budowli i warunków zimowych bez zysków solarnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "OZC określa szczytowe zapotrzebowanie (kW) w mroźną noc bez słońca.",
        "EUco to roczne zużycie energii wyrażane w kWh/(m2 rok)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-faq",
    "name": "Interaktywny Przewodnik: Mechanika Obliczeń OZC",
    "description": "Interaktywny moduł edukacyjny typu akordeon, wykorzystujący animacje SVG do demonstracji procesów wymiany ciepła, inwentaryzacji oraz bilansu cieplnego budynku.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": { "@type": "Person", "name": "Robert Kucharski" }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-ozcfaq-container" id="rk-ozc-faq-app">
    <div class="rk-ozcfaq-header">
        <div class="rk-ozcfaq-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Baza Wiedzy Inwestora
        </div>
        <h2 class="rk-ozcfaq-title">FAQ – <span>Najczęściej zadawane pytania o OZC</span></h2>
    </div>

    <div class="rk-ozcfaq-interactive">
        <div class="rk-ozcfaq-list">
            
            <!-- Pytanie 1 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>1. Czy obliczenia OZC wykonuje się dla całego budynku, czy dla każdego pomieszczenia osobno?</span>
                    <div class="rk-ozcfaq-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-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Obliczenia OZC muszą być <strong>bezwzględnie wykonane dla każdego pomieszczenia z osobna</strong>. Każde wnętrze posiada inną strukturę przegród zewnętrznych oraz odmienne <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-link">straty wentylacyjne</a>. Zbiorczy wynik dla całego budynku jest jedynie sumą matematyczną tych składowych, która służy wyłącznie do określenia całkowitej mocy źródła ciepła (np. pompy ciepła).
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <path d="M 10 35 L 50 5 L 90 35" fill="none" stroke="#64748b" stroke-width="3" stroke-linejoin="round"/>
                                    <rect x="20" y="35" width="60" height="30" fill="none" stroke="#64748b" stroke-width="2"/>
                                    <line x1="50" y1="35" x2="50" y2="65" stroke="#64748b" stroke-width="2"/>
                                    <line x1="20" y1="50" x2="80" y2="50" stroke="#64748b" stroke-width="2"/>
                                    <rect class="anim-room-1" x="22" y="37" width="26" height="11" fill="#475569"/>
                                    <rect class="anim-room-2" x="52" y="37" width="26" height="11" fill="#475569"/>
                                    <rect class="anim-room-3" x="22" y="52" width="56" height="11" fill="#475569"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 2 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>2. Jak często należy aktualizować obliczenia OZC w trakcie trwania budowy domu?</span>
                    <div class="rk-ozcfaq-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-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Aktualizację obliczeń OZC należy przeprowadzić <strong>zawsze wtedy, gdy dochodzi do istotnych zmian</strong> w strukturze przegród względem pierwotnego projektu architektonicznego. Zmiana grubości styropianu na elewacji, wstawienie gorszych parametrów stolarki okiennej czy rezygnacja z <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-link">wentylacji mechanicznej (rekuperacji)</a> na rzecz grawitacyjnej całkowicie zmienia bilans cieplny budynku.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="20" y="20" width="60" height="30" fill="none" stroke="#64748b" stroke-width="3" rx="4"/>
                                    <line class="anim-insulation" x1="20" y1="15" x2="80" y2="15" stroke="#0ea5e9" stroke-width="4" stroke-linecap="round"/>
                                    <g transform="translate(50, 35)">
                                        <circle cx="0" cy="0" r="10" fill="none" stroke="#94a3b8" stroke-width="2"/>
                                        <path class="anim-fan" d="M 0 -8 L 2 -2 L 8 0 L 2 2 L 0 8 L -2 2 L -8 0 L -2 -2 Z" fill="#cbd5e1"/>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 3 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>3. Czy wskaźnik EUco z charakterystyki energetycznej to samo co OZC?</span>
                    <div class="rk-ozcfaq-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-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                <strong>Nie, to dwa zupełnie różne parametry.</strong> Wskaźnik EUco określa sezonowe zapotrzebowanie na energię użytkową w ciągu całego roku (wyrażane w kWh/m2 na rok), czyli informuje o rocznych kosztach paliwa. Natomiast OZC to chwilowa, maksymalna moc cieplna wyrażana w kilowatach [kW], potrzebna do pokrycia strat w warunkach skrajnego mrozu. OZC decyduje o <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" class="rk-link">fizycznej wielkości i mocy urządzeń</a>.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <text x="10" y="30" fill="#94a3b8" font-size="10" font-family="sans-serif">EUco</text>
                                    <rect x="35" y="22" width="55" height="8" fill="#1e293b" rx="2"/>
                                    <rect class="anim-bar-euco" x="35" y="22" width="45" height="8" fill="#0ea5e9" rx="2"/>
                                    
                                    <text x="10" y="55" fill="#94a3b8" font-size="10" font-family="sans-serif">OZC</text>
                                    <rect x="35" y="47" width="55" height="8" fill="#1e293b" rx="2"/>
                                    <rect class="anim-bar-ozc" x="35" y="47" width="25" height="8" fill="#ef4444" rx="2"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 4 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>4. Jaki wpływ na wartość OZC mają zyski ciepła od słońca i urządzeń?</span>
                    <div class="rk-ozcfaq-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-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Zgodnie z procedurą normy PN-EN 12831, przy obliczaniu Projektowego Obciążenia Cieplnego mającego na celu dobór mocy urządzeń grzewczych, <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/" class="rk-link">pasywne zyski ciepła</a> od nasłonecznienia oraz wewnętrzne zyski bytowe są <strong>całkowicie pomijane</strong>. Założenie to jest logiczne – maksymalne, krytyczne obciążenie cieplne budynku zawsze występuje w środku mroźnej nocy, kiedy tych zysków po prostu nie ma.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <g class="anim-sun">
                                        <circle cx="50" cy="35" r="12" fill="#eab308"/>
                                        <path d="M 50 15 L 50 18 M 50 52 L 50 55 M 30 35 L 33 35 M 67 35 L 70 35" stroke="#eab308" stroke-width="2" stroke-linecap="round"/>
                                    </g>
                                    <g class="anim-moon">
                                        <path d="M 50 20 A 12 12 0 1 0 60 40 A 15 15 0 0 1 50 20 Z" fill="#e2e8f0"/>
                                        <circle class="anim-snow" cx="35" cy="25" r="1.5" fill="#ffffff"/>
                                        <circle class="anim-snow" cx="65" cy="45" r="1.5" fill="#ffffff" style="animation-delay: 0.5s"/>
                                        <circle class="anim-snow" cx="45" cy="50" r="1.5" fill="#ffffff" style="animation-delay: 1s"/>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 5 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>5. Czy stary dom z lat 80. bez projektu można policzyć pod kątem OZC?</span>
                    <div class="rk-ozcfaq-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-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Tak, dla starych budynków wykonuje się <strong>inwentaryzację termomodernizacyjną</strong>. Inżynier odtwarza strukturę przegród na podstawie odkrywek fizycznych oraz oceny stanu technicznego stolarki okiennej i stropów. Wprowadzając zebrane dane do oprogramowania inżynierskiego, jest w stanie z wysoką dokładnością wyznaczyć realne OZC, co jest warunkiem koniecznym do weryfikacji, <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-remontowanym-budynku-czy-warto/" class="rk-link">czy w starym budynku sprawdzi się instalacja płaszczyznowa</a> z pompą ciepła.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <g stroke="#64748b" stroke-width="2" fill="none">
                                        <rect x="25" y="15" width="15" height="8"/>
                                        <rect x="42" y="15" width="15" height="8"/>
                                        <rect x="59" y="15" width="15" height="8"/>
                                        <rect x="18" y="25" width="15" height="8"/>
                                        <rect x="35" y="25" width="15" height="8"/>
                                        <rect x="52" y="25" width="15" height="8"/>
                                        <rect x="69" y="25" width="15" height="8"/>
                                        <rect x="25" y="35" width="15" height="8"/>
                                        <rect x="42" y="35" width="15" height="8"/>
                                        <rect x="59" y="35" width="15" height="8"/>
                                    </g>
                                    <line class="anim-scan" x1="15" y1="20" x2="85" y2="20" stroke="#0ea5e9" stroke-width="2" stroke-dasharray="4 4"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez wyskakujących H2/H3 z błędami)
    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-ozc-faq-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

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

    faqItems.forEach(item => {
        const btn = item.querySelector('.rk-ozcfaq-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-ozc-dark: #0f172a;
    --rk-ozc-blue: #0284c7;
    --rk-ozc-light-blue: #f0f9ff;
    --rk-ozc-green: #059669;
    --rk-ozc-green-light: #ecfdf5;
    --rk-ozc-red: #dc2626;
    --rk-ozc-red-light: #fef2f2;
    --rk-ozc-gold: #fbbf24;
    --rk-ozc-gray: #64748b;
    --rk-ozc-border: #e2e8f0;
    --rk-ozc-bg: #ffffff;
}

.rk-ozc-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-ozc-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(2, 132, 199, 0.12);
    border: 1px solid var(--rk-ozc-blue);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-ozc-header {
    padding: 45px 50px 35px;
    background: linear-gradient(135deg, var(--rk-ozc-dark) 0%, #1e293b 100%);
    color: #ffffff;
    text-align: center;
    position: relative;
    border-bottom: 4px solid var(--rk-ozc-blue);
}

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

.rk-ozc-header h2 {
    font-size: 32px;
    font-weight: 900;
    margin: 0 0 20px 0;
    color: #ffffff;
    line-height: 1.2;
}

.rk-ozc-intro-text {
    font-size: 17px;
    line-height: 1.7;
    color: #cbd5e1;
    max-width: 800px;
    margin: 0 auto;
    font-weight: 400;
}

.rk-ozc-intro-text a {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: color 0.3s;
}

.rk-ozc-intro-text a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Interaktywny Symulator (Mobile App Switch) */
.rk-ozc-interactive {
    padding: 45px 50px;
    background: #f8fafc;
}

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

.rk-app-switch {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 5px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 500px;
}

.rk-switch-btn {
    flex: 1;
    position: relative;
    z-index: 2;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 800;
    border: none;
    background: transparent;
    color: #64748b;
    cursor: pointer;
    border-radius: 99px;
    transition: color 0.3s ease;
    text-align: center;
}

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

.rk-switch-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-ozc-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-switch[data-mode="pro"] .rk-switch-glider {
    transform: translateX(100%);
    background: var(--rk-ozc-green);
}

/* Wynik symulacji */
.rk-ozc-result-box {
    background: #ffffff;
    border-radius: 20px;
    border: 2px solid var(--rk-ozc-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 160px 1fr;
    gap: 40px;
    align-items: center;
    transition: all 0.4s ease;
}

.rk-ozc-result-box.mode-amateur {
    border-color: var(--rk-ozc-red-light);
    box-shadow: 0 15px 35px -10px rgba(220, 38, 38, 0.12);
}

.rk-ozc-result-box.mode-pro {
    border-color: var(--rk-ozc-green-light);
    box-shadow: 0 15px 35px -10px rgba(5, 150, 105, 0.12);
}

.rk-svg-stage {
    width: 100%;
    max-width: 160px;
    margin: 0 auto;
}

/* Animacje SVG */
.anim-pump-body { transition: fill 0.5s ease; }
.anim-waves { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0.5s ease; }

.mode-amateur .anim-pump-body { fill: var(--rk-ozc-red); animation: taktowaniePompy 0.3s infinite; }
.mode-amateur .anim-waves { stroke: var(--rk-ozc-red); animation: brokenWaves 1.5s infinite; }

.mode-pro .anim-pump-body { fill: var(--rk-ozc-green); animation: stabilnaPraca 3s infinite; }
.mode-pro .anim-waves { stroke: var(--rk-ozc-green); animation: smoothWaves 2s infinite linear; }

@keyframes taktowaniePompy {
    0% { transform: translate(1px, 1px); }
    25% { transform: translate(-2px, -1px); }
    50% { transform: translate(2px, 2px); }
    75% { transform: translate(-1px, -2px); }
    100% { transform: translate(1px, 1px); }
}

@keyframes stabilnaPraca {
    0% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0)); transform: scale(1); }
    50% { filter: drop-shadow(0 0 15px rgba(16, 185, 129, 0.6)); transform: scale(1.02); }
    100% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0)); transform: scale(1); }
}

@keyframes brokenWaves {
    0% { stroke-dashoffset: 100; opacity: 1; }
    50% { stroke-dashoffset: 50; opacity: 0.2; }
    100% { stroke-dashoffset: 0; opacity: 1; }
}

@keyframes smoothWaves {
    0% { stroke-dashoffset: 100; opacity: 0.8; }
    100% { stroke-dashoffset: -100; opacity: 0.8; }
}

.rk-ozc-content h3 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 800;
}

.mode-amateur .rk-ozc-content h3 { color: var(--rk-ozc-red); }
.mode-pro .rk-ozc-content h3 { color: var(--rk-ozc-green); }

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

.rk-ozc-content a {
    color: var(--rk-ozc-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(2, 132, 199, 0.3);
    transition: border-color 0.3s;
}

.rk-ozc-content a:hover { border-color: var(--rk-ozc-blue); }

/* Tabela Kafelkowa (Koszty i Efekty) */
.rk-data-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-top: 25px;
}

.rk-tile {
    background: #f1f5f9;
    padding: 18px;
    border-radius: 14px;
    border-left: 4px solid transparent;
    transition: all 0.3s ease;
}

.mode-amateur .rk-tile { border-left-color: var(--rk-ozc-red); background: #fef2f2; }
.mode-pro .rk-tile { border-left-color: var(--rk-ozc-green); background: #ecfdf5; }

.rk-tile-label {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 5px;
}

.rk-tile-value {
    display: block;
    font-size: 17px;
    font-weight: 900;
    color: var(--rk-ozc-dark);
}

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

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

.rk-btn-massive:hover {
    transform: translateY(-5px);
    background: #0369a1;
    box-shadow: 0 20px 35px -5px rgba(2, 132, 199, 0.5);
    border-color: #7dd3fc;
}

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

@media (max-width: 768px) {
    .rk-ozc-header, .rk-ozc-interactive, .rk-ozc-cta-box { padding: 35px 25px; }
    .rk-ozc-result-box { grid-template-columns: 1fr; text-align: center; padding: 25px; gap: 20px; }
    .rk-svg-stage { max-width: 120px; margin-bottom: 10px; }
    .rk-switch-btn { padding: 12px 10px; font-size: 13px; }
    .rk-data-tiles { grid-template-columns: 1fr; gap: 12px; }
    .rk-btn-massive { width: 100%; padding: 18px 20px; font-size: 16px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Podsumowanie techniczne: OZC a przyszłość instalacji",
    "description": "Projektowe Obciążenie Cieplne (OZC) wyznaczone według normy PN-EN 12831 to inżynierski fundament. Chroni przed taktowaniem pompy ciepła i błędami w układaniu podłogówki.",
    "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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-podsumowanie",
    "name": "Wpływ obliczeń OZC na żywotność i koszty instalacji grzewczej",
    "description": "Analiza porównawcza parametrów pracy pompy ciepła i hydrauliki ogrzewania podłogowego w przypadku zastosowania normy PN-EN 12831 oraz doboru szacunkowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne",
      "taktowanie pompy ciepła",
      "zbalansowanie hydrauliczne rotametry",
      "bezwładność termiczna jastrychu",
      "norma PN-EN 12831"
    ],
    "measurementTechnique": "Symulacja skutków doboru mocy źródła ciepła oraz nastaw rozdzielacza w oparciu o wyliczenia strat ciepła vs. przeliczniki W/m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wariant Szacunkowy: Przewymiarowana pompa ciepła, ciągłe taktowanie, brak możliwości zbalansowania pętli po wylaniu betonu.",
        "Wariant z OZC: Precyzyjnie dobrana moc, stabilna praca sprężarki, zbilansowane przepływy gwarantujące bezawaryjność."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-podsumowanie",
    "name": "Symulator Efektywności: OZC vs Zgadywanie",
    "description": "Interaktywny panel demonstrujący mechaniczne i finansowe skutki braku precyzyjnego Projektowego Obciążenia Cieplnego w systemach ogrzewania płaszczyznowego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-ozc-container" id="ozc-sum-app">
    <!-- Nagłówek -->
    <div class="rk-ozc-header">
        <div class="rk-ozc-badge">
            <svg width="14" height="14" 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>
            Podsumowanie Techniczne
        </div>
        <h2>OZC a przyszłość Twojej instalacji</h2>
        <p class="rk-ozc-intro-text">
            Projektowe Obciążenie Cieplne (OZC) wyznaczone zgodnie z normą <strong>PN-EN 12831</strong> to kluczowa decyzja inżynierska na etapie budowy lub modernizacji domu. Wodne ogrzewanie podłogowe jako system niskotemperaturowy o ogromnej <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności termicznej</a> nie wybacza błędów – rury zalane betonem jastrychowym stają się elementem konstrukcyjnym budynku.
        </p>
    </div>

    <!-- Symulator Standardu -->
    <div class="rk-ozc-interactive">
        <div class="rk-switcher-wrapper">
            <div class="rk-app-switch" id="ozcSwitchContainer" data-mode="amateur">
                <div class="rk-switch-glider" id="ozcGlider"></div>
                <button class="rk-switch-btn active" data-target="amateur">Przelicznik &#8222;Na oko&#8221;</button>
                <button class="rk-switch-btn" data-target="pro">Projekt OZC (PN-EN 12831)</button>
            </div>
        </div>

        <div class="rk-ozc-result-box mode-amateur" id="ozcResultContent">
            <div class="rk-svg-stage">
                <!-- SVG animowane z kodu -->
                <svg viewBox="0 0 100 100" width="100%" height="100%">
                    <!-- Pompa Ciepła -->
                    <rect x="25" y="30" width="50" height="60" rx="6" class="anim-pump-body" />
                    <circle cx="50" cy="50" r="14" fill="#ffffff" opacity="0.9" />
                    <path d="M 45 45 L 55 50 L 45 55 Z" fill="#1e293b" />
                    <!-- Fale Ciepła (podłogówka) -->
                    <path d="M 10 95 Q 30 80 50 95 T 90 95" fill="none" stroke-width="4" stroke-linecap="round" class="anim-waves" />
                    <path d="M 10 105 Q 30 90 50 105 T 90 105" fill="none" stroke-width="4" stroke-linecap="round" class="anim-waves" style="animation-delay: 0.3s" />
                </svg>
            </div>
            
            <div class="rk-ozc-content">
                <h3 id="dynTitle">Taktowanie i nieodwracalne błędy</h3>
                <p id="dynDesc">
                    Rezygnacja z precyzyjnych obliczeń komputerowych na rzecz archaicznych przeliczników powierzchniowych to prosta droga do zakupu przewymiarowanej, stale taktującej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a>, generującej wysokie koszty eksploatacji i skazanej na szybką awarię. Wadliwy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a> czy błędne zbalansowanie hydrauliczne na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach</a> są niemal niemożliwe do skorygowania po fakcie.
                </p>
                
                <div class="rk-data-tiles">
                    <div class="rk-tile">
                        <span class="rk-tile-label" id="dynLabel1">Ryzyko dla sprężarki</span>
                        <span class="rk-tile-value" id="dynVal1">Krytyczne (Taktowanie)</span>
                    </div>
                    <div class="rk-tile">
                        <span class="rk-tile-label" id="dynLabel2">Regulacja hydrauliczna</span>
                        <span class="rk-tile-value" id="dynVal2">Niemożliwa do kalibracji</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Mocne CTA -->
    <div class="rk-ozc-cta-box">
        <h3 style="font-size: 24px; font-weight: 900; color: var(--rk-ozc-dark); margin: 0 0 15px 0;">Zbuduj instalację, która przetrwa dekady</h3>
        <p class="rk-ozc-intro-text" style="color: #64748b; margin-bottom: 30px;">
            Nie pozwól, by błędy na etapie planowania uderzyły Cię po portfelu. Wykorzystaj inżynierską wiedzę, sprawdzone normy i narzędzia, które gwarantują spokój.
        </p>
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-massive">
            PRZEJDŹ DO BAZY WIEDZY I PORADNIKÓW
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 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('ozc-sum-app');
        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;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener podsumowujący oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Mobile App Switch)
    const switchContainer = document.getElementById('ozcSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-switch-btn');
    const resultBox = document.getElementById('ozcResultContent');
    
    // Elementy tekstowe do podmiany
    const dynTitle = document.getElementById('dynTitle');
    const dynDesc = document.getElementById('dynDesc');
    const dynLabel1 = document.getElementById('dynLabel1');
    const dynVal1 = document.getElementById('dynVal1');
    const dynLabel2 = document.getElementById('dynLabel2');
    const dynVal2 = document.getElementById('dynVal2');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Animacja przełącznika
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const targetMode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', targetMode);

            // Aktualizacja treści i klas kontenera SVG
            if (targetMode === 'pro') {
                resultBox.className = 'rk-ozc-result-box mode-pro';
                
                dynTitle.textContent = "Cicha, energooszczędna praca na dekady";
                dynDesc.innerHTML = `Jedynie precyzyjne powiązanie strat ciepła każdego pomieszczenia z geometrią <a href="https://projekt-ogrzewania.pl/petla-grzewcza/">pętli grzewczych</a> gwarantuje bezawaryjną, cichą i maksymalnie energooszczędną pracę całego systemu przez dekady. Wykluczasz awarie jeszcze na papierze.`;
                
                dynLabel1.textContent = "Żywotność układu";
                dynVal1.textContent = "Maksymalna wydajność (COP)";
                dynVal1.style.color = "var(--rk-ozc-green)";
                
                dynLabel2.textContent = "Przepływy w pętlach";
                dynVal2.textContent = "Idealnie zbalansowane";
                dynVal2.style.color = "var(--rk-ozc-green)";

            } else {
                resultBox.className = 'rk-ozc-result-box mode-amateur';
                
                dynTitle.textContent = "Taktowanie i nieodwracalne błędy";
                dynDesc.innerHTML = `Rezygnacja z precyzyjnych obliczeń komputerowych na rzecz archaicznych przeliczników powierzchniowych to prosta droga do zakupu przewymiarowanej, stale taktującej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a>, generującej wysokie koszty eksploatacji i skazanej na szybką awarię. Wadliwy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a> czy błędne zbalansowanie hydrauliczne na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach</a> są niemal niemożliwe do skorygowania po fakcie.`;
                
                dynLabel1.textContent = "Ryzyko dla sprężarki";
                dynVal1.textContent = "Krytyczne (Taktowanie)";
                dynVal1.style.color = "var(--rk-ozc-dark)";
                
                dynLabel2.textContent = "Regulacja hydrauliczna";
                dynVal2.textContent = "Niemożliwa do kalibracji";
                dynVal2.style.color = "var(--rk-ozc-dark)";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-ozcdl-dark: #0f172a;
    --rk-ozcdl-brand: #ea580c; /* Ognisty pomarańcz nawiązujący do ciepła */
    --rk-ozcdl-brand-dark: #c2410c;
    --rk-ozcdl-bg: #f8fafc;
    --rk-ozcdl-border: #e2e8f0;
    --rk-ozcdl-text: #334155;
    --rk-ozcdl-white: #ffffff;
    --rk-ozcdl-accent: #38bdf8;
}

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

/* NAGŁÓWEK SEKCI */
.rk-ozcdl-header {
    background: linear-gradient(135deg, var(--rk-ozcdl-dark) 0%, #311505 100%);
    padding: 45px 50px;
    color: var(--rk-ozcdl-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    overflow: hidden;
}

.rk-ozcdl-header::after {
    content: '';
    position: absolute;
    bottom: -50px;
    right: -20px;
    width: 200px;
    height: 200px;
    background: radial-gradient(circle, rgba(234, 88, 12, 0.4) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    pointer-events: none;
}

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

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

.rk-ozcdl-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 12px 0;
    line-height: 1.3;
    letter-spacing: -0.5px;
}

.rk-ozcdl-header h2 span { color: #f97316; }

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

/* WIZUALIZACJA IKONY Z ANIMACJĄ CIEPŁA */
.rk-ozcdl-visual {
    position: relative;
    z-index: 2;
}

.rk-ozcdl-icon-svg {
    width: 90px;
    height: auto;
    filter: drop-shadow(0 15px 20px rgba(0,0,0,0.4));
    animation: ozcFloat 3.5s infinite ease-in-out alternate;
}

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

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

.rk-ozcdl-preview-box {
    flex: 1;
    background: var(--rk-ozcdl-bg);
    border: 2px dashed #cbd5e1;
    border-radius: 16px;
    padding: 10px;
    position: relative;
    cursor: zoom-in;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-ozcdl-preview-box:hover {
    transform: scale(1.03);
    border-color: var(--rk-ozcdl-brand);
    border-style: solid;
    box-shadow: 0 20px 30px -10px rgba(234, 88, 12, 0.2);
}

.rk-ozcdl-preview-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}

.rk-ozcdl-zoom-badge {
    position: absolute;
    bottom: 20px;
    right: 20px;
    background: rgba(15, 23, 42, 0.85);
    color: white;
    padding: 8px 16px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    backdrop-filter: blur(4px);
    transition: background 0.3s;
}

.rk-ozcdl-preview-box:hover .rk-ozcdl-zoom-badge {
    background: var(--rk-ozcdl-brand);
}

/* INTERAKTYWNY PANEL (PRAWA STRONA) */
.rk-ozcdl-info-side {
    flex: 1.2;
    display: flex;
    flex-direction: column;
}

/* Zakładki (Tabs) */
.rk-ozcdl-tabs {
    display: flex;
    background: #f1f5f9;
    border-radius: 12px;
    padding: 6px;
    margin-bottom: 25px;
}

.rk-ozcdl-tab {
    flex: 1;
    text-align: center;
    padding: 12px;
    font-size: 13.5px;
    font-weight: 800;
    color: var(--rk-ozcdl-muted);
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.2s ease;
}

.rk-ozcdl-tab.active {
    background: var(--rk-ozcdl-white);
    color: var(--rk-ozcdl-brand);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.rk-ozcdl-panel {
    display: none;
    animation: fadeInTab 0.3s ease;
}

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

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

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

.rk-ozcdl-feature-item {
    display: flex;
    align-items: flex-start;
    gap: 15px;
    margin-bottom: 18px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--rk-ozcdl-text);
    line-height: 1.5;
}

.rk-ozcdl-feature-item svg {
    width: 22px;
    height: 22px;
    color: var(--rk-ozcdl-brand);
    flex-shrink: 0;
    margin-top: 2px;
}

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

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

.rk-ozcdl-main-btn svg { width: 24px; height: 24px; animation: bounceDl 2s infinite; }

@keyframes bounceDl {
    0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
    40% { transform: translateY(-4px); }
    60% { transform: translateY(-2px); }
}

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

.rk-ozcdl-footer a {
    color: var(--rk-ozcdl-brand);
    font-weight: 800;
    text-decoration: none;
    transition: color 0.2s;
}

.rk-ozcdl-footer a:hover { text-decoration: underline; }

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Infografika: Projektowe Obciążenie Cieplne (OZC)",
    "description": "Pobierz kompleksową infografikę PDF omawiającą kluczowe parametry OZC, typowe wartości dla budynków i najczęstsze błędy instalatorów.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.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-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-infografika",
    "name": "Wskaźniki zapotrzebowania cieplnego budynków (W/m²)",
    "description": "Zestawienie średniego zapotrzebowania na moc (OZC) w zależności od standardu izolacji budynku oraz rozkład strat ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika OZC pdf",
      "pobierz OZC",
      "wskaźniki W/m2 dom",
      "straty ciepła schemat",
      "obliczanie zapotrzebowania na ciepło"
    ],
    "measurementTechnique": "Analiza normatywna zapotrzebowania mocy szczytowej w zależności od standardu termicznego budynku.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Typowe wartości OZC: Dom stary (90-150 W/m²), Modernizowany (50-80 W/m²), Energooszczędny (30-50 W/m²).",
        "Rozkład strat ciepła: Okna (35%), Ściany (26%), Dach (25%), Wentylacja (20%).",
        "Efekty poprawnie wykonanego OZC: Redukcja kosztów ogrzewania o 30% i odpowiedni dobór mocy pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-infografika",
    "name": "Centrum Pobierania Wiedzy: Infografika OZC",
    "description": "Interaktywny moduł edukacyjny udostępniający graficzne kompendium wiedzy o Projektowym Obciążeniu Cieplnym w formacie PDF.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-ozcdl-container" id="app-ozc-dl">
    
    <div class="rk-ozcdl-header">
        <div class="rk-ozcdl-header-content">
            <div class="rk-ozcdl-badge">Darmowe Materiały Edukacyjne</div>
            <h2>Pobierz Kompletny <span>Poradnik OZC</span></h2>
            <p>Zabierz inżynierską wiedzę ze sobą. Kompendium parametrów cieplnych, wskaźniki W/m² oraz schemat ucieczki ciepła z budynku w jednym, czytelnym pliku PDF.</p>
        </div>
        <div class="rk-ozcdl-visual">
            <svg class="rk-ozcdl-icon-svg" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M75 15 L25 15 C19.5 15 15 19.5 15 25 L15 75 C15 80.5 19.5 85 25 85 L75 85 C80.5 85 85 80.5 85 75 L85 25 C85 19.5 80.5 15 75 15 Z" fill="#ea580c"/>
                <path d="M55 15 L85 45 L85 25 C85 19.5 80.5 15 75 15 Z" fill="#c2410c"/>
                <text x="50" y="65" fill="#ffffff" font-size="24" font-weight="900" font-family="sans-serif" text-anchor="middle">PDF</text>
                <path d="M50 25 C45 35 35 40 45 50 C55 60 65 35 50 25 Z" fill="#fbd38d" opacity="0.8"/>
            </svg>
        </div>
    </div>

    <div class="rk-ozcdl-workspace">
        
        <div class="rk-ozcdl-preview-box" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp', '_blank')">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp" alt="Infografika Projektowe Obciążenie Cieplne OZC" class="rk-ozcdl-preview-img" loading="lazy">
            <div class="rk-ozcdl-zoom-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="vertical-align: middle; margin-right: 5px;"><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 podgląd
            </div>
        </div>

        <div class="rk-ozcdl-info-side">
            
            <div class="rk-ozcdl-tabs">
                <div class="rk-ozcdl-tab active" data-tab="tab-content">Co znajdziesz w środku?</div>
                <div class="rk-ozcdl-tab" data-tab="tab-why">Dlaczego warto?</div>
            </div>

            <div class="rk-ozcdl-panel active" id="tab-content">
                <ul class="rk-ozcdl-feature-list">
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Tabela wskaźników: Porównanie OZC (W/m²) dla starego i nowego budownictwa.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Schemat ucieczki ciepła: % podział strat przez dach, ściany, okna i wentylację.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Checklista inżyniera: 3 krytyczne błędy instalatorów, których musisz unikać.
                    </li>
                </ul>
            </div>

            <div class="rk-ozcdl-panel" id="tab-why">
                <ul class="rk-ozcdl-feature-list">
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"/></svg>
                        Oszczędność do 30% na kosztach ogrzewania dzięki poprawnemu doborowi pompy.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Zabezpieczenie przed kosztownym przewymiarowaniem urządzeń grzewczych.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Gwarancja optymalnego zrównoważenia hydraulicznego instalacji podłogowej.
                    </li>
                </ul>
            </div>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.pdf" class="rk-ozcdl-main-btn" target="_blank">
                <svg 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="rk-ozcdl-footer">
        © 2026 Projekt-Ogrzewania.pl | Autor merytoryczny: <strong>Robert Kucharski</strong>.<br>
        Udostępnianie pliku jest dozwolone wyłącznie z zachowaniem <a href="https://projekt-ogrzewania.pl/">linku do źródła</a>.
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. OCHRONA DOMENOWA (DOMAIN LOCK)
    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-ozc-dl');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fff7ed; border: 2px solid #ea580c; 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: #9a3412;">Zasoby Chronione</div>
                    <p style="color: #c2410c; font-size: 14px;">Ta infografika i dokumentacja OZC są własnością serwisu Projekt-Ogrzewania.pl.</p>
                </div>
            `;
        }
        return;
    }

    // 2. LOGIKA ZAKŁADEK (INTERAKTYWNOŚĆ)
    const tabs = document.querySelectorAll('.rk-ozcdl-tab');
    const panels = document.querySelectorAll('.rk-ozcdl-panel');

    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            // Usuń aktywną klasę ze wszystkich zakładek i paneli
            tabs.forEach(t => t.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            // Dodaj aktywną klasę do klikniętej zakładki
            tab.classList.add('active');
            
            // Pokaż odpowiedni panel
            const targetId = tab.getAttribute('data-tab');
            const targetPanel = document.getElementById(targetId);
            if(targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">Projektowe Obciążenie Cieplne (OZC).</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Strefa brzegowa (obwodowa) w ogrzewaniu podłogowym.</title>
		<link>https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 27 Jan 2026 10:30:35 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Normy budowlane]]></category>
		<category><![CDATA[Normy techniczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Porady techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projekty instalacji]]></category>
		<category><![CDATA[Projekty ogrzewania]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pn-en 1264]]></category>
		<category><![CDATA[podłogówka]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<category><![CDATA[straty ciepła]]></category>
		<category><![CDATA[strefa brzegowa]]></category>
		<category><![CDATA[strefa obwodowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3328</guid>

					<description><![CDATA[<p>Strefa brzegowa (obwodowa) w ogrzewaniu podłogowym to jeden z tych elementów instalacji, które decydują o realnym komforcie cieplnym w domu, a jednocześnie są często bagatelizowane. Właściwie zaprojektowana strefa przy ścianach zewnętrznych i przeszkleniach pozwala wyrównać temperaturę w pomieszczeniu, ograniczyć straty ciepła i obniżyć zużycie energii. W artykule wyjaśniamy, czym jest strefa brzegowa, dlaczego ma kluczowe znaczenie w nowoczesnym budownictwie oraz jak ją poprawnie zaprojektować zgodnie z normami i praktyką instalacyjną.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/">Strefa brzegowa (obwodowa) w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Strefa brzegowa (obwodowa) w ogrzewaniu podłogowym</strong> to kluczowy element systemów grzewczych, który zapewnia równomierny rozkład ciepła w pomieszczeniach narażonych na większe straty termiczne. W dzisiejszych domach i budynkach, gdzie efektywność energetyczna odgrywa pierwszoplanową rolę, zrozumienie roli tej strefy pozwala na optymalne projektowanie instalacji, redukując zużycie energii i zwiększając komfort mieszkańców. W tym artykule przyjrzymy się bliżej, czym jest strefa brzegowa, dlaczego jest niezbędna i jak ją prawidłowo zaprojektować, opierając się na normach i praktycznych przykładach.</p>



<h2 class="wp-block-heading">Co to jest strefa brzegowa w ogrzewaniu podłogowym?</h2>



<p class="wp-block-paragraph">Strefa brzegowa, zwana również obwodową lub krawędziową, to specjalny pas podłogi przylegający do ścian zewnętrznych, dużych okien, drzwi balkonowych lub innych elementów budynku, gdzie występują zwiększone straty ciepła. W tym obszarze <a href="https://projekt-ogrzewania.pl/category/rury-do-ogrzewania/">rury</a> grzewcze układane są gęściej niż w centralnej części pomieszczenia, co pozwala na wyrównanie temperatury i uniknięcie uczucia chłodu przy przegrodach zewnętrznych.</p>



<p class="wp-block-paragraph">W praktyce, <strong>strefa obwodowa</strong> działa jak bufor termiczny. Podczas gdy w środku pokoju podłoga może być ogrzewana równomiernie, przy ścianach zewnętrznych infiltracja zimnego powietrza lub mostki termiczne powodują szybsze wychładzanie. Gęstsze ułożenie rur – zazwyczaj co 5-10 cm – zwiększa moc grzewczą na metr kwadratowy, osiągając nawet 100 W/m², w porównaniu do 50-80 W/m² w strefie podstawowej.</p>



<p class="wp-block-paragraph">Przykładowo, w typowym salonie o powierzchni 20 m² z oknami na jednej ścianie, strefa brzegowa może obejmować pas o szerokości 1 metra wzdłuż tej ściany, co daje około 4-6 m² powierzchni wymagającej intensywnego ogrzewania. Bez niej, temperatura podłogi przy oknie mogłaby spaść o 3-5°C, co odczuwalnie obniżyłoby komfort.</p>



<h3 class="wp-block-heading">Fizyczne podstawy działania strefy obwodowej.</h3>



<p class="wp-block-paragraph">Z punktu widzenia fizyki, ogrzewanie podłogowe opiera się na promieniowaniu i konwekcji ciepła. W strefie brzegowej kluczowe jest kompensowanie strat ciepła przez przegrody zewnętrzne, obliczone według normy PN-EN 12831. Straty te zależą od izolacji ścian (współczynnik U), powierzchni okien i warunków zewnętrznych.</p>



<p class="wp-block-paragraph">Na przykład, w budynku z dobrze izolowanymi ścianami (U=0,2 W/m²K), straty przy temperaturze zewnętrznej -15°C mogą wynosić 80-100 W/m² w obszarze brzegowym. Gęstsze rury pozwalają na podniesienie temperatury podłogi do 35°C (maksymalna dopuszczalna w tej strefie według <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a>), co wyrównuje gradient temperaturowy.</p>



<h2 class="wp-block-heading">Dlaczego strefa brzegowa jest ważna w ogrzewaniu podłogowym?</h2>



<p class="wp-block-paragraph">Bez odpowiednio zaprojektowanej <strong>strefy obwodowej w ogrzewaniu podłogowym</strong>, system może być nieefektywny, prowadząc do nierównomiernego ogrzewania i wyższego zużycia energii. Norma PN-EN 1264 podkreśla, że strefa ta jest obowiązkowa w pomieszczeniach z przegrodami zewnętrznymi, aby zapewnić komfort termiczny.</p>



<p class="wp-block-paragraph">Oto kluczowe powody:</p>



<ul class="wp-block-list">
<li><strong>Kompensacja strat ciepła</strong>: W obszarach brzegowych straty mogą być dwukrotnie wyższe niż w centrum. Przykładowo, przy oknie o powierzchni 4 m² bez strefy, temperatura powietrza przy podłodze mogłaby spaść do 18°C, mimo 22°C w pokoju.</li>



<li><strong>Poprawa komfortu</strong>: Ludzie odczuwają chłód przy ścianach – strefa brzegowa eliminuje to, utrzymując temperaturę podłogi na poziomie 29-35°C.</li>



<li><strong>Efektywność energetyczna</strong>: Optymalne ułożenie rur redukuje pracę kotła lub <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a> o 10-15%. W budynku o powierzchni 100 m² z pompą ciepła, brak strefy mógłby zwiększyć rachunki o 200-300 zł rocznie.</li>



<li><strong>Zgodność z normami</strong>: Brak strefy może unieważnić gwarancję systemu i nie spełnić wymagań budowlanych.</li>
</ul>



<p class="wp-block-paragraph">W kontekście nowoczesnych budynków pasywnych, strefa brzegowa pozwala na integrację z niskotemperaturowymi źródłami ciepła, jak pompy ciepła, gdzie temperatura zasilania to zaledwie 35-40°C.</p>



<h2 class="wp-block-heading">Projektowanie strefy brzegowej w ogrzewaniu podłogowym.</h2>



<p class="wp-block-paragraph"><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Projekt ogrzewania podłogowego</a> w kontekście tego artykułu to proces, który zaczyna się od obliczenia strat ciepła (OZC) dla każdego pomieszczenia, zgodnie z PN-EN 12831. Następnie definiuje się strefę brzegową, biorąc pod uwagę geometrię budynku, izolację i zapotrzebowanie na ciepło. To nie tylko techniczne wyliczenia, ale także dostosowanie do potrzeb użytkownika – na przykład w domu z dużymi przeszkleniami, strefa musi być szersza, aby zapobiec kondensacji pary wodnej na oknach.</p>



<p class="wp-block-paragraph">W praktyce, <a href="https://projekt-ogrzewania.pl/kontakt/">projektant</a> używa oprogramowania do symulacji termicznej, aby określić optymalny rozstaw rur i długość obwodów. Na przykład, dla pomieszczenia 15 m² z oknem, projekt może obejmować strefę brzegową o powierzchni 3 m² z rozstawem 10 cm, podłączoną do rozdzielacza z regulacją przepływu.</p>



<h3 class="wp-block-heading">Parametry projektowe strefy obwodowej.</h3>



<p class="wp-block-paragraph">Kluczowe parametry to:</p>



<ul class="wp-block-list">
<li><strong>Szerokość strefy</strong>: Zazwyczaj 0,5-1,5 m, najczęściej 1 m. Zależy od strat ciepła – w słabo izolowanym budynku może być szersza.</li>



<li><strong>Rozstaw rur</strong>: 5-10 cm w brzegowej, 10-20 cm w podstawowej. Dla pomp ciepła zalecany gęstszy rozstaw (10-15 cm) dla lepszej efektywności.</li>



<li><strong>Długość obwodu</strong>: Nie więcej niż 100-120 m, aby uniknąć spadków ciśnienia. Często strefa brzegowa to osobny obwód.</li>
</ul>



<p class="wp-block-paragraph">Przykładowe obliczenia według PN-EN 1264: Dla strefy brzegowej o stratach 100 W/m², przy rozstawie 10 cm i temperaturze zasilania 45°C, moc grzewcza q = 99,38 W/m², Δθ_H = 29,72°C.</p>



<h3 class="wp-block-heading">Układy rur w strefie brzegowej.</h3>



<p class="wp-block-paragraph">Wybór układu wpływa na równomierność ogrzewania:</p>



<ul class="wp-block-list">
<li><strong><a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-w-ukladzie-meandrowym/">Układ meandrowy (wężowy)</a></strong>: Rury biegną zygzakiem. Prosty w montażu, ale może powodować różnice temperatur do 5°C. Zalecany w małych pomieszczeniach, np. łazience.</li>



<li><strong><a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-w-ukladzie-slimakowym/">Układ spiralny (ślimakowy)</a></strong>: Rury przeplatają się, minimalizując gradienty do 2°C. Idealny do dużych salonów z strefą brzegową.</li>
</ul>



<p class="wp-block-paragraph">Przykładowo, w układzie spiralnym strefa brzegowa integruje się z główną pętlą, zaczynając od zewnętrznej ściany.</p>



<h2 class="wp-block-heading">Przykłady obliczeń i wyliczenia w strefie obwodowej.</h2>



<p class="wp-block-paragraph">Rozważmy pomieszczenie 23,5 m² z oknami: Straty ciepła 100 W/m² w brzegowej (8,76 m²), 60 W/m² w bytowej (14,74 m²).</p>



<p class="wp-block-paragraph">Obliczenia według PN-EN 1264:</p>



<ul class="wp-block-list">
<li>Współczynniki: B0 = 6,7 W/m²K, aB = 0,578, at = 1,156 itd.</li>



<li>Moc: q = 99,38 W/m², qG = 100,49 W/m².</li>



<li>Długość rur: Dla rozstawu 10 cm w brzegowej – około 90 m na obwód.</li>
</ul>



<p class="wp-block-paragraph">Inny przykład: Łazienka 6 m², strefa brzegowa 2 m². Rozstaw 5 cm daje moc 120 W/m², temperatura podłogi 33°C.</p>



<style>
.floor-table-wrap {
  max-width: 960px;
  margin: 40px auto;
  padding: 20px;
  background: #ffffff;
  border-radius: 14px;
  box-shadow: 0 10px 30px rgba(0,0,0,0.08);
  font-family: Arial, sans-serif;
}

.floor-table-wrap h3 {
  text-align: center;
  font-size: 26px;
  margin-bottom: 20px;
}

.floor-table {
  width: 100%;
  border-collapse: collapse;
  overflow: hidden;
}

.floor-table thead {
  background: #f4f6f8;
}

.floor-table th,
.floor-table td {
  padding: 14px 16px;
  text-align: left;
  font-size: 15px;
}

.floor-table th {
  font-weight: 600;
  color: #333;
  border-bottom: 2px solid #e0e0e0;
}

.floor-table td {
  border-bottom: 1px solid #eaeaea;
  color: #444;
}

.floor-table tr:last-child td {
  border-bottom: none;
}

/* Wyróżnienie pierwszej kolumny */
.floor-table td:first-child {
  font-weight: bold;
  color: #000;
}

/* Kolumny liczbowe – wyrównanie */
.floor-table td:nth-child(1),
.floor-table td:nth-child(2),
.floor-table td:nth-child(4) {
  text-align: center;
}

/* Responsywność */
@media (max-width: 768px) {
  .floor-table thead {
    display: none;
  }

  .floor-table,
  .floor-table tbody,
  .floor-table tr,
  .floor-table td {
    display: block;
    width: 100%;
  }

  .floor-table tr {
    margin-bottom: 18px;
    border: 1px solid #e0e0e0;
    border-radius: 10px;
    padding: 10px;
  }

  .floor-table td {
    text-align: right;
    padding: 10px;
    position: relative;
  }

  .floor-table td::before {
    content: attr(data-label);
    position: absolute;
    left: 10px;
    top: 10px;
    font-weight: bold;
    color: #666;
    text-align: left;
  }
}

.floor-table-note {
  margin-top: 16px;
  font-size: 14px;
  color: #666;
  text-align: center;
}
</style>

<div class="floor-table-wrap">
  <h3>Rozstaw rur a moc ogrzewania podłogowego</h3>

  <table class="floor-table">
    <thead>
      <tr>
        <th>Rozstaw rur (cm)</th>
        <th>Moc grzewcza (W/m²)</th>
        <th>Zastosowanie</th>
        <th>Maks. temperatura podłogi (°C)</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td data-label="Rozstaw rur (cm)">5</td>
        <td data-label="Moc grzewcza (W/m²)">100–120</td>
        <td data-label="Zastosowanie">Strefa brzegowa w łazienkach</td>
        <td data-label="Maks. temperatura podłogi (°C)">35</td>
      </tr>
      <tr>
        <td data-label="Rozstaw rur (cm)">10</td>
        <td data-label="Moc grzewcza (W/m²)">80–100</td>
        <td data-label="Zastosowanie">Standardowa strefa obwodowa</td>
        <td data-label="Maks. temperatura podłogi (°C)">35</td>
      </tr>
      <tr>
        <td data-label="Rozstaw rur (cm)">15</td>
        <td data-label="Moc grzewcza (W/m²)">60–80</td>
        <td data-label="Zastosowanie">Strefa podstawowa</td>
        <td data-label="Maks. temperatura podłogi (°C)">29</td>
      </tr>
      <tr>
        <td data-label="Rozstaw rur (cm)">20</td>
        <td data-label="Moc grzewcza (W/m²)">50–70</td>
        <td data-label="Zastosowanie">Duże pomieszczenia</td>
        <td data-label="Maks. temperatura podłogi (°C)">29</td>
      </tr>
    </tbody>
  </table>

  <div class="floor-table-note">
    Tabela pokazuje zależność mocy grzewczej od rozstawu rur przy temperaturze zasilania 40°C.
  </div>
</div>




<p class="wp-block-paragraph">Aby zilustrować rozkład temperatury, poniżej przykładowy wykres liniowy pokazujący gradient w pomieszczeniu ze strefą brzegową. Na wykresie widać, jak gęstsze rury w strefie obwodowej wyrównują temperaturę do poziomu 22-24°C w całym pokoju, w porównaniu do spadku bez strefy.</p>



<p class="wp-block-paragraph">Dane symulowane dla pomieszczenia o szerokości 5 m.</p>



<style>
.floor-chart {
  max-width: 960px;
  margin: 50px auto;
  padding: 30px;
  background: #ffffff;
  border-radius: 14px;
  box-shadow: 0 12px 35px rgba(0,0,0,0.08);
  font-family: Arial, sans-serif;
}

.floor-chart h2 {
  text-align: center;
  font-size: 28px;
  margin-bottom: 6px;
}

.floor-chart p {
  text-align: center;
  font-size: 16px;
  color: #666;
  margin-bottom: 30px;
}

.legend {
  display: flex;
  justify-content: center;
  gap: 32px;
  margin-top: 22px;
  font-size: 15px;
}

.legend span {
  display: flex;
  align-items: center;
  gap: 10px;
}

.legend i {
  width: 30px;
  height: 4px;
  display: inline-block;
}

.no-zone {
  background: #c0392b;
}

.with-zone {
  background: #27ae60;
}
</style>

<div class="floor-chart">
  <h2>Rozkład temperatury przy podłodze</h2>
  <p>Porównanie pomieszczenia bez strefy brzegowej i ze strefą obwodową</p>

  <svg viewBox="0 0 900 420" preserveAspectRatio="xMidYMid meet" style="width:100%; height:auto;">

    <!-- Oś Y -->
    <line x1="90" y1="60" x2="90" y2="360" stroke="#333" stroke-width="2"/>

    <!-- Linie pomocnicze -->
    <line x1="90" y1="100" x2="840" y2="100" stroke="#eee"/>
    <line x1="90" y1="170" x2="840" y2="170" stroke="#eee"/>
    <line x1="90" y1="240" x2="840" y2="240" stroke="#eee"/>
    <line x1="90" y1="310" x2="840" y2="310" stroke="#eee"/>

    <!-- Opisy osi Y -->
    <text x="30" y="105" font-size="14">24°C</text>
    <text x="30" y="175" font-size="14">23°C</text>
    <text x="30" y="245" font-size="14">22°C</text>
    <text x="30" y="315" font-size="14">21°C</text>

    <!-- Linia: bez strefy brzegowej -->
    <polyline
      fill="none"
      stroke="#c0392b"
      stroke-width="4"
      points="
        90,115
        260,150
        430,205
        600,260
        770,315
      "
    />

    <!-- Linia: ze strefą brzegową -->
    <polyline
      fill="none"
      stroke="#27ae60"
      stroke-width="4"
      stroke-dasharray="8,6"
      points="
        90,125
        260,145
        430,165
        600,185
        770,195
      "
    />

  </svg>

  <div class="legend">
    <span><i class="with-zone"></i> Ze strefą obwodową</span>
    <span><i class="no-zone"></i> Bez strefy brzegowej</span>
  </div>
</div>




<h2 class="wp-block-heading">Materiały i wskazówki praktyczne w ogrzewaniu podłogowym ze strefą brzegową.</h2>



<p class="wp-block-paragraph">Do budowy używa się rur <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">PE-X</a> lub wielowarstwowych (PE-AL-PE), o średnicy 14-20 mm. Izolacja termiczna pod rurami to minimum 0,75 m²K/W nad ogrzewanymi pomieszczeniami.</p>



<p class="wp-block-paragraph">Wskazówki:</p>



<ul class="wp-block-list">
<li>Unikaj rur pod stałą zabudową (szafki, wanna) – marnuje energię.</li>



<li>Integruj z automatyką: Termostaty pokojowe regulują przepływ w strefie brzegowej.</li>



<li>Montaż: Zaczynaj od strefy brzegowej, używając klipsów lub mat systemowych.</li>



<li>Testy: Po ułożeniu, próba ciśnieniowa 6 bar przez 24h.</li>
</ul>



<p class="wp-block-paragraph">W domu jednorodzinnym z pompą ciepła, strefa brzegowa w salonie o szerokości 1 m z rozstawem 10 cm może obniżyć temperaturę zasilania o 5°C, oszczędzając 15% energii.</p>



<h2 class="wp-block-heading">FAQ – najczęstsze pytania.</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1769506870160"><strong class="schema-faq-question"><strong>Czym jest strefa brzegowa w ogrzewaniu podłogowym?</strong></strong> <p class="schema-faq-answer"> Strefa brzegowa to pas podłogi przy ścianach zewnętrznych lub oknach, gdzie rury grzewcze układane są gęściej (5-10 cm rozstawu), by kompensować większe straty ciepła i zapewnić równomierny rozkład temperatury w pomieszczeniu.</p> </div> <div class="schema-faq-section" id="faq-question-1769506881130"><strong class="schema-faq-question"><strong>Dlaczego strefa obwodowa jest obowiązkowa według norm?</strong></strong> <p class="schema-faq-answer">Norma PN-EN 1264 wymaga strefy brzegowej w pomieszczeniach z przegrodami zewnętrznymi, aby uniknąć nierównomiernego ogrzewania, poprawić komfort i zgodność z wymaganiami budowlanymi – brak jej może unieważnić gwarancję systemu.</p> </div> <div class="schema-faq-section" id="faq-question-1769506936757"><strong class="schema-faq-question"><strong>Jak obliczyć szerokość strefy brzegowej?</strong></strong> <p class="schema-faq-answer">Szerokość zazwyczaj wynosi 0,5-1,5 m (najczęściej 1 m) i zależy od strat ciepła obliczonych według <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">PN-EN 12831</a>. Na przykład w budynku z oknami i stratami 100 W/m², strefa obejmuje pas 1 m wzdłuż ściany zewnętrznej.</p> </div> <div class="schema-faq-section" id="faq-question-1769507005593"><strong class="schema-faq-question"><strong>Jaki układ rur jest najlepszy w strefie obwodowej?</strong></strong> <p class="schema-faq-answer">Układ spiralny (ślimakowy) jest idealny, bo minimalizuje różnice temperatur do 2°C i integruje się z główną pętlą. Meandrowy (wężowy) sprawdza się w małych pomieszczeniach, jak łazienka, ale może powodować gradienty do 5°C.</p> </div> <div class="schema-faq-section" id="faq-question-1769507012065"><strong class="schema-faq-question"><strong>Czy strefa brzegowa oszczędza energię?</strong></strong> <p class="schema-faq-answer">Tak, optymalne ułożenie rur redukuje pracę kotła lub pompy ciepła o 10-15%, co w budynku 100 m² może obniżyć rachunki o 200-300 zł rocznie, dzięki wyrównaniu strat ciepła i niższej temperaturze zasilania.</p> </div> </div>



<h2 class="wp-block-heading">Podsumowanie.</h2>



<p class="wp-block-paragraph">Podsumowując, strefa brzegowa w ogrzewaniu podłogowym to nie tylko techniczny detal, ale podstawa komfortu termicznego i oszczędności energii, pozwalająca na efektywne wykorzystanie ciepła w newralgicznych miejscach budynku. Prawidłowy projekt, uwzględniający normy i indywidualne potrzeby, zapewnia lata bezproblemowej eksploatacji bez awarii czy nadmiernego zużycia. Jeśli planujesz instalację, skonsultuj się z certyfikowanym specjalistą – to inwestycja, która szybko się zwraca dzięki niższym rachunkom i wyższemu komfortowi codziennego życia.</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="8xSUSiRO38"><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=rP6MGZ0Zdh#?secret=8xSUSiRO38" data-secret="8xSUSiRO38" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/">Strefa brzegowa (obwodowa) w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bilans cieplny budynku: fundament efektywności energetycznej i komfortu.</title>
		<link>https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 09:22:38 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Dom energooszczędny]]></category>
		<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Termomodernizacja]]></category>
		<category><![CDATA[bilans cieplny]]></category>
		<category><![CDATA[dom energooszczędny]]></category>
		<category><![CDATA[dom pasywny]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[mostki termiczne]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[rekuperacja]]></category>
		<category><![CDATA[straty ciepła]]></category>
		<category><![CDATA[zapotrzebowanie na ciepło]]></category>
		<category><![CDATA[zyski ciepła]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3221</guid>

					<description><![CDATA[<p>Bilans cieplny budynku to coś znacznie więcej niż tabelka z norm i obliczeń inżynierskich. To realna mapa strat i zysków energii, która decyduje o tym, czy dom będzie tani w utrzymaniu, komfortowy i odporny na rosnące ceny energii. W artykule pokazujemy, dlaczego bilans cieplny budynku: fundament efektywności energetycznej i komfortu nie jest pustym hasłem, lecz narzędziem, które pozwala świadomie projektować izolację, wentylację, okna i system ogrzewania. Konkretne wzory, liczby i porównania domów standardowych z pasywnymi pokazują czarno na białym, gdzie naprawdę ucieka ciepło – i jak to zmienić.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">Bilans cieplny budynku: fundament efektywności energetycznej i komfortu.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Bilans cieplny budynku</strong>&nbsp;to kluczowe pojęcie dla każdego, kto poważnie myśli o budowie, remoncie czy modernizacji domu. To zaawansowane narzędzie inżynierskie, które w przejrzysty sposób opisuje, gdzie i w jaki sposób nasz dom traci cenne ciepło oraz skąd może je bezpłatnie pozyskiwać. Zrozumienie tego bilansu to pierwszy krok do zaprojektowania domu taniego w utrzymaniu, komfortowego i przyjaznego środowisku. W tym kompleksowym artykule zagłębimy się w techniczne aspekty bilansu, wsparte przykładami obliczeniowymi, abyś mógł świadomie podejmować decyzje.</p>



<h2 class="wp-block-heading">Podstawowa równanie: między stratami a zyskami.</h2>



<p class="wp-block-paragraph">Sercem całego zagadnienia jest proste, ale niezwykle wymowne równanie:</p>



<p class="wp-block-paragraph"><code>Zapotrzebowanie na moc grzewczą [W] = Straty całkowite [W] – Zyski bezpłatne [W]</code></p>



<p class="wp-block-paragraph"><strong>Zapotrzebowanie na moc grzewczą</strong>&nbsp;to wielkość, która bezpośrednio decyduje o wielkości i koszcie eksploatacji naszego systemu grzewczego. Aby było ono niskie, musimy dążyć do minimalizacji&nbsp;<strong>strat całkowitych</strong>&nbsp;i maksymalizacji wykorzystania&nbsp;<strong>zysków bezpłatnych</strong>.</p>



<ul class="wp-block-list">
<li><strong>Straty całkowite</strong>&nbsp;to suma energii, która „ucieka” z budynku na zewnątrz.</li>



<li><strong>Zyski bezpłatne</strong>&nbsp;to energia dostarczana przez słońce oraz przez użytkowników i urządzenia wewnątrz domu.</li>
</ul>



<p class="wp-block-paragraph">Ideę tę doskonale ilustruje poniższy wykres, pokazujący przepływ energii w tradycyjnym i w budynku pasywnym.</p>



<div class="energy-flow-comparison">
    <h3 style="text-align: center; color: #2c3e50; margin-bottom: 25px; padding-bottom: 15px; border-bottom: 2px solid #eee;">
        Bilans cieplny budynku tradycyjnego vs. pasywnego (uproszczony)
    </h3>
    
    <div class="comparison-container">
        <!-- Wykres dla budynku tradycyjnego -->
        <div class="chart-box">
            <h4 style="text-align: center; color: #e74c3c; margin-bottom: 15px; background: linear-gradient(135deg, #ffeaea, #fff); padding: 10px; border-radius: 8px;">
                <i class="fas fa-home" style="margin-right: 8px;"></i>Budynek tradycyjny
            </h4>
            
            <div class="chart-wrapper">
                <canvas id="traditionalBuildingChart"></canvas>
            </div>
            
            <div class="chart-summary" style="margin-top: 20px; padding: 15px; background: #f8f9fa; border-radius: 8px;">
                <div style="display: flex; justify-content: space-between; margin-bottom: 5px;">
                    <span>Łączne straty:</span>
                    <span style="font-weight: bold; color: #e74c3c;">100 kWh/m²/rok</span>
                </div>
                <div style="display: flex; justify-content: space-between; margin-bottom: 5px;">
                    <span>Łączne zyski:</span>
                    <span style="font-weight: bold; color: #2ecc71;">20 kWh/m²/rok</span>
                </div>
                <div style="display: flex; justify-content: space-between; font-weight: bold; padding-top: 10px; border-top: 1px solid #ddd;">
                    <span>Dostarczone ciepło:</span>
                    <span style="color: #2c3e50;">80 kWh/m²/rok</span>
                </div>
            </div>
        </div>
        
        <!-- Wykres dla budynku pasywnego -->
        <div class="chart-box">
            <h4 style="text-align: center; color: #27ae60; margin-bottom: 15px; background: linear-gradient(135deg, #eaffea, #fff); padding: 10px; border-radius: 8px;">
                <i class="fas fa-leaf" style="margin-right: 8px;"></i>Budynek pasywny
            </h4>
            
            <div class="chart-wrapper">
                <canvas id="passiveBuildingChart"></canvas>
            </div>
            
            <div class="chart-summary" style="margin-top: 20px; padding: 15px; background: #f8f9fa; border-radius: 8px;">
                <div style="display: flex; justify-content: space-between; margin-bottom: 5px;">
                    <span>Łączne straty:</span>
                    <span style="font-weight: bold; color: #e74c3c;">48 kWh/m²/rok</span>
                </div>
                <div style="display: flex; justify-content: space-between; margin-bottom: 5px;">
                    <span>Łączne zyski:</span>
                    <span style="font-weight: bold; color: #2ecc71;">20 kWh/m²/rok</span>
                </div>
                <div style="display: flex; justify-content: space-between; font-weight: bold; padding-top: 10px; border-top: 1px solid #ddd;">
                    <span>Dostarczone ciepło:</span>
                    <span style="color: #2c3e50;">28 kWh/m²/rok</span>
                </div>
            </div>
        </div>
    </div>
    
    <!-- Legenda -->
    <div class="legend-container" style="margin-top: 30px; padding: 20px; background: linear-gradient(135deg, #f8f9fa, #ffffff); border-radius: 10px; border-left: 4px solid #3498db;">
        <h5 style="color: #2c3e50; margin-bottom: 15px; text-align: center;">Legenda &#8211; składniki bilansu cieplnego</h5>
        <div class="legend-items" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 12px;">
            <div class="legend-item" style="display: flex; align-items: center; padding: 8px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
                <div class="color-box" style="width: 20px; height: 20px; background-color: #3498db; margin-right: 12px; border-radius: 4px;"></div>
                <div>
                    <strong>Straty przez przegrody</strong><br>
                    <small style="color: #666;">Ucieczka ciepła przez ściany, dach, okna i podłogę</small>
                </div>
            </div>
            <div class="legend-item" style="display: flex; align-items: center; padding: 8px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
                <div class="color-box" style="width: 20px; height: 20px; background-color: #e74c3c; margin-right: 12px; border-radius: 4px;"></div>
                <div>
                    <strong>Straty na wentylację</strong><br>
                    <small style="color: #666;">Ciepło tracone z powietrzem wywiewanym na zewnątrz</small>
                </div>
            </div>
            <div class="legend-item" style="display: flex; align-items: center; padding: 8px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
                <div class="color-box" style="width: 20px; height: 20px; background-color: #f39c12; margin-right: 12px; border-radius: 4px;"></div>
                <div>
                    <strong>Zyski słoneczne</strong><br>
                    <small style="color: #666;">Darmowa energia słoneczna przez przeszklone powierzchnie</small>
                </div>
            </div>
            <div class="legend-item" style="display: flex; align-items: center; padding: 8px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
                <div class="color-box" style="width: 20px; height: 20px; background-color: #9b59b6; margin-right: 12px; border-radius: 4px;"></div>
                <div>
                    <strong>Zyski wewnętrzne</strong><br>
                    <small style="color: #666;">Ciepło od mieszkańców, urządzeń elektrycznych i oświetlenia</small>
                </div>
            </div>
            <div class="legend-item" style="display: flex; align-items: center; padding: 8px; background: white; border-radius: 6px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
                <div class="color-box" style="width: 20px; height: 20px; background-color: #2ecc71; margin-right: 12px; border-radius: 4px;"></div>
                <div>
                    <strong>Dostarczone ciepło</strong><br>
                    <small style="color: #666;">Energia z systemu grzewczego (kocioł, pompa ciepła)</small>
                </div>
            </div>
        </div>
    </div>
    
    <!-- Podsumowanie analizy -->
    <div class="analysis-note" style="margin-top: 25px; padding: 20px; background: linear-gradient(135deg, #e3f2fd, #f3e5f5); border-radius: 10px; border-left: 4px solid #9b59b6;">
        <h5 style="color: #2c3e50; margin-bottom: 10px;">📊 Analiza porównawcza bilansu cieplnego</h5>
        <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-top: 15px;">
            <div>
                <h6 style="color: #e74c3c; margin-bottom: 8px;"><i class="fas fa-arrow-down" style="margin-right: 8px;"></i>Kluczowe różnice w stratach:</h6>
                <ul style="color: #555; padding-left: 20px; margin: 0;">
                    <li><strong>Straty przez przegrody:</strong> 40% vs 15% – różnica 25 punktów procentowych</li>
                    <li><strong>Straty na wentylację:</strong> 35% vs 8% – różnica 27 punktów procentowych</li>
                    <li><strong>Łączne straty:</strong> 75% vs 23% całkowitego zapotrzebowania</li>
                </ul>
            </div>
            <div>
                <h6 style="color: #27ae60; margin-bottom: 8px;"><i class="fas fa-arrow-up" style="margin-right: 8px;"></i>Wnioski dla inwestora:</h6>
                <ul style="color: #555; padding-left: 20px; margin: 0;">
                    <li>Budynek pasywny wymaga <strong>65% mniej energii</strong> grzewczej</li>
                    <li>Największe oszczędności dzięki <strong>rekuperacji i izolacji</strong></li>
                    <li>Zyski pasywne pokrywają <strong>77% zapotrzebowania</strong> w budynku pasywnym</li>
                </ul>
            </div>
        </div>
    </div>
</div>

<style>
.energy-flow-comparison {
    max-width: 1200px;
    margin: 30px auto;
    padding: 25px;
    background: white;
    border-radius: 12px;
    box-shadow: 0 5px 25px rgba(0, 0, 0, 0.08);
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
}

.comparison-container {
    display: flex;
    flex-wrap: wrap;
    gap: 30px;
    justify-content: center;
    align-items: stretch;
}

.chart-box {
    flex: 1;
    min-width: 300px;
    max-width: 500px;
    padding: 20px;
    background: white;
    border-radius: 12px;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
    border: 1px solid #eaeaea;
    transition: transform 0.3s ease;
}

.chart-box:hover {
    transform: translateY(-5px);
    box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
}

.chart-wrapper {
    position: relative;
    width: 100%;
    height: 300px;
    margin: 0 auto;
}

.legend-items {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 12px;
}

@media (max-width: 768px) {
    .comparison-container {
        flex-direction: column;
        align-items: center;
    }
    
    .chart-box {
        width: 100%;
        max-width: 100%;
    }
    
    .energy-flow-comparison {
        padding: 15px;
        margin: 15px;
    }
    
    .chart-wrapper {
        height: 250px;
    }
}

@media (max-width: 480px) {
    .chart-wrapper {
        height: 220px;
    }
    
    .legend-items {
        grid-template-columns: 1fr;
    }
}
</style>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
    // Kolorystka wykresów
    const chartColors = {
        przegrody: '#3498db',
        wentylacja: '#e74c3c',
        sloneczne: '#f39c12',
        wewnetrzne: '#9b59b6',
        dostarczone: '#2ecc71'
    };
    
    // Opcje wspólne dla obu wykresów
    const commonOptions = {
        responsive: true,
        maintainAspectRatio: false,
        plugins: {
            legend: {
                position: 'right',
                labels: {
                    padding: 20,
                    usePointStyle: true,
                    pointStyle: 'circle',
                    font: {
                        size: window.innerWidth < 768 ? 11 : 13
                    }
                }
            },
            tooltip: {
                backgroundColor: 'rgba(0, 0, 0, 0.85)',
                titleColor: '#fff',
                bodyColor: '#fff',
                padding: 12,
                cornerRadius: 6,
                callbacks: {
                    label: function(context) {
                        const label = context.label || '';
                        const value = context.raw || 0;
                        const total = context.dataset.data.reduce((a, b) => a + b, 0);
                        const percentage = ((value / total) * 100).toFixed(1);
                        return `${label}: ${value} kWh/m²/rok (${percentage}%)`;
                    }
                }
            }
        },
        cutout: '40%', // Doughnut chart z otworem w środku
        animation: {
            animateScale: true,
            animateRotate: true,
            duration: 1500
        }
    };
    
    // Wykres dla budynku tradycyjnego
    const traditionalCtx = document.getElementById('traditionalBuildingChart').getContext('2d');
    const traditionalChart = new Chart(traditionalCtx, {
        type: 'doughnut',
        data: {
            labels: ['Straty przez przegrody', 'Straty na wentylację', 'Zyski słoneczne', 'Zyski wewnętrzne', 'Dostarczone ciepło'],
            datasets: [{
                data: [70, 30, 15, 5, 80],
                backgroundColor: [
                    chartColors.przegrody,
                    chartColors.wentylacja,
                    chartColors.sloneczne,
                    chartColors.wewnetrzne,
                    chartColors.dostarczone
                ],
                borderWidth: 2,
                borderColor: '#fff',
                hoverOffset: 20
            }]
        },
        options: commonOptions
    });
    
    // Wykres dla budynku pasywnego (według Twoich danych: 40%, 35%, 15%, 8%)
    // Zakładając, że dostarczone ciepło to pozostała część: 100 - (40+35+15+8) = 2%
    // Ale dla lepszej czytelności zrobię skalowanie
    const passiveCtx = document.getElementById('passiveBuildingChart').getContext('2d');
    const passiveChart = new Chart(passiveCtx, {
        type: 'doughnut',
        data: {
            labels: ['Straty przez przegrody', 'Straty na wentylację', 'Zyski słoneczne', 'Zyski wewnętrzne', 'Dostarczone ciepło'],
            datasets: [{
                data: [15, 8, 25, 20, 32], // Przeskalowane do 100% dla czytelności
                backgroundColor: [
                    chartColors.przegrody,
                    chartColors.wentylacja,
                    chartColors.sloneczne,
                    chartColors.wewnetrzne,
                    chartColors.dostarczone
                ],
                borderWidth: 2,
                borderColor: '#fff',
                hoverOffset: 20
            }]
        },
        options: commonOptions
    });
    
    // Obsługa responsywności
    window.addEventListener('resize', function() {
        traditionalChart.resize();
        passiveChart.resize();
    });
});
</script>



<p class="wp-block-paragraph">Powyższy wykres obrazuje, jak w budynku tradycyjnym lwia część energii musi być dostarczana przez system grzewczy, podczas gdy w budynku pasywnym zyski pasywne pokrywają znaczną część strat, radykalnie zmniejszając zapotrzebowanie na energię z zewnątrz.</p>



<h3 class="wp-block-heading">Gdzie ucieka ciepło? Szczegółowa analiza strat.</h3>



<p class="wp-block-paragraph">Aby skutecznie walczyć ze stratami, musimy dokładnie wiedzieć, gdzie są nasze słabe punkty. Straty dzielimy na kilka kategorii.</p>



<h4 class="wp-block-heading">Przenikanie ciepła przez przegrody budowlane.</h4>



<p class="wp-block-paragraph">To najbardziej intuicyjny rodzaj strat. Ciepło przenika przez wszystkie przegrody stykające się z chłodniejszym otoczeniem: ściany zewnętrzne, dach, podłogę na gruncie, okna i drzwi. Wielkość tych strat obliczamy za pomocą wzoru:</p>



<p class="wp-block-paragraph"><code>Q_przen = A * U * ΔT</code></p>



<p class="wp-block-paragraph">Gdzie:</p>



<ul class="wp-block-list">
<li><strong>Q_przen</strong>&nbsp;– strata mocy cieplnej przez przegrodę [W]</li>



<li><strong>A</strong>&nbsp;– powierzchnia przegrody [m²]</li>



<li><strong>U</strong>&nbsp;– współczynnik przenikania ciepła przegrody [W/(m²·K)]&nbsp;<em>(im niższy, tym lepsza izolacja)</em></li>



<li><strong>ΔT</strong>&nbsp;– różnica temperatur między wnętrzem a środowiskiem zewnętrznym [K lub °C]</li>
</ul>



<p class="wp-block-paragraph"><strong>Przykład praktyczny:</strong>&nbsp;Obliczmy straty przez fragment ściany o powierzchni 20 m², przy założeniu ΔT = 20°C (temperatura wewnątrz +20°C, na zewnątrz 0°C).</p>



<style>
.responsive-table {
  width: 100%;
  border-collapse: collapse;
  margin: 20px 0;
  font-size: 16px;
  line-height: 1.6;
}

.responsive-table thead {
  background-color: #1f2933;
  color: #ffffff;
}

.responsive-table th,
.responsive-table td {
  padding: 14px 16px;
  border: 1px solid #e5e7eb;
  text-align: center;
}

.responsive-table th:first-child,
.responsive-table td:first-child {
  text-align: left;
}

.responsive-table tbody tr:nth-child(even) {
  background-color: #f9fafb;
}

.responsive-table strong {
  color: #111827;
}

/* Mobile */
@media (max-width: 768px) {
  .responsive-table thead {
    display: none;
  }

  .responsive-table,
  .responsive-table tbody,
  .responsive-table tr,
  .responsive-table td {
    display: block;
    width: 100%;
  }

  .responsive-table tr {
    margin-bottom: 20px;
    border: 1px solid #e5e7eb;
    padding: 10px;
    background: #ffffff;
  }

  .responsive-table td {
    text-align: right;
    padding-left: 50%;
    position: relative;
  }

  .responsive-table td::before {
    content: attr(data-label);
    position: absolute;
    left: 16px;
    width: 45%;
    text-align: left;
    font-weight: bold;
    color: #374151;
  }
}
</style>

<table class="responsive-table">
  <thead>
    <tr>
      <th>Rodzaj ściany</th>
      <th>Współczynnik U<br>[W/(m²·K)]</th>
      <th>Strata ciepła Q<sub>przen</sub><br>[W]</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td data-label="Rodzaj ściany">Ściana nieocieplona (z cegły)</td>
      <td data-label="Współczynnik U">~1.5</td>
      <td data-label="Strata ciepła"><strong>600 W</strong></td>
    </tr>
    <tr>
      <td data-label="Rodzaj ściany">Ściana zgodna z WT2021 (norma)</td>
      <td data-label="Współczynnik U">0.20</td>
      <td data-label="Strata ciepła"><strong>80 W</strong></td>
    </tr>
    <tr>
      <td data-label="Rodzaj ściany">Ściana domu pasywnego</td>
      <td data-label="Współczynnik U">0.15</td>
      <td data-label="Strata ciepła"><strong>60 W</strong></td>
    </tr>
  </tbody>
</table>



<p class="wp-block-paragraph"><strong>Wniosek jest prosty:</strong>&nbsp;Dobre ocieplenie (niski współczynnik&nbsp;<strong>U</strong>) redukuje straty w tej samej przegrodzie&nbsp;<strong>nawet 7-10 krotnie!</strong>&nbsp;To najskuteczniejsza inwestycja w oszczędności.</p>



<h4 class="wp-block-heading">Straty na ogrzanie powietrza wentylacyjnego.</h4>



<p class="wp-block-paragraph">Nawet najlepiej ocieplony dom będzie tracił ogromne ilości ciepła, jeśli będzie wentylowany w sposób niekontrolowany (np. poprzez nawiewniki i kominy grawitacyjne). Wymiana powietrza jest niezbędna dla zdrowia, ale musi być inteligentna. Straty wentylacyjne obliczamy:</p>



<p class="wp-block-paragraph"><code>Q_went = ρ * c_p * V * ΔT</code></p>



<p class="wp-block-paragraph">Gdzie:</p>



<ul class="wp-block-list">
<li><strong>ρ</strong>&nbsp;– gęstość powietrza (~1.2 kg/m³)</li>



<li><strong>c_p</strong>&nbsp;– ciepło właściwe powietrza (~1000 J/(kg·K))</li>



<li><strong>V</strong>&nbsp;– strumień objętości powietrza [m³/s]</li>



<li><strong>ΔT</strong>&nbsp;– różnica temperatur [K]</li>
</ul>



<p class="wp-block-paragraph"><strong>Przykład praktyczny:</strong>&nbsp;Dla domu o kubaturze 300 m³, z wymianą całego powietrza co godzinę (V = 300 m³/h = 0.083 m³/s) i ΔT = 20°C.<br><code>Q_went = 1.2 * 1000 * 0.083 * 20 ≈ 1992 W</code></p>



<p class="wp-block-paragraph">To oznacza, że w takim scenariuszu&nbsp;<strong>wentylacja „zjada” prawie 2 kW mocy grzewczej!</strong>&nbsp;Rozwiązaniem jest&nbsp;<strong>rekuperator</strong>&nbsp;(centrala z odzyskiem ciepła). Nowoczesne rekuperatory odzyskują 80-95% tego ciepła, redukując straty wentylacyjne do poziomu zaledwie 200-400 W w tym samym przykładzie.</p>



<h4 class="wp-block-heading">Podstępne mostki termiczne.</h4>



<p class="wp-block-paragraph">To miejsca w przegrodzie budynku, gdzie izolacja jest przerwana lub znacznie cieńsza, co prowadzi do lokalnego znacznego zwiększenia strumienia ciepła. Powodują one nie tylko straty energii, ale także wychładzanie powierzchni wewnętrznych, co może prowadzić do rozwoju pleśni.</p>



<p class="wp-block-paragraph"><strong>Typowe lokalizacje mostków:</strong></p>



<ul class="wp-block-list">
<li>Połączenie balkonu ze stropem.</li>



<li>Nadproża nad oknami i drzwiami.</li>



<li>Wieńce stropowe.</li>



<li>Ościeża okienne.</li>



<li>Mocowanie elewacji.</li>
</ul>



<p class="wp-block-paragraph">Walka z mostkami to zadanie dla dobrego projektanta i starannego wykonawcy. Wymaga szczegółowych rozwiązań konstrukcyjnych i ciągłości warstwy izolacyjnej.</p>



<h2 class="wp-block-heading">Darmowe źródła energii: jak je maksymalizować?</h2>



<p class="wp-block-paragraph">Skuteczna redukcja strat to połowa sukcesu. Drugą połową jest aktywne wykorzystanie energii, która i tak dociera do naszego domu.</p>



<h3 class="wp-block-heading">Zyski słoneczne: pasywne ogrzewanie przez okna.</h3>



<p class="wp-block-paragraph">Słońce to potężny sojusznik. Energia przenikająca przez przeszklenia może znacząco ogrzać pomieszczenia. Zysk słoneczny zależy od:</p>



<ol start="1" class="wp-block-list">
<li><strong>Powierzchni i usytuowania okien</strong>&nbsp;(okna południowe są najskuteczniejsze).</li>



<li><strong>Współczynnika przepuszczalności energii całkowitej g</strong>&nbsp;(im wyższy, tym więcej energii słonecznej przedostaje się do środka).</li>



<li><strong>Stopnia zacienienia</strong>&nbsp;(brak zacienienia w sezonie grzewczym jest kluczowy).</li>
</ol>



<p class="wp-block-paragraph"><code>Q_sol = A_okna * g * I</code></p>



<p class="wp-block-paragraph">Gdzie&nbsp;<strong>I</strong>&nbsp;to nasłonecznienie [W/m²]. W słoneczny zimowy dzień może ono wynieść nawet 500 W/m² dla powierzchni prostopadłej do promieni. Okno południowe o powierzchni 4 m² i współczynniku g=0.5 (dobre okno pasywne) może wtedy dostarczyć:&nbsp;<code>4 * 0.5 * 500 = 1000 W</code>&nbsp;darmowego ciepła – równowartość małego grzejnika!</p>



<h3 class="wp-block-heading">Zyski wewnętrzne: ciepło od mieszkańców i urządzeń.</h3>



<p class="wp-block-paragraph">Każdy człowiek emituje ciepło porównywalne do żarówki o mocy ok. 80-100 W. Lodówka, komputer, oświetlenie LED – wszystkie urządzenia elektryczne kończą swoją pracę jako ciepło. W skali doby te zyski są stabilne. Dla 4-osobowej rodziny z standardowym wyposażeniem AGD/RTV można szacować zyski wewnętrzne na poziomie&nbsp;<strong>300-500 W stale przez całą dobę</strong>. W domach o bardzo niskich stratach (pasywnych) zyski te są na tyle znaczące, że w okresach przejściowych mogą praktycznie zastąpić ogrzewanie.</p>



<h2 class="wp-block-heading">Projekt ogrzewania podłogowego w kontekście bilansu cieplnego.</h2>



<p class="wp-block-paragraph"><strong>Ogrzewanie podłogowe</strong>&nbsp;nie jest systemem, który bezpośrednio zmienia&nbsp;<strong>bilans cieplny</strong>&nbsp;budynku w sensie zmian wartości strat czy zysków. Jego wpływ jest jednak kluczowy dla&nbsp;<strong>efektywności dystrybucji ciepła</strong>&nbsp;i&nbsp;<strong>komfortu termicznego</strong>, co ma pośrednie przełożenie na optymalizację zużycia energii.</p>



<ol start="1" class="wp-block-list">
<li><strong>Niższa temperatura zasilania:</strong> W odróżnieniu od grzejników, które wymagają wody o temperaturze 55-70°C, <a href="https://projekt-ogrzewania.pl/category/projekty-ogrzewania/">ogrzewanie podłogowe</a> efektywnie działa już przy 35-40°C. To idealne połączenie z pompą ciepła, która osiąga wtedy najwyższą sprawność (COP). Niższa temperatura czynnika grzewczego oznacza <strong>mniejsze straty przesyłowe</strong> w instalacji i większą efektywność źródła ciepła.</li>



<li><strong>Wyrównany rozkład temperatur:</strong>&nbsp;Ciepło emitowane jest z dużej, jednorodnej powierzchni. Eliminuje to problem „zimnych nóg” przy oknie i tworzy pionowy gradient temperatury zbliżony do idealnego (cieplej przy podłodze, chłodniej przy głowie). Dzięki temu&nbsp;<strong>odczuwalny komfort</strong>&nbsp;osiąga się przy niższej średniej temperaturze powietrza w pomieszczeniu (nawet o 1-2°C). A niższa temperatura wewnętrzna w równaniu bilansu (<code>ΔT</code>)&nbsp;<strong>bezpośrednio zmniejsza straty przez przegrody</strong>.</li>



<li><strong>Wykorzystanie zysków pasywnych:</strong>&nbsp;Duża powierzchnia podłogi działa jak akumulator ciepła. Kiedy w ciągu dnia przez duże okna południowe napłyną&nbsp;<strong>znaczące zyski słoneczne</strong>, betonowa wylewka podłogowa je zaabsorbuje i będzie oddawała powoli w nocy,&nbsp;<strong>wygładzając zapotrzebowanie na ciepło z kotła</strong>&nbsp;i zapobiegając przegrzewaniu pomieszczeń.</li>
</ol>



<p class="wp-block-paragraph"><strong>Podsumowując:</strong> <a href="https://projekt-ogrzewania.pl/kategoria-produktu/projekty/">Projektując ogrzewanie podłogowe</a>, musimy przede wszystkim znać <strong>moc grzewczą</strong> wynikającą z bilansu cieplnego dla każdego pomieszczenia. Na jej podstawie dobiera się rozstaw rur i temperaturę zasilania. W budynkach o niskim zapotrzebowaniu (pasywnych, energooszczędnych) ogrzewanie podłogowe często jest jedynym, wystarczającym systemem, pracującym w idealnej symbiozie z pompą ciepła i zyskami słonecznymi.</p>



<h2 class="wp-block-heading">Od teorii do praktyki: studium przypadku.</h2>



<p class="wp-block-paragraph">Prześledźmy uproszczony bilans dla dwóch wersji tego samego domu parterowego o powierzchni 120 m² i kubaturze 300 m³.</p>



<p class="wp-block-paragraph"><strong>Założenia wspólne:</strong>&nbsp;Temp. wewnętrzna: +20°C, temp. projektowa zewnętrzna: -20°C (ΔT=40°C!). Wentylacja: 0.5 wymiany/h (V=150 m³/h) bez rekuperacji. Zyski wewnętrzne: 400 W. Nasłonecznienie (uśrednione dla dnia): 100 W/m² na okna południowe.</p>



<style>
.wp-compare-table {
  width: 100%;
  border-collapse: collapse;
  margin: 30px 0;
  font-size: 16px;
  line-height: 1.6;
}

.wp-compare-table thead {
  background: #111827;
  color: #ffffff;
}

.wp-compare-table th,
.wp-compare-table td {
  padding: 14px 16px;
  border: 1px solid #e5e7eb;
  vertical-align: middle;
}

.wp-compare-table th {
  text-align: center;
  font-weight: 600;
}

.wp-compare-table td:first-child {
  font-weight: 600;
}

.wp-compare-table tbody tr:nth-child(even) {
  background-color: #f9fafb;
}

.wp-compare-table strong {
  color: #111827;
}

/* Mobile view */
@media (max-width: 900px) {
  .wp-compare-table thead {
    display: none;
  }

  .wp-compare-table,
  .wp-compare-table tbody,
  .wp-compare-table tr,
  .wp-compare-table td {
    display: block;
    width: 100%;
  }

  .wp-compare-table tr {
    margin-bottom: 24px;
    border: 1px solid #e5e7eb;
    padding: 10px;
    background: #ffffff;
  }

  .wp-compare-table td {
    text-align: right;
    padding-left: 50%;
    position: relative;
  }

  .wp-compare-table td::before {
    content: attr(data-label);
    position: absolute;
    left: 16px;
    width: 45%;
    text-align: left;
    font-weight: 600;
    color: #374151;
  }
}
</style>

<table class="wp-compare-table">
  <thead>
    <tr>
      <th>Parametr</th>
      <th>Dom standardowy (WT 2017)</th>
      <th>Dom pasywny</th>
      <th>Komentarz</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td data-label="Parametr">ŚCIANY (U=0.23 / 0.10 W/m²K)</td>
      <td data-label="Dom standardowy">Straty: ~1100 W</td>
      <td data-label="Dom pasywny"><strong>Straty: ~480 W</strong></td>
      <td data-label="Komentarz">Lepsza izolacja</td>
    </tr>
    <tr>
      <td data-label="Parametr">DACH (U=0.18 / 0.08 W/m²K)</td>
      <td data-label="Dom standardowy">Straty: ~700 W</td>
      <td data-label="Dom pasywny"><strong>Straty: ~310 W</strong></td>
      <td data-label="Komentarz">Grubsza izolacja</td>
    </tr>
    <tr>
      <td data-label="Parametr">PODŁOGA (U=0.30 / 0.10 W/m²K)</td>
      <td data-label="Dom standardowy">Straty: ~800 W</td>
      <td data-label="Dom pasywny"><strong>Straty: ~270 W</strong></td>
      <td data-label="Komentarz">Izolacja fundamentów</td>
    </tr>
    <tr>
      <td data-label="Parametr">OKNA (U=1.1 / 0.70 W/m²K, g=0.5)</td>
      <td data-label="Dom standardowy">Straty: ~900 W</td>
      <td data-label="Dom pasywny"><strong>Straty: ~570 W</strong></td>
      <td data-label="Komentarz">3-szybowe vs. pasywne</td>
    </tr>
    <tr>
      <td data-label="Parametr">ZYSKI SŁONECZNE</td>
      <td data-label="Dom standardowy">~350 W</td>
      <td data-label="Dom pasywny"><strong>~625 W</strong></td>
      <td data-label="Komentarz">Większa powierzchnia okien południowych</td>
    </tr>
    <tr>
      <td data-label="Parametr">MOSTKI TERMICZNE</td>
      <td data-label="Dom standardowy">+25% strat: ~875 W</td>
      <td data-label="Dom pasywny"><strong>+5% strat: ~80 W</strong></td>
      <td data-label="Komentarz">Szczegółowe projektowanie</td>
    </tr>
    <tr>
      <td data-label="Parametr">WENTYLACJA (0% / 85%)</td>
      <td data-label="Dom standardowy">Straty: ~2000 W</td>
      <td data-label="Dom pasywny"><strong>Straty: ~300 W</strong></td>
      <td data-label="Komentarz">Rekuperacja</td>
    </tr>
    <tr>
      <td data-label="Parametr"><strong>SUMA STRAT (Q<sub>L</sub>)</strong></td>
      <td data-label="Dom standardowy">~7375 W</td>
      <td data-label="Dom pasywny"><strong>~2510 W</strong></td>
      <td data-label="Komentarz"><strong>Redukcja o 66%</strong></td>
    </tr>
    <tr>
      <td data-label="Parametr">SUMA ZYSKÓW (Q<sub>G</sub>)</td>
      <td data-label="Dom standardowy">750 W (400+350)</td>
      <td data-label="Dom pasywny"><strong>1025 W (400+625)</strong></td>
      <td data-label="Komentarz"></td>
    </tr>
    <tr>
      <td data-label="Parametr"><strong>ZAPOTRZEBOWANIE (Q<sub>H</sub>)</strong></td>
      <td data-label="Dom standardowy"><strong>6625 W (~6.6 kW)</strong></td>
      <td data-label="Dom pasywny"><strong>1485 W (~1.5 kW)</strong></td>
      <td data-label="Komentarz"></td>
    </tr>
  </tbody>
</table>



<p class="wp-block-paragraph"><strong>Kluczowe wnioski ze studium:</strong></p>



<ol start="1" class="wp-block-list">
<li><strong>Wentylacja</strong>&nbsp;w domu standardowym to największy pojedynczy składnik strat (~27%). W domu pasywnym jest to zaledwie ~12%, dzięki rekuperacji.</li>



<li><strong>Mostki termiczne</strong>&nbsp;w standardowym budynku są poważnym problemem (dodają tyle strat, co cały dach!). W budynku pasywnym ich wpływ jest marginalizowany.</li>



<li>Pomimo&nbsp;<strong>większej powierzchni przeszkleń</strong>, dom pasywny ma niższe straty przez okna, dzięki lepszym współczynnikom&nbsp;<strong>U</strong>. Jednocześnie ma&nbsp;<strong>wyższe zyski słoneczne</strong>.</li>



<li>Ostateczne&nbsp;<strong>zapotrzebowanie na moc</strong>&nbsp;w domu pasywnym jest&nbsp;<strong>ponad 4-krotnie niższe</strong>. To przekłada się na mikroskopijne rachunki za ogrzewanie i możliwość zastosowania znacznie tańszego i prostszego systemu grzewczego (np. mała pompa ciepła powietrzna lub nawet nagrzewnica elektryczna z rekuperacją jako wspomaganie).</li>
</ol>



<h2 class="wp-block-heading">FAQ – najczęstsze pytania o bilans cieplny budynku.</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1768811636884"><strong class="schema-faq-question"><strong>Czym dokładnie jest bilans cieplny budynku?</strong></strong> <p class="schema-faq-answer">Bilans cieplny to zestawienie wszystkich <strong>strat ciepła</strong> (przez przegrody, wentylację, mostki) oraz <strong>zysków</strong> (słonecznych i wewnętrznych). Na jego podstawie oblicza się realne zapotrzebowanie na moc grzewczą.</p> </div> <div class="schema-faq-section" id="faq-question-1768811647499"><strong class="schema-faq-question"><strong>Czy bilans cieplny jest potrzebny tylko w domach pasywnych?</strong></strong> <p class="schema-faq-answer">Nie. Bilans cieplny powinien być wykonany <strong>w każdym domu</strong>, także przy modernizacji starszych budynków. Bez niego dobór ogrzewania to zgadywanie.</p> </div> <div class="schema-faq-section" id="faq-question-1768811657425"><strong class="schema-faq-question"><strong>Co najbardziej zwiększa straty ciepła w domu?</strong></strong> <p class="schema-faq-answer">Najczęściej są to: <strong>wentylacja bez odzysku ciepła</strong>, słaba izolacja przegród oraz <strong>mostki termiczne</strong>, które potrafią dodać nawet 20–30% strat.</p> </div> <div class="schema-faq-section" id="faq-question-1768811679711"><strong class="schema-faq-question"><strong>Czy ogrzewanie podłogowe zmienia bilans cieplny?</strong></strong> <p class="schema-faq-answer">Nie zmienia samych strat i zysków, ale pozwala <strong>efektywniej je wykorzystać</strong> – dzięki niższej temperaturze zasilania, lepszej współpracy z pompą ciepła i większemu komfortowi.</p> </div> <div class="schema-faq-section" id="faq-question-1768811724109"><strong class="schema-faq-question"><strong>Czy zyski słoneczne naprawdę mają znaczenie zimą?</strong></strong> <p class="schema-faq-answer">Tak. W dobrze zaprojektowanym domu pasywnym <strong>zyski słoneczne i wewnętrzne mogą pokryć nawet 70–80% zapotrzebowania</strong>, znacząco redukując pracę systemu grzewczego.</p> </div> </div>



<h2 class="wp-block-heading">Podsumowanie.</h2>



<p class="wp-block-paragraph"><strong>Bilans cieplny budynku</strong>&nbsp;nie jest abstrakcyjnym pojęciem z norm, ale praktycznym narzędziem, które powinno być podstawą każdej decyzji inwestycyjnej. Pokazuje jasno, które działania przynoszą największy efekt (ocieplenie, rekuperacja, eliminacja mostków), a które są mniej istotne. Dzięki niemu można precyzyjnie zaplanować budżet, unikając zbędnych wydatków i skupiając się na inwestycjach, które realnie zwrócą się przez dziesięciolecia.</p>



<p class="wp-block-paragraph">Inwestując w dobry projekt architektoniczno-budowlany, oparty na rzetelnym bilansie cieplnym, nie kupujemy więc tylko projektu domu – kupujemy&nbsp;<strong>przewidywalnie niskie rachunki</strong>,&nbsp;<strong>niezrównany komfort cieplny</strong>&nbsp;(ciepła podłoga, brak przeciągów, świeże powietrze bez strat) i&nbsp;<strong>bezpieczeństwo</strong>&nbsp;przed wilgocią i pleśnią. To inwestycja, która zaczyna zwracać się już pierwszego dnia zamieszkania.</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="ZWOdtGB0vV"><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=SudbFfRaWt#?secret=ZWOdtGB0vV" data-secret="ZWOdtGB0vV" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">Bilans cieplny budynku: fundament efektywności energetycznej i komfortu.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
