<?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 Efektywność cieplna - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/category/efektywnosc-cieplna/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/category/efektywnosc-cieplna/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Sun, 30 Aug 2026 08:25:56 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa Efektywność cieplna - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/category/efektywnosc-cieplna/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>Rzeczywiste oszczędności na kosztach ogrzewania w skali roku – analiza rozstawu rur dla domu 150 m².</title>
		<link>https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m%c2%b2/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 31 Jan 2026 11:58:03 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Koszty instalacji]]></category>
		<category><![CDATA[Koszty instalacji grzewczych]]></category>
		<category><![CDATA[Koszty ogrzewania]]></category>
		<category><![CDATA[Koszty ogrzewania podłogowego]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Oszczędności energii]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Taryfy energii]]></category>
		<category><![CDATA[cop pompy ciepła]]></category>
		<category><![CDATA[dom 150 m2]]></category>
		<category><![CDATA[koszty ogrzewania]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędności energii]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<category><![CDATA[taryfy ure 2026]]></category>
		<category><![CDATA[temperatura zasilania]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3344</guid>

					<description><![CDATA[<p>Rzeczywiste oszczędności na kosztach ogrzewania w skali roku zaczynają się znacznie wcześniej niż przy wyborze źródła ciepła. W tej analizie, wykonanej dla domu o powierzchni 150 m², pokazujemy, jak rozstaw rur w ogrzewaniu podłogowym wpływa na temperaturę zasilania, sprawność instalacji oraz realne rachunki za energię. Porównujemy wariant 10 cm i 15 cm, uwzględniając nowe taryfy energetyczne, długoterminową eksploatację i faktyczne liczby, które mają bezpośrednie przełożenie na domowy budżet.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m%c2%b2/">Rzeczywiste oszczędności na kosztach ogrzewania w skali roku – analiza rozstawu rur dla domu 150 m².</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Prawdziwe oszczędności na kosztach ogrzewania w skali roku</strong>&nbsp;można osiągnąć nie tylko poprzez wybór źródła ciepła, ale także dzięki optymalizacji samej instalacji. W przypadku ogrzewania podłogowego, jedna z kluczowych decyzji – rozstaw rur grzewczych – ma fundamentalny wpływ na późniejsze rachunki. W odniesieniu do nowych taryf energetycznych URE, które weszły w życie 1 stycznia 2026 roku, każda decyzja projektowa nabiera jeszcze większego znaczenia. W tym artykule, na przykładzie domu o powierzchni 150 m², przeanalizujemy szczegółowo, jak różnica między ułożeniem rur co 10 cm a co 15 cm przekłada się na konkretne kwoty w domowym budżecie.</p>



<h2 class="wp-block-heading">Podstawy fizyki budowli a rozstaw pętli grzewczych.</h2>



<h3 class="wp-block-heading">Dlaczego odległość między rurami ma aż takie znaczenie?</h3>



<p class="wp-block-paragraph"><a href="https://projekt-ogrzewania.pl/category/ogrzewanie-podlogowe/">Ogrzewanie podłogowe</a> działa na zasadzie&nbsp;<strong>promieniowania cieplnego</strong>. Powierzchnia podłogi zamienia się w niskotemperaturowy grzejnik. Kluczowym parametrem jest&nbsp;<strong>jednorodność temperatury powierzchni</strong>. Im bardziej jest ona równomierna, tym wyższy komfort cieplny osiągamy przy niższej średniej temperaturze powietrza w pomieszczeniu.</p>



<ul class="wp-block-list">
<li><strong>Przy rozstawie 10 cm</strong> tworzymy gęstą siatkę pętli, co pozwala na uzyskanie niemal idealnie równomiernego rozkładu temperatury na całej powierzchni podłogi. System może efektywnie pracować z temperaturą zasilania <strong>zaledwie 33-38°C</strong>.</li>



<li><strong>Przy rozstawie 15 cm</strong> pojawiają się tzw. <strong>&#8222;strefy chłodniejsze&#8221;</strong> pomiędzy rurami. Aby skompensować tę nierównomierność i zapewnić ten sam komfort, musimy podnieść temperaturę zasilania, często nawet do <strong>38-42°C</strong>.</li>
</ul>



<p class="wp-block-paragraph"><strong>Ta różnica w temperaturze zasilania jest kluczem do wszystkich późniejszych oszczędności.</strong></p>



<h3 class="wp-block-heading">Sprawność źródła ciepła w centrum uwagi.</h3>



<p class="wp-block-paragraph">Nowoczesne, najbardziej efektywne źródła ciepła, takie jak&nbsp;<strong>pompy ciepła</strong>&nbsp;czy&nbsp;<strong>kondensacyjne kotły gazowe</strong>, osiągają szczytową sprawność właśnie przy niskich parametrach zasilania.</p>



<ul class="wp-block-list">
<li><strong><a href="https://projekt-ogrzewania.pl/pompa-ciepla/">Pompa ciepła</a></strong>&nbsp;typu powietrze-woda przy temperaturze zasilania 35°C może osiągnąć współczynnik efektywności&nbsp;<strong>COP na poziomie 3,8-4,2</strong>. Przy 50°C jej COP spada często do&nbsp;<strong>3,0-3,3</strong>. Oznacza to, że do wyprodukowania tej samej ilości ciepła zużyje nawet o 25% więcej energii elektrycznej.</li>



<li><strong><a href="https://projekt-ogrzewania.pl/kociol-gazowy/">Kocioł kondensacyjny</a></strong>&nbsp;przy niskiej temperaturze powrotu w pełni wykorzystuje zjawisko kondensacji, osiągając sprawność powyżej 100% (w odniesieniu do wartości opałowej). Przy wyższych temperaturach ta korzyść znika.</li>
</ul>



<h2 class="wp-block-heading">Szczegółowa analiza kosztów: inwestycja kontra wieloletnia eksploatacja.</h2>



<h3 class="wp-block-heading">Koszty początkowe instalacji.</h3>



<p class="wp-block-paragraph">Zacznijmy od inwestycji początkowej. Dla domu 150 m² powierzchni ogrzewanej, różnica w kosztach materiałów i robocizny jest wymierna.</p>



<style>
.table-wrapper {
  width: 100%;
  overflow-x: auto;
  margin: 30px 0;
  font-family: Arial, sans-serif;
}

.cost-table {
  width: 100%;
  border-collapse: collapse;
  min-width: 700px;
}

.cost-table th,
.cost-table td {
  padding: 14px 16px;
  text-align: left;
  border-bottom: 1px solid #e3e3e3;
  vertical-align: top;
}

.cost-table thead th {
  font-weight: 700;
  background: #f9f8ff;
  color: #2b2b2b;
}

.cost-table tbody tr:hover {
  background: #fafafa;
}

.cost-table td strong {
  font-weight: 700;
}

.cost-table .diff {
  font-weight: 700;
  color: #3a2fd6;
}

.cost-table .total {
  font-weight: 700;
  font-size: 16px;
  background: #f3f1ff;
}

@media (max-width: 768px) {
  .cost-table {
    min-width: 100%;
  }

  .cost-table thead {
    display: none;
  }

  .cost-table,
  .cost-table tbody,
  .cost-table tr,
  .cost-table td {
    display: block;
    width: 100%;
  }

  .cost-table tr {
    margin-bottom: 18px;
    border: 1px solid #e3e3e3;
    padding: 12px;
    border-radius: 6px;
  }

  .cost-table td {
    border: none;
    padding: 8px 0;
  }

  .cost-table td::before {
    content: attr(data-label);
    font-weight: 600;
    display: block;
    color: #555;
    margin-bottom: 2px;
  }

  .cost-table .total {
    font-size: 15px;
  }
}
</style>

<div class="table-wrapper">
  <table class="cost-table">
    <thead>
      <tr>
        <th>Element kosztów</th>
        <th>Rozstaw rur 15 cm</th>
        <th>Rozstaw rur 10 cm</th>
        <th>Różnica</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td data-label="Element kosztów">Długość rury PE-Xa (średnio)</td>
        <td data-label="Rozstaw rur 15 cm">ok. 1500 mb</td>
        <td data-label="Rozstaw rur 10 cm">ok. 2250 mb</td>
        <td data-label="Różnica" class="diff">+750 mb</td>
      </tr>

      <tr>
        <td data-label="Element kosztów">Koszt rury (śr. 5 zł/mb)</td>
        <td data-label="Rozstaw rur 15 cm">ok. 7 500 zł</td>
        <td data-label="Rozstaw rur 10 cm">ok. 11 250 zł</td>
        <td data-label="Różnica" class="diff">+3 750 zł</td>
      </tr>

      <tr>
        <td data-label="Element kosztów">Czas pracy ekipy (przybliżenie)</td>
        <td data-label="Rozstaw rur 15 cm">5–7 dni</td>
        <td data-label="Rozstaw rur 10 cm">7–10 dni</td>
        <td data-label="Różnica" class="diff">+2–3 dni robocze</td>
      </tr>

      <tr>
        <td data-label="Element kosztów">Koszt robocizny (przybliżenie)</td>
        <td data-label="Rozstaw rur 15 cm">4 000 – 6 000 zł</td>
        <td data-label="Rozstaw rur 10 cm">6 000 – 8 500 zł</td>
        <td data-label="Różnica" class="diff">+2 000 zł</td>
      </tr>

      <tr class="total">
        <td data-label="Element kosztów" colspan="3">
          Szacowany całkowity dodatkowy koszt inwestycyjny
        </td>
        <td data-label="Różnica">
          <strong>od 5 000 do 6 000 zł</strong>
        </td>
      </tr>
    </tbody>
  </table>
</div>



<p class="wp-block-paragraph">Jest to więc wyraźnie wyższy wydatek na etapie budowy lub remontu.</p>



<h3 class="wp-block-heading">Roczne koszty eksploatacji w świetle nowych taryf URE (od 2026).</h3>



<p class="wp-block-paragraph">Od 1 stycznia 2026 roku obowiązywać będą nowe, wyższe stawki za energię. Przyjmijmy do symulacji średnie wartości z widełek podanych przez URE:</p>



<ul class="wp-block-list">
<li><strong>Taryfa G11 (jednostrefowa): 1,05 zł/kWh</strong>&nbsp;(całkowity koszt energii i dystrybucji)</li>



<li><strong>Taryfa G12 (dwustrefowa):</strong>&nbsp;dzienna &#8211;&nbsp;<strong>1,25 zł/kWh</strong>, nocna &#8211;&nbsp;<strong>0,61 zł/kWh</strong></li>
</ul>



<p class="wp-block-paragraph"><strong>Przykład wyliczenia dla domu 150 m² z pompą ciepła:</strong></p>



<ol start="1" class="wp-block-list">
<li><strong>Roczne zapotrzebowanie na ciepło:</strong>&nbsp;Dla dobrze ocieplonego, nowego domu przyjmuje się ok. 40-50 kWh/m²/rok. Weźmy wartość&nbsp;<strong>45 kWh/m²/rok</strong>.
<ul class="wp-block-list">
<li>Całkowite zapotrzebowanie:&nbsp;<code>150 m² * 45 kWh = 6 750 kWh/rok</code>.</li>
</ul>
</li>



<li><strong>Zużycie energii przez pompę ciepła:</strong>
<ul class="wp-block-list">
<li><strong>Wariant A (rurociągi co 15 cm, temp. zasilania 48°C):</strong>&nbsp;COP = 3,2
<ul class="wp-block-list">
<li>Energia elektryczna:&nbsp;<code>6 750 kWh / 3,2 = 2 109 kWh</code></li>
</ul>
</li>



<li><strong>Wariant B (rurociągi co 10 cm, temp. zasilania 38°C):</strong>&nbsp;COP = 3,9
<ul class="wp-block-list">
<li>Energia elektryczna:&nbsp;<code>6 750 kWh / 3,9 = 1 731 kWh</code></li>
</ul>
</li>
</ul>
</li>



<li><strong>Koszty roczne w taryfie G11:</strong>
<ul class="wp-block-list">
<li>Wariant A (15 cm):&nbsp;<code>2 109 kWh * 1,05 zł = **2 214 zł/rok**</code></li>



<li>Wariant B (10 cm):&nbsp;<code>1 731 kWh * 1,05 zł = **1 818 zł/rok**</code></li>



<li><strong>Roczna oszczędność: 396 zł.</strong></li>
</ul>
</li>



<li><strong>Koszty roczne w taryfie G12 (przy założeniu, że 70% pracy pompy przypada na tańszą strefę nocną):</strong>
<ul class="wp-block-list">
<li>Wariant A (15 cm):&nbsp;<code>(2 109 kWh * 0,7 * 0,61 zł) + (2 109 kWh * 0,3 * 1,25 zł) = 901 zł + 791 zł = **1 692 zł/rok**</code></li>



<li>Wariant B (10 cm):&nbsp;<code>(1 731 kWh * 0,7 * 0,61 zł) + (1 731 kWh * 0,3 * 1,25 zł) = 739 zł + 649 zł = **1 388 zł/rok**</code></li>



<li><strong>Roczna oszczędność: 304 zł.</strong></li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph"><strong>Na pierwszy rzut oka oszczędności 300-400 zł rocznie mogą nie robić wrażenia.</strong>&nbsp;Kluczowe jest jednak myślenie długoterminowe oraz uwzględnienie innych czynników.</p>



<h2 class="wp-block-heading">Projekt ogrzewania podłogowego: fundament efektywności i oszczędności.</h2>



<p class="wp-block-paragraph">Wszystkie powyższe wyliczenia mają sens tylko pod jednym warunkiem:&nbsp;<strong>system został prawidłowo zaprojektowany</strong>. <a href="https://projekt-ogrzewania.pl/kategoria-produktu/projekty/">Projekt ogrzewania podłogowego</a> to nie tylko schemat ułożenia rur. To kompleksowy dokument, który w kontekście maksymalizacji&nbsp;<strong>oszczędności na kosztach ogrzewania w skali roku</strong>&nbsp;musi uwzględniać:</p>



<ul class="wp-block-list">
<li><strong>Bilans cieplny budynku:</strong>&nbsp;Dokładne obliczenie strat ciepła dla każdego pomieszczenia. To określa ilość ciepła, jaką trzeba dostarczyć.</li>



<li><strong>Dobór <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawu rur</a> w zależności od strefy:</strong>&nbsp;W łazienkach, przy dużych przeszkleniach lub w pomieszczeniach narożnych projektant może zastosować rozstaw 10 cm (lub nawet gęstszy), podczas gdy w pomieszczeniach centralnych wystarczy 15 cm. To&nbsp;<strong>optymalizacja kosztowa</strong>&nbsp;– zwiększamy gęstość tylko tam, gdzie jest to niezbędne.</li>



<li><strong>Podział na strefy grzewcze (obwody):</strong>&nbsp;Każde pomieszczenie lub grupa pomieszczeń o podobnym charakterze powinna stanowić osobny obwód ze swoim zaworem termostatycznym. Pozwala to na&nbsp;<strong>indywidualną, precyzyjną regulację</strong>&nbsp;i unikanie przegrzewania nieużywanych pomieszczeń.</li>



<li><strong>Dobór i lokalizacja czujników:</strong>&nbsp;Decyzja, czy system sterowany jest na podstawie temperatury powietrza, czy podłogi (lub obu tych parametrów), ma wpływ na reaktywność i efektywność układu.</li>



<li><strong>Obliczenia hydrauliczne:</strong>&nbsp;Zapewniają odpowiedni dobór <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">pompy obiegowej</a>, średnic rur i właściwe zrównoważenie hydrauliczne systemu. Źle wybrana pompa, pracująca z nadmierną mocą, może samodzielnie zużyć setki kilowatogodzin prądu rocznie.</li>
</ul>



<p class="wp-block-paragraph"><strong><em>Pominięcie projektu lub zlecenie go &#8222;na oko&#8221; instalatorowi najczęściej kończy się systemem nieoptymalnym, generującym wyższe koszty eksploatacji przez cały okres użytkowania domu. Inwestycja w profesjonalny projekt zwraca się zawsze.</em></strong></p>



<h2 class="wp-block-heading">Długofalowa perspektywa: analiza 20-letniego cyklu życia instalacji.</h2>



<p class="wp-block-paragraph">Prawdziwe&nbsp;<strong>oszczędności na kosztach ogrzewania</strong>&nbsp;widać w skali dekad. Przyjmijmy konserwatywne założenie:</p>



<ul class="wp-block-list">
<li>Okres analizy:&nbsp;<strong>20 lat</strong>&nbsp;(typowy horyzont użytkowania instalacji przed większym remontem).</li>



<li>Roczna oszczędność (średnia z G11/G12):&nbsp;<strong>350 zł</strong>.</li>



<li>Średnioroczny wzrost cen energii:&nbsp;<strong>3%</strong>&nbsp;(historycznie bywał wyższy).</li>
</ul>



<p class="wp-block-paragraph">Prosta kalkulacja bez uwzględnienia wzrostu cen dałaby&nbsp;<code>20 lat * 350 zł/rok = 7 000 zł</code>. To już prawie pokrywa dodatkowy koszt inwestycyjny. Jednak&nbsp;<strong>uwzględnienie inflacji cen energii zmienia obraz radykalnie</strong>. Koszty w przyszłych latach będą wyższe, więc oszczędność na niższym zużyciu będzie corocznie większa w ujęciu pieniężnym.</p>



<p class="wp-block-paragraph"><strong>Przybliżona wartość skumulowanych oszczędności po 20 latach</strong>, przy 3% wzroście cen energii rocznie, wynosi około&nbsp;<strong>9 400 zł</strong>. Przekracza to dodatkowy koszt inwestycyjny już o&nbsp;<strong>3 400 &#8211; 4 400 zł</strong>.</p>



<p class="wp-block-paragraph"></p>



<style>
.diagram-wrapper {
  width: 100%;
  padding: 20px 10px;
}

.diagram {
  display: flex;
  flex-wrap: wrap; /* KLUCZ – brak przewijania */
  justify-content: center;
  align-items: center;
  gap: 24px;
  font-family: Arial, sans-serif;
}

.box {
  border: 2px solid #b7a6ff;
  padding: 14px 18px;
  text-align: center;
  width: 220px;
  font-size: 14px;
  line-height: 1.35;
  background: #fff;
  color: #2b2b2b;
}

.arrow {
  font-size: 26px;
  color: #b7a6ff;
}

/* ===== ROMB ===== */
.diamond {
  width: 160px;
  height: 160px;
  position: relative;
}

.diamond::before {
  content: "";
  position: absolute;
  inset: 0;
  border: 2px solid #b7a6ff;
  background: #fff;
  transform: rotate(45deg);
}

.diamond span {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  font-size: 14px;
  line-height: 1.35;
  padding: 14px;
  z-index: 1;
  font-weight: bold;
}

/* ===== MOBILE ===== */
@media (max-width: 768px) {
  .box {
    width: 100%;
    max-width: 320px;
  }

  .arrow {
    transform: rotate(90deg); /* strzałki w dół */
  }
}
</style>

<div class="diagram-wrapper">
  <div class="diagram">

    <div class="box">
      Dodatkowa inwestycja:<br>
      <strong>+5 000 do 6 000 zł</strong>
    </div>

    <div class="arrow">→</div>

    <div class="diamond">
      <span>Rozstaw rur<br>10 cm</span>
    </div>

    <div class="arrow">→</div>

    <div class="box">
      Niższa temp.<br>zasilania
    </div>

    <div class="arrow">→</div>

    <div class="box">
      Wyższa sprawność źródła ciepła<br>
      Wyższy COP pompy ciepła
    </div>

    <div class="arrow">→</div>

    <div class="box">
      Niższe roczne<br>zużycie energii
    </div>

    <div class="arrow">→</div>

    <div class="box">
      Oszczędności eksploatacyjne<br>
      ok. <strong>350 zł/rok</strong><br>
      + wzrost cen energii
    </div>

    <div class="arrow">→</div>

    <div class="box">
      Skumulowana oszczędność<br>
      po 20 latach:<br>
      <strong>~9 400 zł</strong>
    </div>

    <div class="arrow">→</div>

    <div class="box">
      Zysk netto po 20 latach:<br>
      <strong>+3 400 do +4 400 zł</strong>
    </div>

  </div>
</div>



<h3 class="wp-block-heading">Dodatkowe, trudne do wyceny korzyści.</h3>



<ol start="1" class="wp-block-list">
<li><strong>Większa bezwładność i stabilność:</strong>&nbsp;Gęściej ułożona instalacja ma większą masę akumulacyjną (więcej wody w rurach), co łagodzi krótkotrwałe spadki temperatury zewnętrznej i pozwala na dłuższe przerwy w pracy pompy ciepła.</li>



<li><strong>Gotowość na przyszłość:</strong>&nbsp;System niskotemperaturowy jest idealnie przygotowany do integracji z&nbsp;<strong>OZE</strong>, takimi jak kolektory słoneczne wspomagające ogrzewanie podłogowe.</li>



<li><strong>Bezkonkurencyjny komfort:</strong>&nbsp;Jednorodna temperatura podłogi eliminuje uczucie &#8222;zimnych stóp&#8221;, co jest subiektywną, ale niezwykle cenioną zaletą.</li>
</ol>



<h2 class="wp-block-heading">FAQ – pytania i odpowiedzi.</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1769859599947"><strong class="schema-faq-question"><strong>Czy rozstaw rur 10 cm zawsze jest lepszy niż 15 cm?</strong></strong> <p class="schema-faq-answer">Nie zawsze w całym budynku. Rozstaw 10 cm daje lepszą równomierność temperatury i niższą temperaturę zasilania, ale optymalnie powinien być stosowany tam, gdzie straty ciepła są największe (łazienki, strefy przy oknach, narożniki).</p> </div> <div class="schema-faq-section" id="faq-question-1769859609829"><strong class="schema-faq-question"><strong>Ile realnie można zaoszczędzić rocznie na ogrzewaniu?</strong></strong> <p class="schema-faq-answer">W przypadku domu 150 m² oszczędności wynoszą zwykle od 300 do 400 zł rocznie, w zależności od taryfy energii i źródła ciepła. Przy wzroście cen energii kwota ta rośnie z każdym rokiem.</p> </div> <div class="schema-faq-section" id="faq-question-1769859620785"><strong class="schema-faq-question"><strong>Dlaczego niższa temperatura zasilania jest tak ważna?</strong></strong> <p class="schema-faq-answer">Niższa temperatura zasilania znacząco poprawia sprawność pomp ciepła i kotłów kondensacyjnych. Przekłada się to bezpośrednio na mniejsze zużycie energii elektrycznej lub gazu.</p> </div> <div class="schema-faq-section" id="faq-question-1769859629988"><strong class="schema-faq-question"><strong>Czy dodatkowy koszt 5–6 tys. zł rzeczywiście się zwraca?</strong></strong> <p class="schema-faq-answer">Tak, w długim okresie. Przy 20-letnim cyklu życia instalacji i umiarkowanym wzroście cen energii skumulowane oszczędności przewyższają dodatkowy koszt inwestycyjny.</p> </div> <div class="schema-faq-section" id="faq-question-1769859649286"><strong class="schema-faq-question"><strong>Czy bez projektu ogrzewania podłogowego te wyliczenia mają sens?</strong></strong> <p class="schema-faq-answer">Nie. Tylko profesjonalny projekt pozwala dobrać właściwy rozstaw rur, długości pętli i parametry pracy systemu. Instalacja wykonana „na oko” często generuje wyższe rachunki przez cały okres użytkowania.</p> </div> </div>



<h2 class="wp-block-heading">Podsumowanie: opłacalna inwestycja w długim terminie.</h2>



<p class="wp-block-paragraph">Czy warto dopłacić te&nbsp;<strong>5-6 tysięcy złotych</strong>&nbsp;na etapie montażu ogrzewania podłogowego, aby rury układać co 10 cm zamiast co 15 cm? Z techniczno-ekonomicznego punktu widzenia&nbsp;<strong>odpowiedź brzmi: tak, szczególnie jeśli planujemy ogrzewanie pompą ciepła lub kotłem kondensacyjnym</strong>.</p>



<p class="wp-block-paragraph"><strong>Kluczowe wnioski:</strong></p>



<ol start="1" class="wp-block-list">
<li>Głównym mechanizmem oszczędności jest&nbsp;<strong>obniżenie temperatury pracy systemu</strong>, co radykalnie&nbsp;<strong>podnosi sprawność nowoczesnych źródeł ciepła</strong>.</li>



<li>Same roczne oszczędności (300-400 zł) mogą wydawać się umiarkowane, ale w&nbsp;<strong>perspektywie 20-letniego cyklu życia instalacji</strong>, przy nieuniknionym&nbsp;<strong>wzroście cen nośników energii</strong>, różnica staje się bardzo wymierna i wyraźnie przewyższa dodatkowy koszt inwestycyjny.</li>



<li>W kontekście&nbsp;<strong>nowych, wyższych taryf URE od 2026 roku</strong>, każda optymalizacja zmniejszająca zużycie energii finalnej staje się bardziej wartościowa.</li>



<li><strong>Fundamentem sukcesu jest profesjonalny projekt</strong>, który optymalnie dobierze rozstaw rur do potrzeb konkretnego budynku, łącząc wysoką efektywność z rozsądkiem kosztowym.</li>
</ol>



<p class="wp-block-paragraph">Decydując się na ogrzewanie podłogowe, traktujmy je nie jako prosty zestaw rur w wylewce, lecz jako&nbsp;<strong>precyzyjny system grzewczy</strong>. Inwestycja w jego gęstszą, bardziej zaawansowaną strukturę to klasyczny przykład „wydania pieniędzy, aby je zaoszczędzić” – a w tym przypadku zyskać również na niepowtarzalnym komforcie cieplnym na długie lata.</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="IKxXhhmzgM"><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=5rbbgMOCjg#?secret=IKxXhhmzgM" data-secret="IKxXhhmzgM" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m%c2%b2/">Rzeczywiste oszczędności na kosztach ogrzewania w skali roku – analiza rozstawu rur dla domu 150 m².</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>
		<item>
		<title>Strefa brzegowa w ogrzewaniu podłogowym.</title>
		<link>https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 02 Jan 2026 08:09:34 +0000</pubDate>
				<category><![CDATA[Domy energooszczędne]]></category>
		<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Fizyka budowli]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Porady inwestycyjne]]></category>
		<category><![CDATA[Porady techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[mostki termiczne]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pleśń]]></category>
		<category><![CDATA[podłogówka]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[straty ciepła]]></category>
		<category><![CDATA[strefa brzegowa]]></category>
		<category><![CDATA[wilgoć w domu]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3029</guid>

					<description><![CDATA[<p>W nowoczesnym budownictwie liczą się detale, które realnie wpływają na komfort, trwałość i koszty eksploatacji domu. Jednym z nich jest strefa brzegowa w ogrzewaniu podłogowym, często pomijana lub traktowana po macoszemu. Tymczasem to właśnie ona decyduje o równomiernym rozkładzie temperatury, eliminuje efekt zimnych nóg i chroni przegrody przed wilgocią. Artykuł w przystępny, ale technicznie rzetelny sposób pokazuje, dlaczego strefa krawędziowa jest obowiązkowym elementem dobrze zaprojektowanej instalacji oraz jak powinna wyglądać w praktyce – zarówno z perspektywy projektanta, jak i świadomego inwestora.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">Strefa brzegowa 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">W projektowaniu komfortowego i efektywnego domu,&nbsp;<strong>strefa brzegowa w ogrzewaniu podłogowym</strong>&nbsp;(wodnym) pełni rolę fundamentalną, choć często niedocenianą. To nie jest zwykły element instalacji, lecz&nbsp;<strong>strategiczny komponent</strong>, który decyduje o równomierności ogrzewania, zdrowiu budynku i finalnym komforcie cieplnym mieszkańców. W tym technicznym, lecz przystępnym artykule dogłębnie przeanalizujemy, czym jest strefa brzegowa, dlaczego jest obowiązkowa i jak powinna być prawidłowo zaprojektowana oraz wykonana.</p>



<h2 class="wp-block-heading">Czym dokładnie jest strefa krawędziowa i jakie są jej fizyczne podstawy działania?</h2>



<p class="wp-block-paragraph">W najprostszym ujęciu, <strong>strefa brzegowa</strong> to pas podłogi bezpośrednio przylegający do ścian zewnętrznych, drzwi balkonowych czy dużych przeszkleń, w którym pętle rur grzewczych układane są ze znacznie <strong>mniejszym rozstawem</strong> niż w centrum pomieszczenia. Podczas gdy w strefie podstawowej rozstaw ten wynosi standardowo 10-20 cm, w strefie brzegowej zmniejsza się go do 10, a nawet 5 cm. Ten prosty zabieg ma głębokie uzasadnienie w fizyce budowli.</p>



<p class="wp-block-paragraph"><strong>Podstawowym zadaniem</strong>&nbsp;tego elementu jest&nbsp;<strong>kompensacja liniowych strat ciepła</strong>. Największa wymiana ciepła między wnętrzem a otoczeniem odbywa się przez wszystkie przegrody zewnętrzne. Miejsca przy podłodze są newralgiczne – często występują tam tzw.&nbsp;<strong>mostki termiczne</strong>&nbsp;(np. wieńce stropowe), a sama ściana ma tu nieco niższą temperaturę. Bez dodatkowej mocy grzewczej w tym obszarze, strumień ciepła wypływający na zewnątrz byłby najintensywniejszy, co prowadziłoby do:</p>



<ul class="wp-block-list">
<li>Wychłodzenia powierzchni podłogi przy ścianie.</li>



<li>Wzmożonej konwekcji, czyli „ciągu” zimnego powietrza schodzącego w dół i rozprzestrzeniającego się po podłodze („efekt zimnych nóg”).</li>



<li><strong>Ryzyka wykraplania się wilgoci</strong> na chłodniejszych fragmentach przegrody, co jest prostą drogą do rozwoju pleśni.</li>
</ul>



<p class="wp-block-paragraph">Strefa brzegowa, dostarczając więcej energii na jednostkę powierzchni,&nbsp;<strong>podnosi temperaturę powierzchni podłogi</strong>&nbsp;w tym krytycznym pasie. Tworzy w ten sposób&nbsp;<strong>„ciepłą poduszkę”</strong>&nbsp;lub&nbsp;<strong>kurtynę cieplną</strong>, która równoważy straty, podnosi średnią temperaturę odczuwalną w pomieszczeniu i blokuje niepożądaną cyrkulację chłodu.</p>



<h2 class="wp-block-heading">Funkcje i korzyści: Dlaczego nie można pominąć strefy obwodowej?</h2>



<p class="wp-block-paragraph">Zastosowanie prawidłowo zaprojektowanej strefy krawędziowej przynosi wielowymiarowe korzyści, które przekładają się na długoletnie użytkowanie budynku.</p>



<h3 class="wp-block-heading">Gwarancja jednorodnego komfortu cieplnego.</h3>



<p class="wp-block-paragraph">Głównym celem ogrzewania podłogowego jest zapewnienie&nbsp;<strong>jednorodnej, przyjemnej temperatury</strong>&nbsp;na całej powierzchni życiowej. Strefa brzegowa niweluje naturalny spadek temperatury przy przegrodach zewnętrznych. Dzięki niej różnica między temperaturą podłogi w środku pomieszczenia i przy oknie jest minimalna, co całkowicie eliminuje dyskomfort. Jest to szczególnie odczuwalne w nowoczesnych budynkach z dużymi taflami szkła.</p>



<h3 class="wp-block-heading">Aktywna ochrona przed wilgocią i grzybami.</h3>



<p class="wp-block-paragraph">Jest to funkcja&nbsp;<strong>nie do przecenienia</strong>. Gdy temperatura wewnętrznej powierzchni ściany lub podłogi spada poniżej tzw.&nbsp;<strong>punktu rosy</strong>, para wodna zawarta w powietrzu skrapla się. Wilgotne środowisko to idealne warunki dla rozwoju grzybów pleśniowych, których zarodniki są szkodliwe dla zdrowia.&nbsp;<strong>Intensywniejsze ogrzanie</strong>&nbsp;strefy przyściennej przez strefę brzegową skutecznie&nbsp;<strong>podnosi temperaturę powierzchni</strong>&nbsp;na tyle, aby utrzymać ją powyżej punktu rosy, zapobiegając tym samym wykraplaniu.</p>



<h3 class="wp-block-heading">Zwiększenie efektywności energetycznej całego systemu.</h3>



<p class="wp-block-paragraph">Choć wydaje się to paradoksalne,&nbsp;<strong>dodanie mocy grzewczej</strong>&nbsp;w jednym miejscu prowadzi do&nbsp;<strong>ogólnych oszczędności</strong>. Dlaczego? Bez strefy brzegowej, aby skompensować chłód odczuwany przy oknach, użytkownik mógłby podnieść temperaturę zasilania całej pętli. To oznaczałoby&nbsp;<strong>przegrzanie</strong>&nbsp;strefy środkowej i&nbsp;<strong>bezzasadne straty energii</strong>. Strefa brzegowa pozwala na precyzyjne dostarczenie ciepła tam, gdzie jest najbardziej potrzebne, umożliwiając pracę systemu na niższych, bardziej ekonomicznych parametrach.</p>



<h3 class="wp-block-heading">Wspomaganie izolacyjności przegród.</h3>



<p class="wp-block-paragraph">Cieplejszy fragment podłogi i dolnej części ściany wewnętrznej minimalizuje ryzyko&nbsp;<strong>przemarzania</strong>&nbsp;konstrukcji w newralgicznym węźle. To szczególnie ważne w domach energooszczędnych i pasywnych, gdzie każdy szczegół przegrody ma znaczenie dla szczelności i bilansu cieplnego.</p>



<h2 class="wp-block-heading">Projektowanie strefy brzegowej: Normy, wymiary i kluczowe parametry.</h2>



<p class="wp-block-paragraph">Włączenie strefy brzegowej to nie kwestia wyboru, lecz <strong>wymóg normowy</strong>. Zasady jej projektowania określa <strong>norma PN-EN 1264 „Podłogowe systemy grzewcze i chłodzące”</strong>. <a href="https://projekt-ogrzewania.pl/kontakt/">Projektant instalacji</a> musi ją bezwzględnie uwzględnić w obliczeniach.</p>



<h3 class="wp-block-heading">Kluczowe parametry projektowe.</h3>



<ol start="1" class="wp-block-list">
<li><strong>Szerokość strefy:</strong> Standardowo przyjmuje się <strong>szerokość 0,5 do 1,5 metra</strong>. Najczęściej stosowaną i wystarczającą w większości przypadków wartością jest <strong>1 metr</strong>. Decyzja zależy od:
<ul class="wp-block-list">
<li>Wysokości strat ciepła przez daną przegrodę (słabo zaizolowana ściana z dużym oknem wymaga szerszej strefy).</li>



<li>Przeznaczenia pomieszczenia (w łazience, gdzie chodzimy boso, często projektuje się strefę na całej powierzchni).</li>



<li>Geometrii pomieszczenia.</li>
</ul>
</li>



<li><strong>Rozstaw rur:</strong> To parametr decydujący o mocy grzewczej strefy. Typowe rozstawy to:
<ul class="wp-block-list">
<li><strong>10 cm</strong> – rozstaw podstawowy i najczęściej stosowany.</li>



<li><strong>5 cm</strong> – stosowany przy bardzo dużych stratach ciepła (np. przeszklone ściany południowe w domach pasywnych, gdzie nocą straty są wysokie).</li>
</ul>
</li>



<li><strong>Długość pętli:</strong> W strefie brzegowej, ze względu na gęsty rozstaw, długość <a href="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/">rury</a> szybko rośnie. Należy to wziąć pod uwagę przy doborze pompy obiegowej, aby <strong>spadki ciśnienia</strong> w całym obwodzie były w normie. Często dla dużych pomieszczeń strefę brzegową dzieli się na kilka pętli.</li>
</ol>



<h3 class="wp-block-heading">Przykłady zastosowania w praktyce.</h3>



<ul class="wp-block-list">
<li><strong>Przestronny salon z panoramicznym oknem:</strong> Strefa brzegowa o szerokości 1,2 m i rozstawie rur 10 cm na całej długości okna i ściany zewnętrznej. Może być sterowana osobno, aby szybciej reagować na nocne wychłodzenie szyby.</li>



<li><strong>Mała łazienka z jedną ścianą zewnętrzną:</strong> Ze względu na małą powierzchnię i wysokie wymagania komfortu, <strong>cała podłoga</strong> często traktowana jest jako strefa brzegowa z rozstawem 10-15 cm.</li>



<li><strong>Pokój z dwiema ścianami zewnętrznymi (narożny):</strong> Strefę brzegową należy zaplanować wzdłuż obu ścian, odpowiednio zawężając ją w narożniku, gdzie straty się sumują.</li>
</ul>



<h2 class="wp-block-heading">Realizacja na budowie: Jak prawidłowo wykonać strefę krawędziową?</h2>



<p class="wp-block-paragraph">Nawet najlepszy projekt musi zostać poprawnie zrealizowany. Wykonawca musi ściśle trzymać się projektu instalacji.</p>



<h3 class="wp-block-heading">Dwa główne warianty wykonawcze.</h3>



<ol start="1" class="wp-block-list">
<li><strong>Strefa brzegowa jako oddzielny obwód grzewczy:</strong>
<ul class="wp-block-list">
<li>Jest to <strong>samodzielna pętla</strong> podłączona do własnych zaworów na rozdzielaczu ogrzewania podłogowego.</li>



<li><strong>Kluczową zaletą</strong> jest możliwość <strong><a href="https://projekt-ogrzewania.pl/sterowanie-strefowe-ogrzewaniem-czy-warto/">niezależnego sterowania</a></strong> jej pracą za pomocą osobnego termostatu lub sterownika pogodowego. Może ona pracować z wyższą temperaturą zasilania lub w innym czasie niż strefa podstawowa (np. wcześniej włączając się po nocnym obniżeniu temperatury).</li>



<li>Jest to rozwiązanie droższe, ale najbardziej elastyczne i efektywne.</li>
</ul>
</li>



<li><strong>Strefa brzegowa jako część pętli podstawowej:</strong>
<ul class="wp-block-list">
<li>W tym wariancie rura, wchodząc do pętli, najpierw jest układana gęsto przy ścianie (na długości np. 1 m), a następnie przechodzi w standardowy rozstaw w głównej części pomieszczenia.</li>



<li>Jest to rozwiązanie <strong>tańsze i prostsze</strong> wykonawczo.</li>



<li>Jej wadą jest <strong>brak możliwości niezależnej regulacji</strong>. Parametry pracy (temperatura, czas) są takie same jak dla całej pętli, co może nie być optymalne w skrajnych warunkach.</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">Elementy obowiązkowe przy wykonaniu.</h3>



<ul class="wp-block-list">
<li><strong><a href="https://projekt-ogrzewania.pl/produkt/tasma-przyscienna-z-pianki-poliuretanowej-do-ogrzewania-podlogowego/">Taśma brzegowa (dylatacyjna)</a>:</strong> Absolutnie <strong>niezbędny element</strong> układany na obwodzie pomieszczenia, przy wszystkich ścianach i słupach. Pełni DWA kluczowe zadania:
<ul class="wp-block-list">
<li><strong>Kompenasuje rozszerzalność termiczną</strong> jastrychu (<a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">wylewki</a>), zapobiegając jego pękaniu i wybrzuszaniu się przy ścianach.</li>



<li><strong>Stanowi izolację pionową</strong>, redukując straty ciepła w kierunku ścian i fundamentów. To jej obecność sprawia, że ciepło z rury strefy brzegowej kierowane jest do góry, a nie w bok.</li>
</ul>
</li>



<li><strong>Izolacja termiczna pod całym systemem:</strong> Strefa brzegowa nie wymaga dodatkowej izolacji pod spodem. Układa się ją na tej samej, ciągłej warstwie styropianu lub pianki PIR, co resztę pętli. Grubość i jakość tej izolacji decyduje o efektywności całego systemu.</li>
</ul>



<h2 class="wp-block-heading">Nieodłączny element całości: Projekt ogrzewania podłogowego w kontekście strefy brzegowej.</h2>



<p class="wp-block-paragraph"><strong>Strefa brzegowa nie istnieje w próżni.</strong> Jest integralną, ale tylko jedną z części <strong><a href="https://projekt-ogrzewania.pl/produkt/projekt-ogrzewania-podlogowego-do-150-m2/">kompleksowego projektu ogrzewania podłogowego</a></strong>. Profesjonalny projekt to nie tylko schemat ułożenia rur. To <strong>zbiór obliczeń i specyfikacji</strong>, w które strefa brzegowa jest wpisana na samym początku. Inwestor, zlecając wykonanie „podłogówki” bez projektu, naraża się na poważne błędy, a brak prawidłowej strefy brzegowej jest jednym z najczęstszych i najbardziej dotkliwych w skutkach.</p>



<p class="wp-block-paragraph">Dobry projekt bierze pod uwagę:</p>



<ul class="wp-block-list">
<li><strong>Bilans cieplny pomieszczenia:</strong> Oblicza straty ciepła przez każdą przegrodę, co bezpośrednio przekłada się na potrzebną moc grzewczą, a więc i na parametry strefy brzegowej (jej szerokość, rozstaw rur).</li>



<li><strong>Dobór źródła ciepła i temperatur zasilania:</strong> Strefa brzegowa, zwłaszcza sterowana osobno, może wymagać nieco wyższej temperatury wody niż pętla podstawowa. Projekt musi to uwzględnić w doborze np. pompy ciepła czy kotła i sposobie regulacji.</li>



<li><strong>Hydrauliczne wyważenie instalacji:</strong> Jeżeli strefa brzegowa jest osobnym obwodem, projekt określa nastawy zaworów regulacyjnych na rozdzielaczu, aby zapewnić jej odpowiedni przepływ wody względem innych pętli.</li>



<li><strong>Specyfikację materiałów:</strong> Projekt precyzyjnie określa rodzaj i średnicę rur, rodzaj izolacji, konieczność zastosowania taśmy brzegowej, a także sugeruje system sterowania.</li>
</ul>



<p class="wp-block-paragraph"><strong>Inwestycja w profesjonalny projekt z obliczeniami hydrauliczno-cieplnymi to oszczędność na etapie eksploatacji i gwarancja komfortu na długie lata.</strong>&nbsp;Tylko wtedy można mieć pewność, że strefa brzegowa – ten strategiczny „strażnik” ciepła i suchości ścian – będzie pełnić swoją rolę niezawodnie i efektywnie, współgrając z resztą systemu jako spójna, inteligentna całość.</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-1767338955519"><strong class="schema-faq-question"><strong>Czy strefa brzegowa w ogrzewaniu podłogowym jest obowiązkowa?</strong></strong> <p class="schema-faq-answer">Tak. Jej stosowanie wynika wprost z normy PN-EN 1264 i zasad fizyki budowli. Pominięcie strefy brzegowej prowadzi do nierównomiernego ogrzewania i problemów eksploatacyjnych.</p> </div> <div class="schema-faq-section" id="faq-question-1767338978407"><strong class="schema-faq-question"><strong>Jaka powinna być szerokość strefy brzegowej?</strong></strong> <p class="schema-faq-answer">Najczęściej projektuje się ją na szerokość około 1 metra, jednak w praktyce zakres wynosi od 0,5 do 1,5 m – w zależności od strat ciepła i rodzaju przegrody.</p> </div> <div class="schema-faq-section" id="faq-question-1767338985498"><strong class="schema-faq-question"><strong>Czy strefa brzegowa musi być osobną pętlą?</strong></strong> <p class="schema-faq-answer">Nie zawsze, ale jest to rozwiązanie zalecane. Oddzielna pętla pozwala na niezależne sterowanie i lepsze dopasowanie mocy grzewczej do realnych strat ciepła.</p> </div> <div class="schema-faq-section" id="faq-question-1767339001623"><strong class="schema-faq-question"><strong>Czy brak strefy brzegowej może powodować pleśń?</strong></strong> <p class="schema-faq-answer">Tak. Zbyt niska temperatura przy ścianach zewnętrznych sprzyja wykraplaniu pary wodnej, co znacząco zwiększa ryzyko rozwoju grzybów pleśniowych.</p> </div> <div class="schema-faq-section" id="faq-question-1767339014902"><strong class="schema-faq-question"><strong>Czy strefa brzegowa zwiększa koszty ogrzewania?</strong></strong> <p class="schema-faq-answer">Wręcz przeciwnie. Dzięki precyzyjnemu dogrzaniu newralgicznych miejsc pozwala obniżyć temperaturę zasilania całego systemu, co poprawia jego efektywność energetyczną.</p> </div> </div>



<h2 class="wp-block-heading">Podsumowanie.</h2>



<p class="wp-block-paragraph"><strong>Strefa brzegowa w ogrzewaniu podłogowym</strong>&nbsp;to zdecydowanie więcej niż tylko kilka dodatkowych zwojów rury przy ścianie. To&nbsp;<strong>precyzyjne narzędzie inżynierii cieplnej</strong>, które rozwiązuje konkretne problemy fizyki budowli: kompensuje straty, wyrównuje rozkład temperatury, chroni przed wilgocią. Jej zastosowanie jest&nbsp;<strong>normą, koniecznością i przejawem dbałości o jakość</strong>&nbsp;wykonania instalacji.</p>



<p class="wp-block-paragraph">Pamiętaj: oszczędzanie na etapie projektowania i wykonania, a w szczególności pominięcie lub „spłycenie” roli strefy krawędziowej, zawsze wraca w postaci wyższych rachunków za energię, dyskomfortu termicznego w najprzyjemniejszym nawet salonie, a w najgorszym przypadku – problemów z wilgocią i grzybem. W trosce o ciepły, suchy i zdrowy dom,&nbsp;<strong>strefa brzegowa zasługuje na pełną uwagę</strong>&nbsp;zarówno projektanta, wykonawcy, jak i świadomego inwestora.</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="JSldQ3ieLf"><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=6z0hK3c7Rw#?secret=JSldQ3ieLf" data-secret="JSldQ3ieLf" 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-w-ogrzewaniu-podlogowym/">Strefa brzegowa w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Podłogówka cena za m² robocizny.</title>
		<link>https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/</link>
					<comments>https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 04 Jan 2025 12:41:44 +0000</pubDate>
				<category><![CDATA[Budżet instalacji]]></category>
		<category><![CDATA[Cena robocizny 2025]]></category>
		<category><![CDATA[Czynniki kosztowe]]></category>
		<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Koszty ogrzewania podłogowego]]></category>
		<category><![CDATA[Materiały do podłogówki]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Optymalizacja kosztów]]></category>
		<category><![CDATA[Projekty ogrzewania]]></category>
		<category><![CDATA[Rozstaw rur podłogówki]]></category>
		<category><![CDATA[budżet na podłogówkę]]></category>
		<category><![CDATA[cena robocizny podłogówki]]></category>
		<category><![CDATA[efektywność cieplna]]></category>
		<category><![CDATA[instalacja ogrzewania podłogowego]]></category>
		<category><![CDATA[koszty instalacji]]></category>
		<category><![CDATA[materiały podłogówka]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[podłogówka cena]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[systemy grzewcze]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=1892</guid>

					<description><![CDATA[<p>Podłogówka cena za m² robocizny to jedno z najczęściej zadawanych pytań przez inwestorów. W tym artykule szczegółowo omawiamy koszty instalacji ogrzewania podłogowego, uwzględniając rozstaw rur, lokalizację inwestycji oraz rok 2025 jako punkt odniesienia cenowego. Dowiesz się, jakie czynniki wpływają na koszt, dlaczego warto inwestować w profesjonalny projekt i jak optymalizować wydatki, aby zapewnić komfort cieplny i efektywność energetyczną.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/">Podłogówka cena za m² robocizny.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #ez-toc-container .ez-toc-list,
  #ez-toc-container .ez-toc-list ul,
  #ez-toc-container .ez-toc-list ol{margin-top:0!important;margin-bottom:0!important}
  #ez-toc-container .ez-toc-list li{margin:0!important;padding:3px 0!important;line-height:1.4!important}
  #ez-toc-container .ez-toc-list ul,
  #ez-toc-container .ez-toc-list ol{padding-left:28px!important}

  #rk-labor-guide{
    --rk-dark:#102536;
    --rk-navy:#14384d;
    --rk-blue:#078fbe;
    --rk-cyan:#25c7d8;
    --rk-cyan-soft:#e8fbff;
    --rk-orange:#ff6a3d;
    --rk-orange-soft:#fff1eb;
    --rk-green:#16836b;
    --rk-green-soft:#eaf8f3;
    --rk-yellow:#d99b16;
    --rk-yellow-soft:#fff8df;
    --rk-red:#d94b3d;
    --rk-red-soft:#fff0ee;
    --rk-ink:#1f2c37;
    --rk-text:#475967;
    --rk-muted:#6b7e8a;
    --rk-line:#d5e4eb;
    --rk-soft:#f4f9fb;
    --rk-white:#fff;
    width:100%;
    max-width:1180px;
    margin:34px auto 72px;
    color:var(--rk-ink);
    font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
    font-size:18px;
    line-height:1.75;
  }
  #rk-labor-guide,#rk-labor-guide *{box-sizing:border-box}
  #rk-labor-guide img,#rk-labor-guide svg{max-width:100%}
  #rk-labor-guide button,#rk-labor-guide input,#rk-labor-guide select,#rk-labor-guide label,#rk-labor-guide summary,#rk-labor-guide a{font:inherit;-webkit-tap-highlight-color:transparent}
  #rk-labor-guide a{color:var(--rk-blue);font-weight:780;text-decoration-thickness:1px;text-underline-offset:3px}
  #rk-labor-guide p,#rk-labor-guide ul,#rk-labor-guide ol{margin-top:0;margin-bottom:1.1em}
  #rk-labor-guide h2,#rk-labor-guide h3,#rk-labor-guide h4{margin-top:0;color:var(--rk-dark);font-weight:950;letter-spacing:-.035em}
  #rk-labor-guide h2{margin-bottom:18px;font-size:clamp(1.8rem,4vw,2.75rem);line-height:1.08}
  #rk-labor-guide h3{margin-bottom:10px;font-size:clamp(1.08rem,2.2vw,1.34rem);line-height:1.22}
  #rk-labor-guide h4{margin-bottom:8px;font-size:1rem;line-height:1.3}
  #rk-labor-guide .rk-labor-shell{position:relative;overflow:hidden;border:1px solid var(--rk-line);border-radius:32px;background:var(--rk-white);box-shadow:0 28px 70px rgba(16,37,54,.11)}
  #rk-labor-guide .rk-labor-progress-track{position:sticky;z-index:60;top:0;height:5px;background:rgba(213,228,235,.88)}
  #rk-labor-guide .rk-labor-progress{width:0;height:100%;background:linear-gradient(90deg,var(--rk-orange),var(--rk-cyan))}
  #rk-labor-guide .rk-labor-hero{position:relative;overflow:hidden;padding:clamp(40px,7vw,78px);color:var(--rk-white);background:radial-gradient(circle at 91% 17%,rgba(255,106,61,.35),transparent 28%),radial-gradient(circle at 76% 96%,rgba(37,199,216,.25),transparent 35%),linear-gradient(126deg,#0f2233,#143d53 72%,#2e3944)}
  #rk-labor-guide .rk-labor-hero:after{content:"";position:absolute;right:-105px;bottom:-135px;width:330px;height:330px;border:42px solid rgba(255,255,255,.055);border-radius:50%}
  #rk-labor-guide .rk-labor-hero-grid{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1.35fr) minmax(270px,.65fr);gap:clamp(28px,5vw,62px);align-items:center}
  #rk-labor-guide .rk-labor-eyebrow,#rk-labor-guide .rk-labor-kicker{display:inline-flex;align-items:center;gap:9px;margin-bottom:15px;color:var(--rk-blue);font-size:.68rem;font-weight:950;letter-spacing:.075em;line-height:1.35;text-transform:uppercase}
  #rk-labor-guide .rk-labor-eyebrow{color:#8ff4ff}
  #rk-labor-guide .rk-labor-eyebrow b{width:11px;height:11px;border-radius:50%;background:var(--rk-orange);box-shadow:0 0 0 7px rgba(255,106,61,.14)}
  #rk-labor-guide .rk-labor-hero-title{max-width:790px;margin-bottom:19px;color:var(--rk-white);font-size:clamp(2.25rem,6vw,4.35rem);font-weight:950;letter-spacing:-.055em;line-height:.98}
  #rk-labor-guide .rk-labor-hero-lead{max-width:760px;margin-bottom:25px;color:#dceaf0;font-size:clamp(1.02rem,2vw,1.23rem);line-height:1.68}
  #rk-labor-guide .rk-labor-meta{display:flex;flex-wrap:wrap;gap:10px}
  #rk-labor-guide .rk-labor-meta span{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid rgba(255,255,255,.14);border-radius:999px;color:#eaf7fa;background:rgba(255,255,255,.075);font-size:.75rem;font-weight:800}
  #rk-labor-guide .rk-labor-hero-card{position:relative;padding:26px;border:1px solid rgba(255,255,255,.16);border-radius:25px;background:rgba(5,27,42,.56);box-shadow:0 20px 44px rgba(0,0,0,.19);backdrop-filter:blur(9px)}
  #rk-labor-guide .rk-labor-hero-card small{display:block;margin-bottom:10px;color:#8eeef7;font-size:.67rem;font-weight:900;letter-spacing:.07em;text-transform:uppercase}
  #rk-labor-guide .rk-labor-hero-number{margin-bottom:7px;color:var(--rk-white);font-size:clamp(2rem,5vw,3.25rem);font-weight:950;letter-spacing:-.055em;line-height:1}
  #rk-labor-guide .rk-labor-hero-card p{margin-bottom:16px;color:#d9e9ee;font-size:.78rem;line-height:1.55}
  #rk-labor-guide .rk-labor-hero-values{display:grid;grid-template-columns:1fr 1fr;gap:9px}
  #rk-labor-guide .rk-labor-hero-values div{padding:12px;border-radius:14px;color:#dcecf1;background:rgba(255,255,255,.075);font-size:.68rem}
  #rk-labor-guide .rk-labor-hero-values strong{display:block;color:var(--rk-white);font-size:1.08rem}
  #rk-labor-guide .rk-labor-nav{padding:17px clamp(18px,5vw,58px) 20px;border-bottom:1px solid var(--rk-line);background:var(--rk-white)}
  #rk-labor-guide .rk-labor-nav-title{display:flex;align-items:center;gap:9px;margin-bottom:11px;color:var(--rk-muted);font-size:.64rem;font-weight:950;letter-spacing:.065em;text-transform:uppercase}
  #rk-labor-guide .rk-labor-nav-title:before{content:"";width:10px;height:10px;border-radius:3px;background:var(--rk-orange);box-shadow:0 0 0 5px var(--rk-orange-soft)}
  #rk-labor-guide .rk-labor-nav-links{display:flex;flex-wrap:wrap;gap:8px}
  #rk-labor-guide .rk-labor-nav a{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:8px 12px;border:1px solid transparent;border-radius:999px;color:var(--rk-dark);background:var(--rk-soft);font-size:.7rem;font-weight:900;line-height:1.3;text-align:center;text-decoration:none}
  #rk-labor-guide .rk-labor-nav a:hover,#rk-labor-guide .rk-labor-nav a:focus-visible{color:var(--rk-white);background:var(--rk-blue)}
  #rk-labor-guide .rk-labor-body{padding:0 clamp(20px,6vw,76px) clamp(42px,7vw,76px)}
  #rk-labor-guide .rk-labor-section{padding:clamp(48px,7vw,82px) 0;border-bottom:1px solid var(--rk-line);scroll-margin-top:88px}
  #rk-labor-guide .rk-labor-section:last-child{border-bottom:0}
  #rk-labor-guide .rk-labor-lead{max-width:930px;color:var(--rk-text);font-size:clamp(1.02rem,2vw,1.16rem)}
  #rk-labor-guide .rk-labor-answer{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(260px,.65fr);gap:20px;margin-top:24px}
  #rk-labor-guide .rk-labor-answer-main,#rk-labor-guide .rk-labor-answer-side,#rk-labor-guide .rk-labor-card,#rk-labor-guide .rk-labor-step{padding:clamp(20px,3vw,28px);border:1px solid var(--rk-line);border-radius:21px;background:var(--rk-white)}
  #rk-labor-guide .rk-labor-answer-main{border-left:7px solid var(--rk-cyan);background:var(--rk-cyan-soft)}
  #rk-labor-guide .rk-labor-answer-side{border-left:7px solid var(--rk-orange);background:var(--rk-orange-soft)}
  #rk-labor-guide .rk-labor-answer strong.rk-labor-big{display:block;margin:5px 0;color:var(--rk-dark);font-size:clamp(1.55rem,4vw,2.65rem);line-height:1.05}
  #rk-labor-guide .rk-labor-grid-2,#rk-labor-guide .rk-labor-grid-3,#rk-labor-guide .rk-labor-grid-4{display:grid;gap:17px;margin-top:23px}
  #rk-labor-guide .rk-labor-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
  #rk-labor-guide .rk-labor-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
  #rk-labor-guide .rk-labor-grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
  #rk-labor-guide .rk-labor-card{position:relative;overflow:hidden}
  #rk-labor-guide .rk-labor-card-number{display:inline-flex;align-items:center;justify-content:center;min-width:42px;height:42px;margin-bottom:14px;padding:0 10px;border-radius:13px;color:var(--rk-white);background:var(--rk-navy);font-weight:950}
  #rk-labor-guide .rk-labor-card p:last-child,#rk-labor-guide .rk-labor-step p:last-child{margin-bottom:0}
  #rk-labor-guide .rk-labor-table-wrap{margin-top:23px}
  #rk-labor-guide table{width:100%;border-collapse:separate;border-spacing:0;overflow:hidden;border:1px solid var(--rk-line);border-radius:18px;background:var(--rk-white)}
  #rk-labor-guide th,#rk-labor-guide td{padding:14px 16px;border-right:1px solid var(--rk-line);border-bottom:1px solid var(--rk-line);text-align:left;vertical-align:top}
  #rk-labor-guide th:last-child,#rk-labor-guide td:last-child{border-right:0}
  #rk-labor-guide tbody tr:last-child td{border-bottom:0}
  #rk-labor-guide th{color:var(--rk-white);background:var(--rk-navy);font-size:.76rem;font-weight:900;letter-spacing:.025em}
  #rk-labor-guide tbody tr:nth-child(even) td{background:var(--rk-soft)}
  #rk-labor-guide .rk-labor-table-em{font-weight:950;color:var(--rk-dark)}
  #rk-labor-guide .rk-labor-callout{margin-top:22px;padding:20px 22px;border-left:6px solid var(--rk-cyan);border-radius:16px;background:var(--rk-cyan-soft)}
  #rk-labor-guide .rk-labor-callout.is-warm{border-color:var(--rk-orange);background:var(--rk-orange-soft)}
  #rk-labor-guide .rk-labor-callout.is-yellow{border-color:var(--rk-yellow);background:var(--rk-yellow-soft)}
  #rk-labor-guide .rk-labor-callout p:last-child{margin-bottom:0}
  #rk-labor-guide .rk-labor-scope{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:24px}
  #rk-labor-guide .rk-labor-scope>article{padding:25px;border:1px solid var(--rk-line);border-radius:20px;background:var(--rk-soft)}
  #rk-labor-guide .rk-labor-scope h3{padding-bottom:10px;border-bottom:1px solid var(--rk-line)}
  #rk-labor-guide .rk-labor-scope h4{margin-top:21px;color:var(--rk-blue)}

  #rk-labor-guide .rk-labor-tool{overflow:hidden;margin-top:28px;border:1px solid #315469;border-radius:28px;background:#0f2636;box-shadow:0 25px 54px rgba(16,37,54,.18)}
  #rk-labor-guide .rk-labor-tool-head{padding:clamp(27px,5vw,44px);color:#dcebf1;background:radial-gradient(circle at 92% 12%,rgba(255,106,61,.26),transparent 24%),linear-gradient(125deg,#102536,#17435a)}
  #rk-labor-guide .rk-labor-tool-head h2{color:var(--rk-white)}
  #rk-labor-guide .rk-labor-tool-head p:last-child{margin-bottom:0}
  #rk-labor-guide .rk-labor-tool-body{padding:clamp(20px,4vw,38px)}
  #rk-labor-guide .rk-labor-shared{padding:22px;border:1px solid #38586c;border-radius:20px;background:rgba(255,255,255,.04)}
  #rk-labor-guide .rk-labor-shared h3{color:var(--rk-white)}
  #rk-labor-guide .rk-labor-fields{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}
  #rk-labor-guide .rk-labor-field{min-width:0}
  #rk-labor-guide .rk-labor-field label{display:block;margin-bottom:7px;color:#dcebf1;font-size:.67rem;font-weight:900;line-height:1.35}
  #rk-labor-guide .rk-labor-field input,#rk-labor-guide .rk-labor-field select,#rk-labor-guide .rk-labor-offer input,#rk-labor-guide .rk-labor-offer select{width:100%;min-height:46px;padding:9px 11px;border:1px solid #557182;border-radius:11px;outline:none;color:var(--rk-dark);background:var(--rk-white)}
  #rk-labor-guide .rk-labor-field input:focus,#rk-labor-guide .rk-labor-field select:focus,#rk-labor-guide .rk-labor-offer input:focus,#rk-labor-guide .rk-labor-offer select:focus{border-color:var(--rk-cyan);box-shadow:0 0 0 3px rgba(37,199,216,.17)}
  #rk-labor-guide input:disabled{color:#788a95;background:#dbe5e9;cursor:not-allowed}
  #rk-labor-guide .rk-labor-offers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:18px}
  #rk-labor-guide .rk-labor-offer{overflow:hidden;border:1px solid #38586c;border-radius:20px;background:rgba(255,255,255,.04)}
  #rk-labor-guide .rk-labor-offer-head{padding:20px;border-bottom:1px solid #38586c;background:rgba(255,255,255,.045)}
  #rk-labor-guide .rk-labor-offer-head h3{margin-bottom:4px;color:var(--rk-white)}
  #rk-labor-guide .rk-labor-offer-head p{margin-bottom:0;color:#a9bfca;font-size:.7rem}
  #rk-labor-guide .rk-labor-base-fields{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:15px}
  #rk-labor-guide .rk-labor-mini-label{display:block;margin-bottom:6px;color:#c8dae2;font-size:.62rem;font-weight:850}
  #rk-labor-guide .rk-labor-line-head,#rk-labor-guide .rk-labor-line{display:grid;grid-template-columns:minmax(145px,1.35fr) minmax(112px,.85fr) minmax(100px,.7fr);gap:9px;align-items:center;padding:10px 15px}
  #rk-labor-guide .rk-labor-line-head{color:#91aeba;background:#0b202e;font-size:.59rem;font-weight:950;letter-spacing:.04em;text-transform:uppercase}
  #rk-labor-guide .rk-labor-line{border-top:1px solid #29495c}
  #rk-labor-guide .rk-labor-line:first-of-type{border-top:0}
  #rk-labor-guide .rk-labor-line-name{color:#e3eff3;font-size:.68rem;font-weight:850;line-height:1.35}
  #rk-labor-guide .rk-labor-line-name small{display:block;margin-top:2px;color:#8fa9b5;font-size:.58rem;font-weight:650}
  #rk-labor-guide .rk-labor-line select,#rk-labor-guide .rk-labor-line input{min-height:40px;padding:7px 8px;font-size:.66rem}
  #rk-labor-guide .rk-labor-actions{display:flex;flex-wrap:wrap;gap:11px;margin-top:21px}
  #rk-labor-guide .rk-labor-calculate,#rk-labor-guide .rk-labor-reset{border:0;border-radius:12px;font-weight:900;cursor:pointer;transition:transform .18s ease,background .18s ease,box-shadow .18s ease}
  #rk-labor-guide .rk-labor-calculate{padding:14px 22px;color:var(--rk-white);background:linear-gradient(135deg,var(--rk-orange),#e9552c);box-shadow:0 12px 24px rgba(255,106,61,.22)}
  #rk-labor-guide .rk-labor-reset{padding:14px 19px;color:#dcebf1;background:#29485a}
  #rk-labor-guide .rk-labor-calculate:hover,#rk-labor-guide .rk-labor-reset:hover{transform:translateY(-2px)}
  #rk-labor-guide .rk-labor-results{padding:clamp(24px,5vw,42px);border-top:1px solid #38586c;color:#dcebf1;background:#0b202e}
  #rk-labor-guide .rk-labor-results h3,#rk-labor-guide .rk-labor-results h4{color:var(--rk-white)}
  #rk-labor-guide .rk-labor-result-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
  #rk-labor-guide .rk-labor-result-card{min-width:0;padding:17px;border:1px solid #36566a;border-radius:17px;background:rgba(255,255,255,.045)}
  #rk-labor-guide .rk-labor-result-card.is-main{border-color:var(--rk-cyan);background:linear-gradient(145deg,rgba(37,199,216,.2),rgba(37,199,216,.07))}
  #rk-labor-guide .rk-labor-result-card small{display:block;min-height:2.8em;color:#9fb7c2;font-size:.65rem;font-weight:800;line-height:1.4}
  #rk-labor-guide .rk-labor-result-number{margin-top:7px;color:var(--rk-white);font-size:clamp(1.2rem,3vw,1.9rem);font-weight:950;letter-spacing:-.04em;line-height:1.1}
  #rk-labor-guide .rk-labor-chart{margin-top:22px;padding:20px;border:1px solid #36566a;border-radius:18px;background:rgba(255,255,255,.035)}
  #rk-labor-guide .rk-labor-chart h4{margin-bottom:14px}
  #rk-labor-guide .rk-labor-bar-row{display:grid;grid-template-columns:75px minmax(0,1fr) 105px;gap:10px;align-items:center;margin-top:12px;color:#dcebf1;font-size:.7rem;font-weight:850}
  #rk-labor-guide .rk-labor-bar-track{display:flex;height:24px;overflow:hidden;border-radius:999px;background:#29485a}
  #rk-labor-guide .rk-labor-segment{width:0;height:100%;transition:width .3s ease}
  #rk-labor-guide .rk-labor-segment.is-base{background:#25c7d8}
  #rk-labor-guide .rk-labor-segment.is-floor{background:#ff6a3d}
  #rk-labor-guide .rk-labor-segment.is-hydraulic{background:#f1bf3f}
  #rk-labor-guide .rk-labor-segment.is-control{background:#6e87df}
  #rk-labor-guide .rk-labor-segment.is-other{background:#8aa0ad}
  #rk-labor-guide .rk-labor-legend{display:flex;flex-wrap:wrap;gap:10px 16px;margin-top:16px;color:#a9bfca;font-size:.62rem}
  #rk-labor-guide .rk-labor-legend span{display:inline-flex;align-items:center;gap:6px}
  #rk-labor-guide .rk-labor-legend i{display:inline-block;width:11px;height:11px;border-radius:3px}
  #rk-labor-guide .rk-labor-status{margin-top:16px;padding:15px 17px;border-left:5px solid var(--rk-cyan);border-radius:13px;color:#dcebf1;background:rgba(37,199,216,.1)}
  #rk-labor-guide .rk-labor-status.is-warning{border-color:var(--rk-yellow);background:rgba(229,170,40,.12)}
  #rk-labor-guide .rk-labor-status strong{color:var(--rk-white)}
  #rk-labor-guide .rk-labor-tool-note{margin-top:14px;color:#94acb8;font-size:.65rem;line-height:1.55}
  #rk-labor-guide .rk-labor-inline-cta{position:relative;overflow:hidden;margin-top:31px;padding:clamp(27px,5vw,42px);border-radius:25px;color:var(--rk-white);background:radial-gradient(circle at 88% 15%,rgba(255,106,61,.26),transparent 25%),linear-gradient(126deg,#102536,#17465d)}
  #rk-labor-guide .rk-labor-inline-cta h3{color:var(--rk-white);font-size:clamp(1.45rem,3vw,2.1rem)}
  #rk-labor-guide .rk-labor-inline-cta p{max-width:880px;color:#d8e8ee}
  #rk-labor-guide .rk-labor-cta-button{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:13px 20px;border-radius:14px;color:var(--rk-white)!important;background:linear-gradient(135deg,var(--rk-orange),#e9542d);box-shadow:0 14px 26px rgba(255,106,61,.24);text-decoration:none!important;transition:transform .18s ease,box-shadow .18s ease}
  #rk-labor-guide .rk-labor-cta-button:hover,#rk-labor-guide .rk-labor-cta-button:focus-visible{transform:translateY(-2px);box-shadow:0 18px 30px rgba(255,106,61,.3)}
  #rk-labor-guide .rk-labor-disclosure{display:block;margin-top:10px;color:#9eb6c2;font-size:.62rem}
  #rk-labor-guide .rk-labor-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:24px;counter-reset:rk-labor-step}
  #rk-labor-guide .rk-labor-step{position:relative;padding-top:62px;counter-increment:rk-labor-step}
  #rk-labor-guide .rk-labor-step:before{content:counter(rk-labor-step,decimal-leading-zero);position:absolute;top:18px;left:22px;color:var(--rk-blue);font-size:1.25rem;font-weight:950}
  #rk-labor-guide .rk-labor-checklist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px;margin:22px 0 0;padding:0;list-style:none}
  #rk-labor-guide .rk-labor-checklist li{position:relative;margin:0;padding:14px 15px 14px 48px;border:1px solid var(--rk-line);border-radius:14px;background:var(--rk-soft)}
  #rk-labor-guide .rk-labor-checklist li:before{content:"✓";position:absolute;top:13px;left:16px;display:grid;width:23px;height:23px;place-items:center;border-radius:50%;color:var(--rk-white);background:var(--rk-green);font-size:.7rem;font-weight:950}
  #rk-labor-guide .rk-labor-faq{display:grid;gap:10px;margin-top:23px}
  #rk-labor-guide .rk-labor-faq details{overflow:hidden;border:1px solid var(--rk-line);border-radius:15px;background:var(--rk-white)}
  #rk-labor-guide .rk-labor-faq summary{position:relative;padding:17px 52px 17px 18px;color:var(--rk-dark);font-weight:900;cursor:pointer;list-style:none}
  #rk-labor-guide .rk-labor-faq summary::-webkit-details-marker{display:none}
  #rk-labor-guide .rk-labor-faq summary:after{content:"+";position:absolute;top:13px;right:17px;font-size:1.35rem}
  #rk-labor-guide .rk-labor-faq details[open] summary:after{content:"−"}
  #rk-labor-guide .rk-labor-faq-answer{padding:0 18px 18px;color:var(--rk-text)}
  #rk-labor-guide .rk-labor-faq-answer p:last-child{margin-bottom:0}
  #rk-labor-guide .rk-labor-sources{padding:23px;border:1px solid var(--rk-line);border-radius:18px;background:var(--rk-soft);color:var(--rk-text);font-size:.83rem}
  #rk-labor-guide .rk-labor-sources strong{display:block;margin-bottom:8px;color:var(--rk-dark)}
  #rk-labor-guide .rk-labor-update{margin-top:12px;color:var(--rk-muted);font-size:.7rem;font-weight:800}
  #rk-labor-guide .rk-labor-author{position:relative;overflow:hidden;margin-top:clamp(48px,7vw,82px);border:1px solid var(--rk-line);border-radius:27px;background:var(--rk-white)}
  #rk-labor-guide .rk-labor-author>input{position:absolute;opacity:0;pointer-events:none}
  #rk-labor-guide .rk-labor-author-head{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:27px clamp(22px,5vw,42px);color:#dcebf1;background:linear-gradient(126deg,var(--rk-dark),var(--rk-navy))}
  #rk-labor-guide .rk-labor-author-head h2{margin-bottom:4px;color:var(--rk-white)}
  #rk-labor-guide .rk-labor-author-head p{margin-bottom:0}
  #rk-labor-guide .rk-labor-author-mark{flex:0 0 auto;padding:9px 12px;border:1px solid rgba(255,255,255,.16);border-radius:999px;color:#93f3fc;font-size:.65rem;font-weight:950;letter-spacing:.06em}
  #rk-labor-guide .rk-labor-author-layout{display:grid;grid-template-columns:270px minmax(0,1fr)}
  #rk-labor-guide .rk-labor-author-side{padding:28px;border-right:1px solid var(--rk-line);background:var(--rk-soft);text-align:center}
  #rk-labor-guide .rk-labor-author-photo{width:150px;height:150px;margin:0 auto 16px;overflow:hidden;border:6px solid var(--rk-white);border-radius:50%;box-shadow:0 12px 28px rgba(16,37,54,.16)}
  #rk-labor-guide .rk-labor-author-photo img{width:100%;height:100%;object-fit:cover}
  #rk-labor-guide .rk-labor-author-name{color:var(--rk-dark);font-size:1.18rem;font-weight:950}
  #rk-labor-guide .rk-labor-author-role{margin-top:5px;color:var(--rk-muted);font-size:.72rem;line-height:1.55}
  #rk-labor-guide .rk-labor-author-social-label{margin-top:24px;color:var(--rk-muted);font-size:.63rem;font-weight:900;letter-spacing:.05em;text-transform:uppercase}
  #rk-labor-guide .rk-labor-author-social{display:flex;justify-content:center;gap:9px;margin-top:9px}
  #rk-labor-guide .rk-labor-author-social a{display:grid;width:42px;height:42px;place-items:center;border:1px solid var(--rk-line);border-radius:13px;color:var(--rk-dark);background:var(--rk-white);transition:transform .18s ease,color .18s ease,border-color .18s ease}
  #rk-labor-guide .rk-labor-author-social a:hover,#rk-labor-guide .rk-labor-author-social a:focus-visible{transform:translateY(-2px);color:var(--rk-blue);border-color:var(--rk-cyan)}
  #rk-labor-guide .rk-labor-author-social svg{width:20px;height:20px;fill:currentColor}
  #rk-labor-guide .rk-labor-author-main{padding:clamp(24px,5vw,42px)}
  #rk-labor-guide .rk-labor-author-quote{position:relative;margin:0;padding:22px 22px 22px 28px;border-left:6px solid var(--rk-orange);border-radius:15px;background:var(--rk-orange-soft)}
  #rk-labor-guide .rk-labor-author-quote p{margin-bottom:0;color:var(--rk-dark);font-weight:760}
  #rk-labor-guide .rk-labor-author-tabs{display:flex;margin-top:24px;border-bottom:1px solid var(--rk-line)}
  #rk-labor-guide .rk-labor-author-tab{padding:11px 14px;border-bottom:3px solid transparent;color:var(--rk-muted);font-size:.72rem;font-weight:900;cursor:pointer}
  #rk-labor-guide .rk-labor-author-panel{display:none;padding-top:18px;color:var(--rk-text)}
  #rk-labor-guide .rk-labor-author-panel p:last-child{margin-bottom:0}
  #rk-labor-author-about:checked~.rk-labor-author-layout .rk-labor-author-panel-about,#rk-labor-author-exp:checked~.rk-labor-author-layout .rk-labor-author-panel-exp,#rk-labor-author-sites:checked~.rk-labor-author-layout .rk-labor-author-panel-sites{display:block}
  #rk-labor-author-about:checked~.rk-labor-author-layout label[for="rk-labor-author-about"],#rk-labor-author-exp:checked~.rk-labor-author-layout label[for="rk-labor-author-exp"],#rk-labor-author-sites:checked~.rk-labor-author-layout label[for="rk-labor-author-sites"]{color:var(--rk-dark);border-bottom-color:var(--rk-cyan)}
  #rk-labor-guide .rk-labor-site-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
  #rk-labor-guide .rk-labor-site-links a{padding:8px 11px;border-radius:999px;background:var(--rk-soft);font-size:.7rem;text-decoration:none}
  #rk-labor-guide .rk-labor-final-cta{margin-top:28px;padding:clamp(32px,6vw,58px);border-radius:27px;color:#dcebf1;background:radial-gradient(circle at 89% 16%,rgba(255,106,61,.29),transparent 25%),linear-gradient(126deg,#102536,#17465d);text-align:center}
  #rk-labor-guide .rk-labor-final-cta h2{max-width:850px;margin-right:auto;margin-left:auto;color:var(--rk-white)}
  #rk-labor-guide .rk-labor-final-cta p{max-width:850px;margin-right:auto;margin-left:auto}
  @media(max-width:980px){
    #rk-labor-guide .rk-labor-hero-grid,#rk-labor-guide .rk-labor-answer{grid-template-columns:1fr}
    #rk-labor-guide .rk-labor-fields{grid-template-columns:repeat(3,minmax(0,1fr))}
    #rk-labor-guide .rk-labor-grid-4,#rk-labor-guide .rk-labor-result-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
    #rk-labor-guide .rk-labor-grid-3,#rk-labor-guide .rk-labor-steps{grid-template-columns:repeat(2,minmax(0,1fr))}
  }
  @media(max-width:760px){
    #rk-labor-guide{margin:16px auto 46px;font-size:16px}
    #rk-labor-guide .rk-labor-shell{border-radius:20px}
    #rk-labor-guide .rk-labor-hero{padding:34px 22px}
    #rk-labor-guide .rk-labor-body{padding-right:18px;padding-left:18px}
    #rk-labor-guide .rk-labor-nav{padding:15px 18px 18px}
    #rk-labor-guide .rk-labor-nav-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
    #rk-labor-guide .rk-labor-nav a{width:100%;min-height:45px;padding:8px 9px;border-radius:13px;font-size:.66rem}
    #rk-labor-guide .rk-labor-grid-2,#rk-labor-guide .rk-labor-grid-3,#rk-labor-guide .rk-labor-grid-4,#rk-labor-guide .rk-labor-scope,#rk-labor-guide .rk-labor-offers,#rk-labor-guide .rk-labor-steps,#rk-labor-guide .rk-labor-checklist,#rk-labor-guide .rk-labor-fields{grid-template-columns:1fr}
    #rk-labor-guide .rk-labor-result-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
    #rk-labor-guide .rk-labor-author-layout{grid-template-columns:1fr}
    #rk-labor-guide .rk-labor-author-side{border-right:0;border-bottom:1px solid var(--rk-line)}
    #rk-labor-guide .rk-labor-author-head{align-items:flex-start}
    #rk-labor-guide .rk-labor-author-mark{display:none}
    #rk-labor-guide .rk-labor-bar-row{grid-template-columns:58px minmax(0,1fr) 86px;font-size:.62rem}
    #rk-labor-guide table,#rk-labor-guide thead,#rk-labor-guide tbody,#rk-labor-guide tr,#rk-labor-guide th,#rk-labor-guide td{display:block;width:100%}
    #rk-labor-guide thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
    #rk-labor-guide table{border:0;background:transparent}
    #rk-labor-guide tbody{display:grid;gap:13px}
    #rk-labor-guide tr{overflow:hidden;border:1px solid var(--rk-line);border-radius:15px;background:var(--rk-white)}
    #rk-labor-guide td,#rk-labor-guide tbody tr:last-child td{display:grid;grid-template-columns:minmax(108px,.78fr) minmax(0,1.22fr);gap:12px;padding:11px 13px;border-right:0;border-bottom:1px solid var(--rk-line)!important;background:var(--rk-white)!important}
    #rk-labor-guide td:last-child{border-bottom:0!important}
    #rk-labor-guide td:before{content:attr(data-label);color:var(--rk-muted);font-size:.69rem;font-weight:900}
  }
  @media(max-width:540px){
    #rk-labor-guide .rk-labor-result-grid{grid-template-columns:1fr}
    #rk-labor-guide .rk-labor-base-fields{grid-template-columns:1fr}
    #rk-labor-guide .rk-labor-line-head{display:none}
    #rk-labor-guide .rk-labor-line{grid-template-columns:1fr 1fr;padding:14px}
    #rk-labor-guide .rk-labor-line-name{grid-column:1/-1}
    #rk-labor-guide .rk-labor-author-tabs{overflow-x:auto}
    #rk-labor-guide .rk-labor-author-tab{flex:0 0 auto}
  }
  @media(prefers-reduced-motion:reduce){
    #rk-labor-guide *,#rk-labor-guide *:before,#rk-labor-guide *:after{scroll-behavior:auto!important;transition:none!important}
  }
</style>

<article id="rk-labor-guide">
  <div class="rk-labor-shell">
    <div class="rk-labor-progress-track" aria-hidden="true"><div class="rk-labor-progress" id="rk-labor-progress"></div></div>
    <header class="rk-labor-hero">
      <div class="rk-labor-hero-grid">
        <div>
          <span class="rk-labor-eyebrow"><b></b> Koszt robocizny • zakres oferty • 2026</span>
          <div class="rk-labor-hero-title">Cena za m² nie wystarczy, żeby porównać wykonawców</div>
          <p class="rk-labor-hero-lead">Sprawdź orientacyjne poziomy cen, rozdziel powierzchnię całkowitą od czynnej i policz dwie oferty według tego samego zakresu: od izolacji po próbę szczelności, uruchomienie i automatykę.</p>
          <div class="rk-labor-meta"><span>Aktualizacja: 29.08.2026</span><span>Jedno narzędzie porównawcze</span><span>Ceny bez udawanej dokładności</span></div>
        </div>
        <aside class="rk-labor-hero-card" aria-label="Orientacyjne poziomy robocizny">
          <small>Szybki punkt odniesienia</small>
          <div class="rk-labor-hero-number">40–120+ zł/m²</div>
          <p>To szeroki przedział różnych zakresów, a nie jedna stawka dla każdej budowy. Najpierw sprawdź, co wykonawca liczy w cenie bazowej.</p>
          <div class="rk-labor-hero-values"><div><strong>40–60</strong>samo układanie rur</div><div><strong>60–90</strong>szerszy standard prac</div><div><strong>90–120+</strong>małe lub złożone zlecenia</div><div><strong>netto czy brutto?</strong>zawsze zapisz w ofercie</div></div>
        </aside>
      </div>
    </header>

    <nav class="rk-labor-nav" aria-label="Spis treści artykułu">
      <span class="rk-labor-nav-title">Spis treści — przejdź do sekcji</span>
      <div class="rk-labor-nav-links">
        <a href="#rk-labor-answer">Cena robocizny 2026</a>
        <a href="#rk-labor-scope">Zakres robocizny</a>
        <a href="#rk-labor-calculator">Kalkulator ofert</a>
        <a href="#rk-labor-area">Powierzchnia rozliczeniowa</a>
        <a href="#rk-labor-variants">Same rury czy pełny zakres</a>
        <a href="#rk-labor-components">Izolacja i rozdzielacz</a>
        <a href="#rk-labor-test">Próba a uruchomienie</a>
        <a href="#rk-labor-spacing">Rozstaw 10 i 15 cm</a>
        <a href="#rk-labor-complexity">Kondygnacje i remont</a>
        <a href="#rk-labor-examples">Koszt 100–150 m²</a>
        <a href="#rk-labor-compare">Porównanie ofert</a>
        <a href="#rk-labor-contract">Checklista umowy</a>
        <a href="#rk-labor-errors">Najczęstsze błędy</a>
        <a href="#rk-labor-faq">FAQ</a>
        <a href="#rk-labor-sources">Metodyka i źródła</a>
      </div>
    </nav>

    <main class="rk-labor-body">
      <section class="rk-labor-section" id="rk-labor-answer">
        <span class="rk-labor-kicker">Najważniejsza odpowiedź</span>
        <h2>Ile kosztuje robocizna podłogówki za m² w 2026 roku?</h2>
        <p class="rk-labor-lead">Nie istnieje jedna uczciwa cena za m² ogrzewania podłogowego bez opisu zakresu. Inaczej wycenia się samo mocowanie rur na gotowym podłożu, a inaczej przygotowanie izolacji, montaż rozdzielacza, podłączenie obwodów, próbę, napełnienie i uruchomienie.</p>
        <div class="rk-labor-answer">
          <div class="rk-labor-answer-main">
            <span class="rk-labor-kicker">Orientacyjnie, sierpień 2026</span>
            <strong class="rk-labor-big">60–90 zł/m²</strong>
            <p>może być sensownym punktem startowym dla szerszego standardu robocizny w typowym domu, ale dopiero po wpisaniu zakresu, podstawy rozliczenia, liczby kondygnacji i ceny netto lub brutto.</p>
          </div>
          <div class="rk-labor-answer-side">
            <span class="rk-labor-kicker">Najczęstszy błąd</span>
            <strong class="rk-labor-big">65 ≠ 65</strong>
            <p>Dwie identyczne stawki mogą dać różne rachunki, gdy jedna jest liczona od powierzchni całkowitej, druga od czynnej, a rozdzielacz i próba są dopłatami.</p>
          </div>
        </div>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Rodzaj wyceny</th><th>Orientacyjny poziom</th><th>Co może obejmować</th><th>Co koniecznie sprawdzić</th></tr></thead>
            <tbody>
              <tr><td data-label="Rodzaj wyceny" class="rk-labor-table-em">Samo układanie rur</td><td data-label="Orientacyjny poziom">około 40–60 zł/m²</td><td data-label="Co może obejmować">Mocowanie rur na przygotowanej warstwie systemowej.</td><td data-label="Co koniecznie sprawdzić">Dobiegi, podłączenia pętli, rozdzielacz i próba.</td></tr>
              <tr><td data-label="Rodzaj wyceny" class="rk-labor-table-em">Szerszy standard robocizny</td><td data-label="Orientacyjny poziom">około 60–90 zł/m²</td><td data-label="Co może obejmować">Część przygotowania, rury, podłączenia i kontrolę szczelności.</td><td data-label="Co koniecznie sprawdzić">Dokładną listę prac, powierzchnię rozliczeniową i uruchomienie.</td></tr>
              <tr><td data-label="Rodzaj wyceny" class="rk-labor-table-em">Małe lub złożone zlecenie</td><td data-label="Orientacyjny poziom">około 90–120+ zł/m²</td><td data-label="Co może obejmować">Więcej pracy jednostkowej, kilka kondygnacji, trudną logistykę lub nietypowy zakres.</td><td data-label="Co koniecznie sprawdzić">Czy stawka jest ryczałtem oraz jakie prace są osobno.</td></tr>
            </tbody>
          </table>
        </div>
        <div class="rk-labor-callout is-yellow"><p><strong>To widełki redakcyjne do pierwszego budżetu, nie cennik ani obietnica ceny.</strong> Lokalne oferty mogą znaleźć się poniżej lub powyżej tych wartości. Porównuj kwoty z tej samej daty, z tym samym zakresem, podatkiem i powierzchnią rozliczeniową.</p></div>
      </section>

      <section class="rk-labor-section" id="rk-labor-scope">
        <span class="rk-labor-kicker">Cena jest skrótem zakresu</span>
        <h2>Co naprawdę może obejmować robocizna ogrzewania podłogowego?</h2>
        <p class="rk-labor-lead">Hasło „kompletna podłogówka” nie ma jednej technicznej definicji. Najbezpieczniej rozbić ofertę na pozycje i przy każdej zaznaczyć: w cenie bazowej, dopłata albo nieustalone.</p>
        <div class="rk-labor-scope">
          <article>
            <h3>Przygotowanie podłoża i warstw pod rurą</h3>
            <p>W tej części mogą znaleźć się porządki, korekty podłoża, układanie izolacji, folii, taśmy brzegowej oraz przygotowanie przejść i dylatacji.</p>
            <h4>Kiedy rozliczać powierzchnię całkowitą?</h4>
            <p>Izolację i warstwy pod rurą zwykle wykonuje się na większej powierzchni niż samo aktywne pole grzewcze. Podstawa rozliczenia powinna być wpisana osobno.</p>
            <p>Przed wyceną sprawdź <a href="https://projekt-ogrzewania.pl/jakie-sa-najlepsze-sposoby-izolacji-pod-ogrzewanie-podlogowe/">sposób izolacji pod ogrzewanie podłogowe</a>, <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">ilość styropianu</a> oraz <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolację brzegową i dylatacje</a>.</p>
          </article>
          <article>
            <h3>Rury, rozdzielacz i czynności hydrauliczne</h3>
            <p>Druga grupa obejmuje trasowanie, mocowanie rur, dobiegi, montaż szafki i rozdzielacza, opis oraz podłączenie pętli, próbę szczelności, napełnienie, odpowietrzenie i ewentualne uruchomienie.</p>
            <h4>Kiedy rozliczać powierzchnię czynną?</h4>
            <p>Rury nie muszą znajdować się pod trwałą zabudową i innymi wyłączonymi polami. Dlatego ich montaż może być liczony od powierzchni rzeczywiście ogrzewanej, ale trzeba to nazwać wprost.</p>
            <p>Liczbę rur i obwodów weryfikują osobno <a href="https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/">kalkulator ilości rury</a> oraz analiza <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">długości pojedynczej pętli</a>.</p>
          </article>
        </div>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Pozycja</th><th>Typowa jednostka</th><th>Pytanie do wykonawcy</th></tr></thead>
            <tbody>
              <tr><td data-label="Pozycja">Przygotowanie podłoża, izolacja, folia</td><td data-label="Typowa jednostka">m² powierzchni całkowitej</td><td data-label="Pytanie do wykonawcy">Czy materiał i poprawki podłoża są osobno?</td></tr>
              <tr><td data-label="Pozycja">Trasowanie i mocowanie rur</td><td data-label="Typowa jednostka">m² powierzchni czynnej lub całkowitej</td><td data-label="Pytanie do wykonawcy">Który metraż jest podstawą faktury?</td></tr>
              <tr><td data-label="Pozycja">Szafka i rozdzielacz</td><td data-label="Typowa jednostka">sztuka</td><td data-label="Pytanie do wykonawcy">Czy obejmuje montaż, uzbrojenie i opis?</td></tr>
              <tr><td data-label="Pozycja">Podłączenie pętli</td><td data-label="Typowa jednostka">obwód</td><td data-label="Pytanie do wykonawcy">Czy podłączenia i oznaczenia są w stawce m²?</td></tr>
              <tr><td data-label="Pozycja">Próba szczelności</td><td data-label="Typowa jednostka">ryczałt lub instalacja</td><td data-label="Pytanie do wykonawcy">Jakie medium, ciśnienie, czas i protokół?</td></tr>
              <tr><td data-label="Pozycja">Płukanie, napełnienie, odpowietrzenie</td><td data-label="Typowa jednostka">ryczałt</td><td data-label="Pytanie do wykonawcy">Czy płyn i jego przygotowanie są w cenie?</td></tr>
              <tr><td data-label="Pozycja">Uruchomienie i równoważenie</td><td data-label="Typowa jednostka">ryczałt lub obwód</td><td data-label="Pytanie do wykonawcy">Czy obejmuje przepływy i nastawy rozdzielacza?</td></tr>
              <tr><td data-label="Pozycja">Automatyka strefowa</td><td data-label="Typowa jednostka">strefa</td><td data-label="Pytanie do wykonawcy">Czy jest okablowanie, montaż i konfiguracja?</td></tr>
              <tr><td data-label="Pozycja">Transport i logistyka</td><td data-label="Typowa jednostka">ryczałt</td><td data-label="Pytanie do wykonawcy">Czy dojazd, wniesienie i kolejne wizyty są w cenie?</td></tr>
            </tbody>
          </table>
        </div>
      </section>

      <section class="rk-labor-section" id="rk-labor-calculator">
        <div class="rk-labor-tool">
          <header class="rk-labor-tool-head">
            <span class="rk-labor-eyebrow"><b></b> Interaktywny kalkulator i porównywarka</span>
            <h2>Porównaj dwie oferty na podłogówkę według tego samego zakresu</h2>
            <p>Wpisz dane inwestycji, a następnie oznacz każdą pozycję jako zawartą w stawce bazowej, płatną dodatkowo albo nieustaloną. Narzędzie nie zgaduje brakujących cen — pokazuje je jako ryzyko porównania.</p>
          </header>
          <div class="rk-labor-tool-body">
            <form aria-label="Dane ofert wykonawców" onsubmit="return false">
              <div class="rk-labor-shared">
                <h3>Wspólne dane budynku</h3>
                <div class="rk-labor-fields">
                  <div class="rk-labor-field"><label for="rk-labor-total-area">Powierzchnia całkowita [m²]</label><input id="rk-labor-total-area" type="number" min="1" max="5000" step="1" value="120" inputmode="decimal"></div>
                  <div class="rk-labor-field"><label for="rk-labor-active-area">Powierzchnia czynna [m²]</label><input id="rk-labor-active-area" type="number" min="1" max="5000" step="1" value="105" inputmode="decimal"></div>
                  <div class="rk-labor-field"><label for="rk-labor-manifolds">Liczba rozdzielaczy</label><input id="rk-labor-manifolds" type="number" min="1" max="50" step="1" value="1" inputmode="numeric"></div>
                  <div class="rk-labor-field"><label for="rk-labor-loops">Liczba pętli</label><input id="rk-labor-loops" type="number" min="1" max="300" step="1" value="10" inputmode="numeric"></div>
                  <div class="rk-labor-field"><label for="rk-labor-zones">Liczba stref automatyki</label><input id="rk-labor-zones" type="number" min="0" max="100" step="1" value="6" inputmode="numeric"></div>
                </div>
              </div>

              <div class="rk-labor-offers">
                <section class="rk-labor-offer" aria-label="Oferta A">
                  <header class="rk-labor-offer-head">
                    <h3>Oferta A</h3><p>Przykładowe dane są edytowalne.</p>
                    <div class="rk-labor-base-fields">
                      <label><span class="rk-labor-mini-label">Stawka bazowa [zł/m²]</span><input id="rk-labor-a-base" type="number" min="0" max="2000" step="1" value="65" inputmode="decimal"></label>
                      <label><span class="rk-labor-mini-label">Podstawa stawki</span><select id="rk-labor-a-basis"><option value="active" selected>powierzchnia czynna</option><option value="total">powierzchnia całkowita</option></select></label>
                    </div>
                  </header>
                  <div class="rk-labor-line-head"><span>Pozycja</span><span>Status</span><span>Cena jedn.</span></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Izolacja i przygotowanie<small>zł/m² całkowitej</small></span><select id="rk-labor-a-insulation-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-insulation-price" type="number" min="0" step="1" value="18" inputmode="decimal" aria-label="Oferta A cena izolacji za metr kwadratowy"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Montaż rozdzielacza<small>zł/szt.</small></span><select id="rk-labor-a-manifold-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-manifold-price" type="number" min="0" step="10" value="850" inputmode="decimal" aria-label="Oferta A cena montażu rozdzielacza"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Podłączenie pętli<small>zł/obwód</small></span><select id="rk-labor-a-loops-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-loops-price" type="number" min="0" step="10" value="90" inputmode="decimal" aria-label="Oferta A cena podłączenia pętli"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Próba z protokołem<small>zł/instalacja</small></span><select id="rk-labor-a-test-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-test-price" type="number" min="0" step="10" value="500" inputmode="decimal" aria-label="Oferta A cena próby szczelności"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Płukanie i napełnienie<small>zł/instalacja</small></span><select id="rk-labor-a-flush-status"><option value="included">w bazie</option><option value="extra">dopłata</option><option value="unknown" selected>nieustalone</option></select><input id="rk-labor-a-flush-price" type="number" min="0" step="10" value="600" inputmode="decimal" aria-label="Oferta A cena płukania i napełnienia"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Uruchomienie i regulacja<small>zł/instalacja</small></span><select id="rk-labor-a-start-status"><option value="included">w bazie</option><option value="extra">dopłata</option><option value="unknown" selected>nieustalone</option></select><input id="rk-labor-a-start-price" type="number" min="0" step="10" value="900" inputmode="decimal" aria-label="Oferta A cena uruchomienia i regulacji"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Automatyka strefowa<small>zł/strefa</small></span><select id="rk-labor-a-controls-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-controls-price" type="number" min="0" step="10" value="180" inputmode="decimal" aria-label="Oferta A cena montażu automatyki na strefę"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Transport i logistyka<small>zł/ryczałt</small></span><select id="rk-labor-a-transport-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-transport-price" type="number" min="0" step="10" value="350" inputmode="decimal" aria-label="Oferta A koszt transportu"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Inne prace<small>zł/ryczałt</small></span><select id="rk-labor-a-other-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-other-price" type="number" min="0" step="10" value="0" inputmode="decimal" aria-label="Oferta A inne koszty"></div>
                </section>

                <section class="rk-labor-offer" aria-label="Oferta B">
                  <header class="rk-labor-offer-head">
                    <h3>Oferta B</h3><p>Ten sam zakres, druga metoda wyceny.</p>
                    <div class="rk-labor-base-fields">
                      <label><span class="rk-labor-mini-label">Stawka bazowa [zł/m²]</span><input id="rk-labor-b-base" type="number" min="0" max="2000" step="1" value="78" inputmode="decimal"></label>
                      <label><span class="rk-labor-mini-label">Podstawa stawki</span><select id="rk-labor-b-basis"><option value="active">powierzchnia czynna</option><option value="total" selected>powierzchnia całkowita</option></select></label>
                    </div>
                  </header>
                  <div class="rk-labor-line-head"><span>Pozycja</span><span>Status</span><span>Cena jedn.</span></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Izolacja i przygotowanie<small>zł/m² całkowitej</small></span><select id="rk-labor-b-insulation-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-insulation-price" type="number" min="0" step="1" value="18" inputmode="decimal" aria-label="Oferta B cena izolacji za metr kwadratowy"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Montaż rozdzielacza<small>zł/szt.</small></span><select id="rk-labor-b-manifold-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-manifold-price" type="number" min="0" step="10" value="850" inputmode="decimal" aria-label="Oferta B cena montażu rozdzielacza"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Podłączenie pętli<small>zł/obwód</small></span><select id="rk-labor-b-loops-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-loops-price" type="number" min="0" step="10" value="90" inputmode="decimal" aria-label="Oferta B cena podłączenia pętli"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Próba z protokołem<small>zł/instalacja</small></span><select id="rk-labor-b-test-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-test-price" type="number" min="0" step="10" value="500" inputmode="decimal" aria-label="Oferta B cena próby szczelności"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Płukanie i napełnienie<small>zł/instalacja</small></span><select id="rk-labor-b-flush-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-flush-price" type="number" min="0" step="10" value="600" inputmode="decimal" aria-label="Oferta B cena płukania i napełnienia"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Uruchomienie i regulacja<small>zł/instalacja</small></span><select id="rk-labor-b-start-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-start-price" type="number" min="0" step="10" value="900" inputmode="decimal" aria-label="Oferta B cena uruchomienia i regulacji"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Automatyka strefowa<small>zł/strefa</small></span><select id="rk-labor-b-controls-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-controls-price" type="number" min="0" step="10" value="160" inputmode="decimal" aria-label="Oferta B cena montażu automatyki na strefę"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Transport i logistyka<small>zł/ryczałt</small></span><select id="rk-labor-b-transport-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-transport-price" type="number" min="0" step="10" value="350" inputmode="decimal" aria-label="Oferta B koszt transportu"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Inne prace<small>zł/ryczałt</small></span><select id="rk-labor-b-other-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-other-price" type="number" min="0" step="10" value="0" inputmode="decimal" aria-label="Oferta B inne koszty"></div>
                </section>
              </div>
              <div class="rk-labor-actions"><button class="rk-labor-calculate" id="rk-labor-calculate" type="button">Porównaj oferty</button><button class="rk-labor-reset" id="rk-labor-reset" type="button">Przywróć przykład</button></div>
            </form>
          </div>
          <div class="rk-labor-results" aria-live="polite">
            <h3>Wynik dla wpisanych ofert</h3>
            <div class="rk-labor-result-grid">
              <div class="rk-labor-result-card is-main"><small>Oferta A — znany koszt</small><div class="rk-labor-result-number" id="rk-labor-a-total">11 265 zł</div></div>
              <div class="rk-labor-result-card"><small>Oferta A — efektywnie na m² całkowitej</small><div class="rk-labor-result-number" id="rk-labor-a-meter">93,88 zł/m²</div></div>
              <div class="rk-labor-result-card is-main"><small>Oferta B — znany koszt</small><div class="rk-labor-result-number" id="rk-labor-b-total">10 320 zł</div></div>
              <div class="rk-labor-result-card"><small>Oferta B — efektywnie na m² całkowitej</small><div class="rk-labor-result-number" id="rk-labor-b-meter">86,00 zł/m²</div></div>
              <div class="rk-labor-result-card"><small>Różnica znanych kosztów</small><div class="rk-labor-result-number" id="rk-labor-difference">945 zł</div></div>
              <div class="rk-labor-result-card"><small>Pozycje nieustalone w A</small><div class="rk-labor-result-number" id="rk-labor-a-unknown">2</div></div>
              <div class="rk-labor-result-card"><small>Pozycje nieustalone w B</small><div class="rk-labor-result-number" id="rk-labor-b-unknown">0</div></div>
              <div class="rk-labor-result-card"><small>Różnica powierzchni</small><div class="rk-labor-result-number" id="rk-labor-area-difference">15 m²</div></div>
            </div>
            <div class="rk-labor-chart" role="img" aria-label="Porównanie struktury znanych kosztów ofert A i B">
              <h4>Struktura znanych kosztów</h4>
              <div class="rk-labor-bar-row"><span>Oferta A</span><div class="rk-labor-bar-track"><i class="rk-labor-segment is-base" id="rk-labor-a-bar-base"></i><i class="rk-labor-segment is-floor" id="rk-labor-a-bar-floor"></i><i class="rk-labor-segment is-hydraulic" id="rk-labor-a-bar-hydraulic"></i><i class="rk-labor-segment is-control" id="rk-labor-a-bar-control"></i><i class="rk-labor-segment is-other" id="rk-labor-a-bar-other"></i></div><strong id="rk-labor-a-bar-value">11 265 zł</strong></div>
              <div class="rk-labor-bar-row"><span>Oferta B</span><div class="rk-labor-bar-track"><i class="rk-labor-segment is-base" id="rk-labor-b-bar-base"></i><i class="rk-labor-segment is-floor" id="rk-labor-b-bar-floor"></i><i class="rk-labor-segment is-hydraulic" id="rk-labor-b-bar-hydraulic"></i><i class="rk-labor-segment is-control" id="rk-labor-b-bar-control"></i><i class="rk-labor-segment is-other" id="rk-labor-b-bar-other"></i></div><strong id="rk-labor-b-bar-value">10 320 zł</strong></div>
              <div class="rk-labor-legend"><span><i style="background:#25c7d8"></i>stawka bazowa</span><span><i style="background:#ff6a3d"></i>podłoże i izolacja</span><span><i style="background:#f1bf3f"></i>hydraulika i próba</span><span><i style="background:#6e87df"></i>uruchomienie i automatyka</span><span><i style="background:#8aa0ad"></i>transport i inne</span></div>
            </div>
            <div class="rk-labor-status is-warning" id="rk-labor-status"><strong>Oferta B ma niższy znany koszt, ale w ofercie A pozostają 2 pozycje nieustalone.</strong> Zanim wybierzesz cenę, uzupełnij płukanie oraz uruchomienie.</div>
            <p class="rk-labor-tool-note">Wynik jest prostym zestawieniem wpisanych cen robocizny. Nie obejmuje materiałów, podatków, poprawek budowlanych ani pozycji oznaczonych jako „nieustalone”. Kwota „w bazie” nie jest dodawana drugi raz. Wartości startowe są wyłącznie przykładem działania.</p>
          </div>
        </div>

        <aside class="rk-labor-inline-cta" aria-label="Projekt przed wyborem wykonawcy">
          <span class="rk-labor-eyebrow"><b></b> To samo zapytanie dla każdej ekipy</span>
          <h3>Kalkulator policzył ceny zapisane w ofertach. Nadal nie wie, czy obie ekipy wyceniły właściwą liczbę pętli.</h3>
          <p>Najuczciwiej porównasz wykonawców wtedy, gdy każda firma otrzyma ten sam projekt: te same powierzchnie czynne, rozstawy, długości pętli, dobiegi, rozdzielacze i zakres uruchomienia. Niższa stawka może oznaczać po prostu mniej elementów w ofercie.</p>
          <a class="rk-labor-cta-button rk-labor-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt przed wyborem wykonawcy</a>
          <small class="rk-labor-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
        </aside>
      </section>

      <section class="rk-labor-section" id="rk-labor-area">
        <span class="rk-labor-kicker">Dwie różne podstawy rachunku</span>
        <h2>Powierzchnia całkowita czy czynna — od ilu m² liczy się robociznę?</h2>
        <p class="rk-labor-lead">To jeden z najważniejszych punktów oferty. Powierzchnia całkowita podłóg i powierzchnia rzeczywiście ogrzewana nie są tym samym, dlatego identyczna stawka za m² może dać inną kwotę końcową.</p>
        <div class="rk-labor-grid-2">
          <article class="rk-labor-card"><span class="rk-labor-card-number">A</span><h3>Powierzchnia całkowita</h3><p>Obejmuje podłogi objęte zakresem prac, także miejsca, w których nie będzie rury. Może być logiczną podstawą dla izolacji, folii, taśmy lub prac przygotowawczych.</p><h4>Co zapisać w ofercie?</h4><p>Konkretny metraż, pomieszczenia objęte pracą oraz sposób pomiaru wnęk, schodów i powierzchni wyłączonych.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">B</span><h3>Powierzchnia czynna grzewczo</h3><p>To pole, na którym rzeczywiście układane są rury. Nie obejmuje trwałej zabudowy i innych fragmentów świadomie wyłączonych z ogrzewania.</p><h4>Co zapisać w ofercie?</h4><p>Metraż czynny wynikający z rzutu, a nie oszacowany procent powierzchni domu. Do niego trzeba doliczyć rzeczywiste dobiegi pętli.</p></article>
        </div>
        <div class="rk-labor-callout"><p><strong>Przykład:</strong> dom ma 120 m² podłóg i 105 m² powierzchni czynnej. Stawka 70 zł/m² daje odpowiednio 8400 zł albo 7350 zł. Różnica 1050 zł powstaje jeszcze przed sprawdzeniem rozdzielacza, próby i uruchomienia.</p></div>
      </section>

      <section class="rk-labor-section" id="rk-labor-variants">
        <span class="rk-labor-kicker">Taniej nie zawsze znaczy ten sam produkt</span>
        <h2>Samo układanie rur a pełniejszy zakres robocizny</h2>
        <p class="rk-labor-lead">Wycena samego mocowania rur może być całkowicie prawidłowa, jeżeli inwestor lub inna ekipa odpowiada za pozostałe prace. Problem zaczyna się dopiero wtedy, gdy ofertę częściową porównuje się z ofertą obejmującą więcej etapów.</p>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Etap</th><th>Samo układanie rur</th><th>Szerszy zakres robocizny</th><th>Dokument odbiorowy</th></tr></thead>
            <tbody>
              <tr><td data-label="Etap">Ocena przygotowania podłoża</td><td data-label="Samo układanie rur">często po stronie inwestora</td><td data-label="Szerszy zakres robocizny">może być objęta ofertą</td><td data-label="Dokument odbiorowy">ustalenie zakresu i odpowiedzialności</td></tr>
              <tr><td data-label="Etap">Izolacja, folia, taśma</td><td data-label="Samo układanie rur">zwykle poza zakresem</td><td data-label="Szerszy zakres robocizny">w bazie lub jako dopłata</td><td data-label="Dokument odbiorowy">kontrola warstw przed zakryciem</td></tr>
              <tr><td data-label="Etap">Trasowanie i mocowanie rur</td><td data-label="Samo układanie rur">zakres podstawowy</td><td data-label="Szerszy zakres robocizny">zakres podstawowy</td><td data-label="Dokument odbiorowy">zdjęcia i opis pętli</td></tr>
              <tr><td data-label="Etap">Rozdzielacz i podłączenia</td><td data-label="Samo układanie rur">często dodatkowo</td><td data-label="Szerszy zakres robocizny">często w zakresie</td><td data-label="Dokument odbiorowy">opis obwodów</td></tr>
              <tr><td data-label="Etap">Próba szczelności</td><td data-label="Samo układanie rur">do ustalenia</td><td data-label="Szerszy zakres robocizny">powinna być nazwana wprost</td><td data-label="Dokument odbiorowy">protokół próby</td></tr>
              <tr><td data-label="Etap">Napełnienie i odpowietrzenie</td><td data-label="Samo układanie rur">zwykle osobno</td><td data-label="Szerszy zakres robocizny">zależnie od umowy</td><td data-label="Dokument odbiorowy">potwierdzenie wykonania</td></tr>
              <tr><td data-label="Etap">Uruchomienie i nastawy</td><td data-label="Samo układanie rur">poza zakresem</td><td data-label="Szerszy zakres robocizny">nie zawsze w cenie</td><td data-label="Dokument odbiorowy">nastawy lub protokół uruchomienia</td></tr>
            </tbody>
          </table>
        </div>
        <p>Jeżeli potrzebujesz pełnego budżetu z materiałami, zobacz osobno <a href="https://projekt-ogrzewania.pl/ile-kosztuje-100-m%C2%B2-ogrzewania-podlogowego/">koszt ogrzewania podłogowego dla 100 m²</a> oraz <a href="https://projekt-ogrzewania.pl/kompleksowa-wycena-ogrzewania-podlogowego-wodnego-na-co-przygotowac-budzet/">kompleksową wycenę wodnej podłogówki</a>. Ten artykuł celowo pozostaje przy robociźnie.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-components">
        <span class="rk-labor-kicker">Najczęstsze dopłaty</span>
        <h2>Izolacja, rozdzielacz, podłączenia i automatyka — co bywa liczone osobno?</h2>
        <div class="rk-labor-grid-4">
          <article class="rk-labor-card"><span class="rk-labor-card-number">01</span><h3>Izolacja i system mocowania</h3><p>Robocizna zależy od liczby warstw, konieczności docinania oraz rodzaju systemu. Folia z nadrukiem i klipsy nie są tym samym rozwiązaniem co płyta systemowa z wypustkami.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">02</span><h3>Rozdzielacz i szafka</h3><p>Trzeba rozdzielić montaż szafki, osadzenie rozdzielacza, uzbrojenie, podłączenie magistrali i opis obwodów. Sama nazwa „montaż rozdzielacza” może oznaczać różny zakres.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">03</span><h3>Podłączenie każdej pętli</h3><p>Liczba obwodów wpływa na liczbę połączeń i opisów. Nie należy jej automatycznie wyznaczać z powierzchni bez rozkładu pomieszczeń, długości i hydrauliki.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">04</span><h3>Automatyka strefowa</h3><p>Osobnymi etapami mogą być okablowanie, montaż regulatorów, siłowników, listwy, konfiguracja oraz sprawdzenie działania. Cena urządzeń nie jest ceną robocizny.</p></article>
        </div>
        <p>Przed zamówieniem rozdzielacza warto zrozumieć jego rolę w artykule <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacz do podłogówki</a>. Po uruchomieniu przepływy odczytuje się na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach rozdzielacza</a>, ale ich nastawy powinny wynikać z obliczeń, a nie z podzielenia jednego przepływu po równo.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-test">
        <span class="rk-labor-kicker">Trzy osobne czynności</span>
        <h2>Próba szczelności to nie uruchomienie i nie regulacja przepływów</h2>
        <p class="rk-labor-lead">W ofertach te pojęcia bywają łączone w jedno zdanie, choć dotyczą innych momentów i innych rezultatów. Warto wycenić je oddzielnie.</p>
        <div class="rk-labor-grid-3">
          <article class="rk-labor-card"><span class="rk-labor-card-number">P</span><h3>Próba szczelności</h3><p>Ma potwierdzić szczelność wykonanego układu zgodnie z przyjętą procedurą. Powinny być ustalone warunki, czas, medium i forma protokołu.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">N</span><h3>Napełnienie i odpowietrzenie</h3><p>Dotyczy przygotowania instalacji do pracy: płukania, napełnienia właściwym medium i usunięcia powietrza z poszczególnych obwodów.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">R</span><h3>Uruchomienie i równoważenie</h3><p>Obejmuje sprawdzenie działania oraz ustawienie przepływów zgodnie z danymi projektowymi. Każda pętla może wymagać innej wartości.</p></article>
        </div>
        <p>Szczegółową procedurę opisuje artykuł o <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbie szczelności ogrzewania podłogowego</a>. Jeżeli wykonawca wpisuje tylko „próba w cenie”, dopytaj, czy otrzymasz protokół i czy kontrola nastąpi przed zakryciem rur.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-spacing">
        <span class="rk-labor-kicker">Rozstaw wpływa na pracę, ale nie tworzy taryfy</span>
        <h2>Czy rozstaw 10 cm musi kosztować więcej niż 15 cm?</h2>
        <p class="rk-labor-lead">Przy tej samej powierzchni pola grzewczego zmiana rozstawu z 15 na 10 cm zwiększa teoretyczną gęstość rury o około 50%. Nie oznacza to jednak automatycznie wzrostu całej robocizny o 50% ani stałej dopłaty za każdy metr kwadratowy.</p>
        <div class="rk-labor-answer">
          <div class="rk-labor-answer-main"><h3>Co rzeczywiście może wzrosnąć?</h3><p>Ilość mocowań, liczba przejść, długość rury, prawdopodobna liczba obwodów oraz czas pracy przy rozdzielaczu. Wpływ zależy od geometrii pomieszczeń i przyjętego systemu montażu.</p></div>
          <div class="rk-labor-answer-side"><h3>Czego nie wolno zakładać?</h3><p>Że każde źródło ciepła wymaga jednego rozstawu albo że sam rodzaj budynku rozstrzyga układ rur. Rozstaw wynika z obciążenia cieplnego, powierzchni czynnej, parametrów wody i konstrukcji podłogi.</p></div>
        </div>
        <p>Pełne zasady doboru opisujemy w artykule <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur ogrzewania podłogowego 10 czy 15 cm</a>. Do wyceny robocizny wykonawca powinien otrzymać rzeczywisty układ, a nie założenie „wszędzie co 15 cm”.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-complexity">
        <span class="rk-labor-kicker">Co zmienia cenę poza metrażem?</span>
        <h2>Kondygnacje, małe pomieszczenia, logistyka i remont</h2>
        <p class="rk-labor-lead">Dwa domy po 120 m² mogą wymagać innego nakładu pracy. Różnicę tworzy liczba rozdzielaczy, pomieszczeń, drzwi i stref, sposób przygotowania podłoża, dostęp do budowy oraz kolejność robót.</p>
        <div class="rk-labor-grid-3">
          <article class="rk-labor-card"><span class="rk-labor-card-number">1F</span><h3>Jedna zwarta kondygnacja</h3><p>Mniej przenoszenia materiału i zwykle prostsza logistyka. Nadal trzeba uwzględnić oddzielne pomieszczenia, dylatacje i dobiegi.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">2F</span><h3>Kilka kondygnacji</h3><p>Może oznaczać więcej rozdzielaczy, szafek, podejść, transportu pionowego oraz odrębne etapy próby i uruchomienia.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">R</span><h3>Remont istniejącego domu</h3><p>Demontaż, naprawy podłoża, ograniczona wysokość i praca etapami powinny być wycenione osobno. Frezowanie ma inny proces niż nowa podłoga.</p></article>
        </div>
        <p>Dla modernizacji zobacz osobne opracowanie <a href="https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/">frezowanie ogrzewania podłogowego w starym domu</a>. Harmonogram pomaga ocenić artykuł <a href="https://projekt-ogrzewania.pl/ile-trwa-montaz-ogrzewania-podlogowego/">ile trwa montaż podłogówki</a> oraz poradnik <a href="https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/">kiedy planować montaż w nowym domu</a>.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-examples">
        <span class="rk-labor-kicker">Proste przykłady budżetowe</span>
        <h2>Ile może wynieść robocizna podłogówki dla 100, 120 i 150 m²?</h2>
        <p class="rk-labor-lead">Poniższe mnożenie pokazuje wyłącznie skalę kosztu przy dwóch orientacyjnych zakresach stawek. Nie uwzględnia osobnych ryczałtów, różnicy powierzchni czynnej, materiałów ani podatku.</p>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Powierzchnia rozliczeniowa</th><th>Samo układanie rur 40–60 zł/m²</th><th>Szerszy standard 60–90 zł/m²</th><th>Najważniejsza uwaga</th></tr></thead>
            <tbody>
              <tr><td data-label="Powierzchnia rozliczeniowa" class="rk-labor-table-em">100 m²</td><td data-label="Samo układanie rur 40–60 zł/m²">4000–6000 zł</td><td data-label="Szerszy standard 60–90 zł/m²">6000–9000 zł</td><td data-label="Najważniejsza uwaga">Sprawdź, czy to 100 m² całkowitej, czy czynnej.</td></tr>
              <tr><td data-label="Powierzchnia rozliczeniowa" class="rk-labor-table-em">120 m²</td><td data-label="Samo układanie rur 40–60 zł/m²">4800–7200 zł</td><td data-label="Szerszy standard 60–90 zł/m²">7200–10 800 zł</td><td data-label="Najważniejsza uwaga">Rozdzielacz i próba mogą być ryczałtem.</td></tr>
              <tr><td data-label="Powierzchnia rozliczeniowa" class="rk-labor-table-em">150 m²</td><td data-label="Samo układanie rur 40–60 zł/m²">6000–9000 zł</td><td data-label="Szerszy standard 60–90 zł/m²">9000–13 500 zł</td><td data-label="Najważniejsza uwaga">Kilka kondygnacji może zmienić liczbę rozdzielaczy.</td></tr>
            </tbody>
          </table>
        </div>
        <div class="rk-labor-callout is-warm"><p><strong>Nie dodawaj obu kolumn.</strong> Reprezentują dwa różne poziomy zakresu. Własną ofertę policz w porównywarce, wpisując stawkę bazową oraz tylko te dopłaty, które wykonawca wyraźnie wskazał.</p></div>
      </section>

      <section class="rk-labor-section" id="rk-labor-compare">
        <span class="rk-labor-kicker">Najpierw ujednolić, potem porównać</span>
        <h2>Jak porównać dwie oferty na ogrzewanie podłogowe?</h2>
        <div class="rk-labor-steps">
          <article class="rk-labor-step"><h3>Wpisz ten sam zakres budynku</h3><p>Podaj obu wykonawcom identyczne kondygnacje, pomieszczenia, powierzchnię całkowitą oraz rzeczywiście ogrzewaną.</p></article>
          <article class="rk-labor-step"><h3>Dołącz ten sam projekt</h3><p>Porównanie ma sens, gdy obie firmy wyceniają tę samą liczbę pętli, rozdzielaczy, rozstawy i dobiegi.</p></article>
          <article class="rk-labor-step"><h3>Rozbij stawkę bazową</h3><p>Ustal, czy obejmuje izolację, mocowanie rur, podłączenia, montaż rozdzielacza i próbę.</p></article>
          <article class="rk-labor-step"><h3>Oddziel odbiór od uruchomienia</h3><p>Zapisz osobno próbę szczelności, płukanie, napełnienie, odpowietrzenie, regulację i automatykę.</p></article>
          <article class="rk-labor-step"><h3>Ujednolić podatki i terminy</h3><p>Porównaj kwoty netto z netto albo brutto z brutto oraz ten sam termin ważności i realizacji oferty.</p></article>
          <article class="rk-labor-step"><h3>Policz koszt znany i braki</h3><p>Nie wpisuj zera przy pozycji nieustalonej. Zaznacz brak, poproś o doprecyzowanie i dopiero wtedy wybieraj.</p></article>
        </div>
        <p>Osobnym kosztem jest dokumentacja. Wyjaśniamy to w poradniku <a href="https://projekt-ogrzewania.pl/ile-kosztuje-projekt-ogrzewania-podlogowego/">ile kosztuje projekt ogrzewania podłogowego</a>. Cena projektu nie powinna być ukrywana w robociźnie, jeżeli wykonawca jedynie przyjmuje własne założenia na budowie.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-contract">
        <span class="rk-labor-kicker">Do zapytania i umowy</span>
        <h2>Checklista przed podpisaniem umowy z wykonawcą podłogówki</h2>
        <ul class="rk-labor-checklist">
          <li>Adres, zakres kondygnacji i pomieszczeń objętych pracami.</li>
          <li>Powierzchnia całkowita oraz czynna wpisane jako dwie liczby.</li>
          <li>Projekt, według którego wyceniane są rozstawy i długości pętli.</li>
          <li>Liczba szafek, rozdzielaczy, pętli i stref automatyki.</li>
          <li>Jednoznaczna podstawa stawki za m².</li>
          <li>Lista prac zawartych w cenie bazowej.</li>
          <li>Ceny wszystkich dopłat i sposób ich zatwierdzania.</li>
          <li>Informacja, czy podane kwoty są netto, czy brutto.</li>
          <li>Odpowiedzialność za przygotowanie oraz odbiór podłoża.</li>
          <li>Rodzaj systemu mocowania rur i zakres wykonania izolacji.</li>
          <li>Warunki próby szczelności oraz protokół.</li>
          <li>Zakres płukania, napełnienia i odpowietrzenia.</li>
          <li>Zakres uruchomienia, regulacji i zapis nastaw.</li>
          <li>Dokumentacja zdjęciowa przed wykonaniem wylewki.</li>
          <li>Termin, etapy płatności i zasady odbioru.</li>
          <li>Procedura zgłaszania prac dodatkowych i poprawek.</li>
        </ul>
      </section>

      <section class="rk-labor-section" id="rk-labor-errors">
        <span class="rk-labor-kicker">Pułapki w uproszczonych cennikach</span>
        <h2>Najczęstsze błędy przy ocenie ceny robocizny</h2>
        <div class="rk-labor-grid-3">
          <article class="rk-labor-card"><span class="rk-labor-card-number">01</span><h3>Jedna stawka bez zakresu</h3><p>Nie wiadomo, czy obejmuje przygotowanie, rozdzielacz, podłączenia, próbę i uruchomienie.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">02</span><h3>Nieznana powierzchnia</h3><p>Cena za m² nie mówi, czy wykonawca używa całej podłogi, aktywnego pola, czy jeszcze innego pomiaru.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">03</span><h3>Sztywna dopłata za rozstaw</h3><p>Większa gęstość rur wpływa na pracę, lecz nie uzasadnia jednej uniwersalnej dopłaty dla każdego budynku.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">04</span><h3>Próba nazwana uruchomieniem</h3><p>Kontrola szczelności nie zastępuje napełnienia, odpowietrzenia, regulacji przepływów i sprawdzenia sterowania.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">05</span><h3>Równe przepływy dla pętli</h3><p>Obwody mogą przenosić inną moc i mieć inną długość. Nastawy nie powinny wynikać z prostego podziału po równo.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">06</span><h3>Gwarantowana oszczędność</h3><p>Nie da się uczciwie obiecać stałego procentu oszczędności dzięki jednemu elementowi bez danych konkretnej inwestycji.</p></article>
        </div>
        <p>Poza ceną sprawdź również <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstsze błędy montażowe podłogówki</a>. Taniej wykonana instalacja nie jest oszczędnością, jeżeli po wylewce trzeba naprawiać rozmieszczenie rur, połączenia lub hydraulikę.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-faq">
        <span class="rk-labor-kicker">Pytania inwestorów</span>
        <h2>FAQ — cena robocizny ogrzewania podłogowego</h2>
        <div class="rk-labor-faq">
          <details><summary>Ile kosztuje robocizna podłogówki za m² w 2026 roku?</summary><div class="rk-labor-faq-answer"><p>Orientacyjnie samo układanie rur na przygotowanym podłożu może znajdować się w przedziale około 40–60 zł/m², szerszy standard robocizny około 60–90 zł/m², a małe lub złożone zlecenia około 90–120 zł/m² lub więcej. Są to szerokie punkty odniesienia, nie cennik. Zakres, lokalizacja, powierzchnia i sposób rozliczenia mogą istotnie zmienić ofertę.</p></div></details>
          <details><summary>Co obejmuje cena robocizny ogrzewania podłogowego?</summary><div class="rk-labor-faq-answer"><p>Nie ma jednego stałego zakresu. Oferta może obejmować przygotowanie warstw, izolację, mocowanie rur, montaż rozdzielacza, podłączenia pętli, próbę szczelności, napełnienie, uruchomienie i automatykę, ale każdą pozycję trzeba potwierdzić na piśmie.</p></div></details>
          <details><summary>Czy cenę liczy się od powierzchni całkowitej, czy czynnej?</summary><div class="rk-labor-faq-answer"><p>Zależy od rodzaju pracy i umowy. Izolacja może być liczona od powierzchni całkowitej, a układanie rur od powierzchni czynnej. Oferta powinna podawać oba metraże oraz podstawę każdej stawki.</p></div></details>
          <details><summary>Ile kosztuje robocizna podłogówki dla 100 m²?</summary><div class="rk-labor-faq-answer"><p>Przy orientacyjnej stawce 40–60 zł/m² samo układanie rur daje 4000–6000 zł. Przy szerszym standardzie 60–90 zł/m² daje 6000–9000 zł. Do wyniku mogą dojść ryczałty oraz dopłaty, a 100 m² musi być jasno zdefiniowane jako powierzchnia całkowita lub czynna.</p></div></details>
          <details><summary>Czy styropian i folia są w cenie układania podłogówki?</summary><div class="rk-labor-faq-answer"><p>Nie należy tego zakładać. Część ekip wycenia przygotowanie warstw osobno, a część zawiera wybrany zakres w cenie bazowej. Trzeba oddzielić robociznę od materiałów oraz wskazać liczbę warstw i powierzchnię rozliczeniową.</p></div></details>
          <details><summary>Czy montaż rozdzielacza jest w cenie za m²?</summary><div class="rk-labor-faq-answer"><p>Czasem tak, a czasem jest osobną pozycją za sztukę. Warto ustalić, czy chodzi tylko o osadzenie urządzenia, czy także szafkę, uzbrojenie, podłączenie magistrali, podłączenie pętli i ich opis.</p></div></details>
          <details><summary>Czy próba szczelności obejmuje uruchomienie instalacji?</summary><div class="rk-labor-faq-answer"><p>Nie automatycznie. Próba sprawdza szczelność według ustalonej procedury. Napełnienie, odpowietrzenie, uruchomienie, równoważenie przepływów oraz konfiguracja automatyki to osobne czynności.</p></div></details>
          <details><summary>Czy rozstaw rur 10 cm zwiększa cenę robocizny?</summary><div class="rk-labor-faq-answer"><p>Może zwiększyć nakład pracy, ilość mocowań, długość rury i liczbę obwodów. Nie istnieje jednak jedna obowiązkowa dopłata. Wpływ powinien wynikać z konkretnego projektu i geometrii, a nie z samego hasła „rozstaw 10 cm”.</p></div></details>
          <details><summary>Dlaczego tańsza oferta może mieć wyższy koszt końcowy?</summary><div class="rk-labor-faq-answer"><p>Może używać mniejszej powierzchni w nagłówku, ale naliczać rozdzielacz, podłączenia, próbę, transport i uruchomienie osobno. Dlatego porównuje się końcową kwotę znanych pozycji oraz liczbę elementów jeszcze nieustalonych.</p></div></details>
          <details><summary>Czy kalkulator obejmuje materiały i podatek?</summary><div class="rk-labor-faq-answer"><p>Nie. Narzędzie zestawia wpisane ceny robocizny i nie dolicza automatycznie materiałów ani podatku. Kwoty netto i brutto należy ujednolicić przed wpisaniem.</p></div></details>
          <details><summary>Czy projekt podłogówki jest częścią robocizny?</summary><div class="rk-labor-faq-answer"><p>Nie musi nią być. Projekt to odrębna dokumentacja określająca między innymi powierzchnie czynne, rozstawy, trasy, długości, przepływy i nastawy. Ten sam projekt pozwala przesłać wykonawcom porównywalne zapytanie.</p></div></details>
          <details><summary>Jakie dokumenty odebrać po montażu?</summary><div class="rk-labor-faq-answer"><p>Zakres odbioru powinien wynikać z umowy. Przydatne są zdjęcia rur przed zakryciem, opis obwodów, protokół próby, informacje o użytych materiałach oraz zapis danych uruchomienia i nastaw, jeśli były częścią zlecenia.</p></div></details>
        </div>
      </section>

      <section class="rk-labor-section" id="rk-labor-sources">
        <span class="rk-labor-kicker">Metodyka i neutralne źródła</span>
        <h2>Skąd pochodzą założenia i jak czytać widełki cenowe?</h2>
        <div class="rk-labor-sources">
          <strong>Widełki są punktem budżetowym, a dokumenty zewnętrzne opisują metodykę i kontekst</strong>
          <p>Podane przedziały cenowe są redakcyjnym modelem orientacyjnym z datą aktualizacji, a nie stawką wynikającą z normy lub urzędowego cennika. Główny Urząd Statystyczny publikuje <a href="https://stat.gov.pl/obszary-tematyczne/ceny-handel/ceny/ceny-robot-budowlano-montazowych-i-obiektow-budowlanych-pazdziernik-2024-r-,5,153.html" target="_blank" rel="noopener nofollow">wskaźniki cen produkcji budowlano-montażowej</a>, które pomagają śledzić zmianę poziomu cen w czasie, lecz nie wyznaczają detalicznej stawki za montaż podłogówki w konkretnym domu.</p>
          <p>Przy opisie i porównywaniu zakresu pomocne są urzędowe zasady dotyczące <a href="https://www.gov.pl/attachment/ca9d3252-3cc7-4f97-b9cc-da41071c3114" target="_blank" rel="noopener nofollow">przedmiaru i kosztorysowania robót</a>. Techniczny kontekst projektowania wodnego ogrzewania płaszczyznowego opisuje <a href="https://www.iso.org/standard/74684.html" target="_blank" rel="noopener nofollow">ISO 11855-3:2021</a>, a zagadnienia instalacji systemu obejmuje <a href="https://www.iso.org/standard/74686.html" target="_blank" rel="noopener nofollow">ISO 11855-5:2021</a>. Strony norm nie stanowią cenników wykonawczych.</p>
          <p>Własną decyzję opieraj na aktualnych ofertach z Twojej lokalizacji, wystawionych dla tego samego projektu, zakresu, terminu i sposobu rozliczenia.</p>
        </div>
        <div class="rk-labor-update">Ostatnia aktualizacja merytoryczna: 29 sierpnia 2026 r.</div>
      </section>

      <section class="rk-labor-author" id="rk-labor-author" aria-label="Autor opracowania">
        <input type="radio" name="rk-labor-author-tabs" id="rk-labor-author-about" checked>
        <input type="radio" name="rk-labor-author-tabs" id="rk-labor-author-exp">
        <input type="radio" name="rk-labor-author-tabs" id="rk-labor-author-sites">
        <header class="rk-labor-author-head"><div><span class="rk-labor-kicker" style="color:#83f3ff">Autor opracowania</span><h2>Robert Kucharski</h2><p>Projektant instalacji sanitarnych • specjalista HVAC i ogrzewania podłogowego</p></div><span class="rk-labor-author-mark">KOSZT • ZAKRES • HVAC</span></header>
        <div class="rk-labor-author-layout">
          <aside class="rk-labor-author-side">
            <div class="rk-labor-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant ogrzewania podłogowego" width="600" height="600" loading="lazy" decoding="async"></div>
            <div class="rk-labor-author-name">Robert Kucharski</div>
            <div class="rk-labor-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
            <div class="rk-labor-author-social-label">Znajdziesz mnie również:</div>
            <div class="rk-labor-author-social" aria-label="Profile Roberta Kucharskiego w mediach społecznościowych">
              <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener nofollow me" aria-label="Robert Kucharski na LinkedIn" title="LinkedIn"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5.2 7.7H1.6V22h3.6V7.7ZM3.4 2A2.1 2.1 0 1 0 3.4 6.2 2.1 2.1 0 0 0 3.4 2ZM22.4 13.8c0-4.3-2.3-6.3-5.4-6.3a4.7 4.7 0 0 0-4.2 2.3V7.7H9.2V22h3.6v-7.1c0-1.9.4-3.7 2.7-3.7 2.3 0 2.3 2.1 2.3 3.8v7h3.6l1-8.2Z"></path></svg></a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="noopener nofollow me" aria-label="Projekt-Ogrzewania.pl na Facebooku" title="Facebook"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M14.2 22v-9h3l.5-3.5h-3.5V7.3c0-1 .3-1.7 1.8-1.7h1.9V2.5c-.3 0-1.5-.1-2.8-.1-2.8 0-4.7 1.7-4.7 4.8v2.3H7.2V13h3.2v9h3.8Z"></path></svg></a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="noopener nofollow me" aria-label="Projekt HVAC w serwisie X" title="X"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 2H22l-6.8 7.8L23.2 22H17l-4.9-6.4L6.5 22H3.3l7.3-8.4L2.8 2h6.4l4.4 5.8L18.9 2Zm-1.1 17.8h1.7L8.3 4.1H6.5l11.3 15.7Z"></path></svg></a>
            </div>
          </aside>
          <div class="rk-labor-author-main">
            <blockquote class="rk-labor-author-quote"><p>„Cena za metr kwadratowy jest użyteczna dopiero wtedy, gdy wiadomo, od jakiej powierzchni jest liczona i co znajduje się w zakresie. Projekt pozwala wysłać kilku ekipom dokładnie to samo zapytanie, a dopiero wtedy porównujemy wykonawców, nie przypadkowe założenia.”</p></blockquote>
            <div class="rk-labor-author-tabs" role="tablist" aria-label="Informacje o autorze"><label class="rk-labor-author-tab" for="rk-labor-author-about">O autorze</label><label class="rk-labor-author-tab" for="rk-labor-author-exp">Doświadczenie</label><label class="rk-labor-author-tab" for="rk-labor-author-sites">Portale</label></div>
            <div class="rk-labor-author-panel rk-labor-author-panel-about"><p>Projektuję wodne ogrzewanie podłogowe, łącząc obliczenia cieplne z rzeczywistym przebiegiem rur, długościami pętli, przepływami, stratami ciśnienia i nastawami rozdzielaczy. W publikacjach rozdzielam orientacyjny budżet od wiążącej oferty dla konkretnego zakresu.</p><p><a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz profil i pozostałe opracowania autora</a>.</p></div>
            <div class="rk-labor-author-panel rk-labor-author-panel-exp"><p>Dokumentacja projektowa określa powierzchnie czynne, liczbę obwodów, rozstawy i długości. Dzięki temu wykonawcy mogą wyceniać ten sam przedmiot prac, a inwestor widzi, czy różnica ceny wynika ze stawki, czy z pominiętego zakresu.</p></div>
            <div class="rk-labor-author-panel rk-labor-author-panel-sites"><p>Jestem właścicielem trzech serwisów branżowych. Powiązanie portali podaję jawnie, aby czytelnik znał autorstwo i kontekst linkowania.</p><div class="rk-labor-site-links"><a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a><a href="https://remont.biz.pl/" target="_blank" rel="noopener nofollow">Remont.biz.pl</a><a href="https://sobir.pl/" target="_blank" rel="noopener nofollow">Sobir.pl</a></div></div>
          </div>
        </div>
      </section>

      <section class="rk-labor-final-cta" aria-label="Projekt do porównania ofert wykonawców">
        <span class="rk-labor-kicker" style="color:#83f3ff">Jedna dokumentacja dla każdej ekipy</span>
        <h2>Otrzymaj projekt, który przekażesz wykonawcom do wyceny</h2>
        <p>Projekt określi powierzchnie czynne, rozstawy, trasy, długości pętli, dobiegi, przepływy i nastawy. Dzięki temu każda firma wycenia ten sam układ, a Ty możesz porównać zakres, kwotę i odpowiedzialność bez zgadywania.</p>
        <a class="rk-labor-cta-button rk-labor-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt ogrzewania podłogowego</a>
        <small class="rk-labor-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
      </section>
    </main>
  </div>
</article>

<script type="application/ld+json">
{
  "@context":"https://schema.org",
  "@graph":[
    {
      "@type":"TechArticle",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#article",
      "url":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/",
      "headline":"Podłogówka – cena za m² robocizny w 2026 r. Zakres prac i kalkulator",
      "description":"Orientacyjne ceny robocizny ogrzewania podłogowego, szczegółowy zakres prac oraz kalkulator porównujący dwie oferty wykonawców.",
      "inLanguage":"pl-PL",
      "dateModified":"2026-08-29",
      "mainEntityOfPage":{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#webpage"},
      "author":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"},
      "publisher":{"@id":"https://projekt-ogrzewania.pl/#organization"},
      "about":[{"@type":"Thing","name":"Cena robocizny ogrzewania podłogowego"},{"@type":"Thing","name":"Zakres montażu podłogówki"},{"@type":"Thing","name":"Porównywanie ofert wykonawców"}],
      "isPartOf":{"@id":"https://projekt-ogrzewania.pl/#website"}
    },
    {
      "@type":"WebPage",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#webpage",
      "url":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/",
      "name":"Podłogówka – cena za m² robocizny w 2026 r. Zakres prac i kalkulator",
      "description":"Sprawdź orientacyjne poziomy cen robocizny i porównaj dwie oferty według wspólnej powierzchni, liczby pętli, rozdzielaczy oraz zakresu uruchomienia.",
      "inLanguage":"pl-PL",
      "dateModified":"2026-08-29",
      "isPartOf":{"@id":"https://projekt-ogrzewania.pl/#website"},
      "breadcrumb":{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#breadcrumb"},
      "mainEntity":[{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#application"},{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#howto"},{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#faq"}]
    },
    {
      "@type":"BreadcrumbList",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#breadcrumb",
      "itemListElement":[{"@type":"ListItem","position":1,"name":"Strona główna","item":"https://projekt-ogrzewania.pl/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://projekt-ogrzewania.pl/blog/"},{"@type":"ListItem","position":3,"name":"Cena robocizny podłogówki","item":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/"}]
    },
    {
      "@type":"WebApplication",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#application",
      "name":"Kalkulator robocizny i porównywarka ofert podłogówki",
      "url":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#rk-labor-calculator",
      "applicationCategory":"FinanceApplication",
      "operatingSystem":"Dowolny system z przeglądarką internetową",
      "browserRequirements":"Obsługa JavaScript",
      "inLanguage":"pl-PL",
      "isAccessibleForFree":true,
      "author":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"},
      "description":"Narzędzie porównuje dwie oferty robocizny według powierzchni całkowitej i czynnej, stawki bazowej, rozdzielaczy, pętli, próby szczelności, uruchomienia, automatyki i pozostałych dopłat."
    },
    {
      "@type":"HowTo",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#howto",
      "name":"Jak porównać dwie oferty na wykonanie ogrzewania podłogowego?",
      "description":"Sześć kroków ujednolicenia zakresu i porównania kosztów robocizny podłogówki.",
      "inLanguage":"pl-PL",
      "step":[
        {"@type":"HowToStep","position":1,"name":"Wpisz ten sam zakres budynku","text":"Podaj obu wykonawcom identyczne kondygnacje, pomieszczenia, powierzchnię całkowitą oraz powierzchnię czynną."},
        {"@type":"HowToStep","position":2,"name":"Dołącz ten sam projekt","text":"Przekaż obu firmom tę samą liczbę pętli, rozdzielaczy, rozstawy i przebieg dobiegów."},
        {"@type":"HowToStep","position":3,"name":"Rozbij stawkę bazową","text":"Ustal, które prace obejmuje cena za metr kwadratowy, a które są dopłatą."},
        {"@type":"HowToStep","position":4,"name":"Oddziel próbę od uruchomienia","text":"Zapisz osobno próbę szczelności, napełnienie, odpowietrzenie, regulację oraz automatykę."},
        {"@type":"HowToStep","position":5,"name":"Ujednolić podatki i terminy","text":"Porównaj kwoty przedstawione w tym samym ujęciu podatkowym i dla tego samego terminu realizacji."},
        {"@type":"HowToStep","position":6,"name":"Policz koszty i braki","text":"Zsumuj znane pozycje i przed wyborem wykonawcy wyjaśnij wszystkie elementy oznaczone jako nieustalone."}
      ]
    },
    {
      "@type":"FAQPage",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#faq",
      "inLanguage":"pl-PL",
      "mainEntity":[
        {"@type":"Question","name":"Ile kosztuje robocizna podłogówki za m² w 2026 roku?","acceptedAnswer":{"@type":"Answer","text":"Orientacyjnie samo układanie rur na przygotowanym podłożu może znajdować się w przedziale około 40–60 zł/m², szerszy standard robocizny około 60–90 zł/m², a małe lub złożone zlecenia około 90–120 zł/m² lub więcej. Są to szerokie punkty odniesienia, nie cennik."}},
        {"@type":"Question","name":"Co obejmuje cena robocizny ogrzewania podłogowego?","acceptedAnswer":{"@type":"Answer","text":"Nie ma jednego stałego zakresu. Oferta może obejmować przygotowanie warstw, izolację, mocowanie rur, montaż rozdzielacza, podłączenia pętli, próbę szczelności, napełnienie, uruchomienie i automatykę, ale każdą pozycję trzeba potwierdzić na piśmie."}},
        {"@type":"Question","name":"Czy cenę liczy się od powierzchni całkowitej, czy czynnej?","acceptedAnswer":{"@type":"Answer","text":"Zależy od rodzaju pracy i umowy. Izolacja może być liczona od powierzchni całkowitej, a układanie rur od powierzchni czynnej. Oferta powinna podawać oba metraże oraz podstawę każdej stawki."}},
        {"@type":"Question","name":"Ile kosztuje robocizna podłogówki dla 100 m²?","acceptedAnswer":{"@type":"Answer","text":"Przy orientacyjnej stawce 40–60 zł/m² samo układanie rur daje 4000–6000 zł. Przy szerszym standardzie 60–90 zł/m² daje 6000–9000 zł. Do wyniku mogą dojść ryczałty oraz dopłaty."}},
        {"@type":"Question","name":"Czy styropian i folia są w cenie układania podłogówki?","acceptedAnswer":{"@type":"Answer","text":"Nie należy tego zakładać. Część ekip wycenia przygotowanie warstw osobno, a część zawiera wybrany zakres w cenie bazowej. Trzeba oddzielić robociznę od materiałów."}},
        {"@type":"Question","name":"Czy montaż rozdzielacza jest w cenie za m²?","acceptedAnswer":{"@type":"Answer","text":"Czasem tak, a czasem jest osobną pozycją za sztukę. Warto ustalić, czy chodzi tylko o osadzenie urządzenia, czy także szafkę, uzbrojenie, podłączenie magistrali, podłączenie pętli i ich opis."}},
        {"@type":"Question","name":"Czy próba szczelności obejmuje uruchomienie instalacji?","acceptedAnswer":{"@type":"Answer","text":"Nie automatycznie. Próba sprawdza szczelność. Napełnienie, odpowietrzenie, uruchomienie, równoważenie przepływów oraz konfiguracja automatyki to osobne czynności."}},
        {"@type":"Question","name":"Czy rozstaw rur 10 cm zwiększa cenę robocizny?","acceptedAnswer":{"@type":"Answer","text":"Może zwiększyć nakład pracy, ilość mocowań, długość rury i liczbę obwodów. Nie istnieje jednak jedna obowiązkowa dopłata. Wpływ powinien wynikać z konkretnego projektu i geometrii."}},
        {"@type":"Question","name":"Dlaczego tańsza oferta może mieć wyższy koszt końcowy?","acceptedAnswer":{"@type":"Answer","text":"Może naliczać rozdzielacz, podłączenia, próbę, transport i uruchomienie osobno. Dlatego porównuje się końcową kwotę znanych pozycji oraz liczbę elementów jeszcze nieustalonych."}},
        {"@type":"Question","name":"Czy kalkulator obejmuje materiały i podatek?","acceptedAnswer":{"@type":"Answer","text":"Nie. Narzędzie zestawia wpisane ceny robocizny i nie dolicza automatycznie materiałów ani podatku. Kwoty netto i brutto należy ujednolicić przed wpisaniem."}},
        {"@type":"Question","name":"Czy projekt podłogówki jest częścią robocizny?","acceptedAnswer":{"@type":"Answer","text":"Nie musi nią być. Projekt to odrębna dokumentacja określająca między innymi powierzchnie czynne, rozstawy, trasy, długości, przepływy i nastawy."}},
        {"@type":"Question","name":"Jakie dokumenty odebrać po montażu?","acceptedAnswer":{"@type":"Answer","text":"Zakres odbioru powinien wynikać z umowy. Przydatne są zdjęcia rur przed zakryciem, opis obwodów, protokół próby, informacje o użytych materiałach oraz zapis danych uruchomienia i nastaw, jeśli były częścią zlecenia."}}
      ]
    },
    {
      "@type":"Person",
      "@id":"https://projekt-ogrzewania.pl/#robert-kucharski",
      "name":"Robert Kucharski",
      "url":"https://projekt-ogrzewania.pl/author/admin3399/",
      "jobTitle":"Projektant instalacji sanitarnych, specjalista HVAC i ogrzewania podłogowego",
      "worksFor":{"@id":"https://projekt-ogrzewania.pl/#organization"},
      "affiliation":[{"@id":"https://projekt-ogrzewania.pl/#organization"},{"@id":"https://remont.biz.pl/#organization"},{"@id":"https://sobir.pl/#organization"}],
      "sameAs":["https://www.linkedin.com/in/robert-kucharski-38069b48/","https://www.facebook.com/projektogrzewaniapl","https://x.com/Projekt_HVAC"]
    },
    {"@type":"Organization","@id":"https://projekt-ogrzewania.pl/#organization","name":"Projekt-Ogrzewania.pl","url":"https://projekt-ogrzewania.pl/","founder":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"}},
    {"@type":"Organization","@id":"https://remont.biz.pl/#organization","name":"Remont.biz.pl","url":"https://remont.biz.pl/","founder":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"}},
    {"@type":"Organization","@id":"https://sobir.pl/#organization","name":"Sobir.pl","url":"https://sobir.pl/","founder":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"}},
    {"@type":"WebSite","@id":"https://projekt-ogrzewania.pl/#website","url":"https://projekt-ogrzewania.pl/","name":"Projekt-Ogrzewania.pl","inLanguage":"pl-PL","publisher":{"@id":"https://projekt-ogrzewania.pl/#organization"}}
  ]
}
</script>

<script>
(function(){
  "use strict";
  var root=document.getElementById("rk-labor-guide");
  if(!root){return;}

  var keys=["insulation","manifold","loops","test","flush","start","controls","transport","other"];
  var labels={insulation:"izolacja i przygotowanie",manifold:"montaż rozdzielacza",loops:"podłączenie pętli",test:"próba z protokołem",flush:"płukanie i napełnienie",start:"uruchomienie i regulacja",controls:"automatyka strefowa",transport:"transport i logistyka",other:"inne prace"};
  var formControls=root.querySelectorAll("#rk-labor-calculator input, #rk-labor-calculator select");
  var defaults=[];
  var i=0;
  for(i=0;i<formControls.length;i+=1){
    defaults.push({element:formControls[i],value:formControls[i].value});
  }

  function numberValue(id){
    var element=root.querySelector("#"+id);
    if(!element){return 0;}
    var value=parseFloat(String(element.value).replace(",","."));
    if(!isFinite(value)){return 0;}
    return value;
  }

  function integerValue(id){
    var value=Math.round(numberValue(id));
    if(value<0){return 0;}
    return value;
  }

  function textValue(id){
    var element=root.querySelector("#"+id);
    if(!element){return "";}
    return element.value;
  }

  function money(value){
    try{return value.toLocaleString("pl-PL",{minimumFractionDigits:0,maximumFractionDigits:0})+" zł";}
    catch(error){return Math.round(value)+" zł";}
  }

  function rate(value){
    try{return value.toLocaleString("pl-PL",{minimumFractionDigits:2,maximumFractionDigits:2})+" zł/m²";}
    catch(error){return value.toFixed(2).replace(".",",")+" zł/m²";}
  }

  function decimal(value,digits,suffix){
    try{return value.toLocaleString("pl-PL",{minimumFractionDigits:digits,maximumFractionDigits:digits})+suffix;}
    catch(error){return value.toFixed(digits).replace(".",",")+suffix;}
  }

  function setText(id,value){
    var element=root.querySelector("#"+id);
    if(element){element.textContent=value;}
  }

  function quantity(key,data){
    if(key==="insulation"){return data.totalArea;}
    if(key==="manifold"){return data.manifolds;}
    if(key==="loops"){return data.loops;}
    if(key==="controls"){return data.zones;}
    return 1;
  }

  function syncPriceFields(code){
    var index=0;
    for(index=0;index<keys.length;index+=1){
      var key=keys[index];
      var select=root.querySelector("#rk-labor-"+code+"-"+key+"-status");
      var priceInput=root.querySelector("#rk-labor-"+code+"-"+key+"-price");
      if(select){
        if(priceInput){priceInput.disabled=select.value!=="extra";}
      }
    }
  }

  function offerResult(code,data){
    var basis=textValue("rk-labor-"+code+"-basis");
    var billingArea=data.activeArea;
    if(basis==="total"){billingArea=data.totalArea;}
    var result={base:numberValue("rk-labor-"+code+"-base")*billingArea,floor:0,hydraulic:0,control:0,other:0,unknown:0,unknownNames:[]};
    var index=0;
    for(index=0;index<keys.length;index+=1){
      var key=keys[index];
      var status=textValue("rk-labor-"+code+"-"+key+"-status");
      if(status==="unknown"){
        result.unknown+=1;
        result.unknownNames.push(labels[key]);
      }
      if(status==="extra"){
        var itemCost=numberValue("rk-labor-"+code+"-"+key+"-price")*quantity(key,data);
        if(key==="insulation"){result.floor+=itemCost;}
        if(key==="manifold"){result.hydraulic+=itemCost;}
        if(key==="loops"){result.hydraulic+=itemCost;}
        if(key==="test"){result.hydraulic+=itemCost;}
        if(key==="flush"){result.hydraulic+=itemCost;}
        if(key==="start"){result.control+=itemCost;}
        if(key==="controls"){result.control+=itemCost;}
        if(key==="transport"){result.other+=itemCost;}
        if(key==="other"){result.other+=itemCost;}
      }
    }
    result.total=result.base+result.floor+result.hydraulic+result.control+result.other;
    return result;
  }

  function setSegment(code,name,value,scale){
    var element=root.querySelector("#rk-labor-"+code+"-bar-"+name);
    if(!element){return;}
    var width=0;
    if(scale>0){width=value/scale*100;}
    element.style.width=Math.max(0,Math.min(100,width))+"%";
  }

  function unknownText(result){
    if(result.unknown===0){return "brak";}
    return result.unknownNames.join(", ");
  }

  function calculate(){
    syncPriceFields("a");
    syncPriceFields("b");
    var data={
      totalArea:numberValue("rk-labor-total-area"),
      activeArea:numberValue("rk-labor-active-area"),
      manifolds:integerValue("rk-labor-manifolds"),
      loops:integerValue("rk-labor-loops"),
      zones:integerValue("rk-labor-zones")
    };
    var valid=true;
    if(data.totalArea<=0){valid=false;}
    if(data.activeArea<=0){valid=false;}
    if(data.activeArea>data.totalArea){valid=false;}
    if(data.manifolds<1){valid=false;}
    if(data.loops<1){valid=false;}
    var status=root.querySelector("#rk-labor-status");
    if(!valid){
      status.className="rk-labor-status is-warning";
      status.innerHTML="<strong>Sprawdź wspólne dane budynku.</strong> Powierzchnie muszą być dodatnie, powierzchnia czynna nie może przekraczać całkowitej, a instalacja musi mieć co najmniej jeden rozdzielacz i jedną pętlę.";
      return;
    }

    var a=offerResult("a",data);
    var b=offerResult("b",data);
    var difference=Math.abs(a.total-b.total);
    setText("rk-labor-a-total",money(a.total));
    setText("rk-labor-b-total",money(b.total));
    setText("rk-labor-a-meter",rate(a.total/data.totalArea));
    setText("rk-labor-b-meter",rate(b.total/data.totalArea));
    setText("rk-labor-difference",money(difference));
    setText("rk-labor-a-unknown",String(a.unknown));
    setText("rk-labor-b-unknown",String(b.unknown));
    setText("rk-labor-area-difference",decimal(data.totalArea-data.activeArea,0," m²"));
    setText("rk-labor-a-bar-value",money(a.total));
    setText("rk-labor-b-bar-value",money(b.total));

    var scale=Math.max(a.total,b.total);
    setSegment("a","base",a.base,scale);
    setSegment("a","floor",a.floor,scale);
    setSegment("a","hydraulic",a.hydraulic,scale);
    setSegment("a","control",a.control,scale);
    setSegment("a","other",a.other,scale);
    setSegment("b","base",b.base,scale);
    setSegment("b","floor",b.floor,scale);
    setSegment("b","hydraulic",b.hydraulic,scale);
    setSegment("b","control",b.control,scale);
    setSegment("b","other",b.other,scale);

    var lead="Obie oferty mają taki sam znany koszt.";
    if(a.total<b.total){lead="Oferta A ma niższy znany koszt o "+money(difference)+".";}
    if(b.total<a.total){lead="Oferta B ma niższy znany koszt o "+money(difference)+".";}
    if(a.unknown===0){
      if(b.unknown===0){
        status.className="rk-labor-status";
        status.innerHTML="<strong>"+lead+"</strong> Według zaznaczeń obie oferty mają ustalony zakres wszystkich dziewięciu pozycji. Nadal sprawdź materiały, podatki, warunki odbioru i zgodność z projektem.";
        return;
      }
    }
    status.className="rk-labor-status is-warning";
    status.innerHTML="<strong>"+lead+" Nie traktuj tego jeszcze jako pełnego porównania.</strong> Nieustalone w A: "+unknownText(a)+". Nieustalone w B: "+unknownText(b)+".";
  }

  function reset(){
    var index=0;
    for(index=0;index<defaults.length;index+=1){
      defaults[index].element.value=defaults[index].value;
    }
    calculate();
  }

  var calculateButton=root.querySelector("#rk-labor-calculate");
  var resetButton=root.querySelector("#rk-labor-reset");
  if(calculateButton){calculateButton.addEventListener("click",calculate);}
  if(resetButton){resetButton.addEventListener("click",reset);}
  root.addEventListener("input",function(event){
    var target=event.target;
    if(!target){return;}
    if(target.tagName==="INPUT"){calculate();}
  });
  root.addEventListener("change",function(event){
    var target=event.target;
    if(!target){return;}
    if(target.tagName==="SELECT"){calculate();}
  });

  function updateProgress(){
    var progress=root.querySelector("#rk-labor-progress");
    if(!progress){return;}
    var rect=root.getBoundingClientRect();
    var distance=root.offsetHeight-window.innerHeight;
    var passed=-rect.top;
    if(passed<0){passed=0;}
    if(passed>distance){passed=distance;}
    var percent=0;
    if(distance>0){percent=passed/distance*100;}
    progress.style.width=Math.max(0,Math.min(100,percent))+"%";
  }

  window.addEventListener("scroll",updateProgress,{passive:true});
  window.addEventListener("resize",updateProgress);
  calculate();
  updateProgress();
})();
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/">Podłogówka cena za m² robocizny.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
