<?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>Fri, 18 Sep 2026 07:36:55 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</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[
<style>

  #rk-savings-guide {
    --rk-savings-navy: #123247;
    --rk-savings-navy-deep: #0b2536;
    --rk-savings-teal: #0e7787;
    --rk-savings-cyan: #5fdef0;
    --rk-savings-orange: #ff7a21;
    --rk-savings-green: #248c68;
    --rk-savings-red: #c64b48;
    --rk-savings-amber: #b77812;
    --rk-savings-ink: #173246;
    --rk-savings-muted: #5d7180;
    --rk-savings-line: #d7e1e7;
    --rk-savings-soft: #f3f7f9;
    --rk-savings-white: #ffffff;
    --rk-savings-shadow: 0 18px 48px rgba(13, 43, 60, 0.12);
    color: var(--rk-savings-ink);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    font-size: 18px;
    line-height: 1.72;
    overflow-x: hidden;
  }

  #rk-savings-guide,
  #rk-savings-guide *,
  #rk-savings-guide *::before,
  #rk-savings-guide *::after {
    box-sizing: border-box;
  }

  #rk-savings-guide .rk-savings-shell {
    width: min(1240px, 100%);
    margin: 0 auto;
  }

  #rk-savings-guide a {
    color: #087a9f;
    text-decoration-thickness: 1.5px;
    text-underline-offset: 3px;
    overflow-wrap: anywhere;
  }

  #rk-savings-guide a:hover {
    color: #055d79;
  }

  #rk-savings-guide p,
  #rk-savings-guide ul,
  #rk-savings-guide ol {
    margin: 0 0 1.1rem;
  }

  #rk-savings-guide strong {
    color: inherit;
  }

  #rk-savings-guide .rk-savings-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(42px, 6vw, 78px);
    border-radius: 32px;
    background:
      radial-gradient(circle at 90% 112%, rgba(95, 222, 240, 0.16) 0 150px, transparent 151px),
      radial-gradient(circle at 90% 112%, transparent 0 205px, rgba(95, 222, 240, 0.09) 206px 275px, transparent 276px),
      linear-gradient(115deg, #122f43 0%, #123c4f 56%, #0d5b63 100%);
    color: #ffffff;
    box-shadow: var(--rk-savings-shadow);
  }

  #rk-savings-guide .rk-savings-hero::before {
    content: "";
    position: absolute;
    z-index: -1;
    left: -120px;
    bottom: -180px;
    width: 440px;
    height: 440px;
    border-radius: 50%;
    background: rgba(255, 122, 33, 0.10);
    filter: blur(2px);
  }

  #rk-savings-guide .rk-savings-hero-inner {
    position: relative;
    z-index: 1;
  }

  #rk-savings-guide .rk-savings-kicker,
  #rk-savings-guide .rk-savings-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 18px;
    color: var(--rk-savings-orange);
    font-size: 0.78rem;
    font-weight: 850;
    letter-spacing: 0.13em;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-savings-guide .rk-savings-kicker::before,
  #rk-savings-guide .rk-savings-eyebrow::before {
    content: "";
    flex: 0 0 9px;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: currentColor;
  }

  #rk-savings-guide .rk-savings-hero-title {
    max-width: 1110px;
    margin: 0;
    color: #ffffff;
    font-size: clamp(2.55rem, 6.1vw, 5.2rem);
    font-weight: 900;
    letter-spacing: -0.055em;
    line-height: 0.98;
    text-wrap: balance;
  }

  #rk-savings-guide .rk-savings-hero-title span {
    color: var(--rk-savings-cyan);
  }

  #rk-savings-guide .rk-savings-hero-lead {
    max-width: 1050px;
    margin: 30px 0 0;
    color: #eef9fc;
    font-size: clamp(1.05rem, 2vw, 1.34rem);
    line-height: 1.62;
  }

  #rk-savings-guide .rk-savings-hero-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 11px;
    margin: 28px 0 0;
  }

  #rk-savings-guide .rk-savings-hero-tag {
    display: inline-flex;
    align-items: center;
    min-height: 42px;
    padding: 8px 17px;
    border: 1px solid rgba(255, 255, 255, 0.26);
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 0.84rem;
    font-weight: 800;
    line-height: 1.3;
  }

  #rk-savings-guide .rk-savings-byline {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 24px;
    margin: 34px 0 0;
    color: #e5f0f4;
    font-size: 0.85rem;
    font-weight: 700;
  }

  #rk-savings-guide .rk-savings-hero-metrics {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
    margin-top: 38px;
  }

  #rk-savings-guide .rk-savings-hero-metric {
    min-width: 0;
    padding: 22px 24px;
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 19px;
    background: rgba(255, 255, 255, 0.08);
    color: #eff9fb;
    backdrop-filter: blur(5px);
  }

  #rk-savings-guide .rk-savings-hero-metric b {
    display: block;
    margin-bottom: 7px;
    color: #ffffff;
    font-size: 1.02rem;
    line-height: 1.3;
  }

  #rk-savings-guide .rk-savings-hero-metric span {
    display: block;
    color: #e2f1f5;
    font-size: 0.88rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-shortcuts {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin: 24px 0;
    padding: 22px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 22px;
    background: #ffffff;
    box-shadow: 0 10px 30px rgba(18, 50, 71, 0.07);
  }

  #rk-savings-guide .rk-savings-shortcuts-label {
    display: block;
    flex-basis: 100%;
    color: var(--rk-savings-navy);
    font-size: 0.8rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-savings-guide .rk-savings-shortcuts a {
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    padding: 7px 13px;
    border: 1px solid #cbd9e1;
    border-radius: 999px;
    background: var(--rk-savings-soft);
    color: var(--rk-savings-navy);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    text-decoration: none;
  }

  #rk-savings-guide .rk-savings-shortcuts a:hover {
    border-color: var(--rk-savings-teal);
    background: #e8f6f8;
    color: #075f6b;
  }

  #rk-savings-guide .rk-savings-section,
  #rk-savings-guide .rk-savings-author {
    margin: 24px 0;
    padding: clamp(30px, 5vw, 62px);
    border: 1px solid var(--rk-savings-line);
    border-radius: 28px;
    background: #ffffff;
    box-shadow: 0 14px 42px rgba(18, 50, 71, 0.07);
    scroll-margin-top: 28px;
  }

  #rk-savings-guide .rk-savings-section-soft {
    background: var(--rk-savings-soft);
  }

  #rk-savings-guide .rk-savings-section-dark {
    border-color: #234c61;
    background:
      radial-gradient(circle at 105% 100%, rgba(95, 222, 240, 0.12) 0 190px, transparent 191px),
      linear-gradient(135deg, #102d40, #0e4854);
    color: #eff8fb;
  }

  #rk-savings-guide .rk-savings-section-dark .rk-savings-section-title,
  #rk-savings-guide .rk-savings-section-dark h3,
  #rk-savings-guide .rk-savings-section-dark strong {
    color: #ffffff;
  }

  #rk-savings-guide .rk-savings-section-dark .rk-savings-lead,
  #rk-savings-guide .rk-savings-section-dark p,
  #rk-savings-guide .rk-savings-section-dark li {
    color: #e3f0f4;
  }

  #rk-savings-guide .rk-savings-section-title,
  #rk-savings-guide .rk-savings-author-title {
    max-width: 1010px;
    margin: 0 0 18px;
    color: var(--rk-savings-navy);
    font-size: clamp(1.8rem, 3.7vw, 3.05rem);
    font-weight: 900;
    letter-spacing: -0.035em;
    line-height: 1.12;
    text-wrap: balance;
  }

  #rk-savings-guide .rk-savings-lead {
    max-width: 1040px;
    color: #314c5e;
    font-size: 1.08rem;
    line-height: 1.75;
  }

  #rk-savings-guide .rk-savings-answer {
    margin: 24px 0;
    padding: 26px 28px;
    border-left: 6px solid var(--rk-savings-cyan);
    border-radius: 8px 20px 20px 8px;
    background: var(--rk-savings-navy);
    color: #ffffff;
  }

  #rk-savings-guide .rk-savings-answer-label {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-savings-cyan);
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  #rk-savings-guide .rk-savings-answer p {
    margin: 0;
    color: #ffffff;
    font-size: 1.06rem;
  }

  #rk-savings-guide .rk-savings-grid-2,
  #rk-savings-guide .rk-savings-grid-3,
  #rk-savings-guide .rk-savings-grid-4 {
    display: grid;
    gap: 18px;
    margin: 24px 0;
  }

  #rk-savings-guide .rk-savings-grid-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  #rk-savings-guide .rk-savings-grid-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-savings-guide .rk-savings-grid-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  #rk-savings-guide .rk-savings-card {
    min-width: 0;
    padding: 23px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 20px;
    background: #ffffff;
    color: var(--rk-savings-ink);
  }

  #rk-savings-guide .rk-savings-card h3 {
    margin: 0 0 10px;
    color: var(--rk-savings-navy);
    font-size: 1.06rem;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-card p,
  #rk-savings-guide .rk-savings-card li {
    color: #3e5869;
    font-size: 0.92rem;
    line-height: 1.65;
  }

  #rk-savings-guide .rk-savings-card p:last-child,
  #rk-savings-guide .rk-savings-card ul:last-child {
    margin-bottom: 0;
  }

  #rk-savings-guide .rk-savings-card-number {
    display: inline-grid;
    place-items: center;
    width: 36px;
    height: 36px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: #dff8fb;
    color: #086678;
    font-size: 0.85rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-callout,
  #rk-savings-guide .rk-savings-note,
  #rk-savings-guide .rk-savings-warning {
    margin: 24px 0 0;
    padding: 20px 22px;
    border-radius: 16px;
    color: #274657;
    font-size: 0.94rem;
    line-height: 1.68;
  }

  #rk-savings-guide .rk-savings-callout {
    border: 1px solid #b9e7ed;
    background: #eaf9fb;
  }

  #rk-savings-guide .rk-savings-note {
    border: 1px solid #d7e1e7;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-warning {
    border: 1px solid #efd0a1;
    background: #fff6e9;
  }

  #rk-savings-guide .rk-savings-tool {
    overflow: hidden;
    margin: 28px 0 0;
    border: 1px solid #aacbd2;
    border-radius: 26px;
    background: #ffffff;
    box-shadow: 0 18px 46px rgba(15, 66, 78, 0.12);
  }

  #rk-savings-guide .rk-savings-tool-head {
    padding: 28px clamp(22px, 4vw, 40px);
    background: linear-gradient(125deg, var(--rk-savings-navy), #0d5962);
    color: #ffffff;
  }

  #rk-savings-guide .rk-savings-tool-head .rk-savings-eyebrow {
    color: #ffad73;
  }

  #rk-savings-guide .rk-savings-tool-head h3 {
    margin: 0 0 10px;
    color: #ffffff;
    font-size: clamp(1.35rem, 3vw, 2.05rem);
    line-height: 1.2;
  }

  #rk-savings-guide .rk-savings-tool-head p {
    max-width: 920px;
    margin: 0;
    color: #e9f7fa;
    font-size: 0.94rem;
  }

  #rk-savings-guide .rk-savings-tool-body {
    padding: clamp(22px, 4vw, 40px);
  }

  #rk-savings-guide .rk-savings-control-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    margin-bottom: 22px;
  }

  #rk-savings-guide .rk-savings-control {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 18px;
    background: var(--rk-savings-soft);
  }

  #rk-savings-guide .rk-savings-control-label {
    display: block;
    margin-bottom: 11px;
    color: var(--rk-savings-navy);
    font-size: 0.84rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-segmented {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }

  #rk-savings-guide .rk-savings-segmented button {
    min-width: 0;
    min-height: 48px;
    padding: 9px 12px;
    border: 1px solid #bfd0d9;
    border-radius: 13px;
    background: #ffffff;
    color: var(--rk-savings-navy);
    font: inherit;
    font-size: 0.84rem;
    font-weight: 850;
    line-height: 1.25;
    cursor: pointer;
    transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease, transform 0.18s ease;
  }

  #rk-savings-guide .rk-savings-segmented button:hover {
    transform: translateY(-1px);
    border-color: var(--rk-savings-teal);
  }

  #rk-savings-guide .rk-savings-segmented button[aria-pressed="true"] {
    border-color: var(--rk-savings-navy);
    background: var(--rk-savings-navy);
    color: #ffffff;
    box-shadow: 0 8px 18px rgba(18, 50, 71, 0.18);
  }

  #rk-savings-guide .rk-savings-state-summary {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 16px;
    align-items: center;
    margin: 0 0 22px;
    padding: 20px;
    border: 1px solid #b9e7ed;
    border-radius: 18px;
    background: #eaf9fb;
  }

  #rk-savings-guide .rk-savings-state-dot {
    display: grid;
    place-items: center;
    width: 50px;
    height: 50px;
    border-radius: 50%;
    background: var(--rk-savings-green);
    color: #ffffff;
    font-size: 1.25rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-state-summary[data-flow="closed"] {
    border-color: #e5c4c2;
    background: #fff1f0;
  }

  #rk-savings-guide .rk-savings-state-summary[data-flow="closed"] .rk-savings-state-dot {
    background: var(--rk-savings-red);
  }

  #rk-savings-guide .rk-savings-state-summary strong {
    display: block;
    margin-bottom: 2px;
    color: var(--rk-savings-navy);
    font-size: 1.05rem;
  }

  #rk-savings-guide .rk-savings-state-summary p {
    margin: 0;
    color: #405c6d;
    font-size: 0.91rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-flow-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
  }

  #rk-savings-guide .rk-savings-flow-step {
    position: relative;
    min-width: 0;
    padding: 22px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 20px;
    background: #ffffff;
    color: var(--rk-savings-ink);
    transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
  }

  #rk-savings-guide .rk-savings-flow-step.is-active {
    border-color: #64c7d2;
    box-shadow: 0 12px 28px rgba(14, 119, 135, 0.13);
    transform: translateY(-2px);
  }

  #rk-savings-guide .rk-savings-flow-step.is-rest {
    background: #f7f9fa;
  }

  #rk-savings-guide .rk-savings-flow-top {
    display: flex;
    gap: 13px;
    align-items: center;
    margin-bottom: 14px;
  }

  #rk-savings-guide .rk-savings-flow-icon {
    display: grid;
    flex: 0 0 52px;
    place-items: center;
    width: 52px;
    height: 52px;
    border-radius: 16px;
    background: #e6f7f9;
    color: #087083;
  }

  #rk-savings-guide .rk-savings-flow-icon svg {
    width: 29px;
    height: 29px;
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 1.8;
  }

  #rk-savings-guide .rk-savings-flow-number {
    display: block;
    color: var(--rk-savings-orange);
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-savings-guide .rk-savings-flow-step h4 {
    margin: 2px 0 0;
    color: var(--rk-savings-navy);
    font-size: 1rem;
    line-height: 1.25;
  }

  #rk-savings-guide .rk-savings-flow-value {
    display: inline-flex;
    align-items: center;
    min-height: 31px;
    margin-bottom: 10px;
    padding: 5px 11px;
    border-radius: 999px;
    background: #dff6e9;
    color: #176a4e;
    font-size: 0.77rem;
    font-weight: 900;
    line-height: 1.2;
  }

  #rk-savings-guide .rk-savings-flow-value.is-off {
    background: #eef1f3;
    color: #5c6e79;
  }

  #rk-savings-guide .rk-savings-flow-value.is-closed {
    background: #fde7e6;
    color: #9c3936;
  }

  #rk-savings-guide .rk-savings-flow-copy {
    margin: 0;
    color: #405b6c;
    font-size: 0.87rem;
    line-height: 1.6;
  }

  #rk-savings-guide .rk-savings-tool-disclaimer {
    margin: 22px 0 0;
    padding: 17px 19px;
    border: 1px solid #efd0a1;
    border-radius: 15px;
    background: #fff6e9;
    color: #5f4a2c;
    font-size: 0.86rem;
    line-height: 1.6;
  }

  #rk-savings-guide .rk-savings-compare-table,
  #rk-savings-guide .rk-savings-diagnostic-table {
    overflow: hidden;
    margin: 24px 0;
    border: 1px solid var(--rk-savings-line);
    border-radius: 20px;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-table-row {
    display: grid;
    grid-template-columns: minmax(150px, 0.8fr) repeat(2, minmax(0, 1fr));
    border-top: 1px solid var(--rk-savings-line);
  }

  #rk-savings-guide .rk-savings-table-row:first-child {
    border-top: 0;
  }

  #rk-savings-guide .rk-savings-table-row > div {
    min-width: 0;
    padding: 18px 20px;
    border-left: 1px solid var(--rk-savings-line);
    color: #3b5667;
    font-size: 0.89rem;
    line-height: 1.58;
  }

  #rk-savings-guide .rk-savings-table-row > div:first-child {
    border-left: 0;
  }

  #rk-savings-guide .rk-savings-table-head {
    background: var(--rk-savings-navy);
  }

  #rk-savings-guide .rk-savings-table-head > div {
    color: #ffffff;
    font-weight: 850;
  }

  #rk-savings-guide .rk-savings-table-label {
    background: #f2f6f8;
    color: var(--rk-savings-navy) !important;
    font-weight: 850;
  }

  #rk-savings-guide .rk-savings-diagnostic-table .rk-savings-table-row {
    grid-template-columns: minmax(180px, 0.8fr) minmax(0, 1fr) minmax(0, 1.15fr);
  }

  #rk-savings-guide .rk-savings-spec-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 24px 0;
  }

  #rk-savings-guide .rk-savings-spec {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 14px;
    align-items: start;
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 17px;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-spec-mark {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: #daf4f7;
    color: #0b7180;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-spec strong {
    display: block;
    margin-bottom: 4px;
    color: var(--rk-savings-navy);
    font-size: 0.94rem;
  }

  #rk-savings-guide .rk-savings-spec span {
    display: block;
    color: #4b6474;
    font-size: 0.84rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-chain {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 12px;
    align-items: stretch;
    margin: 26px 0;
  }

  #rk-savings-guide .rk-savings-chain-item {
    position: relative;
    min-width: 0;
    padding: 19px 15px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 17px;
    background: #ffffff;
    color: var(--rk-savings-ink);
    text-align: center;
  }

  #rk-savings-guide .rk-savings-chain-item::after {
    content: "→";
    position: absolute;
    top: 50%;
    right: -15px;
    z-index: 2;
    width: 18px;
    color: var(--rk-savings-orange);
    font-size: 1.15rem;
    font-weight: 900;
    line-height: 1;
    transform: translateY(-50%);
  }

  #rk-savings-guide .rk-savings-chain-item:last-child::after {
    display: none;
  }

  #rk-savings-guide .rk-savings-chain-item strong {
    display: block;
    color: var(--rk-savings-navy);
    font-size: 0.9rem;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-chain-item span {
    display: block;
    margin-top: 5px;
    color: #56707f;
    font-size: 0.75rem;
    line-height: 1.45;
  }

  #rk-savings-guide .rk-savings-steps {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
    margin: 24px 0;
    counter-reset: rk-savings-step;
  }

  #rk-savings-guide .rk-savings-step {
    position: relative;
    min-width: 0;
    padding: 21px 21px 21px 67px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 19px;
    background: #ffffff;
    color: var(--rk-savings-ink);
    counter-increment: rk-savings-step;
  }

  #rk-savings-guide .rk-savings-step::before {
    content: counter(rk-savings-step);
    position: absolute;
    top: 20px;
    left: 20px;
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--rk-savings-navy);
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-step h3 {
    margin: 0 0 7px;
    color: var(--rk-savings-navy);
    font-size: 1rem;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-step p {
    margin: 0;
    color: #435e6f;
    font-size: 0.88rem;
    line-height: 1.6;
  }

  #rk-savings-guide .rk-savings-mistakes {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin-top: 24px;
  }

  #rk-savings-guide .rk-savings-mistake {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 13px;
    min-width: 0;
    padding: 19px;
    border: 1px solid #ead4d2;
    border-radius: 17px;
    background: #fff7f6;
  }

  #rk-savings-guide .rk-savings-mistake-icon {
    display: grid;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-savings-red);
    color: #ffffff;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-mistake strong {
    color: #7e302e;
    font-size: 0.94rem;
  }

  #rk-savings-guide .rk-savings-mistake p {
    margin: 4px 0 0;
    color: #5f4d4c;
    font-size: 0.85rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-checklist {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin-top: 24px;
  }

  #rk-savings-guide .rk-savings-checklist-item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 13px;
    align-items: start;
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 17px;
    background: #ffffff;
    color: #425d6e;
    font-size: 0.86rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-checklist-item > span {
    display: grid;
    place-items: center;
    width: 31px;
    height: 31px;
    border-radius: 50%;
    background: #dff6e9;
    color: var(--rk-savings-green);
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-checklist-item strong {
    color: var(--rk-savings-navy);
    font-size: 0.92rem;
  }

  #rk-savings-guide .rk-savings-formula {
    display: grid;
    grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
    gap: 18px;
    align-items: stretch;
    margin: 24px 0;
  }

  #rk-savings-guide .rk-savings-formula-box {
    display: grid;
    place-items: center;
    min-height: 170px;
    padding: 24px;
    border-radius: 20px;
    background: var(--rk-savings-navy);
    color: #ffffff;
    text-align: center;
  }

  #rk-savings-guide .rk-savings-formula-box strong {
    display: block;
    color: var(--rk-savings-cyan);
    font-size: clamp(1.35rem, 3vw, 2rem);
    line-height: 1.25;
  }

  #rk-savings-guide .rk-savings-formula-box span {
    display: block;
    margin-top: 8px;
    color: #dcecf2;
    font-size: 0.82rem;
  }

  #rk-savings-guide .rk-savings-formula-copy {
    padding: 23px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 20px;
    background: #ffffff;
    color: #3f596a;
  }

  #rk-savings-guide .rk-savings-formula-copy h3 {
    margin: 0 0 9px;
    color: var(--rk-savings-navy);
    font-size: 1.08rem;
  }

  #rk-savings-guide .rk-savings-formula-copy p:last-child {
    margin-bottom: 0;
  }

  #rk-savings-guide .rk-savings-cta {
    margin: 32px 0 0;
    padding: clamp(27px, 4vw, 42px);
    border-radius: 24px;
    background:
      radial-gradient(circle at 100% 110%, rgba(95, 222, 240, 0.14) 0 130px, transparent 131px),
      linear-gradient(125deg, var(--rk-savings-navy), #0b5761);
    color: #ffffff;
    box-shadow: 0 18px 45px rgba(11, 45, 62, 0.18);
  }

  #rk-savings-guide .rk-savings-cta-title {
    max-width: 930px;
    margin: 0 0 12px;
    color: #ffffff;
    font-size: clamp(1.45rem, 3.2vw, 2.35rem);
    font-weight: 900;
    letter-spacing: -0.03em;
    line-height: 1.16;
  }

  #rk-savings-guide .rk-savings-cta p {
    max-width: 980px;
    margin-bottom: 20px;
    color: #e7f3f6;
  }

  #rk-savings-guide .rk-savings-cta-button {
    display: inline-flex;
    justify-content: center;
    align-items: center;
    min-height: 52px;
    padding: 12px 20px;
    border: 2px solid var(--rk-savings-orange);
    border-radius: 12px;
    background: var(--rk-savings-orange);
    color: #ffffff !important;
    font-weight: 900;
    line-height: 1.3;
    text-align: center;
    text-decoration: none !important;
    box-shadow: 0 10px 22px rgba(255, 122, 33, 0.22);
  }

  #rk-savings-guide .rk-savings-cta-button:hover {
    border-color: #ff9652;
    background: #ff9652;
    color: #ffffff !important;
  }

  #rk-savings-guide .rk-savings-link-disclosure {
    display: block;
    margin-top: 13px;
    color: #cfe1e6;
    font-size: 0.72rem;
    line-height: 1.45;
  }

  #rk-savings-guide .rk-savings-source-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
    margin-top: 24px;
  }

  #rk-savings-guide .rk-savings-source-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 18px;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-source-card a {
    display: inline-block;
    color: var(--rk-savings-navy);
    font-size: 0.93rem;
    font-weight: 900;
    line-height: 1.45;
  }

  #rk-savings-guide .rk-savings-source-card p {
    margin: 8px 0 0;
    color: #516a79;
    font-size: 0.83rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-responsibility {
    margin-top: 20px;
    padding: 21px;
    border: 1px solid #d7e1e7;
    border-radius: 18px;
    background: #ffffff;
    color: #405a6b;
    font-size: 0.87rem;
    line-height: 1.62;
  }

  #rk-savings-guide .rk-savings-responsibility p:last-child {
    margin-bottom: 0;
  }

  #rk-savings-guide .rk-savings-faq details {
    overflow: hidden;
    margin: 12px 0;
    border: 1px solid var(--rk-savings-line);
    border-radius: 16px;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-faq summary {
    position: relative;
    padding: 18px 52px 18px 20px;
    color: var(--rk-savings-navy);
    font-size: 0.96rem;
    font-weight: 850;
    line-height: 1.45;
    cursor: pointer;
    list-style: none;
  }

  #rk-savings-guide .rk-savings-faq summary::-webkit-details-marker {
    display: none;
  }

  #rk-savings-guide .rk-savings-faq summary::after {
    content: "+";
    position: absolute;
    top: 50%;
    right: 20px;
    color: var(--rk-savings-teal);
    font-size: 1.4rem;
    font-weight: 700;
    transform: translateY(-50%);
  }

  #rk-savings-guide .rk-savings-faq details[open] summary::after {
    content: "−";
  }

  #rk-savings-guide .rk-savings-faq-answer {
    padding: 0 20px 18px;
    color: #415c6d;
    font-size: 0.9rem;
    line-height: 1.65;
  }

  #rk-savings-guide .rk-savings-faq-answer p:last-child {
    margin-bottom: 0;
  }

  #rk-savings-guide .rk-savings-author {
    background:
      radial-gradient(circle at 98% 100%, rgba(95, 222, 240, 0.12) 0 150px, transparent 151px),
      linear-gradient(130deg, #102d40, #113f4e);
    color: #eaf4f7;
  }

  #rk-savings-guide .rk-savings-author .rk-savings-eyebrow {
    color: #ff9a57;
  }

  #rk-savings-guide .rk-savings-author-title {
    color: #ffffff;
  }

  #rk-savings-guide .rk-savings-author-layout {
    display: grid;
    grid-template-columns: minmax(210px, 0.34fr) minmax(0, 1fr);
    gap: 28px;
    align-items: start;
    margin-top: 25px;
  }

  #rk-savings-guide .rk-savings-author-side {
    padding: 22px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 20px;
    background: rgba(255, 255, 255, 0.07);
    text-align: center;
  }

  #rk-savings-guide .rk-savings-author-photo {
    width: 150px;
    height: 150px;
    margin: 0 auto 16px;
    overflow: hidden;
    border: 4px solid rgba(255, 255, 255, 0.24);
    border-radius: 50%;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-author-photo img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  #rk-savings-guide .rk-savings-author-name a {
    color: #ffffff;
    font-size: 1.12rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-author-role {
    margin: 7px 0 13px;
    color: #dbeaf0;
    font-size: 0.82rem;
    line-height: 1.5;
  }

  #rk-savings-guide .rk-savings-author-social {
    display: flex;
    justify-content: center;
    gap: 9px;
  }

  #rk-savings-guide .rk-savings-author-social a {
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 0.8rem;
    font-weight: 900;
    text-decoration: none;
  }

  #rk-savings-guide .rk-savings-author-main p {
    color: #dcecf1;
    font-size: 0.92rem;
  }

  #rk-savings-guide .rk-savings-author-main a {
    color: var(--rk-savings-cyan);
  }

  #rk-savings-guide .rk-savings-author-quote {
    margin-bottom: 21px;
    padding: 22px;
    border-left: 5px solid var(--rk-savings-cyan);
    border-radius: 7px 17px 17px 7px;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 1.03rem;
    font-weight: 750;
    line-height: 1.6;
  }

  #rk-savings-guide .rk-savings-author-facts {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 11px;
    margin-top: 20px;
  }

  #rk-savings-guide .rk-savings-author-fact {
    min-width: 0;
    padding: 15px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    border-radius: 15px;
    background: rgba(255, 255, 255, 0.06);
    color: #d7e8ed;
    font-size: 0.75rem;
    line-height: 1.45;
  }

  #rk-savings-guide .rk-savings-author-fact strong {
    display: block;
    margin-bottom: 4px;
    color: #ffffff;
    font-size: 0.8rem;
  }

  #rk-savings-guide .rk-savings-tool-tabs,
  #rk-savings-guide .rk-savings-graphic-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin: 0 0 22px;
  }

  #rk-savings-guide .rk-savings-tool-tabs button,
  #rk-savings-guide .rk-savings-graphic-controls button {
    min-height: 44px;
    padding: 9px 15px;
    border: 1px solid #bdd0d8;
    border-radius: 999px;
    background: #ffffff;
    color: var(--rk-savings-navy);
    font: inherit;
    font-size: 0.8rem;
    font-weight: 850;
    line-height: 1.25;
    cursor: pointer;
  }

  #rk-savings-guide .rk-savings-tool-tabs button[aria-selected="true"],
  #rk-savings-guide .rk-savings-graphic-controls button[aria-pressed="true"] {
    border-color: var(--rk-savings-navy);
    background: var(--rk-savings-navy);
    color: #ffffff;
    box-shadow: 0 8px 20px rgba(18, 50, 71, 0.18);
  }

  #rk-savings-guide .rk-savings-panel[hidden],
  #rk-savings-guide .rk-savings-is-hidden {
    display: none !important;
  }

  #rk-savings-guide .rk-savings-field-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 18px 0;
  }

  #rk-savings-guide .rk-savings-field-grid-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-savings-guide .rk-savings-field {
    min-width: 0;
    padding: 16px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 16px;
    background: var(--rk-savings-soft);
  }

  #rk-savings-guide .rk-savings-field label,
  #rk-savings-guide .rk-savings-field-label {
    display: block;
    margin: 0 0 7px;
    color: var(--rk-savings-navy);
    font-size: 0.79rem;
    font-weight: 900;
    line-height: 1.4;
  }

  #rk-savings-guide .rk-savings-field input,
  #rk-savings-guide .rk-savings-field select,
  #rk-savings-guide .rk-savings-loop-row input,
  #rk-savings-guide .rk-savings-curve-row input {
    width: 100%;
    min-height: 47px;
    margin: 0;
    padding: 10px 12px;
    border: 1px solid #b9cbd4;
    border-radius: 11px;
    background: #ffffff;
    color: #173246;
    font: inherit;
    font-size: 0.91rem;
    line-height: 1.2;
  }

  #rk-savings-guide .rk-savings-field input:focus,
  #rk-savings-guide .rk-savings-field select:focus,
  #rk-savings-guide .rk-savings-loop-row input:focus,
  #rk-savings-guide .rk-savings-curve-row input:focus {
    outline: 3px solid rgba(95, 222, 240, 0.34);
    border-color: var(--rk-savings-teal);
  }

  #rk-savings-guide .rk-savings-field-help {
    display: block;
    margin-top: 7px;
    color: #5c7180;
    font-size: 0.7rem;
    line-height: 1.45;
  }

  #rk-savings-guide .rk-savings-tool-subtitle {
    margin: 26px 0 10px;
    color: var(--rk-savings-navy);
    font-size: 1.12rem;
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-loop-editor,
  #rk-savings-guide .rk-savings-curve-editor {
    margin: 18px 0;
    padding: 18px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 18px;
    background: var(--rk-savings-soft);
  }

  #rk-savings-guide .rk-savings-loop-row,
  #rk-savings-guide .rk-savings-curve-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(120px, 0.46fr) auto;
    gap: 9px;
    align-items: end;
    margin-top: 10px;
  }

  #rk-savings-guide .rk-savings-curve-row {
    grid-template-columns: 42px repeat(2, minmax(110px, 1fr));
  }

  #rk-savings-guide .rk-savings-loop-row:first-child,
  #rk-savings-guide .rk-savings-curve-row:first-child {
    margin-top: 0;
  }

  #rk-savings-guide .rk-savings-loop-cell label,
  #rk-savings-guide .rk-savings-curve-cell label {
    display: block;
    margin-bottom: 5px;
    color: #496371;
    font-size: 0.68rem;
    font-weight: 850;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-remove-loop,
  #rk-savings-guide .rk-savings-add-loop {
    min-height: 45px;
    padding: 9px 13px;
    border: 1px solid #c7d5dc;
    border-radius: 11px;
    background: #ffffff;
    color: var(--rk-savings-navy);
    font: inherit;
    font-size: 0.77rem;
    font-weight: 850;
    cursor: pointer;
  }

  #rk-savings-guide .rk-savings-remove-loop {
    width: 45px;
    padding: 8px;
    color: #9b3b38;
  }

  #rk-savings-guide .rk-savings-add-loop {
    margin-top: 13px;
    border-color: #86cdd5;
    background: #eaf9fb;
    color: #075f6b;
  }

  #rk-savings-guide .rk-savings-calc-layout {
    display: grid;
    grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
    gap: 20px;
    align-items: start;
  }

  #rk-savings-guide .rk-savings-results {
    min-width: 0;
  }

  #rk-savings-guide .rk-savings-result-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 11px;
    margin: 0 0 16px;
  }

  #rk-savings-guide .rk-savings-result {
    min-width: 0;
    padding: 17px;
    border: 1px solid #b8dce1;
    border-radius: 16px;
    background: #effbfc;
  }

  #rk-savings-guide .rk-savings-result span {
    display: block;
    color: #4c6876;
    font-size: 0.7rem;
    font-weight: 850;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-result strong {
    display: block;
    margin-top: 4px;
    color: var(--rk-savings-navy);
    font-size: clamp(1.2rem, 2.5vw, 1.7rem);
    line-height: 1.2;
  }

  #rk-savings-guide .rk-savings-breakdown {
    padding: 18px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 17px;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-breakdown-title {
    display: block;
    margin-bottom: 12px;
    color: var(--rk-savings-navy);
    font-size: 0.86rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-break-row {
    display: grid;
    grid-template-columns: minmax(104px, 0.62fr) minmax(0, 1fr) auto;
    gap: 10px;
    align-items: center;
    margin: 9px 0;
    color: #496371;
    font-size: 0.73rem;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-break-row strong,
  #rk-savings-guide .rk-savings-curve-row > strong {
    color: var(--rk-savings-navy);
  }

  #rk-savings-guide .rk-savings-section-dark .rk-savings-callout strong {
    color: var(--rk-savings-navy);
  }

  #rk-savings-guide .rk-savings-break-track {
    height: 9px;
    overflow: hidden;
    border-radius: 999px;
    background: #e8eef1;
  }

  #rk-savings-guide .rk-savings-break-fill {
    display: block;
    width: 0;
    height: 100%;
    border-radius: inherit;
    background: linear-gradient(90deg, var(--rk-savings-teal), var(--rk-savings-cyan));
  }

  #rk-savings-guide .rk-savings-chart-card {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 18px;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-chart-title {
    margin: 0 0 11px;
    color: var(--rk-savings-navy);
    font-size: 0.95rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-chart-wrap {
    width: 100%;
    min-width: 0;
    overflow: hidden;
    border-radius: 13px;
    background: #f8fbfc;
  }

  #rk-savings-guide .rk-savings-chart-wrap svg {
    display: block;
    width: 100%;
    height: auto;
    min-height: 310px;
  }

  #rk-savings-guide .rk-savings-chart-grid-line {
    stroke: #dbe5ea;
    stroke-width: 1;
  }

  #rk-savings-guide .rk-savings-chart-axis {
    stroke: #6f8592;
    stroke-width: 1.4;
  }

  #rk-savings-guide .rk-savings-system-path {
    fill: none;
    stroke: var(--rk-savings-teal);
    stroke-width: 4;
  }

  #rk-savings-guide .rk-savings-device-path {
    fill: none;
    stroke: var(--rk-savings-orange);
    stroke-width: 4;
  }

  #rk-savings-guide .rk-savings-design-point {
    fill: var(--rk-savings-navy);
    stroke: #ffffff;
    stroke-width: 4;
  }

  #rk-savings-guide .rk-savings-operating-point {
    fill: var(--rk-savings-orange);
    stroke: #ffffff;
    stroke-width: 4;
  }

  #rk-savings-guide .rk-savings-chart-tick,
  #rk-savings-guide .rk-savings-chart-label {
    fill: #55707f;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
  }

  #rk-savings-guide .rk-savings-chart-label {
    fill: var(--rk-savings-navy);
    font-size: 13px;
    font-weight: 800;
  }

  #rk-savings-guide .rk-savings-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 15px;
    margin-top: 12px;
    color: #536d7b;
    font-size: 0.69rem;
    font-weight: 800;
  }

  #rk-savings-guide .rk-savings-legend span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
  }

  #rk-savings-guide .rk-savings-legend i {
    display: inline-block;
    width: 25px;
    height: 4px;
    border-radius: 999px;
    background: var(--rk-savings-teal);
  }

  #rk-savings-guide .rk-savings-legend .is-pump i {
    background: var(--rk-savings-orange);
  }

  #rk-savings-guide .rk-savings-legend .is-point i {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--rk-savings-navy);
  }

  #rk-savings-guide .rk-savings-status {
    margin: 15px 0 0;
    padding: 15px 17px;
    border: 1px solid #b8dce1;
    border-radius: 14px;
    background: #effbfc;
    color: #315261;
    font-size: 0.79rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-status.is-warning {
    border-color: #efd0a1;
    background: #fff6e9;
    color: #664d2b;
  }

  #rk-savings-guide .rk-savings-status.is-bad {
    border-color: #e6c2c0;
    background: #fff2f1;
    color: #743b38;
  }

  #rk-savings-guide .rk-savings-status.is-good {
    border-color: #b8ddce;
    background: #eefaf5;
    color: #245d48;
  }

  #rk-savings-guide .rk-savings-hydraulic-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
    margin-top: 18px;
  }

  #rk-savings-guide .rk-savings-hydraulic-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 18px;
    background: #ffffff;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
  }

  #rk-savings-guide .rk-savings-hydraulic-card.is-active {
    border-color: #5fc6d1;
    box-shadow: 0 12px 28px rgba(14, 119, 135, 0.13);
    transform: translateY(-2px);
  }

  #rk-savings-guide .rk-savings-hydraulic-card.is-muted {
    opacity: 0.58;
    background: #f3f6f7;
  }

  #rk-savings-guide .rk-savings-hydraulic-number {
    display: inline-grid;
    place-items: center;
    width: 34px;
    height: 34px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: #ddf6f8;
    color: #086878;
    font-size: 0.78rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-hydraulic-card h3 {
    margin: 0 0 8px;
    color: var(--rk-savings-navy);
    font-size: 1rem;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-hydraulic-value {
    display: inline-flex;
    min-height: 29px;
    align-items: center;
    margin: 0 0 9px;
    padding: 5px 10px;
    border-radius: 999px;
    background: #eef4f6;
    color: #3f5e6d;
    font-size: 0.71rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-hydraulic-card.is-active .rk-savings-hydraulic-value {
    background: #dff6e9;
    color: #21664e;
  }

  #rk-savings-guide .rk-savings-hydraulic-card p {
    margin: 0;
    color: #466171;
    font-size: 0.82rem;
    line-height: 1.58;
  }

  #rk-savings-guide .rk-savings-graphic-result {
    margin-top: 16px;
    padding: 20px;
    border-left: 5px solid var(--rk-savings-cyan);
    border-radius: 8px 16px 16px 8px;
    background: var(--rk-savings-navy);
    color: #ffffff;
  }

  #rk-savings-guide .rk-savings-graphic-result strong {
    display: block;
    margin-bottom: 5px;
    color: #ffffff;
  }

  #rk-savings-guide .rk-savings-graphic-result p {
    margin: 0;
    color: #e8f5f8;
    font-size: 0.87rem;
  }

  #rk-savings-guide .rk-savings-equation {
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
  }

  #rk-savings-guide .rk-savings-visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }

  @media (max-width: 1040px) {
    #rk-savings-guide .rk-savings-grid-4 {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-savings-guide .rk-savings-flow-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-savings-guide .rk-savings-chain {
      grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    #rk-savings-guide .rk-savings-chain-item::after {
      display: none;
    }

    #rk-savings-guide .rk-savings-calc-layout {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 820px) {
    #rk-savings-guide {
      font-size: 17px;
    }

    #rk-savings-guide .rk-savings-hero {
      border-radius: 24px;
    }

    #rk-savings-guide .rk-savings-hero-metrics,
    #rk-savings-guide .rk-savings-grid-3,
    #rk-savings-guide .rk-savings-source-grid,
    #rk-savings-guide .rk-savings-author-facts {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-control-grid,
    #rk-savings-guide .rk-savings-formula,
    #rk-savings-guide .rk-savings-author-layout {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-author-side {
      max-width: 430px;
    }

    #rk-savings-guide .rk-savings-field-grid-3,
    #rk-savings-guide .rk-savings-hydraulic-grid {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 700px) {
    #rk-savings-guide .rk-savings-section,
    #rk-savings-guide .rk-savings-author {
      border-radius: 22px;
    }

    #rk-savings-guide .rk-savings-grid-2,
    #rk-savings-guide .rk-savings-grid-4,
    #rk-savings-guide .rk-savings-flow-grid,
    #rk-savings-guide .rk-savings-spec-grid,
    #rk-savings-guide .rk-savings-steps,
    #rk-savings-guide .rk-savings-mistakes,
    #rk-savings-guide .rk-savings-checklist,
    #rk-savings-guide .rk-savings-chain {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-field-grid,
    #rk-savings-guide .rk-savings-result-grid {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-table-row,
    #rk-savings-guide .rk-savings-diagnostic-table .rk-savings-table-row {
      display: block;
      padding: 8px 0;
      border-top: 8px solid var(--rk-savings-soft);
    }

    #rk-savings-guide .rk-savings-table-row:first-child {
      display: none;
    }

    #rk-savings-guide .rk-savings-table-row > div {
      display: grid;
      grid-template-columns: minmax(104px, 0.42fr) minmax(0, 1fr);
      gap: 10px;
      padding: 12px 15px;
      border: 0;
    }

    #rk-savings-guide .rk-savings-table-row > div::before {
      content: attr(data-label);
      color: var(--rk-savings-navy);
      font-size: 0.76rem;
      font-weight: 900;
      line-height: 1.45;
    }

    #rk-savings-guide .rk-savings-table-label {
      background: #eef4f6;
    }

    #rk-savings-guide .rk-savings-loop-row {
      grid-template-columns: minmax(0, 1fr) minmax(100px, 0.6fr) auto;
    }
  }

  @media (max-width: 520px) {
    #rk-savings-guide {
      font-size: 16px;
    }

    #rk-savings-guide .rk-savings-hero {
      padding: 34px 22px;
      border-radius: 20px;
    }

    #rk-savings-guide .rk-savings-hero-title {
      font-size: clamp(2.25rem, 12vw, 3.5rem);
      letter-spacing: -0.05em;
    }

    #rk-savings-guide .rk-savings-hero-lead {
      margin-top: 23px;
    }

    #rk-savings-guide .rk-savings-hero-tag {
      min-height: 38px;
      padding: 7px 12px;
      font-size: 0.75rem;
    }

    #rk-savings-guide .rk-savings-byline {
      display: grid;
      gap: 7px;
    }

    #rk-savings-guide .rk-savings-hero-metric {
      padding: 19px;
    }

    #rk-savings-guide .rk-savings-shortcuts {
      padding: 17px;
      border-radius: 18px;
    }

    #rk-savings-guide .rk-savings-shortcuts a {
      font-size: 0.72rem;
    }

    #rk-savings-guide .rk-savings-section,
    #rk-savings-guide .rk-savings-author {
      padding: 28px 19px;
    }

    #rk-savings-guide .rk-savings-answer,
    #rk-savings-guide .rk-savings-card,
    #rk-savings-guide .rk-savings-flow-step {
      padding: 20px;
    }

    #rk-savings-guide .rk-savings-tool-head,
    #rk-savings-guide .rk-savings-tool-body {
      padding: 22px 17px;
    }

    #rk-savings-guide .rk-savings-segmented {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-state-summary {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-state-dot {
      width: 44px;
      height: 44px;
    }

    #rk-savings-guide .rk-savings-step {
      padding: 66px 19px 19px;
    }

    #rk-savings-guide .rk-savings-step::before {
      top: 19px;
      left: 19px;
    }

    #rk-savings-guide .rk-savings-cta-button {
      width: 100%;
    }

    #rk-savings-guide .rk-savings-table-row > div {
      grid-template-columns: 1fr;
      gap: 4px;
    }

    #rk-savings-guide .rk-savings-loop-row,
    #rk-savings-guide .rk-savings-curve-row {
      grid-template-columns: 1fr;
      padding: 13px;
      border: 1px solid var(--rk-savings-line);
      border-radius: 14px;
      background: #ffffff;
    }

    #rk-savings-guide .rk-savings-remove-loop {
      width: 100%;
    }

    #rk-savings-guide .rk-savings-chart-wrap svg {
      min-height: 260px;
    }

    #rk-savings-guide .rk-savings-break-row {
      grid-template-columns: 1fr auto;
    }

    #rk-savings-guide .rk-savings-break-track {
      grid-column: 1 / -1;
      grid-row: 2;
    }
  }

  @media print {
    #rk-savings-guide .rk-savings-shortcuts,
    #rk-savings-guide .rk-savings-control-grid {
      display: none !important;
    }

    #rk-savings-guide .rk-savings-section,
    #rk-savings-guide .rk-savings-author,
    #rk-savings-guide .rk-savings-hero {
      break-inside: avoid;
      box-shadow: none;
    }

    #rk-savings-guide .rk-savings-faq details {
      break-inside: avoid;
    }

    #rk-savings-guide .rk-savings-faq details:not([open]) .rk-savings-faq-answer {
      display: block;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    #rk-savings-guide *,
    #rk-savings-guide *::before,
    #rk-savings-guide *::after {
      scroll-behavior: auto !important;
      transition-duration: 0.01ms !important;
    }
  }

  #rk-savings-guide .rk-savings-field input.rk-savings-range {
    width: 100%;
    min-height: 10px;
    height: 10px;
    padding: 0;
    border: 0;
    border-radius: 999px;
    background: #dce8ed;
    accent-color: var(--rk-savings-orange);
    cursor: pointer;
  }

  #rk-savings-guide .rk-savings-field input.rk-savings-range:focus {
    outline: 3px solid rgba(95, 222, 240, 0.34);
    outline-offset: 5px;
  }

  #rk-savings-guide .rk-savings-control-label {
    display: block;
    margin: 22px 0 10px;
    color: var(--rk-savings-navy);
    font-size: 0.82rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-limit-line {
    stroke: #ad6f13;
    stroke-width: 2;
    stroke-dasharray: 7 6;
  }

  #rk-savings-guide .rk-savings-limit-label {
    fill: #8a5914;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 800;
  }

  #rk-savings-guide .rk-savings-current-guide {
    stroke: #8da0aa;
    stroke-width: 1.5;
    stroke-dasharray: 3 5;
  }

  #rk-savings-guide .rk-savings-section-dark .rk-savings-card {
    border-color: #cbd9e1;
    background: #ffffff;
    color: #173246;
  }

  #rk-savings-guide .rk-savings-section-dark .rk-savings-card h3 {
    color: #123247;
  }

  #rk-savings-guide .rk-savings-section-dark .rk-savings-card p,
  #rk-savings-guide .rk-savings-section-dark .rk-savings-card li {
    color: #3e5869;
  }

  #rk-savings-guide .rk-savings-section-dark .rk-savings-card a {
    color: #087a9f;
  }

  #rk-savings-guide button:focus-visible,
  #rk-savings-guide a:focus-visible,
  #rk-savings-guide summary:focus-visible {
    outline: 3px solid var(--rk-savings-cyan);
    outline-offset: 3px;
  }

  @media (max-width: 520px) {
    #rk-savings-guide .rk-savings-chart-card {
      padding: 12px;
    }

    #rk-savings-guide .rk-savings-chart-wrap svg {
      min-height: 235px;
    }

    #rk-savings-guide .rk-savings-graphic-controls button {
      width: 100%;
    }
  }



  #rk-savings-guide .rk-savings-equation-box {
    margin: 20px 0;
    padding: clamp(20px, 3vw, 30px);
    border: 1px solid #add6dc;
    border-radius: 20px;
    background: linear-gradient(135deg, #f0fbfc 0%, #ffffff 100%);
    box-shadow: 0 12px 30px rgba(13, 73, 88, 0.08);
  }

  #rk-savings-guide .rk-savings-equation-label {
    display: block;
    margin-bottom: 8px;
    color: #087083;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-savings-guide .rk-savings-equation-main {
    margin-bottom: 10px;
    color: var(--rk-savings-navy);
    font-size: clamp(1.18rem, 3vw, 1.78rem);
    font-weight: 950;
    line-height: 1.25;
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
  }

  #rk-savings-guide .rk-savings-equation-box p {
    margin: 0;
    color: #3f5b69;
  }

  #rk-savings-guide .rk-savings-chart-bar {
    fill: var(--rk-savings-teal);
    stroke: transparent;
    stroke-width: 0;
    transition: opacity 0.18s ease, fill 0.18s ease;
  }

  #rk-savings-guide .rk-savings-chart-bar:hover,
  #rk-savings-guide .rk-savings-chart-bar:focus {
    opacity: 0.78;
    outline: none;
  }

  #rk-savings-guide .rk-savings-chart-bar.is-selected {
    fill: var(--rk-savings-orange);
  }

  #rk-savings-guide .rk-savings-chart-bar.is-over {
    fill: var(--rk-savings-red);
  }

  #rk-savings-guide .rk-savings-chart-bar.is-selected.is-over {
    fill: var(--rk-savings-red);
    stroke: var(--rk-savings-orange);
    stroke-width: 4;
  }

  #rk-savings-guide .rk-savings-chart-target-line {
    stroke: #9b6512;
    stroke-width: 2;
    stroke-dasharray: 8 6;
  }

  #rk-savings-guide .rk-savings-chart-target-label {
    fill: #81540e;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-chart-value {
    fill: #294b5c;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-chart-axis-title {
    fill: #476474;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 800;
  }

  #rk-savings-guide .rk-savings-legend .is-danger i {
    background: var(--rk-savings-red);
  }

  @media (max-width: 620px) {
    #rk-savings-guide .rk-savings-equation-main {
      font-size: 1.08rem;
    }

    #rk-savings-guide .rk-savings-chart-value,
    #rk-savings-guide .rk-savings-chart-target-label,
    #rk-savings-guide .rk-savings-chart-axis-title {
      font-size: 10px;
    }
  }



  #rk-savings-guide .rk-savings-circuit-editor {
    display: grid;
    gap: 11px;
    margin: 22px 0 12px;
  }

  #rk-savings-guide .rk-savings-circuit-row {
    display: grid;
    grid-template-columns: minmax(135px, 1.2fr) minmax(105px, 0.8fr) minmax(135px, 0.9fr) minmax(112px, 0.7fr) 42px;
    gap: 10px;
    align-items: end;
    padding: 12px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 15px;
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-circuit-cell label,
  #rk-savings-guide .rk-savings-circuit-flow span {
    display: block;
    margin-bottom: 6px;
    color: #496674;
    font-size: 0.72rem;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-circuit-cell input {
    width: 100%;
    min-height: 44px;
    margin: 0;
    padding: 9px 10px;
    border: 1px solid #b9ccd5;
    border-radius: 10px;
    background: #ffffff;
    color: var(--rk-savings-navy);
    font: inherit;
    font-weight: 750;
    line-height: 1.25;
  }

  #rk-savings-guide .rk-savings-circuit-cell input:focus {
    border-color: var(--rk-savings-teal);
    outline: 3px solid rgba(15, 137, 151, 0.18);
  }

  #rk-savings-guide .rk-savings-circuit-flow {
    min-height: 44px;
    padding: 7px 9px;
    border-radius: 10px;
    background: #eef8fa;
  }

  #rk-savings-guide .rk-savings-circuit-flow span {
    margin-bottom: 2px;
  }

  #rk-savings-guide .rk-savings-circuit-flow strong {
    display: block;
    color: var(--rk-savings-navy);
    font-size: 0.94rem;
    font-variant-numeric: tabular-nums;
  }

  #rk-savings-guide .rk-savings-add-loop:disabled {
    cursor: not-allowed;
    opacity: 0.56;
  }

  #rk-savings-guide .rk-savings-chart-common {
    fill: #80cbd3;
  }

  #rk-savings-guide .rk-savings-chart-branch {
    fill: var(--rk-savings-teal);
  }

  #rk-savings-guide .rk-savings-chart-critical-outline {
    fill: none;
    stroke: var(--rk-savings-orange);
    stroke-width: 4;
  }

  #rk-savings-guide .rk-savings-chart-grid {
    stroke: #dbe5e9;
    stroke-width: 1;
  }

  #rk-savings-guide .rk-savings-chart-tick,
  #rk-savings-guide .rk-savings-chart-name,
  #rk-savings-guide .rk-savings-chart-index,
  #rk-savings-guide .rk-savings-chart-value,
  #rk-savings-guide .rk-savings-chart-axis-title {
    fill: #3f5d6c;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 800;
  }

  #rk-savings-guide .rk-savings-chart-value {
    fill: var(--rk-savings-navy);
    font-size: 12px;
    font-weight: 950;
  }

  #rk-savings-guide .rk-savings-chart-index {
    fill: #6e8490;
    font-size: 9px;
  }

  #rk-savings-guide .rk-savings-legend .is-common i {
    background: #80cbd3;
  }

  #rk-savings-guide .rk-savings-legend .is-pump i {
    border: 3px solid var(--rk-savings-orange);
    background: transparent;
  }

  #rk-savings-guide .rk-savings-state-controls {
    margin-bottom: 18px;
  }

  @media (max-width: 900px) {
    #rk-savings-guide .rk-savings-circuit-row {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-savings-guide .rk-savings-circuit-flow {
      align-self: end;
    }

    #rk-savings-guide .rk-savings-remove-loop {
      width: 100%;
      grid-column: 1 / -1;
    }
  }

  @media (max-width: 560px) {
    #rk-savings-guide .rk-savings-circuit-row {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-chart-tick,
    #rk-savings-guide .rk-savings-chart-name,
    #rk-savings-guide .rk-savings-chart-value,
    #rk-savings-guide .rk-savings-chart-axis-title {
      font-size: 9px;
    }
  }



  #rk-savings-guide .rk-savings-segmented button[aria-selected="true"] {
    border-color: var(--rk-savings-navy);
    background: var(--rk-savings-navy);
    color: #ffffff;
    box-shadow: 0 8px 18px rgba(18, 50, 71, 0.18);
  }

  #rk-savings-guide .rk-savings-field-grid-single {
    grid-template-columns: minmax(0, 1fr);
  }

  #rk-savings-guide .rk-savings-calc-summary {
    margin: 22px 0;
    padding: 18px;
    border: 1px solid #b9e3e8;
    border-radius: 18px;
    background: #f0fbfc;
  }

  #rk-savings-guide .rk-savings-calc-summary .rk-savings-result-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-bottom: 13px;
  }

  #rk-savings-guide .rk-savings-calc-summary .rk-savings-result {
    background: #ffffff;
  }

  #rk-savings-guide .rk-savings-calc-summary .rk-savings-result strong {
    font-size: clamp(1.05rem, 2.1vw, 1.42rem);
  }

  #rk-savings-guide .rk-savings-calc-summary .rk-savings-equation {
    margin: 0;
    color: #365665;
    font-size: 0.78rem;
    font-weight: 800;
  }

  #rk-savings-guide .rk-savings-pipe-results {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 20px 0;
  }

  #rk-savings-guide .rk-savings-pipe-result {
    min-width: 0;
    padding: 19px;
    border: 1px solid var(--rk-savings-line);
    border-radius: 18px;
    background: #ffffff;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
  }

  #rk-savings-guide .rk-savings-pipe-result.is-selected {
    border-color: var(--rk-savings-orange);
    box-shadow: 0 12px 28px rgba(245, 112, 32, 0.13);
    transform: translateY(-2px);
  }

  #rk-savings-guide .rk-savings-pipe-result-head {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 7px 14px;
    align-items: baseline;
    margin-bottom: 13px;
    color: var(--rk-savings-navy);
  }

  #rk-savings-guide .rk-savings-pipe-result-head span {
    font-size: 1.05rem;
    font-weight: 950;
  }

  #rk-savings-guide .rk-savings-pipe-result-head strong {
    color: #54707e;
    font-size: 0.74rem;
  }

  #rk-savings-guide .rk-savings-pipe-metrics {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }

  #rk-savings-guide .rk-savings-pipe-metrics > div {
    min-width: 0;
    padding: 11px;
    border-radius: 11px;
    background: #f2f7f8;
  }

  #rk-savings-guide .rk-savings-pipe-metrics span,
  #rk-savings-guide .rk-savings-pipe-metrics strong {
    display: block;
  }

  #rk-savings-guide .rk-savings-pipe-metrics span {
    color: #5b7380;
    font-size: 0.65rem;
    font-weight: 800;
    line-height: 1.35;
  }

  #rk-savings-guide .rk-savings-pipe-metrics strong {
    margin-top: 3px;
    color: var(--rk-savings-navy);
    font-size: 0.87rem;
    font-variant-numeric: tabular-nums;
    line-height: 1.3;
  }

  #rk-savings-guide .rk-savings-pipe-status {
    margin: 12px 0;
    padding: 10px 12px;
    border-radius: 10px;
    font-size: 0.72rem;
    font-weight: 800;
    line-height: 1.45;
  }

  #rk-savings-guide .rk-savings-pipe-status.is-within {
    background: #eaf8f1;
    color: #245e49;
  }

  #rk-savings-guide .rk-savings-pipe-status.is-over {
    background: #fff2e8;
    color: #7b421d;
  }

  #rk-savings-guide .rk-savings-pipe-result button {
    width: 100%;
    min-height: 44px;
    padding: 9px 12px;
    border: 1px solid #bcd0d8;
    border-radius: 11px;
    background: #ffffff;
    color: var(--rk-savings-navy);
    font: inherit;
    font-size: 0.74rem;
    font-weight: 850;
    line-height: 1.3;
    cursor: pointer;
  }

  #rk-savings-guide .rk-savings-pipe-result button[aria-pressed="true"] {
    border-color: var(--rk-savings-navy);
    background: var(--rk-savings-navy);
    color: #ffffff;
  }

  #rk-savings-guide .rk-savings-series-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 7px 13px;
    margin: 0 0 12px;
  }

  #rk-savings-guide .rk-savings-series-controls button {
    display: inline-flex;
    min-height: 40px;
    align-items: center;
    gap: 7px;
    padding: 7px 10px;
    border: 1px solid transparent;
    border-radius: 9px;
    background: transparent;
    color: #425f6e;
    font: inherit;
    font-size: 0.72rem;
    font-weight: 850;
    cursor: pointer;
  }

  #rk-savings-guide .rk-savings-series-controls button[aria-pressed="false"] {
    opacity: 0.45;
    text-decoration: line-through;
  }

  #rk-savings-guide .rk-savings-series-controls i {
    display: inline-block;
    width: 24px;
    height: 4px;
    border-radius: 999px;
  }

  #rk-savings-guide .rk-savings-series-controls .is-p16,
  #rk-savings-guide .rk-savings-chart-curve.is-p16,
  #rk-savings-guide .rk-savings-chart-point.is-p16 {
    stroke: #e96a28;
    background: #e96a28;
    fill: #e96a28;
  }

  #rk-savings-guide .rk-savings-series-controls .is-p17,
  #rk-savings-guide .rk-savings-chart-curve.is-p17,
  #rk-savings-guide .rk-savings-chart-point.is-p17 {
    stroke: #087f91;
    background: #087f91;
    fill: #087f91;
  }

  #rk-savings-guide .rk-savings-series-controls .is-p20,
  #rk-savings-guide .rk-savings-chart-curve.is-p20,
  #rk-savings-guide .rk-savings-chart-point.is-p20 {
    stroke: #315aa6;
    background: #315aa6;
    fill: #315aa6;
  }

  #rk-savings-guide .rk-savings-series-controls .is-custom,
  #rk-savings-guide .rk-savings-chart-curve.is-custom,
  #rk-savings-guide .rk-savings-chart-point.is-custom {
    stroke: #7a4ea3;
    background: #7a4ea3;
    fill: #7a4ea3;
  }

  #rk-savings-guide .rk-savings-chart-grid line {
    stroke: #dbe5e9;
    stroke-width: 1;
  }

  #rk-savings-guide .rk-savings-chart-grid text,
  #rk-savings-guide .rk-savings-chart-axis-title,
  #rk-savings-guide .rk-savings-chart-criterion-label {
    fill: #506d7b;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 750;
  }

  #rk-savings-guide .rk-savings-chart-axis-title {
    fill: var(--rk-savings-navy);
    font-size: 12px;
    font-weight: 900;
  }

  #rk-savings-guide .rk-savings-chart-frame {
    fill: none;
    stroke: #91a8b2;
    stroke-width: 1.2;
  }

  #rk-savings-guide .rk-savings-chart-curve {
    stroke-width: 2.4;
    stroke-linecap: round;
    stroke-linejoin: round;
  }

  #rk-savings-guide .rk-savings-chart-curve.is-selected {
    stroke-width: 4.5;
  }

  #rk-savings-guide .rk-savings-chart-guide {
    stroke: var(--rk-savings-navy);
    stroke-width: 1.5;
    stroke-dasharray: 6 5;
  }

  #rk-savings-guide .rk-savings-chart-point {
    stroke-width: 2;
    stroke: #ffffff;
  }

  #rk-savings-guide .rk-savings-chart-point.is-selected {
    stroke: var(--rk-savings-navy);
    stroke-width: 3;
  }

  #rk-savings-guide .rk-savings-chart-criterion {
    stroke: #ac5a24;
    stroke-width: 1.5;
    stroke-dasharray: 3 4;
  }

  #rk-savings-guide .rk-savings-chart-criterion-label {
    fill: #7b4a29;
  }

  #rk-savings-guide .rk-savings-chart-reading {
    margin-top: 12px;
    padding: 13px 15px;
    border-left: 4px solid var(--rk-savings-cyan);
    border-radius: 7px 12px 12px 7px;
    background: #edf8fa;
    color: #345463;
    font-size: 0.75rem;
    line-height: 1.5;
  }

  #rk-savings-guide .rk-savings-chart-reading strong {
    color: var(--rk-savings-navy);
  }

  @media (max-width: 900px) {
    #rk-savings-guide .rk-savings-calc-summary .rk-savings-result-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  @media (max-width: 700px) {
    #rk-savings-guide .rk-savings-pipe-results {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 460px) {
    #rk-savings-guide .rk-savings-calc-summary .rk-savings-result-grid,
    #rk-savings-guide .rk-savings-pipe-metrics {
      grid-template-columns: 1fr;
    }

    #rk-savings-guide .rk-savings-chart-grid text,
    #rk-savings-guide .rk-savings-chart-axis-title {
      font-size: 10px;
    }
  }


  /* Dodatkowe style modułów temperatury zasilania */
  #rk-savings-guide .rk-savings-result-grid-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-savings-guide .rk-savings-field-grid-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  #rk-savings-guide .rk-savings-chart-card {
    margin-top: 24px;
  }

  #rk-savings-guide .rk-savings-chart-unit {
    fill: #476474;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 14px;
    font-weight: 850;
  }

  #rk-savings-guide .rk-savings-chart-bar.is-required {
    fill: #123247;
  }

  #rk-savings-guide .rk-savings-chart-bar.is-available {
    fill: #0e7787;
  }

  #rk-savings-guide .rk-savings-chart-bar.is-low {
    fill: #248c68;
  }

  #rk-savings-guide .rk-savings-chart-bar.is-high {
    fill: #ff7a21;
  }

  #rk-savings-guide .rk-savings-chart-value.is-inside {
    fill: #ffffff;
  }

  #rk-savings-guide .rk-savings-chart-label {
    font-size: 14px;
  }

  #rk-savings-guide .rk-savings-chart-value {
    font-size: 14px;
  }

  #rk-savings-guide .rk-savings-chart-reading {
    margin-top: 12px;
    padding: 13px 15px;
    border: 1px solid #cfe0e6;
    border-radius: 12px;
    background: #f5f9fa;
    color: #365665;
    font-size: 0.78rem;
    line-height: 1.55;
  }

  #rk-savings-guide .rk-savings-equation {
    margin: 15px 0 0;
    padding: 14px 16px;
    border: 1px solid #d6e3e8;
    border-radius: 13px;
    background: #ffffff;
    color: #365665;
    font-size: 0.78rem;
    font-weight: 800;
  }

  #rk-savings-guide .rk-savings-hydraulic-card.is-warning {
    border-color: #e3ad58;
    background: #fff8ed;
    box-shadow: 0 12px 28px rgba(183, 120, 18, 0.12);
    transform: translateY(-2px);
  }

  #rk-savings-guide .rk-savings-hydraulic-card.is-warning .rk-savings-hydraulic-value {
    background: #ffe9c5;
    color: #7a4e0c;
  }

  #rk-savings-guide .rk-savings-source-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  @media (max-width: 1040px) {
    #rk-savings-guide .rk-savings-field-grid-4 {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  @media (max-width: 820px) {
    #rk-savings-guide .rk-savings-source-grid {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 700px) {
    #rk-savings-guide .rk-savings-result-grid-3,
    #rk-savings-guide .rk-savings-field-grid-4 {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 520px) {
    #rk-savings-guide .rk-savings-chart-label,
    #rk-savings-guide .rk-savings-chart-tick,
    #rk-savings-guide .rk-savings-chart-value,
    #rk-savings-guide .rk-savings-chart-unit {
      font-size: 12px;
    }
  }


/* Kalkulator kosztów */
#rk-savings-guide .rk-savings-field-grid-4,
#rk-savings-guide .rk-savings-result-grid-4 { grid-template-columns:repeat(4,minmax(0,1fr)); }
#rk-savings-guide .rk-savings-field-grid-2 { grid-template-columns:repeat(2,minmax(0,1fr)); }
#rk-savings-guide .rk-savings-profile-box { margin:20px 0;padding:20px;border:1px solid #c7d8df;border-radius:19px;background:#f8fbfc; }
#rk-savings-guide .rk-savings-profile-head { display:flex;align-items:flex-start;justify-content:space-between;gap:18px; }
#rk-savings-guide .rk-savings-profile-head strong,#rk-savings-guide .rk-savings-profile-head span { display:block; }
#rk-savings-guide .rk-savings-profile-head strong { color:var(--rk-savings-navy);font-size:1rem; }
#rk-savings-guide .rk-savings-profile-head span { margin-top:4px;color:#597180;font-size:.77rem;line-height:1.5; }
#rk-savings-guide .rk-savings-status { flex:0 0 auto;padding:7px 11px;border:1px solid #a9ddd0;border-radius:999px;background:#e7f7f1;color:#17694f;font-size:.72rem;font-weight:900;line-height:1.25; }
#rk-savings-guide .rk-savings-status.is-warning { border-color:#e9c585;background:#fff4df;color:#7b5413; }
#rk-savings-guide .rk-savings-result-grid { display:grid;gap:13px;margin:22px 0; }
#rk-savings-guide .rk-savings-result { min-width:0;padding:18px;border:1px solid #ccdbe2;border-radius:17px;background:#fff; }
#rk-savings-guide .rk-savings-result span,#rk-savings-guide .rk-savings-result strong,#rk-savings-guide .rk-savings-result small { display:block; }
#rk-savings-guide .rk-savings-result span { color:#5b7280;font-size:.7rem;font-weight:850;letter-spacing:.04em;line-height:1.35;text-transform:uppercase; }
#rk-savings-guide .rk-savings-result strong { margin-top:7px;color:var(--rk-savings-navy);font-size:1.2rem;line-height:1.25; }
#rk-savings-guide .rk-savings-result small { margin-top:5px;color:#617987;font-size:.69rem;line-height:1.4; }
#rk-savings-guide .rk-savings-result-accent { border-color:#80cfd7;background:#eaf9fb; }
#rk-savings-guide .rk-savings-tool-actions { display:flex;justify-content:flex-end;margin:16px 0 0; }
#rk-savings-guide .rk-savings-secondary-button { min-height:48px;padding:10px 18px;border:2px solid var(--rk-savings-teal);border-radius:12px;background:var(--rk-savings-teal);color:#fff;font:inherit;font-size:.81rem;font-weight:900;line-height:1.25;cursor:pointer; }
#rk-savings-guide .rk-savings-secondary-button:hover { border-color:#075f6b;background:#075f6b; }
#rk-savings-guide .rk-savings-profile-grid { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:22px 0; }
#rk-savings-guide .rk-savings-source-profile { min-width:0;margin:0;padding:18px;border:1px solid #cbd9e0;border-radius:17px;background:#f8fbfc; }
#rk-savings-guide .rk-savings-source-profile legend { max-width:100%;padding:0 7px;color:var(--rk-savings-navy);font-size:.83rem;font-weight:900;line-height:1.35; }
#rk-savings-guide .rk-savings-mini-fields { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px; }
#rk-savings-guide .rk-savings-mini-fields label { color:#516a79;font-size:.7rem;font-weight:850; }
#rk-savings-guide .rk-savings-mini-fields input { width:100%;min-height:44px;margin-top:5px;padding:9px 10px;border:1px solid #b9cbd4;border-radius:10px;background:#fff;color:#173246;font:inherit;font-size:.85rem; }
#rk-savings-guide .rk-savings-source-profile p { margin:10px 0 0;color:#5a7180;font-size:.7rem;line-height:1.45; }
#rk-savings-guide .rk-savings-cost-table .is-positive { color:#187053;font-weight:900; }
#rk-savings-guide .rk-savings-cost-table .is-negative { color:#a13f3c;font-weight:900; }
#rk-savings-guide .rk-savings-chart-source { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px; }
#rk-savings-guide .rk-savings-chart-source button { min-width:0;min-height:42px;padding:7px 8px;border:1px solid #bdced6;border-radius:10px;background:#fff;color:var(--rk-savings-navy);font:inherit;font-size:.68rem;font-weight:900;line-height:1.2;cursor:pointer; }
#rk-savings-guide .rk-savings-chart-source button[aria-pressed="true"] { border-color:var(--rk-savings-navy);background:var(--rk-savings-navy);color:#fff; }
#rk-savings-guide .rk-savings-chart-summary { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px;margin:22px 0; }
#rk-savings-guide .rk-savings-chart-summary>div { min-width:0;padding:16px;border:1px solid #c8d9df;border-radius:15px;background:#fff; }
#rk-savings-guide .rk-savings-chart-summary span,#rk-savings-guide .rk-savings-chart-summary strong { display:block; }
#rk-savings-guide .rk-savings-chart-summary span { color:#627987;font-size:.66rem;font-weight:850;line-height:1.35;text-transform:uppercase; }
#rk-savings-guide .rk-savings-chart-summary strong { margin-top:6px;color:var(--rk-savings-navy);font-size:.92rem;line-height:1.35; }
#rk-savings-guide .rk-savings-chart-card { padding:21px;border:1px solid #c8d9df;border-radius:20px;background:#fff; }
#rk-savings-guide .rk-savings-chart-visible-title { color:var(--rk-savings-navy);font-size:.97rem;font-weight:900;line-height:1.4; }
#rk-savings-guide .rk-savings-chart-legend { display:flex;flex-wrap:wrap;gap:9px 17px;margin:13px 0 5px;color:#566f7d;font-size:.7rem;font-weight:800; }
#rk-savings-guide .rk-savings-chart-legend span { display:inline-flex;align-items:center;gap:7px; }
#rk-savings-guide .rk-savings-chart-legend i { display:inline-block;width:18px;height:8px;border-radius:999px; }
#rk-savings-guide .rk-savings-legend-a { background:#123247; }
#rk-savings-guide .rk-savings-legend-b { background:#0e7787; }
#rk-savings-guide .rk-savings-legend-line { height:3px!important;background:#ff7a21; }
#rk-savings-guide .rk-savings-chart-wrap { width:100%;overflow:hidden;margin-top:8px; }
#rk-savings-guide .rk-savings-chart-wrap svg { display:block;width:100%;height:auto;min-height:300px;font-family:inherit; }
#rk-savings-guide .rk-savings-svg-bg { fill:#f7fafb; }
#rk-savings-guide .rk-savings-svg-grid { stroke:#dce6ea;stroke-width:1; }
#rk-savings-guide .rk-savings-svg-axis,#rk-savings-guide .rk-savings-svg-separator { stroke:#9fb4bf;stroke-width:1.2; }
#rk-savings-guide .rk-savings-svg-zero { stroke:#7b909b;stroke-width:1.4;stroke-dasharray:5 5; }
#rk-savings-guide .rk-savings-svg-bar-a { fill:#123247; }
#rk-savings-guide .rk-savings-svg-bar-b { fill:#0e7787; }
#rk-savings-guide .rk-savings-svg-line { fill:none;stroke:#ff7a21;stroke-width:4;stroke-linecap:round;stroke-linejoin:round; }
#rk-savings-guide .rk-savings-svg-point { fill:#fff;stroke:#ff7a21;stroke-width:4; }
#rk-savings-guide .rk-savings-svg-title { fill:#123247;font-size:17px;font-weight:900; }
#rk-savings-guide .rk-savings-svg-label { fill:#526c7a;font-size:13px;font-weight:800; }
#rk-savings-guide .rk-savings-svg-value { fill:#123247;font-size:13px;font-weight:900; }
#rk-savings-guide .rk-savings-svg-tick { fill:#627985;font-size:10px;font-weight:700; }
#rk-savings-guide .rk-savings-svg-note { fill:#657d89;font-size:11px; }
#rk-savings-guide .rk-savings-chart-reading { margin:13px 0 0;padding:15px 17px;border-left:4px solid var(--rk-savings-cyan);border-radius:6px 13px 13px 6px;background:#edf8fa;color:#294b5d;font-size:.79rem;line-height:1.55; }

/* Interaktywna mapa optymalizacji */
#rk-savings-guide .rk-savings-optimization-tool { overflow:hidden;margin-top:26px;border:1px solid #b9d4da;border-radius:24px;background:#f5f9fa;box-shadow:0 16px 42px rgba(18,50,71,.09); }
#rk-savings-guide .rk-savings-optimization-buttons { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:22px; }
#rk-savings-guide .rk-savings-optimization-buttons button { display:grid;grid-template-columns:52px minmax(0,1fr);gap:14px;align-items:start;min-width:0;margin:0;padding:17px;border:1px solid #c9d8df;border-radius:17px;background:#fff;color:var(--rk-savings-ink);font:inherit;text-align:left;cursor:pointer; }
#rk-savings-guide .rk-savings-optimization-buttons button[aria-selected="true"] { border-color:#5fc6d2;background:#eaf9fb;box-shadow:0 10px 24px rgba(14,119,135,.12); }
#rk-savings-guide .rk-savings-optimization-buttons button>span:last-child,#rk-savings-guide .rk-savings-optimization-buttons strong,#rk-savings-guide .rk-savings-optimization-buttons small { display:block;min-width:0; }
#rk-savings-guide .rk-savings-optimization-buttons strong { color:var(--rk-savings-navy);font-size:.88rem;line-height:1.35; }
#rk-savings-guide .rk-savings-optimization-buttons small { margin-top:5px;color:#5a7180;font-size:.7rem;line-height:1.45; }
#rk-savings-guide .rk-savings-optimization-detail { padding:clamp(24px,4vw,40px);background:linear-gradient(135deg,#102f42,#0e5660);color:#fff; }
#rk-savings-guide .rk-savings-optimization-head>span { display:block;color:#ffad73;font-size:.72rem;font-weight:900;letter-spacing:.08em;text-transform:uppercase; }
#rk-savings-guide .rk-savings-optimization-head h3 { margin:7px 0 9px;color:#fff;font-size:clamp(1.35rem,3vw,2rem);line-height:1.2; }
#rk-savings-guide .rk-savings-optimization-head p { max-width:940px;margin:0;color:#e4f1f4;font-size:.94rem; }
#rk-savings-guide .rk-savings-optimization-card { min-width:0;padding:18px;border:1px solid rgba(255,255,255,.20);border-radius:16px;background:rgba(255,255,255,.08); }
#rk-savings-guide .rk-savings-optimization-card span { display:block;color:var(--rk-savings-cyan);font-size:.7rem;font-weight:900;letter-spacing:.04em;text-transform:uppercase; }
#rk-savings-guide .rk-savings-optimization-card p { margin:7px 0 0;color:#eef8fa;font-size:.82rem;line-height:1.55; }
#rk-savings-guide .rk-savings-optimization-limit { margin-top:18px;padding:16px 18px;border:1px solid rgba(255,174,115,.45);border-radius:14px;background:rgba(255,122,33,.10);color:#eef8fa;font-size:.8rem;line-height:1.55; }
#rk-savings-guide .rk-savings-optimization-limit strong { color:#ffb783; }

/* Blokada stylów motywu: cyfra pozostaje dokładnie w środku koła. */
#rk-savings-guide .rk-savings-spec { grid-template-columns:52px minmax(0,1fr)!important;gap:16px!important;align-items:start!important; }
#rk-savings-guide .rk-savings-spec-mark,
#rk-savings-guide .rk-savings-spec .rk-savings-spec-mark,
#rk-savings-guide .rk-savings-optimization-buttons .rk-savings-spec-mark {
  display:flex!important;align-items:center!important;justify-content:center!important;align-self:start!important;justify-self:start!important;
  flex:0 0 52px!important;float:none!important;position:static!important;inset:auto!important;top:auto!important;right:auto!important;bottom:auto!important;left:auto!important;transform:none!important;
  width:52px!important;height:52px!important;min-width:52px!important;min-height:52px!important;max-width:52px!important;max-height:52px!important;
  margin:0!important;padding:0!important;border:0!important;border-radius:50%!important;background:#d9f3f6!important;color:#0b7180!important;
  font-size:1rem!important;font-weight:900!important;font-variant-numeric:tabular-nums!important;line-height:1!important;letter-spacing:0!important;text-align:center!important;text-indent:0!important;vertical-align:middle!important;white-space:nowrap!important;
}
#rk-savings-guide .rk-savings-spec-mark::before,#rk-savings-guide .rk-savings-spec-mark::after { display:none!important;content:none!important; }

@media(max-width:1040px){#rk-savings-guide .rk-savings-field-grid-4,#rk-savings-guide .rk-savings-result-grid-4,#rk-savings-guide .rk-savings-chart-summary{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:820px){#rk-savings-guide .rk-savings-profile-grid,#rk-savings-guide .rk-savings-optimization-buttons{grid-template-columns:1fr;}}
@media(max-width:700px){#rk-savings-guide .rk-savings-field-grid-4,#rk-savings-guide .rk-savings-field-grid-2,#rk-savings-guide .rk-savings-result-grid-4,#rk-savings-guide .rk-savings-chart-summary{grid-template-columns:1fr;}#rk-savings-guide .rk-savings-profile-head{display:grid;}#rk-savings-guide .rk-savings-status{justify-self:start;}#rk-savings-guide .rk-savings-chart-card{padding:14px;}#rk-savings-guide .rk-savings-chart-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}#rk-savings-guide .rk-savings-chart-wrap svg{width:720px;max-width:none;}}
@media(max-width:520px){#rk-savings-guide .rk-savings-mini-fields,#rk-savings-guide .rk-savings-chart-source{grid-template-columns:repeat(2,minmax(0,1fr));}#rk-savings-guide .rk-savings-optimization-buttons{padding:14px;}#rk-savings-guide .rk-savings-optimization-buttons button{grid-template-columns:52px minmax(0,1fr);padding:14px;}}

</style>
<article id="rk-savings-guide" aria-labelledby="rk-savings-visual-title">
  <div class="rk-savings-shell">
<header class="rk-savings-hero">
      <div class="rk-savings-hero-inner">
        <span class="rk-savings-kicker">Od OZC do kosztu jednej kWh ciepła</span>
        <div class="rk-savings-hero-title" id="rk-savings-visual-title">Nie 10 czy 15 cm. <span>Liczy się koszt całego układu</span></div>
        <p class="rk-savings-hero-lead">Gęstszy rozstaw może obniżyć wymaganą temperaturę wody, ale nie tworzy automatycznie oszczędności. Najpierw trzeba sprawdzić straty każdego pomieszczenia, czynną powierzchnię podłogi, hydraulikę i sezonową sprawność źródła. Dopiero potem można policzyć, czy dodatkowa rura rzeczywiście się zwróci.</p>
        <div class="rk-savings-hero-tags" aria-label="Zakres poradnika">
          <span class="rk-savings-hero-tag">rozstaw 10, 15 i 20 cm</span><span class="rk-savings-hero-tag">dom 150 m²</span><span class="rk-savings-hero-tag">pompa, gaz, pellet i prąd</span><span class="rk-savings-hero-tag">SCOP i sprawność sezonowa</span><span class="rk-savings-hero-tag">koszt oraz zwrot</span>
        </div>
        <div class="rk-savings-byline"><span>Autor: <strong>Robert Kucharski</strong></span><span>Czas czytania: około 43 minuty</span><span>Aktualizacja techniczna: 11 września 2026 r.</span></div>
        <div class="rk-savings-hero-metrics" aria-label="Trzy poziomy rzetelnej analizy kosztów">
          <div class="rk-savings-hero-metric"><b>OZC określa potrzebne ciepło</b><span>Rachunek zaczyna się od obciążenia pomieszczeń, a nie od powierzchni domu i rozstawu.</span></div>
          <div class="rk-savings-hero-metric"><b>Projekt określa parametr</b><span>Rozstaw, czynna podłoga, okładzina i przepływ wyznaczają warunki pracy emitera.</span></div>
          <div class="rk-savings-hero-metric"><b>Źródło zamienia parametr w rachunek</b><span>Liczą się SCOP lub sprawność sezonowa, cena nośnika i energia pomocnicza.</span></div>
        </div>
      </div>
    </header>
<nav class="rk-savings-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-savings-shortcuts-label">Na skróty</span>
      <a href="#rk-savings-answer">Szybka odpowiedź</a><a href="#rk-savings-cost-chain">Skąd bierze się koszt?</a><a href="#rk-savings-spacing-effect">Co zmienia rozstaw?</a><a href="#rk-savings-inputs">Dane do obliczeń</a><a href="#rk-savings-pipe-length">Ile rury na 150 m²?</a><a href="#rk-savings-layouts">Trzy warianty</a><a href="#rk-savings-calculator">Kalkulator i wykres</a><a href="#rk-savings-interpretation">Jak czytać wynik?</a><a href="#rk-savings-optimization-map">Mapa optymalizacji</a><a href="#rk-savings-heat-pump">Pompa ciepła</a><a href="#rk-savings-gas">Gaz</a><a href="#rk-savings-pellet">Pellet</a><a href="#rk-savings-electric">Prąd</a><a href="#rk-savings-radiators">Podłogówka a grzejniki</a><a href="#rk-savings-tariffs">Taryfy</a><a href="#rk-savings-hydraulics">Hydraulika</a><a href="#rk-savings-control">Sterowanie</a><a href="#rk-savings-lifecycle">Koszt w 20 lat</a><a href="#rk-savings-example">Przykład 150 m²</a><a href="#rk-savings-myths">Błędy i mity</a><a href="#rk-savings-checklist">Lista kontrolna</a><a href="#rk-savings-conclusions">Wnioski</a><a href="#rk-savings-references">Źródła</a><a href="#rk-savings-faq">FAQ</a><a href="#rk-savings-author">Autor</a>
    </nav>
<section class="rk-savings-section" id="rk-savings-answer">
      <span class="rk-savings-eyebrow">Odpowiedź w 30 sekund</span>
      <h2 class="rk-savings-section-title">Czy rozstaw rur co 10 cm zawsze daje niższe rachunki niż 15 cm?</h2>
      <div class="rk-savings-answer"><span class="rk-savings-answer-label">Najkrótsza poprawna odpowiedź</span><p><strong>Nie. Rozstaw 10 cm może pozwolić osiągnąć wymaganą moc przy niższej temperaturze wody niż 15 cm, lecz skutek finansowy zależy od sezonowej sprawności konkretnego źródła. Jeżeli oba warianty pracują przy podobnej sprawności albo 15 cm już pokrywa obciążenie przy docelowym parametrze, dodatkowa rura może nie przynieść mierzalnej oszczędności.</strong></p></div>
      <div class="rk-savings-grid-3">
        <article class="rk-savings-card"><h3>10 cm ma sens obliczeniowy</h3><p>W pomieszczeniach o większym obciążeniu powierzchniowym, przy ograniczonej podłodze czynnej albo gdy potrzebny jest niższy parametr.</p></article>
        <article class="rk-savings-card"><h3>15 cm często wystarcza</h3><p>W pomieszczeniach o umiarkowanych stratach, jeśli zweryfikowana moc podłogi pokrywa obciążenie.</p></article>
        <article class="rk-savings-card"><h3>20 cm bywa uzasadnione</h3><p>W strefach o małym zapotrzebowaniu, o ile moc, rozkład temperatury i hydraulika pozostają prawidłowe.</p></article>
      </div>
      <p>Optymalizacja polega na takim doborze geometrii w każdym pomieszczeniu, aby pokryć <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a> przy racjonalnej temperaturze, liczbie pętli i oporach. Szczegółowe porównanie rozwija poradnik <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur co 10 czy 15 cm</a>.</p>
      <div class="rk-savings-callout"><strong>Reguła przewodnia:</strong> każdy dodatkowy metr rury powinien mieć uzasadnienie cieplne, hydrauliczne albo wykonawcze. Samo zwiększenie liczby metrów nie jest strategią oszczędzania energii.</div>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-cost-chain">
      <span class="rk-savings-eyebrow">Rachunek jest końcem łańcucha</span>
      <h2 class="rk-savings-section-title">Od czego naprawdę zależy roczny koszt ogrzewania?</h2>
      <p class="rk-savings-lead">Dla tego samego domu użyteczne ciepło potrzebne do utrzymania temperatury nie znika po zagęszczeniu rur. Zmienić może się temperatura wymagana przez instalację, sprawność źródła, zużycie pomp i skala przegrzewania.</p>
      <div class="rk-savings-chain" aria-label="Łańcuch od strat budynku do rachunku"><div class="rk-savings-chain-item"><strong>Straty budynku</strong><span>kWh ciepła</span></div><div class="rk-savings-chain-item"><strong>Emiter</strong><span>temperatura i przepływ</span></div><div class="rk-savings-chain-item"><strong>Źródło</strong><span>SCOP lub η</span></div><div class="rk-savings-chain-item"><strong>Nośnik</strong><span>prąd albo paliwo</span></div><div class="rk-savings-chain-item"><strong>Rachunek</strong><span>zmienne + stałe</span></div></div>
      <div class="rk-savings-equation-box"><span class="rk-savings-equation-label">Uproszczona relacja roczna</span><div class="rk-savings-equation-main">koszt ≈ (ciepło użyteczne ÷ sprawność sezonowa) × cena nośnika + energia pomocnicza</div><p>Dla pompy ciepła sprawnością sezonową jest SCOP lub wskaźnik z pomiaru całego systemu. Dla kotła stosuje się sezonową sprawność w jasno zdefiniowanych warunkach.</p></div>
      <p>W porównaniu dwóch emiterów nie wolno jednemu przypisać innych strat przegród tylko dlatego, że ma inny rozstaw. Podstawy zapotrzebowania wyjaśnia tekst o tym, <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty ciepła budynku</a>.</p>
    </section>
<section class="rk-savings-section" id="rk-savings-spacing-effect">
      <span class="rk-savings-eyebrow">Oddziel efekt cieplny od obietnicy finansowej</span>
      <h2 class="rk-savings-section-title">Co rozstaw rur zmienia, a czego nie zmienia?</h2>
      <div class="rk-savings-compare-table" role="table" aria-label="Wpływ rozstawu rur na instalację i koszty">
        <div class="rk-savings-table-row rk-savings-table-head" role="row"><div role="columnheader">Obszar</div><div role="columnheader">Co może się zmienić?</div><div role="columnheader">Czego nie wolno założyć?</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Obszar" role="cell">Moc podłogi</div><div data-label="Możliwy skutek" role="cell">Gęstszy rozstaw może zwiększyć możliwy strumień przy tej samej średniej temperaturze wody.</div><div data-label="Granica" role="cell">Nie ma jednej mocy W/m² przypisanej do 10 albo 15 cm bez konstrukcji i okładziny.</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Obszar" role="cell">Temperatura wody</div><div data-label="Możliwy skutek" role="cell">Ten sam wymagany strumień może być osiągalny przy niższej temperaturze średniej.</div><div data-label="Granica" role="cell">Nie można przypisać 10 cm jednej temperatury, a 15 cm drugiej dla każdego domu.</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Obszar" role="cell">Hydraulika</div><div data-label="Możliwy skutek" role="cell">Więcej rury oznacza inne długości, liczbę pętli, zład i opory.</div><div data-label="Granica" role="cell">Gęstszy rozstaw nie gwarantuje mniejszego poboru pompy obiegowej.</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Obszar" role="cell">Bezwładność</div><div data-label="Możliwy skutek" role="cell">Nieznacznie zmienia się zład wodny i rozprowadzenie ciepła.</div><div data-label="Granica" role="cell">Masa jastrychu nie rośnie od dodatkowej rury, więc nie ma gwarancji rzadszych cykli.</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Obszar" role="cell">Straty i rachunek</div><div data-label="Możliwy skutek" role="cell">Niższy parametr i mniejsze przegrzewanie mogą poprawić wynik.</div><div data-label="Granica" role="cell">Rozstaw nie poprawia izolacji i nie daje jednego procentu oszczędności dla wszystkich źródeł.</div></div>
      </div>
      <p>Ten sam średni rozstaw można rozłożyć inaczej w strefach o większym obciążeniu. Zobacz, <a href="https://projekt-ogrzewania.pl/jak-gesto-rozkladac-podlogowke/">jak gęsto rozkładać podłogówkę</a> i kiedy potrzebna jest <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">strefa brzegowa</a>.</p>
    </section>
<section class="rk-savings-section rk-savings-section-dark" id="rk-savings-inputs">
      <span class="rk-savings-eyebrow">Osiem liczb przed pierwszą złotówką</span>
      <h2 class="rk-savings-section-title">Jakie dane są potrzebne do rzetelnego porównania?</h2>
      <p class="rk-savings-lead">Kosztorys bez bilansu cieplnego pokazuje wyłącznie cenę materiału. Analiza ekonomiczna wymaga równocześnie danych budynku, emitera, źródła oraz taryfy.</p>
      <div class="rk-savings-spec-grid">
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">1</span><div><strong>Obciążenie pomieszczeń</strong><span>Projektowe straty w watach dla warunków lokalizacji.</span></div></div>
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">2</span><div><strong>Powierzchnia czynna</strong><span>Fragment podłogi naprawdę oddający ciepło.</span></div></div>
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">3</span><div><strong>Konstrukcja podłogi</strong><span>Jastrych, rura, opór okładziny i ograniczenia materiałów.</span></div></div>
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">4</span><div><strong>Geometria obiegów</strong><span>Rozstaw, średnica, trasy, długości i liczba pętli.</span></div></div>
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">5</span><div><strong>Temperatury i przepływy</strong><span>Zasilanie, powrót, ΔT i przepływ każdej pętli.</span></div></div>
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">6</span><div><strong>Sprawność sezonowa</strong><span>SCOP albo η dla porównywalnego urządzenia i systemu.</span></div></div>
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">7</span><div><strong>Cena zmienna nośnika</strong><span>Stawka zależna od zużycia z właściwej umowy.</span></div></div>
        <div class="rk-savings-spec"><span class="rk-savings-spec-mark" aria-hidden="true">8</span><div><strong>Koszt różnicowy</strong><span>Dodatkowa rura, pętle, osprzęt i robocizna.</span></div></div>
      </div>
      <p>Powierzchnia 150 m² nie daje jeszcze żadnej z tych odpowiedzi. Stała zabudowa może ograniczyć obszar aktywny, co omawia poradnik <a href="https://projekt-ogrzewania.pl/wodne-ogrzewanie-podlogowe-a-meble-jak-polaczyc-komfort-i-aranzacje/">ogrzewanie podłogowe a meble</a>. Sprawdź też, <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">jak okładzina wpływa na wydajność</a>.</p>
    </section>
<section class="rk-savings-section" id="rk-savings-pipe-length">
      <span class="rk-savings-eyebrow">Metry liczymy z powierzchni czynnej</span>
      <h2 class="rk-savings-section-title">Ile rury potrzeba na 150 m² podłogówki?</h2>
      <p class="rk-savings-lead">Do kontroli metrażu pola można użyć relacji powierzchnia czynna podzielona przez rozstaw w metrach. Potem dodaje się podejścia do rozdzielacza, rezerwę i wynikający z tras odpad.</p>
      <div class="rk-savings-equation-box"><span class="rk-savings-equation-label">Orientacyjna długość rury w polu</span><div class="rk-savings-equation-main">L ≈ A<sub>czynna</sub> ÷ s</div><p>Dla 150 m² faktycznie czynnej podłogi otrzymamy około 1500 m przy 10 cm, 1000 m przy 15 cm i 750 m przy 20 cm — przed podejściami i rezerwą.</p></div>
      <div class="rk-savings-compare-table" role="table" aria-label="Orientacyjna długość rury zależnie od powierzchni czynnej">
        <div class="rk-savings-table-row rk-savings-table-head" role="row"><div role="columnheader">Powierzchnia czynna</div><div role="columnheader">Rozstaw 10 cm</div><div role="columnheader">Rozstaw 15 cm</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Powierzchnia" role="cell">100 m²</div><div data-label="10 cm" role="cell">około 1000 m w polu</div><div data-label="15 cm" role="cell">około 667 m w polu</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Powierzchnia" role="cell">125 m²</div><div data-label="10 cm" role="cell">około 1250 m w polu</div><div data-label="15 cm" role="cell">około 833 m w polu</div></div>
        <div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Powierzchnia" role="cell">150 m²</div><div data-label="10 cm" role="cell">około 1500 m w polu</div><div data-label="15 cm" role="cell">około 1000 m w polu</div></div>
      </div>
      <div class="rk-savings-warning"><strong>To nie jest lista zakupowa.</strong> Dokładny metraż wynika z tras pętli na rzucie. Trzeba uwzględnić rozdzielacze, dylatacje i dopuszczalne długości. Zobacz, <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">ile metrów przypada na pętlę</a> i od czego zależy <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalna długość pętli</a>.</div>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-layouts">
      <span class="rk-savings-eyebrow">Trzeci wariant zwykle jest ważniejszy od dwóch skrajności</span>
      <h2 class="rk-savings-section-title">10 cm wszędzie, 15 cm wszędzie czy rozstaw pomieszczeniowy?</h2>
      <div class="rk-savings-grid-3">
        <article class="rk-savings-card"><span class="rk-savings-card-number">A</span><h3>Jednolite 15 cm</h3><p>Proste wykonawczo, lecz trzeba potwierdzić moc w łazienkach, przy przeszkleniach i małej powierzchni czynnej.</p></article>
        <article class="rk-savings-card"><span class="rk-savings-card-number">B</span><h3>Jednolite 10 cm</h3><p>Więcej rury wszędzie, ale potencjalnie zbędne metry, pętle i większy rozdzielacz w łatwych pomieszczeniach.</p></article>
        <article class="rk-savings-card"><span class="rk-savings-card-number">C</span><h3>Rozstaw z bilansu</h3><p>10, 15 lub 20 cm tam, gdzie pozwala na to moc, wspólny parametr, komfort i hydraulika.</p></article>
      </div>
      <p>Wariant C nie oznacza przypadkowej mozaiki. W salonie z przeszkleniami może być potrzebne lokalne zagęszczenie, ale nie wynika ono z arbitralnej szerokości pasa. Zobacz projektowanie <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">podłogówki przy dużych przeszkleniach</a>.</p>
    </section>
<section class="rk-savings-section" id="rk-savings-calculator">
      <span class="rk-savings-eyebrow">Kalkulator różnicowy zamiast obietnicy procentowej</span>
      <h2 class="rk-savings-section-title">Policz długość rur, koszt inwestycji i roczne wydatki dla czterech źródeł</h2>
      <p class="rk-savings-lead">Narzędzie porównuje wariant A z wariantem B. Najpierw szacuje metraż i koszt wykonania, a następnie pokazuje roczne koszty dla pompy ciepła, gazu, pelletu i kotła elektrycznego na podstawie wpisanych parametrów sezonowych.</p>
      <div class="rk-savings-tool" id="rk-savings-calculator-tool">
        <div class="rk-savings-tool-head"><span class="rk-savings-eyebrow">Jedno narzędzie, trzy pytania</span><h3>Kalkulator optymalizacji podłogówki 150 m²</h3><p>Ceny i sprawności startowe są wyłącznie przykładem do edycji. Narzędzie nie pobiera taryf ani danych urządzeń z internetu.</p></div>
        <div class="rk-savings-tool-body">
          <div class="rk-savings-tool-tabs" role="tablist" aria-label="Etap kalkulatora"><button type="button" id="rk-savings-tab-geometry" role="tab" aria-selected="true" aria-controls="rk-savings-panel-geometry" data-rk-savings-tab="geometry">1. Rury i inwestycja</button><button type="button" id="rk-savings-tab-operation" role="tab" aria-selected="false" aria-controls="rk-savings-panel-operation" data-rk-savings-tab="operation">2. Roczne koszty</button><button type="button" id="rk-savings-tab-chart" role="tab" aria-selected="false" aria-controls="rk-savings-panel-chart" data-rk-savings-tab="chart">3. Zwrot i wykres</button></div>
          <div class="rk-savings-panel" id="rk-savings-panel-geometry" role="tabpanel" aria-labelledby="rk-savings-tab-geometry">
            <h4 class="rk-savings-tool-subtitle">Geometria i koszt różnicowy</h4>
            <div class="rk-savings-field-grid rk-savings-field-grid-4">
              <div class="rk-savings-field"><label for="rk-savings-gross-area">Powierzchnia domu</label><input id="rk-savings-gross-area" type="number" min="10" max="1000" step="1" value="150"><span class="rk-savings-field-help">Wartość informacyjna, m².</span></div>
              <div class="rk-savings-field"><label for="rk-savings-active-area">Czynna powierzchnia</label><input id="rk-savings-active-area" type="number" min="1" max="1000" step="1" value="125"><span class="rk-savings-field-help">Tylko podłoga objęta rurami.</span></div>
              <div class="rk-savings-field"><label for="rk-savings-base-spacing">Wariant A — rozstaw</label><select id="rk-savings-base-spacing"><option value="0.10">10 cm</option><option value="0.15" selected="">15 cm</option><option value="0.20">20 cm</option></select><span class="rk-savings-field-help">Jednolity wariant bazowy.</span></div>
              <div class="rk-savings-field"><label for="rk-savings-reserve">Podejścia i rezerwa</label><input id="rk-savings-reserve" type="number" min="0" max="30" step="1" value="8"><span class="rk-savings-field-help">Procent dodawany do pola.</span></div>
            </div>
            <div class="rk-savings-profile-box">
              <div class="rk-savings-profile-head"><div><strong>Wariant B — rozstaw pomieszczeniowy</strong><span>Udział powierzchni czynnej; suma powinna wynosić 100%.</span></div><output id="rk-savings-share-status" class="rk-savings-status" aria-live="polite">Suma: 100%</output></div>
              <div class="rk-savings-field-grid rk-savings-field-grid-3"><div class="rk-savings-field"><label for="rk-savings-share-10">Udział 10 cm</label><input id="rk-savings-share-10" type="number" min="0" max="100" value="30"><span class="rk-savings-field-help">Strefy krytyczne.</span></div><div class="rk-savings-field"><label for="rk-savings-share-15">Udział 15 cm</label><input id="rk-savings-share-15" type="number" min="0" max="100" value="50"><span class="rk-savings-field-help">Strefy pośrednie.</span></div><div class="rk-savings-field"><label for="rk-savings-share-20">Udział 20 cm</label><input id="rk-savings-share-20" type="number" min="0" max="100" value="20"><span class="rk-savings-field-help">Tylko po potwierdzeniu mocy.</span></div></div>
            </div>
            <div class="rk-savings-field-grid rk-savings-field-grid-4"><div class="rk-savings-field"><label for="rk-savings-max-loop">Przyjęta długość pętli</label><input id="rk-savings-max-loop" type="number" min="30" max="200" step="5" value="90"><span class="rk-savings-field-help">Do szacunku pętli, m.</span></div><div class="rk-savings-field"><label for="rk-savings-pipe-price">Cena rury</label><input id="rk-savings-pipe-price" type="number" min="0" max="100" step="0.1" value="5"><span class="rk-savings-field-help">zł za metr.</span></div><div class="rk-savings-field"><label for="rk-savings-loop-cost">Dodatkowa pętla</label><input id="rk-savings-loop-cost" type="number" min="0" max="10000" step="10" value="250"><span class="rk-savings-field-help">Robocizna i osprzęt, zł.</span></div><div class="rk-savings-field"><label for="rk-savings-other-cost">Inne koszty B</label><input id="rk-savings-other-cost" type="number" min="-100000" max="100000" step="50" value="0"><span class="rk-savings-field-help">Może być ujemne.</span></div></div>
            <div class="rk-savings-result-grid rk-savings-result-grid-4" aria-live="polite"><div class="rk-savings-result"><span>Wariant A</span><strong id="rk-savings-length-a">—</strong><small id="rk-savings-loops-a">—</small></div><div class="rk-savings-result"><span>Wariant B</span><strong id="rk-savings-length-b">—</strong><small id="rk-savings-loops-b">—</small></div><div class="rk-savings-result"><span>10 cm wszędzie</span><strong id="rk-savings-length-all10">—</strong><small>benchmark, nie zalecenie</small></div><div class="rk-savings-result rk-savings-result-accent"><span>Różnica inwestycji B − A</span><strong id="rk-savings-investment-delta">—</strong><small id="rk-savings-length-delta">—</small></div></div>
            <div class="rk-savings-tool-actions"><button type="button" class="rk-savings-secondary-button" id="rk-savings-go-operation">Przejdź do kosztów rocznych</button></div>
            <div class="rk-savings-tool-disclaimer"><strong>Zakres:</strong> metraż jest estymacją geometryczną. Liczba pętli nie zastępuje podziału pomieszczeń, tras na rzucie ani obliczenia oporów.</div>
          </div>
          <div class="rk-savings-panel rk-savings-is-hidden" id="rk-savings-panel-operation" role="tabpanel" aria-labelledby="rk-savings-tab-operation" hidden="">
            <h4 class="rk-savings-tool-subtitle">Ciepło, sprawności i ceny nośników</h4>
            <div class="rk-savings-field-grid rk-savings-field-grid-4"><div class="rk-savings-field"><label for="rk-savings-annual-heat">Roczne ciepło użyteczne</label><input id="rk-savings-annual-heat" type="number" min="100" max="200000" step="100" value="6750"><span class="rk-savings-field-help">kWh/rok, bez CWU.</span></div><div class="rk-savings-field"><label for="rk-savings-overheat">Mniej przegrzewania w B</label><input id="rk-savings-overheat" type="number" min="0" max="25" step="0.5" value="0"><span class="rk-savings-field-help">Domyślnie 0%.</span></div><div class="rk-savings-field"><label for="rk-savings-aux-a">Energia pomocnicza A</label><input id="rk-savings-aux-a" type="number" min="0" max="10000" step="10" value="150"><span class="rk-savings-field-help">kWh prądu/rok.</span></div><div class="rk-savings-field"><label for="rk-savings-aux-b">Energia pomocnicza B</label><input id="rk-savings-aux-b" type="number" min="0" max="10000" step="10" value="130"><span class="rk-savings-field-help">Wymaga hydraulicznego uzasadnienia.</span></div></div>
            <div class="rk-savings-field-grid rk-savings-field-grid-3"><div class="rk-savings-field"><label for="rk-savings-electricity-price">Energia elektryczna</label><input id="rk-savings-electricity-price" type="number" min="0.01" max="10" step="0.01" value="1.05"><span class="rk-savings-field-help">zmienny koszt, zł/kWh.</span></div><div class="rk-savings-field"><label for="rk-savings-gas-price">Gaz</label><input id="rk-savings-gas-price" type="number" min="0.01" max="5" step="0.01" value="0.35"><span class="rk-savings-field-help">zmienny koszt paliwa, zł/kWh.</span></div><div class="rk-savings-field"><label for="rk-savings-pellet-price">Pellet</label><input id="rk-savings-pellet-price" type="number" min="100" max="10000" step="10" value="1500"><span class="rk-savings-field-help">zł za tonę.</span></div></div>
            <div class="rk-savings-field-grid rk-savings-field-grid-3"><div class="rk-savings-field"><label for="rk-savings-pellet-calorific">Wartość opałowa pelletu</label><input id="rk-savings-pellet-calorific" type="number" min="1" max="10" step="0.1" value="4.8"><span class="rk-savings-field-help">kWh/kg.</span></div><div class="rk-savings-field"><label for="rk-savings-horizon">Horyzont</label><input id="rk-savings-horizon" type="number" min="1" max="40" value="20"><span class="rk-savings-field-help">1–40 lat.</span></div><div class="rk-savings-field"><label for="rk-savings-growth">Zmiana ceny</label><input id="rk-savings-growth" type="number" min="-10" max="25" step="0.5" value="0"><span class="rk-savings-field-help">% rocznie; 0% ogranicza pozorną precyzję.</span></div></div>
            <div class="rk-savings-profile-grid">
              <fieldset class="rk-savings-source-profile"><legend>Pompa ciepła — SCOP</legend><div class="rk-savings-mini-fields"><label>A<input id="rk-savings-hp-eff-a" type="number" min="1" max="10" step="0.1" value="3.4"></label><label>B<input id="rk-savings-hp-eff-b" type="number" min="1" max="10" step="0.1" value="3.8"></label></div><p>Porównywalne dane tej samej pompy.</p></fieldset>
              <fieldset class="rk-savings-source-profile"><legend>Gaz — sprawność sezonowa</legend><div class="rk-savings-mini-fields"><label>A<input id="rk-savings-gas-eff-a" type="number" min="0.1" max="1.2" step="0.01" value="0.90"></label><label>B<input id="rk-savings-gas-eff-b" type="number" min="0.1" max="1.2" step="0.01" value="0.95"></label></div><p>Użyj jednej podstawy sprawności.</p></fieldset>
              <fieldset class="rk-savings-source-profile"><legend>Pellet — sprawność sezonowa</legend><div class="rk-savings-mini-fields"><label>A<input id="rk-savings-pellet-eff-a" type="number" min="0.1" max="1.2" step="0.01" value="0.82"></label><label>B<input id="rk-savings-pellet-eff-b" type="number" min="0.1" max="1.2" step="0.01" value="0.82"></label></div><p>Niska temperatura nie podnosi jej automatycznie.</p></fieldset>
              <fieldset class="rk-savings-source-profile"><legend>Kocioł elektryczny</legend><div class="rk-savings-mini-fields"><label>A<input id="rk-savings-electric-eff-a" type="number" min="0.1" max="1.1" step="0.01" value="0.99"></label><label>B<input id="rk-savings-electric-eff-b" type="number" min="0.1" max="1.1" step="0.01" value="0.99"></label></div><p>Brak premii podobnej do COP.</p></fieldset>
            </div>
            <div class="rk-savings-compare-table rk-savings-cost-table" role="table" aria-label="Roczne koszty czterech źródeł"><div class="rk-savings-table-row rk-savings-table-head" role="row"><div role="columnheader">Źródło</div><div role="columnheader">Wariant A / B</div><div role="columnheader">Oszczędność B</div></div><div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Źródło" role="cell">Pompa ciepła</div><div data-label="Koszt A / B" id="rk-savings-hp-costs" role="cell">—</div><div data-label="Oszczędność" id="rk-savings-hp-saving" role="cell">—</div></div><div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Źródło" role="cell">Kocioł gazowy</div><div data-label="Koszt A / B" id="rk-savings-gas-costs" role="cell">—</div><div data-label="Oszczędność" id="rk-savings-gas-saving" role="cell">—</div></div><div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Źródło" role="cell">Kocioł na pellet</div><div data-label="Koszt A / B" id="rk-savings-pellet-costs" role="cell">—</div><div data-label="Oszczędność" id="rk-savings-pellet-saving" role="cell">—</div></div><div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Źródło" role="cell">Kocioł elektryczny</div><div data-label="Koszt A / B" id="rk-savings-electric-costs" role="cell">—</div><div data-label="Oszczędność" id="rk-savings-electric-saving" role="cell">—</div></div></div>
            <div class="rk-savings-tool-actions"><button type="button" class="rk-savings-secondary-button" id="rk-savings-go-chart">Pokaż zwrot na wykresie</button></div>
            <div class="rk-savings-tool-disclaimer"><strong>Nie wliczamy automatycznie:</strong> CWU, odszraniania, serwisu, kosztu kapitału i opłat stałych identycznych w obu wariantach. Stawki startowe zastąp własnymi danymi.</div>
          </div>
          <div class="rk-savings-panel rk-savings-is-hidden" id="rk-savings-panel-chart" role="tabpanel" aria-labelledby="rk-savings-tab-chart" hidden="">
            <h4 class="rk-savings-tool-subtitle">Koszt roczny i skumulowany zwrot</h4>
            <div class="rk-savings-field-grid rk-savings-field-grid-2"><div class="rk-savings-field"><label for="rk-savings-investment-override">Różnica inwestycji</label><input id="rk-savings-investment-override" type="number" min="-100000" max="500000" step="50" value="0"><span class="rk-savings-field-help">Synchronizowana z geometrią; można nadpisać.</span></div><div class="rk-savings-field"><span class="rk-savings-field-label">Źródło na wykresie</span><div class="rk-savings-chart-source" role="group" aria-label="Wybierz źródło"><button type="button" aria-pressed="true" data-rk-savings-source="hp">Pompa</button><button type="button" aria-pressed="false" data-rk-savings-source="gas">Gaz</button><button type="button" aria-pressed="false" data-rk-savings-source="pellet">Pellet</button><button type="button" aria-pressed="false" data-rk-savings-source="electric">Prąd</button></div></div></div>
            <div class="rk-savings-chart-summary" aria-live="polite"><div><span>Wybrane źródło</span><strong id="rk-savings-chart-source-name">Pompa ciepła</strong></div><div><span>Oszczędność w 1. roku</span><strong id="rk-savings-chart-saving">—</strong></div><div><span>Prosty zwrot</span><strong id="rk-savings-chart-payback">—</strong></div><div><span>Bilans po okresie</span><strong id="rk-savings-chart-total">—</strong></div></div>
            <div class="rk-savings-chart-card"><div class="rk-savings-chart-visible-title">Wariant A i B: koszt roczny oraz skumulowany bilans inwestycji</div><div class="rk-savings-chart-legend"><span><i class="rk-savings-legend-a"></i>Koszt A</span><span><i class="rk-savings-legend-b"></i>Koszt B</span><span><i class="rk-savings-legend-line"></i>Bilans skumulowany</span></div><div class="rk-savings-chart-wrap"><svg id="rk-savings-chart-svg" viewBox="0 0 760 410" role="img" aria-labelledby="rk-savings-chart-title rk-savings-chart-desc"><title id="rk-savings-chart-title">Porównanie kosztów i skumulowanego zwrotu</title><desc id="rk-savings-chart-desc">Wykres aktualizuje się po zmianie danych.</desc></svg></div><p class="rk-savings-chart-reading" id="rk-savings-chart-reading">Zmień dane, aby porównać własny wariant.</p></div>
            <div class="rk-savings-tool-disclaimer"><strong>Wykres nie jest prognozą cen.</strong> Pokazuje konsekwencje wpisanych założeń; prosty zwrot nie uwzględnia kosztu pieniądza ani wymiany urządzeń.</div>
          </div>
        </div>
      </div>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-interpretation">
      <span class="rk-savings-eyebrow">Najpierw sprawdź znak, potem dokładność</span>
      <h2 class="rk-savings-section-title">Jak czytać wynik kalkulatora, żeby nie wyciągnąć złego wniosku?</h2>
      <div class="rk-savings-grid-3">
        <article class="rk-savings-card"><h3>Oszczędność dodatnia</h3><p>Wariant B ma niższy koszt przy wpisanych założeniach. Sprawdź, czy różnica przewyższa niepewność cen, sprawności i zapotrzebowania.</p></article>
        <article class="rk-savings-card"><h3>Oszczędność bliska zeru</h3><p>Decyzję powinny rozstrzygać moc, komfort, hydraulika i możliwość pracy przy docelowym parametrze.</p></article>
        <article class="rk-savings-card"><h3>Oszczędność ujemna</h3><p>Wariant B nie jest tańszy w eksploatacji. Może być potrzebny cieplnie, ale nie należy sprzedawać go jako oszczędności.</p></article>
      </div>
      <p>Najbardziej wrażliwe są zwykle sezonowa sprawność, rzeczywiste ciepło użyteczne i różnica kosztu wykonania. Warto policzyć scenariusz ostrożny, środkowy i korzystny. Ogólny kontekst nakładów opisuje poradnik <a href="https://projekt-ogrzewania.pl/ile-kosztuje-100-m%c2%b2-ogrzewania-podlogowego/">ile kosztuje 100 m² ogrzewania podłogowego</a>.</p>
      <div class="rk-savings-cta">
        <div class="rk-savings-cta-title">Kalkulator wycenia założenia. Projekt sprawdza, czy da się je osiągnąć.</div>
        <p>Roczna oszczędność ma sens dopiero wtedy, gdy wariant B pokrywa obciążenie każdej łazienki, sypialni i strefy przy przeszkleniach, mieści się w ograniczeniach podłogi oraz daje osiągalne przepływy i opory. Projekt łączy te warunki na rzucie budynku.</p>
        <a class="rk-savings-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt i policz wariant pomieszczeniowy</a>
        <small class="rk-savings-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>
<section class="rk-savings-section" id="rk-savings-optimization-map">
      <span class="rk-savings-eyebrow">Interaktywna grafika edukacyjna</span>
      <h2 class="rk-savings-section-title">Sześć miejsc, w których naprawdę optymalizuje się koszt podłogówki</h2>
      <p class="rk-savings-lead">Wybierz etap. Moduł pokaże mechanizm oszczędności, dane potrzebne do oceny oraz granicę, po przekroczeniu której optymalizacja zaczyna pogarszać działanie instalacji.</p>
      <div class="rk-savings-optimization-tool" id="rk-savings-optimization-tool">
        <div class="rk-savings-optimization-buttons" role="tablist" aria-label="Wybierz obszar optymalizacji">
          <button type="button" role="tab" aria-selected="true" aria-controls="rk-savings-optimization-detail" data-rk-savings-lever="ozc"><span class="rk-savings-spec-mark" aria-hidden="true">1</span><span><strong>OZC i straty</strong><small>Najpierw ogranicz energię, której budynek potrzebuje.</small></span></button>
          <button type="button" role="tab" aria-selected="false" aria-controls="rk-savings-optimization-detail" data-rk-savings-lever="area"><span class="rk-savings-spec-mark" aria-hidden="true">2</span><span><strong>Powierzchnia czynna</strong><small>Nie dziel mocy przez podłogę, która nie grzeje.</small></span></button>
          <button type="button" role="tab" aria-selected="false" aria-controls="rk-savings-optimization-detail" data-rk-savings-lever="spacing"><span class="rk-savings-spec-mark" aria-hidden="true">3</span><span><strong>Rozstaw pomieszczeniowy</strong><small>Daj więcej rury tylko tam, gdzie wnosi wartość.</small></span></button>
          <button type="button" role="tab" aria-selected="false" aria-controls="rk-savings-optimization-detail" data-rk-savings-lever="temperature"><span class="rk-savings-spec-mark" aria-hidden="true">4</span><span><strong>Temperatura i krzywa</strong><small>Utrzymuj najniższy parametr pokrywający straty.</small></span></button>
          <button type="button" role="tab" aria-selected="false" aria-controls="rk-savings-optimization-detail" data-rk-savings-lever="hydraulics"><span class="rk-savings-spec-mark" aria-hidden="true">5</span><span><strong>Hydraulika i pompa</strong><small>Pokonuj wymagane opory, a nie największą nastawę.</small></span></button>
          <button type="button" role="tab" aria-selected="false" aria-controls="rk-savings-optimization-detail" data-rk-savings-lever="control"><span class="rk-savings-spec-mark" aria-hidden="true">6</span><span><strong>Sterowanie</strong><small>Ogranicz przegrzewanie bez dławienia źródła.</small></span></button>
        </div>
        <div class="rk-savings-optimization-detail" id="rk-savings-optimization-detail" role="tabpanel" aria-live="polite">
          <div class="rk-savings-optimization-head"><span id="rk-savings-lever-step">Etap 1 z 6</span><h3 id="rk-savings-lever-title">OZC i straty budynku</h3><p id="rk-savings-lever-intro">Największa oszczędność może powstać przed instalacją: przez zmniejszenie strat, które system ma pokrywać przez cały sezon.</p></div>
          <div class="rk-savings-grid-3"><div class="rk-savings-optimization-card"><span>Co zmieniasz?</span><p id="rk-savings-lever-action">Założenia przegród, mostków, wentylacji i temperatur albo standard budynku.</p></div><div class="rk-savings-optimization-card"><span>Jak wpływa na koszt?</span><p id="rk-savings-lever-cost">Mniejsze straty obniżają potrzebne ciepło, moc źródła i temperaturę podłogi.</p></div><div class="rk-savings-optimization-card"><span>Co potwierdzić?</span><p id="rk-savings-lever-check">OZC pomieszczeń i zgodność danych z architekturą oraz wentylacją.</p></div></div>
          <div class="rk-savings-optimization-limit"><strong>Granica:</strong> <span id="rk-savings-lever-limit">Nie zmniejszaj strat tylko w arkuszu. Zaniżone OZC prowadzi do deficytu mocy.</span></div>
        </div>
      </div>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-heat-pump">
      <span class="rk-savings-eyebrow">Źródło najbardziej wrażliwe na temperaturę</span>
      <h2 class="rk-savings-section-title">Pompa ciepła: kiedy gęstszy rozstaw może obniżyć koszt?</h2>
      <p class="rk-savings-lead">Jeżeli gęstsza geometria pozwala tej samej pompie pokryć obciążenie przy niższej temperaturze wody, może poprawić warunki jej pracy. Skali efektu nie wyznacza jednak sam rozstaw, lecz charakterystyka urządzenia i cały sezon.</p>
      <div class="rk-savings-grid-3"><article class="rk-savings-card"><h3>Porównuj ten sam model</h3><p>Zestawiaj dane przy tych samych temperaturach dolnego źródła, obciążeniu i zakresie energii pomocniczej.</p></article><article class="rk-savings-card"><h3>Używaj wyniku sezonowego</h3><p>Punktowy COP nie jest rocznym dzielnikiem energii. Potrzebny jest SCOP albo pomiar całego systemu.</p></article><article class="rk-savings-card"><h3>Sprawdź minimum urządzenia</h3><p>Przepływ, zład, modulacja i odszranianie mogą przesądzić o działaniu mimo korzystnej temperatury.</p></article></div>
      <p>Celem jest najniższa temperatura nadal pokrywająca straty. Zobacz analizę <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">temperatury zasilania pompy ciepła</a> oraz sposób tworzenia <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywej grzewczej podłogówki</a>.</p>
    </section>
<section class="rk-savings-section" id="rk-savings-gas">
      <span class="rk-savings-eyebrow">Niższy powrót może wspierać kondensację</span>
      <h2 class="rk-savings-section-title">Kocioł gazowy: korzyść wynika ze sprawności sezonowej, nie z liczby rur</h2>
      <p>Kocioł kondensacyjny może pracować korzystnie przy niskiej temperaturze powrotu. Nie oznacza to, że przejście z 15 na 10 cm daje każdemu kotłowi tę samą oszczędność. Wynik zależy od temperatur rzeczywistych, modulacji, taktowania, regulacji i strat postojowych.</p>
      <div class="rk-savings-answer"><span class="rk-savings-answer-label">Jak liczyć?</span><p>W kalkulatorze wpisz porównywalną sprawność sezonową wariantu A i B. Jeżeli oba warianty utrzymują kondensację i pracują podobnie, różnica może być mała.</p></div>
      <p>Współpracę źródła z niskotemperaturową instalacją omawia poradnik <a href="https://projekt-ogrzewania.pl/kociol-gazowy/">kocioł gazowy w instalacji grzewczej</a>.</p>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-pellet">
      <span class="rk-savings-eyebrow">Niska temperatura emitera nie jest automatycznie lepsza dla kotła</span>
      <h2 class="rk-savings-section-title">Kocioł na pellet: liczą się hydraulika kotłowni i realne zużycie paliwa</h2>
      <p>Trzeba uwzględnić ochronę powrotu, mieszanie, bufor, rozruchy i pracę przy częściowym obciążeniu. Sam fakt, że podłogówka może pracować z niższym parametrem, nie pozwala podnieść sprawności kotła o arbitralny procent.</p>
      <div class="rk-savings-grid-2"><article class="rk-savings-card"><h3>Cena za tonę to za mało</h3><p>Do obliczenia energii paliwa potrzebna jest wartość opałowa konkretnego pelletu. Kalkulator przelicza cenę tony przez wpisane kWh/kg.</p></article><article class="rk-savings-card"><h3>Sprawność trzeba zdefiniować</h3><p>Potrzebny jest sezonowy udział energii paliwa, który dociera jako użyteczne ciepło do instalacji.</p></article></div>
    </section>
<section class="rk-savings-section" id="rk-savings-electric">
      <span class="rk-savings-eyebrow">Brak premii COP</span>
      <h2 class="rk-savings-section-title">Kocioł elektryczny: niższa temperatura wody zwykle nie zmienia sprawności przemiany</h2>
      <p>Grzałka oporowa zamienia pobraną energię elektryczną w ciepło z podobną sprawnością niezależnie od tego, czy instalacja pracuje z wodą 30 czy 40°C. Gęstszy rozstaw może być potrzebny dla mocy i komfortu, ale nie daje oszczędności charakterystycznej dla pompy ciepła.</p>
      <div class="rk-savings-grid-3"><article class="rk-savings-card"><h3>Stałe ciepło użyteczne</h3><p>Jeżeli budynek i komfort są takie same, energia potrzebna w pomieszczeniach pozostaje zbliżona.</p></article><article class="rk-savings-card"><h3>Różnica pomocnicza</h3><p>Hydraulika i pompa obiegowa mogą pobierać inną ilość prądu, ale trzeba policzyć punkt pracy.</p></article><article class="rk-savings-card"><h3>Różnica regulacyjna</h3><p>Oszczędność może powstać przez ograniczenie przegrzewania, a nie przez samą temperaturę wody.</p></article></div>
      <p>Dla odrębnego porównania technologii dostępny jest <a href="https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/">kalkulator ogrzewania elektrycznego i wodnej podłogówki</a>.</p>
    </section>
<section class="rk-savings-section rk-savings-section-dark" id="rk-savings-radiators">
      <span class="rk-savings-eyebrow">Porównuj kompletne systemy w tym samym budynku</span>
      <h2 class="rk-savings-section-title">Podłogówka czy grzejniki — kiedy porównanie kosztów jest uczciwe?</h2>
      <p class="rk-savings-lead">Grzejnik nie zwiększa strat domu tylko dlatego, że wisi na ścianie. Różnica powstaje, gdy systemy wymagają innej temperatury źródła, powodują inne przegrzewanie albo mają inne straty i zużycie pomocnicze.</p>
      <div class="rk-savings-grid-3"><article class="rk-savings-card"><h3>Ten sam budynek i komfort</h3><p>Oba warianty muszą dostarczyć to samo użyteczne ciepło w tej samej pogodzie.</p></article><article class="rk-savings-card"><h3>Rzeczywiste parametry</h3><p>Przewymiarowany grzejnik może pracować niskotemperaturowo; nie przypisuj wszystkim 55°C.</p></article><article class="rk-savings-card"><h3>To samo źródło i zakres</h3><p>Porównuj tę samą pompę lub kocioł oraz jawnie uwzględnij automatykę i pompy.</p></article></div>
      <p>Dlatego kalkulator pozostawia edytowalne parametry A i B zamiast gotowego mnożnika „grzejniki”. Przeczytaj o <a href="https://projekt-ogrzewania.pl/zalety-ogrzewania-podlogowego-w-porownaniu-do-tradycyjnych-grzejnikow/">podłogówce w porównaniu z grzejnikami</a> i układzie <a href="https://projekt-ogrzewania.pl/pompa-ciepla-podlogowka-i-grzejniki/">pompa ciepła, podłogówka oraz grzejniki</a>.</p>
    </section>
<section class="rk-savings-section" id="rk-savings-tariffs">
      <span class="rk-savings-eyebrow">Cena z rachunku nie zawsze jest ceną oszczędzonej kWh</span>
      <h2 class="rk-savings-section-title">Jak prawidłowo wprowadzić taryfę i koszt energii?</h2>
      <p class="rk-savings-lead">Rachunki obejmują składniki zależne od zużycia i opłaty stałe. Jeśli w obu wariantach umowa pozostaje ta sama, oszczędzenie jednej kWh nie usuwa automatycznie całej opłaty stałej.</p>
      <div class="rk-savings-grid-3"><article class="rk-savings-card"><h3>Składniki zmienne</h3><p>Cena energii lub paliwa oraz zmienne składniki dystrybucji rzeczywiście rosną wraz ze zużyciem.</p></article><article class="rk-savings-card"><h3>Składniki stałe</h3><p>Jeżeli są identyczne w A i B, nie zwiększają oszczędności różnicowej.</p></article><article class="rk-savings-card"><h3>Taryfa wielostrefowa</h3><p>Udział tańszych godzin wynika z profilu pracy, bezwładności i sterowania, a nie stałych 70%.</p></article></div>
      <p>Przepisz stawki z własnej umowy i rachunku. Nie mieszaj ceny energii elektrycznej z kosztem ciepła użytecznego. Szerszy kontekst pokazuje zestawienie <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/">kosztów ogrzewania domu</a>.</p>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-hydraulics">
      <span class="rk-savings-eyebrow">Więcej rury zmienia również opory</span>
      <h2 class="rk-savings-section-title">Jak rozstaw wpływa na pętle, przepływy i pobór pompy obiegowej?</h2>
      <p>Gęstszy rozstaw zwiększa długość rury na tę samą powierzchnię. Odpowiedzią może być większa liczba krótszych pętli, inny podział powierzchni albo zmiana rozdzielacza. Każda decyzja wpływa na opory i punkt pracy pompy.</p>
      <div class="rk-savings-grid-3"><article class="rk-savings-card"><h3>Przepływ z mocy i ΔT</h3><p>Nie ustawia się go z samego rozstawu. Pętla powinna dostać przepływ odpowiadający przypisanej mocy.</p></article><article class="rk-savings-card"><h3>Opór drogi krytycznej</h3><p>Doboru pompy nie wykonuje się przez sumowanie oporów pętli, tylko analizę najbardziej wymagającej drogi.</p></article><article class="rk-savings-card"><h3>Najwyższy bieg nie pomaga</h3><p>Nadmierna wysokość podnoszenia zwiększa pobór, hałas i dławienie bez naprawy złej geometrii.</p></article></div>
      <p>Do weryfikacji użyj poradników o <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">pompie obiegowej</a>, <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">średnicach rur</a> i <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">nastawach rotametrów</a>.</p>
    </section>
<section class="rk-savings-section" id="rk-savings-control">
      <span class="rk-savings-eyebrow">Nie oszczędzaj przez przypadkowe dławienie</span>
      <h2 class="rk-savings-section-title">Sterowanie, przegrzewanie i bezwładność — gdzie jest realny zysk?</h2>
      <p class="rk-savings-lead">Regulacja pogodowa dostosowuje temperaturę wody do warunków zewnętrznych. Sterowanie strefowe może ograniczać temperaturę w pomieszczeniach, ale nie zastępuje równoważenia ani automatyki źródła.</p>
      <div class="rk-savings-compare-table" role="table" aria-label="Sterowanie i wpływ na koszt"><div class="rk-savings-table-row rk-savings-table-head" role="row"><div role="columnheader">Działanie</div><div role="columnheader">Potencjalna korzyść</div><div role="columnheader">Ryzyko</div></div><div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Działanie" role="cell">Obniżenie krzywej</div><div data-label="Korzyść" role="cell">Niższy parametr, jeśli każde pomieszczenie nadal zachowuje komfort.</div><div data-label="Ryzyko" role="cell">Ukryty deficyt pomieszczenia krytycznego.</div></div><div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Działanie" role="cell">Równoważenie</div><div data-label="Korzyść" role="cell">Właściwa dystrybucja mocy bez przegrzewania łatwych obiegów.</div><div data-label="Ryzyko" role="cell">Dławienie bez obliczonych przepływów.</div></div><div class="rk-savings-table-row" role="row"><div class="rk-savings-table-label" data-label="Działanie" role="cell">Siłowniki</div><div data-label="Korzyść" role="cell">Ograniczenie temperatury lub harmonogramu wybranych stref.</div><div data-label="Ryzyko" role="cell">Za mały przepływ źródła po zamknięciu obiegów.</div></div></div>
      <p>Podłoga reaguje wolniej niż lekki grzejnik. Więcej wyjaśniają poradniki o <a href="https://projekt-ogrzewania.pl/sterowanie-strefowe-ogrzewaniem-czy-warto/">sterowaniu strefowym</a> i <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności cieplnej</a>.</p>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-lifecycle">
      <span class="rk-savings-eyebrow">Dwadzieścia lat to scenariusz, nie jedna prawda</span>
      <h2 class="rk-savings-section-title">Jak policzyć koszt w cyklu życia bez fałszywej precyzji?</h2>
      <p>Proste pomnożenie pierwszorocznej oszczędności przez 20 jest punktem odniesienia, ale nie prognozą. Stałe zwiększanie cen o 3% tworzy pozornie dokładną sumę, choć taryfy, sprawność urządzeń i zachowania mieszkańców są niepewne.</p>
      <div class="rk-savings-grid-3"><article class="rk-savings-card"><h3>Scenariusz ostrożny</h3><p>Mniejsza różnica sprawności, brak oszczędności z przegrzewania i wyższy koszt wykonania.</p></article><article class="rk-savings-card"><h3>Scenariusz środkowy</h3><p>Dane z projektu i źródła, bieżące ceny zmienne oraz realistyczna energia pomocnicza.</p></article><article class="rk-savings-card"><h3>Scenariusz korzystny</h3><p>Potwierdzona poprawa sezonowa i regulacyjna przy niższych nakładach.</p></article></div>
      <div class="rk-savings-note"><strong>Test wrażliwości:</strong> jeśli wariant przestaje się opłacać po niewielkiej zmianie SCOP, ceny lub nakładu, decyzja ekonomiczna jest krucha. Większą wagę powinny mieć komfort, moc i niezawodność.</div>
    </section>
<section class="rk-savings-section" id="rk-savings-example">
      <span class="rk-savings-eyebrow">Przykład metody, nie obietnica rachunku</span>
      <h2 class="rk-savings-section-title">Dom 150 m²: jak przeprowadzić analizę krok po kroku?</h2>
      <p class="rk-savings-lead">Załóżmy 150 m² budynku, 125 m² podłogi czynnej i 6750 kWh rocznego ciepła. Wariant A ma 15 cm wszędzie, a B dzieli powierzchnię: 30% przy 10 cm, 50% przy 15 cm i 20% przy 20 cm.</p>
      <div class="rk-savings-steps"><article class="rk-savings-step"><h3>1. Potwierdź 125 m²</h3><p>Wyznacz je z rzutu po odjęciu trwałej zabudowy.</p></article><article class="rk-savings-step"><h3>2. Policz metry pola</h3><p>A: około 833 m. B: około 917 m, przed podejściami.</p></article><article class="rk-savings-step"><h3>3. Podziel pętle</h3><p>Wyznacz realne trasy, a nie tylko iloraz metrażu.</p></article><article class="rk-savings-step"><h3>4. Zweryfikuj parametr</h3><p>Każde pomieszczenie musi pokryć obciążenie.</p></article><article class="rk-savings-step"><h3>5. Wpisz SCOP lub η</h3><p>Użyj porównywalnych danych sezonowych.</p></article><article class="rk-savings-step"><h3>6. Użyj własnych cen</h3><p>Wprowadź zmienne składniki swojej umowy.</p></article><article class="rk-savings-step"><h3>7. Policz scenariusze</h3><p>Zmień sprawność, nakład i cenę nośnika.</p></article><article class="rk-savings-step"><h3>8. Wybierz wykonalny układ</h3><p>Najtańszy arkusz odpada, jeśli nie bilansuje mocy.</p></article></div>
      <p>Przykład nie przesądza, że wskazany podział jest właściwy dla konkretnego domu. Dobór powstaje dla pomieszczeń, podobnie jak w <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekcie podłogówki z pompą ciepła</a>.</p>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-myths">
      <span class="rk-savings-eyebrow">Precyzyjnie brzmiące skróty bywają najbardziej kosztowne</span>
      <h2 class="rk-savings-section-title">Najczęstsze błędy w analizie oszczędności rozstawu rur</h2>
      <div class="rk-savings-mistakes"><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>Stała temperatura dla rozstawu</strong><p>10 cm nie oznacza 35°C, a 15 cm 40°C. Temperaturę wyznacza bilans.</p></div></div><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>COP użyty jako wynik roczny</strong><p>Pojedynczy punkt nie zastępuje SCOP ani pomiaru sezonu.</p></div></div><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>150 m² uznane za czynne</strong><p>Rury nie znajdują się pod każdą zabudową, ścianą i elementem technicznym.</p></div></div><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>Zawyżony metraż rury</strong><p>Relacja A/s jest kontrolą przed dodaniem podejść i zapasu.</p></div></div><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>Stałe 70% taniej taryfy</strong><p>Udział zależy od profilu pracy, bezwładności i regulacji.</p></div></div><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>Ten sam procent dla źródeł</strong><p>Pompa, gaz, pellet i grzałka inaczej reagują na temperaturę.</p></div></div><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>Więcej rury = większa masa</strong><p>Dodatkowe metry nie zwiększają masy jastrychu.</p></div></div><div class="rk-savings-mistake"><span class="rk-savings-mistake-icon">!</span><div><strong>Pomijanie pompy obiegowej</strong><p>Zmiana pętli może zmienić punkt pracy i zużycie pomocnicze.</p></div></div></div>
      <p>Przed realizacją sprawdź <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstsze błędy montażu podłogówki</a>.</p>
    </section>
<section class="rk-savings-section" id="rk-savings-checklist">
      <span class="rk-savings-eyebrow">Przed wyborem rozstawu i podpisaniem kosztorysu</span>
      <h2 class="rk-savings-section-title">Lista kontrolna optymalizacji kosztów ogrzewania podłogowego</h2>
      <div class="rk-savings-checklist"><div class="rk-savings-checklist-item"><span>✓</span><div><strong>OZC</strong><br>Obciążenie każdego pomieszczenia w watach.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Powierzchnia czynna</strong><br>Wartość z rzutu i trwałej zabudowy.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Okładzina</strong><br>Opór i limity temperatury.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Moc dla parametrów</strong><br>W/m² z obliczenia lub tabeli.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Rozstaw</strong><br>10, 15 lub 20 cm z lokalnego bilansu.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Trasy</strong><br>Długości z rzutu razem z podejściami.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Średnice</strong><br>Dobór do przepływów i oporów.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Hydraulika</strong><br>Przepływy i droga krytyczna.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Źródło</strong><br>Sezonowa sprawność dla wariantów.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Ceny zmienne</strong><br>Stawki z własnej umowy.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Energia pomocnicza</strong><br>Pompy i automatyka.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Sterowanie</strong><br>Krzywa, strefy i minimum źródła.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Wrażliwość</strong><br>Co najmniej trzy scenariusze.</div></div><div class="rk-savings-checklist-item"><span>✓</span><div><strong>Dokumentacja</strong><br>Rozstawy, pętle, przepływy i nastawy.</div></div></div>
      <p>Sprawdź również, <a href="https://projekt-ogrzewania.pl/ile-kosztuje-projekt-ogrzewania-podlogowego/">ile kosztuje projekt ogrzewania podłogowego</a>, i porównaj tę kwotę z ryzykiem zmian na budowie oraz wieloletniej pracy na zbyt wysokim parametrze.</p>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-conclusions">
      <span class="rk-savings-eyebrow">Wnioski projektanta</span>
      <h2 class="rk-savings-section-title">Jak zejść z kosztami podłogówki bez pogorszenia komfortu?</h2>
      <p class="rk-savings-lead">Najpierw ogranicz i policz straty. Następnie użyj powierzchni czynnej, konstrukcji i danych systemu do doboru rozstawu w pomieszczeniach. Potem zamknij hydraulikę, wyznacz najniższą skuteczną temperaturę i dopiero z sezonowej sprawności policz rachunek.</p>
      <div class="rk-savings-grid-3"><article class="rk-savings-card"><h3>Nie przewymiarowuj bez celu</h3><p>10 cm wszędzie jest droższe i nie musi poprawić rachunku.</p></article><article class="rk-savings-card"><h3>Nie oszczędzaj na mocy</h3><p>15 lub 20 cm odpada tam, gdzie nie pokryje obciążenia.</p></article><article class="rk-savings-card"><h3>Optymalizuj system</h3><p>Rachunek tworzą budynek, emiter, hydraulika, źródło, sterowanie i taryfa.</p></article></div>
      <div class="rk-savings-answer"><span class="rk-savings-answer-label">Reguła końcowa</span><p><strong>Najlepszy rozstaw to najrzadsza geometria, która w danym miejscu zapewnia wymaganą moc przy docelowej temperaturze, prawidłowej hydraulice i akceptowalnym koszcie całego cyklu życia.</strong></p></div>
      <div class="rk-savings-cta"><div class="rk-savings-cta-title">Zamień ogólny rozstaw na policzony układ dla każdego pomieszczenia</div><p>Projekt obejmuje obciążenia, powierzchnie czynne, temperatury, rozstawy, trasy pętli, przepływy, opory, rozdzielacze i dane do uruchomienia. Kosztorys można oprzeć na konkretnym rozwiązaniu zamiast na nadmiarowym „10 cm wszędzie”.</p><a class="rk-savings-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt podłogówki</a><small class="rk-savings-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small></div>
    </section>
<section class="rk-savings-section" id="rk-savings-references">
      <span class="rk-savings-eyebrow">Podstawa techniczna i granice obliczeń</span>
      <h2 class="rk-savings-section-title">Źródła i metodologia artykułu</h2>
      <p class="rk-savings-lead">Źródła oficjalne potwierdzają sposób wymiarowania ogrzewania płaszczyznowego, znaczenie projektu całego systemu i strukturę rachunku. Nie dostarczają jednej temperatury, ceny ani procentu oszczędności dla wszystkich domów.</p>
      <div class="rk-savings-source-grid"><article class="rk-savings-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 wraz z Amd 1:2023 — określanie mocy</a><p>Oficjalna karta części dotyczącej strumienia ciepła, temperatur powierzchni i charakterystyk systemów płaszczyznowych.</p></article><article class="rk-savings-source-card"><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 wraz z Amd 1:2023 — projektowanie</a><p>Oficjalna karta części opisującej metodę projektowania i wymiarowania systemów.</p></article><article class="rk-savings-source-card"><a href="https://www.ure.gov.pl/pl/konsumenci/rachunki-pod-kontrola-konsumen/skladowe-rachunku-za-energie-e/12783,Skladowe-rachunku-za-energie-elektryczna.html" target="_blank" rel="nofollow noopener noreferrer">URE — składowe rachunku za energię</a><p>Oficjalne objaśnienie składników sprzedaży i dystrybucji, zmiennych oraz stałych.</p></article><article class="rk-savings-source-card"><a href="https://www.gov.uk/government/news/heat-pumps-explained-experts-answer-your-questions" target="_blank" rel="nofollow noopener noreferrer">DESNZ — Heat pumps explained</a><p>Oficjalny materiał o znaczeniu dobranych emiterów i optymalizacji systemu pompy ciepła.</p></article></div>
      <div class="rk-savings-responsibility"><p><strong>Stan źródeł:</strong> odnośniki sprawdzono 11 września 2026 r. Karty ISO dotyczą wydań z 2021 r. z poprawkami Amd 1:2023.</p><p><strong>Zakres kalkulatora:</strong> geometria korzysta z relacji A/s. Koszt dzieli ciepło przez wpisany SCOP albo sprawność i dodaje energię pomocniczą. Pellet przelicza cenę tony i wartość opałową.</p><p><strong>Ograniczenia:</strong> narzędzie nie symuluje pogody godzinowej, CWU, odszraniania, strat magazynowania, taryf dynamicznych, awarii ani wymiany urządzeń.</p><p><strong>Odpowiedzialność:</strong> artykuł jest edukacyjny. Nie stanowi projektu wykonawczego, audytu, oferty ani doboru źródła.</p></div>
    </section>
<section class="rk-savings-section rk-savings-section-soft" id="rk-savings-faq">
      <span class="rk-savings-eyebrow">Najczęstsze pytania inwestorów</span>
      <h2 class="rk-savings-section-title">FAQ — rozstaw rur, koszt i oszczędności podłogówki</h2>
      <div class="rk-savings-faq">
        <details><summary>Czy rozstaw rur co 10 cm zawsze obniża rachunki?</summary><div class="rk-savings-faq-answer"><p>Nie. Może pozwolić obniżyć temperaturę wody, ale efekt zależy od sezonowej sprawności źródła. Jeżeli 15 cm zapewnia wymaganą moc, dodatkowa rura może nie dać mierzalnej oszczędności.</p></div></details>
        <details><summary>Ile rury potrzeba przy rozstawie 10 i 15 cm?</summary><div class="rk-savings-faq-answer"><p>Dla 150 m² czynnej podłogi orientacyjnie około 1500 m przy 10 cm i 1000 m przy 15 cm, przed podejściami oraz rezerwą.</p></div></details>
        <details><summary>Czy dla domu 150 m² liczyć rurę z całych 150 m²?</summary><div class="rk-savings-faq-answer"><p>Nie zawsze. Najpierw wyznacza się powierzchnię objętą rurami. Zabudowa, ściany i strefy wyłączone mogą ją zmniejszyć.</p></div></details>
        <details><summary>Czy rozstaw 10 cm oznacza zasilanie 35°C?</summary><div class="rk-savings-faq-answer"><p>Nie. Temperatura zależy od obciążenia, powierzchni czynnej, konstrukcji, okładziny, temperatury wnętrza i hydrauliki.</p></div></details>
        <details><summary>Jak policzyć okres zwrotu gęstszego rozstawu?</summary><div class="rk-savings-faq-answer"><p>Podziel dodatkowy koszt przez roczną oszczędność, jeśli jest dodatnia. Potem sprawdź wrażliwość na sprawność, ceny i koszt wykonania.</p></div></details>
        <details><summary>Czy niższa temperatura pomaga kotłowi gazowemu?</summary><div class="rk-savings-faq-answer"><p>Może wspierać kondensację przez niższy powrót, lecz wynik zależy od sezonu, modulacji, regulacji i strat kotła.</p></div></details>
        <details><summary>Czy podłogówka zawsze jest tańsza od grzejników?</summary><div class="rk-savings-faq-answer"><p>Nie. Porównanie musi zachować ten sam budynek, komfort, źródło i zakres kosztów oraz uwzględnić parametry obu emiterów.</p></div></details>
        <details><summary>Czy przy pellecie gęstszy rozstaw zmniejszy zużycie?</summary><div class="rk-savings-faq-answer"><p>Nie automatycznie. Potrzebna jest analiza sprawności całego układu z ochroną powrotu, mieszaniem i buforem.</p></div></details>
        <details><summary>Dlaczego kalkulator nie dolicza opłat stałych?</summary><div class="rk-savings-faq-answer"><p>Opłata identyczna w A i B nie jest oszczędzana wraz z każdą kWh, więc nie powinna sztucznie zwiększać korzyści B.</p></div></details>
        <details><summary>Jaki rozstaw jest najbardziej opłacalny?</summary><div class="rk-savings-faq-answer"><p>Zwykle nie jedna wartość dla domu. Projekt stosuje rozstawy pomieszczeniowe, by pokryć straty przy wspólnym parametrze bez zbędnych metrów.</p></div></details>
      </div>
    </section>
<section class="rk-savings-author" id="rk-savings-author">
      <span class="rk-savings-eyebrow">Opracowanie eksperckie</span><h2 class="rk-savings-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-savings-author-layout"><aside class="rk-savings-author-side"><div class="rk-savings-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC" width="400" height="400" loading="lazy" decoding="async"></div><div class="rk-savings-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div><p class="rk-savings-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p><div class="rk-savings-author-social" aria-label="Profile autora"><a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn">in</a><a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook">f</a><a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="X">X</a></div></aside>
        <div class="rk-savings-author-main"><div class="rk-savings-author-quote">„Najtańszy metr rury to ten, którego nie trzeba układać. Najdroższy — ten, którego zabrakło w pomieszczeniu krytycznym i wymusza wyższy parametr całej instalacji.”</div><p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz dokumentację wykonawczą. Łączy obciążenie pomieszczeń, powierzchnie czynne, moc podłogi, temperatury, pętle, przepływy, opory i wymagania źródła.</p><p>W aktualizacji usunięto stałe temperatury przypisane rozstawom, punktowy COP jako wynik roczny, arbitralny udział taniej taryfy, zawyżony metraż rur, automatyczne zwiększanie bezwładności i obietnicę pewnego zwrotu.</p><p>Kalkulator rozdziela inwestycję od eksploatacji i pokazuje cztery źródła na tych samych danych o cieple. Interaktywna mapa wskazuje sześć realnych miejsc optymalizacji.</p><p>Autor publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły</a>.</p><div class="rk-savings-author-facts"><div class="rk-savings-author-fact"><strong>Zakres</strong>podłogówka, źródła ciepła i hydraulika</div><div class="rk-savings-author-fact"><strong>Metoda</strong>OZC, emisja, pętle, opory i koszt</div><div class="rk-savings-author-fact"><strong>Aktualizacja</strong>11 września 2026 r.</div></div></div>
      </div>
    </section>
  </div>
</article>
<script>
(function () {
  "use strict";
  var root = document.getElementById("rk-savings-guide");
  if (!root) return;

  var state = { source: "hp", investmentEdited: false, geometry: {}, sources: {} };
  function el(id) { return document.getElementById(id); }
  function n(id, fallback) {
    var node = el(id);
    if (!node) return fallback;
    var value = Number(String(node.value).replace(",", "."));
    return Number.isFinite(value) ? value : fallback;
  }
  function clamp(value, minimum, maximum) { return Math.min(maximum, Math.max(minimum, value)); }
  function txt(id, value) { var node = el(id); if (node) node.textContent = value; }
  function integer(value) { return new Intl.NumberFormat("pl-PL", { maximumFractionDigits: 0 }).format(Math.round(value)); }
  function decimal(value, digits) { return new Intl.NumberFormat("pl-PL", { minimumFractionDigits: digits, maximumFractionDigits: digits }).format(value); }
  function money(value) { return new Intl.NumberFormat("pl-PL", { style: "currency", currency: "PLN", maximumFractionDigits: 0 }).format(value); }
  function signed(value) {
    if (Math.abs(value) < 0.5) return "0 zł/rok";
    return (value > 0 ? "+" : "−") + integer(Math.abs(value)) + " zł/rok";
  }

  function tab(name) {
    root.querySelectorAll("[data-rk-savings-tab]").forEach(function (button) {
      button.setAttribute("aria-selected", button.dataset.rkSavingsTab === name ? "true" : "false");
    });
    ["geometry", "operation", "chart"].forEach(function (key) {
      var panel = el("rk-savings-panel-" + key);
      if (!panel) return;
      var active = key === name;
      panel.hidden = !active;
      panel.classList.toggle("rk-savings-is-hidden", !active);
    });
  }

  function geometry() {
    var gross = Math.max(1, n("rk-savings-gross-area", 150));
    var area = Math.max(1, n("rk-savings-active-area", 125));
    var spacingA = Math.max(0.05, n("rk-savings-base-spacing", 0.15));
    var reserve = clamp(n("rk-savings-reserve", 8), 0, 30) / 100;
    var loopLength = Math.max(30, n("rk-savings-max-loop", 90));
    var price = Math.max(0, n("rk-savings-pipe-price", 5));
    var loopCost = Math.max(0, n("rk-savings-loop-cost", 250));
    var other = n("rk-savings-other-cost", 0);
    var s10 = clamp(n("rk-savings-share-10", 30), 0, 100);
    var s15 = clamp(n("rk-savings-share-15", 50), 0, 100);
    var s20 = clamp(n("rk-savings-share-20", 20), 0, 100);
    var sum = s10 + s15 + s20;
    var scale = sum > 0 ? 100 / sum : 0;
    var factor = 1 + reserve;
    var lengthA = area / spacingA * factor;
    var fieldB = sum > 0 ? area * (s10 * scale / 100) / 0.10 + area * (s15 * scale / 100) / 0.15 + area * (s20 * scale / 100) / 0.20 : 0;
    var lengthB = fieldB * factor;
    var all10 = area / 0.10 * factor;
    var loopsA = Math.max(1, Math.ceil(lengthA / loopLength - 0.000000001));
    var loopsB = Math.max(1, Math.ceil(lengthB / loopLength - 0.000000001));
    var deltaLength = lengthB - lengthA;
    var deltaLoops = loopsB - loopsA;
    var investment = deltaLength * price + deltaLoops * loopCost + other;
    state.geometry = { lengthA: lengthA, lengthB: lengthB, all10: all10, loopsA: loopsA, loopsB: loopsB, investment: investment };

    var status = el("rk-savings-share-status");
    if (status) {
      var exact = Math.abs(sum - 100) < 0.01;
      var areaWarning = area > gross;
      var message = exact ? "Suma: 100%" : "Suma: " + integer(sum) + "% — udziały są normalizowane";
      if (areaWarning) message += "; powierzchnia czynna przekracza powierzchnię domu";
      status.textContent = message;
      status.classList.toggle("is-warning", !exact || areaWarning);
    }
    txt("rk-savings-length-a", integer(lengthA) + " m rury");
    txt("rk-savings-loops-a", integer(loopsA) + " szac. pętli");
    txt("rk-savings-length-b", integer(lengthB) + " m rury");
    txt("rk-savings-loops-b", integer(loopsB) + " szac. pętli");
    txt("rk-savings-length-all10", integer(all10) + " m rury");
    txt("rk-savings-investment-delta", money(investment));
    txt("rk-savings-length-delta", (deltaLength >= 0 ? "+" : "−") + integer(Math.abs(deltaLength)) + " m; " + (deltaLoops >= 0 ? "+" : "−") + Math.abs(deltaLoops) + " pętli");
    var override = el("rk-savings-investment-override");
    if (override) if (!state.investmentEdited) override.value = String(Math.round(investment));
  }

  function result(name, effA, effB, carrierPrice, heatA, heatB, auxA, auxB, electricPrice) {
    var a = Math.max(0.01, effA);
    var b = Math.max(0.01, effB);
    var costA = heatA / a * carrierPrice + auxA * electricPrice;
    var costB = heatB / b * carrierPrice + auxB * electricPrice;
    var saving = costA - costB;
    return { name: name, costA: costA, costB: costB, saving: saving, percent: costA > 0 ? saving / costA * 100 : 0 };
  }

  function sources() {
    var heatA = Math.max(0, n("rk-savings-annual-heat", 6750));
    var heatB = heatA * (1 - clamp(n("rk-savings-overheat", 0), 0, 25) / 100);
    var auxA = Math.max(0, n("rk-savings-aux-a", 150));
    var auxB = Math.max(0, n("rk-savings-aux-b", 130));
    var electricity = Math.max(0.001, n("rk-savings-electricity-price", 1.05));
    var gas = Math.max(0.001, n("rk-savings-gas-price", 0.35));
    var pellet = Math.max(0.001, n("rk-savings-pellet-price", 1500));
    var calorific = Math.max(0.1, n("rk-savings-pellet-calorific", 4.8));
    state.sources = {
      hp: result("Pompa ciepła", n("rk-savings-hp-eff-a", 3.4), n("rk-savings-hp-eff-b", 3.8), electricity, heatA, heatB, auxA, auxB, electricity),
      gas: result("Kocioł gazowy", n("rk-savings-gas-eff-a", 0.90), n("rk-savings-gas-eff-b", 0.95), gas, heatA, heatB, auxA, auxB, electricity),
      pellet: result("Kocioł na pellet", n("rk-savings-pellet-eff-a", 0.82), n("rk-savings-pellet-eff-b", 0.82), pellet / (1000 * calorific), heatA, heatB, auxA, auxB, electricity),
      electric: result("Kocioł elektryczny", n("rk-savings-electric-eff-a", 0.99), n("rk-savings-electric-eff-b", 0.99), electricity, heatA, heatB, auxA, auxB, electricity)
    };
    [["hp", "rk-savings-hp-costs", "rk-savings-hp-saving"], ["gas", "rk-savings-gas-costs", "rk-savings-gas-saving"], ["pellet", "rk-savings-pellet-costs", "rk-savings-pellet-saving"], ["electric", "rk-savings-electric-costs", "rk-savings-electric-saving"]].forEach(function (row) {
      var item = state.sources[row[0]];
      txt(row[1], money(item.costA) + " / " + money(item.costB) + " rocznie");
      txt(row[2], signed(item.saving) + " (" + decimal(item.percent, 1) + "%)");
      var cell = el(row[2]);
      if (cell) {
        cell.classList.toggle("is-positive", item.saving > 0.5);
        cell.classList.toggle("is-negative", item.saving < -0.5);
      }
    });
  }

  function series(investment, annual, growth, years) {
    var values = [-investment];
    var total = -investment;
    var year;
    for (year = 1; year <= years; year += 1) {
      total += annual * Math.pow(1 + growth, year - 1);
      values.push(total);
    }
    return values;
  }
  function payback(investment, annual, growth) {
    if (investment <= 0) return annual >= 0 ? "od początku" : "przewaga startowa maleje";
    if (annual <= 0) return "brak zwrotu";
    var total = -investment;
    var year;
    for (year = 1; year <= 200; year += 1) {
      total += annual * Math.pow(1 + growth, year - 1);
      if (total >= 0) return year === 1 ? "do 1 roku" : "około " + year + " lat";
    }
    return "ponad 200 lat";
  }
  function svgText(x, y, value, className, anchor) {
    return '<text x="' + x + '" y="' + y + '" class="' + className + '" text-anchor="' + (anchor || "start") + '">' + value + "</text>";
  }

  function chart() {
    var item = state.sources[state.source];
    if (!item) return;
    var investment = n("rk-savings-investment-override", 0);
    var years = Math.round(clamp(n("rk-savings-horizon", 20), 1, 40));
    var growth = clamp(n("rk-savings-growth", 0), -10, 25) / 100;
    var values = series(investment, item.saving, growth, years);
    var finalValue = values[values.length - 1];
    txt("rk-savings-chart-source-name", item.name);
    txt("rk-savings-chart-saving", signed(item.saving));
    txt("rk-savings-chart-payback", payback(investment, item.saving, growth));
    txt("rk-savings-chart-total", money(finalValue));

    var svg = el("rk-savings-chart-svg");
    if (!svg) return;
    var top = 86, bottom = 330, maxCost = Math.max(1, item.costA, item.costB) * 1.12;
    var heightA = item.costA / maxCost * (bottom - top);
    var heightB = item.costB / maxCost * (bottom - top);
    var left = 344, right = 724;
    var minValue = Math.min.apply(null, values.concat([0]));
    var maxValue = Math.max.apply(null, values.concat([0]));
    if (Math.abs(maxValue - minValue) < 1) { maxValue += 1; minValue -= 1; }
    var padding = (maxValue - minValue) * 0.12;
    maxValue += padding; minValue -= padding;
    function y(value) { return bottom - (value - minValue) / (maxValue - minValue) * (bottom - top); }
    var points = values.map(function (value, index) { return (left + index / years * (right - left)).toFixed(1) + "," + y(value).toFixed(1); }).join(" ");
    var grid = "";
    var gridIndex;
    for (gridIndex = 0; gridIndex <= 4; gridIndex += 1) {
      var gy = top + gridIndex / 4 * (bottom - top);
      var gv = maxValue - gridIndex / 4 * (maxValue - minValue);
      grid += '<line x1="' + left + '" y1="' + gy + '" x2="' + right + '" y2="' + gy + '" class="rk-savings-svg-grid" />';
      grid += svgText(left - 8, gy + 4, integer(gv) + " zł", "rk-savings-svg-tick", "end");
    }
    var mid = Math.max(1, Math.round(years / 2));
    var markup = '<rect x="0" y="0" width="760" height="410" rx="18" class="rk-savings-svg-bg" />';
    markup += svgText(36, 42, "Koszt w 1. roku", "rk-savings-svg-title");
    markup += svgText(left, 42, "Bilans inwestycji po latach", "rk-savings-svg-title");
    markup += '<line x1="310" y1="60" x2="310" y2="354" class="rk-savings-svg-separator" />';
    markup += '<line x1="48" y1="330" x2="278" y2="330" class="rk-savings-svg-axis" />';
    markup += '<rect x="80" y="' + (bottom - heightA) + '" width="72" height="' + heightA + '" rx="9" class="rk-savings-svg-bar-a" />';
    markup += '<rect x="184" y="' + (bottom - heightB) + '" width="72" height="' + heightB + '" rx="9" class="rk-savings-svg-bar-b" />';
    markup += svgText(116, 357, "A", "rk-savings-svg-label", "middle") + svgText(220, 357, "B", "rk-savings-svg-label", "middle");
    markup += svgText(116, Math.max(top + 18, bottom - heightA - 10), integer(item.costA) + " zł", "rk-savings-svg-value", "middle");
    markup += svgText(220, Math.max(top + 18, bottom - heightB - 10), integer(item.costB) + " zł", "rk-savings-svg-value", "middle");
    markup += grid + '<line x1="' + left + '" y1="' + y(0) + '" x2="' + right + '" y2="' + y(0) + '" class="rk-savings-svg-zero" />';
    markup += '<polyline points="' + points + '" class="rk-savings-svg-line" /><circle cx="' + right + '" cy="' + y(finalValue) + '" r="6" class="rk-savings-svg-point" />';
    markup += svgText(left, 365, "0", "rk-savings-svg-label", "middle") + svgText(left + mid / years * (right - left), 365, String(mid), "rk-savings-svg-label", "middle") + svgText(right, 365, String(years) + " lat", "rk-savings-svg-label", "middle");
    markup += svgText(right, Math.max(73, Math.min(390, y(finalValue) - 12)), money(finalValue), "rk-savings-svg-value", "end");
    markup += svgText(36, 392, "Wynik zależy wyłącznie od wpisanych założeń.", "rk-savings-svg-note");
    svg.innerHTML = markup;

    var reading = "Różnica roczna jest bliska zeru; rozstrzygają moc, komfort i hydraulika.";
    if (item.saving > 0.5) reading = "Wariant B oszczędza około " + money(item.saving) + " w pierwszym roku. Przy różnicy inwestycji " + money(investment) + " prosty zwrot to " + payback(investment, item.saving, growth) + ".";
    if (item.saving < -0.5) reading = "Wariant B kosztuje około " + money(Math.abs(item.saving)) + " więcej rocznie i nie jest wariantem oszczędnościowym przy tych danych.";
    txt("rk-savings-chart-reading", reading);
    var description = el("rk-savings-chart-desc");
    if (description) description.textContent = item.name + ": A " + money(item.costA) + ", B " + money(item.costB) + ", bilans po " + years + " latach " + money(finalValue) + ".";
  }

  function update() { geometry(); sources(); chart(); }

  var levers = {
    ozc: ["Etap 1 z 6", "OZC i straty budynku", "Największa oszczędność może powstać przed instalacją: przez zmniejszenie strat, które system ma pokrywać przez cały sezon.", "Założenia przegród, mostków, wentylacji i temperatur pomieszczeń albo sam standard budynku.", "Mniejsze straty obniżają potrzebne ciepło, moc źródła i zwykle temperaturę wymaganą przez podłogę.", "OZC dla każdego pomieszczenia i zgodność danych z architekturą oraz wentylacją.", "Nie zmniejszaj strat tylko w arkuszu. Zaniżone OZC prowadzi do deficytu mocy."],
    area: ["Etap 2 z 6", "Powierzchnia czynna podłogi", "Ta sama moc rozłożona na mniejszej powierzchni wymaga większego strumienia W/m².", "Koordynujesz pętle z trwałą zabudową, wanną, szafami, wyspą i dylatacjami.", "Unikasz braku mocy i kupowania rury dla obszaru, którego nie da się wykorzystać.", "Rzut wykonawczy, aranżację i listę powierzchni wyłączonych.", "Nie odejmuj automatycznie wszystkich mebli ruchomych; kryterium musi być spójne z projektem."],
    spacing: ["Etap 3 z 6", "Rozstaw dobrany do pomieszczeń", "10, 15 lub 20 cm jest narzędziem do uzyskania wymaganej mocy przy wspólnym parametrze.", "Zagęszczasz strefy krytyczne, a rzadszy rozstaw zostawiasz tam, gdzie pozwala bilans.", "Ograniczasz zbędne metry i pętle bez podnoszenia temperatury całego systemu.", "Moc z obliczeń lub właściwych tabel dla dokładnej konstrukcji i okładziny.", "Rzadszy rozstaw nie może tworzyć deficytu, a gęstszy nie naprawi dowolnie małej powierzchni."],
    temperature: ["Etap 4 z 6", "Temperatura i krzywa grzewcza", "Parametr projektowy pokrywa straty w warunkach obliczeniowych, a krzywa obniża go przy cieplejszej pogodzie.", "Ustalasz punkt projektowy, nachylenie i przesunięcie krzywej.", "Niższa wymagana temperatura może poprawić SCOP pompy i warunki kondensacji kotła gazowego.", "Bilans pomieszczeń i dane źródła w porównywalnych warunkach.", "Nie obniżaj parametru poniżej wartości, przy której pomieszczenie krytyczne traci bilans."],
    hydraulics: ["Etap 5 z 6", "Hydraulika i pompa obiegowa", "Prawidłowa moc wymaga przepływu przez pętle przy oporze, który układ potrafi pokonać.", "Dobierasz średnice, długości, rozdzielacze, rotametry i punkt pracy pompy.", "Unikasz zbędnej wysokości podnoszenia, hałasu i poboru prądu.", "Przepływy z mocy i ΔT, opory elementów oraz charakterystykę pompy.", "Nie naprawiaj deficytu cieplnego najwyższym biegiem pompy ani maksymalnym otwarciem rotametrów."],
    control: ["Etap 6 z 6", "Sterowanie bez przegrzewania", "Oszczędność powstaje, gdy regulacja ogranicza zbędne ciepło i zostawia źródłu bezpieczne warunki.", "Dostrajasz krzywą, temperatury stref i logikę siłowników z uwzględnieniem bezwładności.", "Mniejsze przegrzewanie ogranicza ciepło użyteczne, a stabilna praca może zmniejszać cykle.", "Temperatury pomieszczeń, czas reakcji, minimalny przepływ i zachowanie źródła.", "Termostat nie dobiera wody, nie równoważy pętli i nie zastępuje automatyki źródła."]
  };
  function showLever(key) {
    var data = levers[key];
    if (!data) return;
    ["rk-savings-lever-step", "rk-savings-lever-title", "rk-savings-lever-intro", "rk-savings-lever-action", "rk-savings-lever-cost", "rk-savings-lever-check", "rk-savings-lever-limit"].forEach(function (id, index) { txt(id, data[index]); });
    root.querySelectorAll("[data-rk-savings-lever]").forEach(function (button) { button.setAttribute("aria-selected", button.dataset.rkSavingsLever === key ? "true" : "false"); });
  }

  root.addEventListener("click", function (event) {
    var target = event.target.closest("[data-rk-savings-tab], [data-rk-savings-source], [data-rk-savings-lever], #rk-savings-go-operation, #rk-savings-go-chart");
    if (!target) return;
    if (target.dataset.rkSavingsTab) { tab(target.dataset.rkSavingsTab); return; }
    if (target.dataset.rkSavingsSource) {
      state.source = target.dataset.rkSavingsSource;
      root.querySelectorAll("[data-rk-savings-source]").forEach(function (button) { button.setAttribute("aria-pressed", button === target ? "true" : "false"); });
      chart(); return;
    }
    if (target.dataset.rkSavingsLever) { showLever(target.dataset.rkSavingsLever); return; }
    if (target.id === "rk-savings-go-operation") { tab("operation"); el("rk-savings-panel-operation").scrollIntoView({ behavior: "smooth", block: "nearest" }); return; }
    if (target.id === "rk-savings-go-chart") { tab("chart"); chart(); el("rk-savings-panel-chart").scrollIntoView({ behavior: "smooth", block: "nearest" }); }
  });
  root.addEventListener("input", function (event) { if (event.target.id === "rk-savings-investment-override") state.investmentEdited = true; update(); });
  root.addEventListener("change", update);
  root.querySelectorAll(".rk-savings-faq details").forEach(function (detail) {
    detail.addEventListener("toggle", function () {
      if (!detail.open) return;
      root.querySelectorAll(".rk-savings-faq details").forEach(function (other) { if (other !== detail) other.open = false; });
    });
  });
  update(); showLever("ozc");
}());
</script>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "description": "Profesjonalne projektowanie ogrzewania podłogowego i poradniki techniczne HVAC.",
      "inLanguage": "pl-PL",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "potentialAction": {
        "@type": "SearchAction",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://projekt-ogrzewania.pl/?s={search_term_string}"
        },
        "query-input": "required name=search_term_string"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@id": "https://projekt-ogrzewania.pl/#logo"
      },
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@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": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/#logo",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "width": 1024,
      "height": 1024,
      "caption": "Projekt Ogrzewania"
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "affiliation": [
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ],
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "pompy ciepła",
        "obliczenia OZC",
        "temperatura zasilania",
        "hydraulika instalacji",
        "krzywa grzewcza"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-–-analiza-rozstawu-rur-dla-domu-150-m².webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-–-analiza-rozstawu-rur-dla-domu-150-m².webp",
      "width": 945,
      "height": 945,
      "encodingFormat": "image/webp",
      "caption": "Rzeczywiste oszczędności na kosztach ogrzewania — analiza rozstawu rur dla domu 150 m²"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Strona główna",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Ogrzewanie podłogowe",
          "item": "https://projekt-ogrzewania.pl/category/ogrzewanie-podlogowe/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Rozstaw rur 10 czy 15 cm — koszty i oszczędności",
          "item": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#webpage",
      "url": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/",
      "name": "Rozstaw rur 10 czy 15 cm — rzeczywiste koszty ogrzewania domu 150 m²",
      "description": "Czy rozstaw rur co 10 cm naprawdę obniża rachunki? Policz koszt rur, energii i zwrot dla domu 150 m² z pompą ciepła, gazem, pelletem lub prądem.",
      "inLanguage": "pl-PL",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#breadcrumb"
      },
      "primaryImageOfPage": {
        "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#primaryimage"
      },
      "datePublished": "2026-01-31T11:58:03+00:00",
      "dateModified": "2026-09-11T00:00:00+00:00",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "reviewedBy": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "mainEntity": {
        "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#article"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          "#rk-savings-answer",
          "#rk-savings-conclusions"
        ]
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#article",
      "headline": "Rozstaw rur 10 czy 15 cm — rzeczywiste koszty ogrzewania domu 150 m²",
      "alternativeHeadline": "Czy gęstszy rozstaw podłogówki się opłaca? Kalkulator pompy ciepła, gazu, pelletu i prądu",
      "description": "Techniczna analiza wpływu rozstawu rur na długość pętli, temperaturę wody, sprawność sezonową, koszt energii i zwrot.",
      "image": {
        "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#primaryimage"
      },
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#webpage"
      },
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "datePublished": "2026-01-31T11:58:03+00:00",
      "dateModified": "2026-09-11T00:00:00+00:00",
      "inLanguage": "pl-PL",
      "articleSection": [
        "Ogrzewanie podłogowe",
        "Koszty ogrzewania",
        "Rozstaw rur",
        "Hydraulika",
        "Pompy ciepła"
      ],
      "keywords": [
        "rozstaw rur 10 czy 15 cm",
        "czy rozstaw rur 10 cm się opłaca",
        "ile rury na 150 m² podłogówki",
        "koszt ogrzewania domu 150 m²",
        "podłogówka czy grzejniki koszty",
        "optymalizacja ogrzewania podłogowego"
      ],
      "about": [
        {
          "@type": "Thing",
          "name": "Ogrzewanie podłogowe"
        },
        {
          "@type": "Thing",
          "name": "Rozstaw rur"
        },
        {
          "@type": "Thing",
          "name": "Koszt cyklu życia"
        }
      ],
      "hasPart": [
        {
          "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#cost-calculator"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#optimization-map"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#howto"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#checklist"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#faq-schema"
        }
      ],
      "citation": [
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74684.html",
        "https://www.ure.gov.pl/pl/konsumenci/rachunki-pod-kontrola-konsumen/skladowe-rachunku-za-energie-e/12783,Skladowe-rachunku-za-energie-elektryczna.html",
        "https://www.gov.uk/government/news/heat-pumps-explained-experts-answer-your-questions"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#cost-calculator",
      "name": "Kalkulator optymalizacji kosztów ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#rk-savings-calculator",
      "description": "Oblicza długość rur, różnicę nakładów, koszty czterech źródeł i skumulowany zwrot.",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "creator": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "featureList": [
        "długość rur i liczba pętli",
        "koszt różnicowy",
        "pompa ciepła, gaz, pellet i prąd",
        "wykres kosztów",
        "prosty zwrot"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#optimization-map",
      "name": "Interaktywna mapa optymalizacji podłogówki",
      "url": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#rk-savings-optimization-map",
      "description": "Sześć etapów optymalizacji: OZC, powierzchnia czynna, rozstaw, temperatura, hydraulika i sterowanie.",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "creator": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "educationalUse": "analiza założeń projektu ogrzewania podłogowego"
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#howto",
      "name": "Jak przeprowadzić analizę kosztów rozstawu rur dla domu 150 m²",
      "description": "Osiem kroków od powierzchni czynnej i metrażu do analizy kosztów.",
      "totalTime": "PT45M",
      "supply": [
        {
          "@type": "HowToSupply",
          "name": "OZC pomieszczeń"
        },
        {
          "@type": "HowToSupply",
          "name": "Rzut z powierzchnią czynną"
        },
        {
          "@type": "HowToSupply",
          "name": "Dane źródła"
        },
        {
          "@type": "HowToSupply",
          "name": "Ceny nośników"
        }
      ],
      "tool": [
        {
          "@type": "HowToTool",
          "name": "Kalkulator w artykule"
        },
        {
          "@type": "HowToTool",
          "name": "Dokumentacja systemu podłogowego"
        }
      ],
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Potwierdź 125 m²",
          "text": "Wyznacz je z rzutu po odjęciu trwałej zabudowy."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Policz metry pola",
          "text": "A: około 833 m. B: około 917 m, przed podejściami."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Podziel pętle",
          "text": "Wyznacz realne trasy, a nie tylko iloraz metrażu."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Zweryfikuj parametr",
          "text": "Każde pomieszczenie musi pokryć obciążenie."
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Wpisz SCOP lub η",
          "text": "Użyj porównywalnych danych sezonowych."
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Użyj własnych cen",
          "text": "Wprowadź zmienne składniki swojej umowy."
        },
        {
          "@type": "HowToStep",
          "position": 7,
          "name": "Policz scenariusze",
          "text": "Zmień sprawność, nakład i cenę nośnika."
        },
        {
          "@type": "HowToStep",
          "position": 8,
          "name": "Wybierz wykonalny układ",
          "text": "Najtańszy arkusz odpada, jeśli nie bilansuje mocy."
        }
      ]
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#checklist",
      "name": "Lista kontrolna optymalizacji kosztów podłogówki",
      "numberOfItems": 14,
      "itemListOrder": "https://schema.org/ItemListOrderAscending",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "OZC"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Powierzchnia czynna"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Okładzina"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "Moc dla parametrów"
        },
        {
          "@type": "ListItem",
          "position": 5,
          "name": "Rozstaw"
        },
        {
          "@type": "ListItem",
          "position": 6,
          "name": "Trasy"
        },
        {
          "@type": "ListItem",
          "position": 7,
          "name": "Średnice"
        },
        {
          "@type": "ListItem",
          "position": 8,
          "name": "Hydraulika"
        },
        {
          "@type": "ListItem",
          "position": 9,
          "name": "Źródło"
        },
        {
          "@type": "ListItem",
          "position": 10,
          "name": "Ceny zmienne"
        },
        {
          "@type": "ListItem",
          "position": 11,
          "name": "Energia pomocnicza"
        },
        {
          "@type": "ListItem",
          "position": 12,
          "name": "Sterowanie"
        },
        {
          "@type": "ListItem",
          "position": 13,
          "name": "Wrażliwość"
        },
        {
          "@type": "ListItem",
          "position": 14,
          "name": "Dokumentacja"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#faq-schema",
      "url": "https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m²/#rk-savings-faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Czy rozstaw rur co 10 cm zawsze obniża rachunki?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Może pozwolić obniżyć temperaturę wody, ale efekt zależy od sezonowej sprawności źródła. Jeżeli 15 cm zapewnia wymaganą moc, dodatkowa rura może nie dać mierzalnej oszczędności."
          }
        },
        {
          "@type": "Question",
          "name": "Ile rury potrzeba przy rozstawie 10 i 15 cm?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Dla 150 m² czynnej podłogi orientacyjnie około 1500 m przy 10 cm i 1000 m przy 15 cm, przed podejściami oraz rezerwą."
          }
        },
        {
          "@type": "Question",
          "name": "Czy dla domu 150 m² liczyć rurę z całych 150 m²?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie zawsze. Najpierw wyznacza się powierzchnię objętą rurami. Zabudowa, ściany i strefy wyłączone mogą ją zmniejszyć."
          }
        },
        {
          "@type": "Question",
          "name": "Czy rozstaw 10 cm oznacza zasilanie 35°C?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Temperatura zależy od obciążenia, powierzchni czynnej, konstrukcji, okładziny, temperatury wnętrza i hydrauliki."
          }
        },
        {
          "@type": "Question",
          "name": "Jak policzyć okres zwrotu gęstszego rozstawu?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Podziel dodatkowy koszt przez roczną oszczędność, jeśli jest dodatnia. Potem sprawdź wrażliwość na sprawność, ceny i koszt wykonania."
          }
        },
        {
          "@type": "Question",
          "name": "Czy niższa temperatura pomaga kotłowi gazowemu?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Może wspierać kondensację przez niższy powrót, lecz wynik zależy od sezonu, modulacji, regulacji i strat kotła."
          }
        },
        {
          "@type": "Question",
          "name": "Czy podłogówka zawsze jest tańsza od grzejników?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Porównanie musi zachować ten sam budynek, komfort, źródło i zakres kosztów oraz uwzględnić parametry obu emiterów."
          }
        },
        {
          "@type": "Question",
          "name": "Czy przy pellecie gęstszy rozstaw zmniejszy zużycie?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie automatycznie. Potrzebna jest analiza sprawności całego układu z ochroną powrotu, mieszaniem i buforem."
          }
        },
        {
          "@type": "Question",
          "name": "Dlaczego kalkulator nie dolicza opłat stałych?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Opłata identyczna w A i B nie jest oszczędzana wraz z każdą kWh, więc nie powinna sztucznie zwiększać korzyści B."
          }
        },
        {
          "@type": "Question",
          "name": "Jaki rozstaw jest najbardziej opłacalny?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Zwykle nie jedna wartość dla domu. Projekt stosuje rozstawy pomieszczeniowe, by pokryć straty przy wspólnym parametrze bez zbędnych metrów."
          }
        }
      ]
    }
  ]
}
</script>
<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 – kalkulator strat, mocy i kosztów ogrzewania.</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 – kalkulator strat, mocy i kosztów ogrzewania.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-bilans-guide {
    --rk-bh-dark: #102536;
    --rk-bh-navy: #15384d;
    --rk-bh-navy-2: #1c5362;
    --rk-bh-blue: #078fbe;
    --rk-bh-cyan: #25c7d8;
    --rk-bh-cyan-soft: #e9fbfe;
    --rk-bh-orange: #ff6a3d;
    --rk-bh-orange-soft: #fff1eb;
    --rk-bh-green: #16836b;
    --rk-bh-green-soft: #eaf8f3;
    --rk-bh-yellow: #a86a00;
    --rk-bh-yellow-soft: #fff7dd;
    --rk-bh-red: #d94b3d;
    --rk-bh-red-soft: #fff0ee;
    --rk-bh-purple: #695ac9;
    --rk-bh-purple-soft: #f1efff;
    --rk-bh-ink: #1d2d39;
    --rk-bh-text: #465d6c;
    --rk-bh-muted: #6a7f8d;
    --rk-bh-line: #d3e3ea;
    --rk-bh-soft: #f4f9fb;
    --rk-bh-white: #ffffff;
    width: 100%;
    max-width: 1180px;
    margin: 34px auto 72px;
    color: var(--rk-bh-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 18px;
    line-height: 1.74;
  }
  #rk-bilans-guide,
  #rk-bilans-guide * { box-sizing: border-box; }
  #rk-bilans-guide img,
  #rk-bilans-guide svg { display: block; max-width: 100%; }
  #rk-bilans-guide button,
  #rk-bilans-guide input,
  #rk-bilans-guide select,
  #rk-bilans-guide label,
  #rk-bilans-guide summary,
  #rk-bilans-guide a { font: inherit; -webkit-tap-highlight-color: transparent; }
  #rk-bilans-guide button { cursor: pointer; }
  #rk-bilans-guide a {
    color: var(--rk-bh-blue);
    font-weight: 780;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }
  #rk-bilans-guide a:hover,
  #rk-bilans-guide a:focus-visible { color: var(--rk-bh-red); }
  #rk-bilans-guide button:focus-visible,
  #rk-bilans-guide summary:focus-visible,
  #rk-bilans-guide a:focus-visible,
  #rk-bilans-guide input:focus-visible,
  #rk-bilans-guide select:focus-visible {
    outline: 3px solid rgba(7, 143, 190, .28);
    outline-offset: 3px;
  }
  #rk-bilans-guide p,
  #rk-bilans-guide ul,
  #rk-bilans-guide ol { margin-top: 0; margin-bottom: 1.08em; }
  #rk-bilans-guide h2,
  #rk-bilans-guide h3,
  #rk-bilans-guide h4 {
    margin-top: 0;
    color: var(--rk-bh-dark);
    font-weight: 920;
    letter-spacing: -.035em;
    line-height: 1.15;
    overflow-wrap: anywhere;
  }
  #rk-bilans-guide h2 { margin-bottom: 18px; font-size: clamp(1.72rem, 4vw, 2.7rem); }
  #rk-bilans-guide h3 { margin-bottom: 11px; font-size: clamp(1.12rem, 2.35vw, 1.46rem); }
  #rk-bilans-guide h4 { margin-bottom: 8px; font-size: 1.02rem; }
  #rk-bilans-guide strong { font-weight: 860; }
  #rk-bilans-guide [hidden] { display: none !important; }
  #rk-bilans-guide .rk-bh-visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }

  #rk-bilans-guide .rk-bh-shell {
    overflow: hidden;
    border: 1px solid var(--rk-bh-line);
    border-radius: 27px;
    background: var(--rk-bh-white);
    box-shadow: 0 24px 72px rgba(16, 37, 54, .11);
  }
  #rk-bilans-guide .rk-bh-hero {
    position: relative;
    overflow: hidden;
    padding: clamp(38px, 7vw, 78px) clamp(25px, 6vw, 76px) 42px;
    color: #ffffff !important;
    background:
      radial-gradient(circle at 91% 4%, rgba(37, 199, 216, .31), transparent 29%),
      radial-gradient(circle at 8% 105%, rgba(255, 106, 61, .23), transparent 31%),
      linear-gradient(135deg, #0d2332 0%, #143e53 56%, #175d64 100%);
  }
  #rk-bilans-guide .rk-bh-hero::after {
    position: absolute;
    right: -58px;
    bottom: -135px;
    width: 370px;
    height: 370px;
    border: 48px solid rgba(255, 255, 255, .05);
    border-radius: 50%;
    content: "";
  }
  #rk-bilans-guide .rk-bh-kicker {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 16px;
    color: #78efff !important;
    font-size: .69rem;
    font-weight: 950;
    letter-spacing: .095em;
    line-height: 1.2;
    text-transform: uppercase;
  }
  #rk-bilans-guide .rk-bh-kicker::before {
    width: 9px;
    height: 9px;
    flex: 0 0 9px;
    border-radius: 50%;
    background: var(--rk-bh-orange);
    box-shadow: 0 0 0 6px rgba(255, 106, 61, .14);
    content: "";
  }
  #rk-bilans-guide .rk-bh-hero-title {
    position: relative;
    z-index: 1;
    max-width: 1040px;
    margin: 0 0 21px;
    color: #ffffff !important;
    font-size: clamp(2.2rem, 7.1vw, 5rem);
    font-weight: 950;
    letter-spacing: -.065em;
    line-height: .99;
  }
  #rk-bilans-guide .rk-bh-hero-title span { color: #66e8f5 !important; }
  #rk-bilans-guide .rk-bh-lead {
    position: relative;
    z-index: 1;
    max-width: 970px;
    margin-bottom: 24px;
    color: #e2f2f5 !important;
    font-size: clamp(1rem, 2.2vw, 1.3rem);
    line-height: 1.56;
  }
  #rk-bilans-guide .rk-bh-tags,
  #rk-bilans-guide .rk-bh-byline {
    position: relative;
    z-index: 1;
    display: flex;
    flex-wrap: wrap;
    gap: 9px 12px;
  }
  #rk-bilans-guide .rk-bh-tag {
    padding: 8px 13px;
    border: 1px solid rgba(255, 255, 255, .23);
    border-radius: 999px;
    color: #ffffff !important;
    background: rgba(255, 255, 255, .075);
    font-size: .67rem;
    font-weight: 850;
    line-height: 1.2;
  }
  #rk-bilans-guide .rk-bh-byline {
    margin-top: 27px;
    color: #cbe2e7 !important;
    font-size: .68rem;
    font-weight: 730;
  }
  #rk-bilans-guide .rk-bh-byline strong { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-hero-metrics {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin-top: 29px;
  }
  #rk-bilans-guide .rk-bh-hero-metric {
    min-width: 0;
    padding: 18px;
    border: 1px solid rgba(255, 255, 255, .19);
    border-radius: 15px;
    background: rgba(255, 255, 255, .075);
  }
  #rk-bilans-guide .rk-bh-hero-metric b {
    display: block;
    margin-bottom: 5px;
    color: #ffffff !important;
    font-size: .75rem;
  }
  #rk-bilans-guide .rk-bh-hero-metric span {
    display: block;
    color: #d2e7ec !important;
    font-size: .64rem;
    line-height: 1.48;
  }

  #rk-bilans-guide .rk-bh-nav {
    padding: 18px clamp(20px, 4vw, 46px);
    border-bottom: 1px solid var(--rk-bh-line);
    background: #ffffff;
  }
  #rk-bilans-guide .rk-bh-nav-label {
    display: block;
    margin-bottom: 10px;
    color: var(--rk-bh-muted);
    font-size: .62rem;
    font-weight: 950;
    letter-spacing: .08em;
    text-transform: uppercase;
  }
  #rk-bilans-guide .rk-bh-nav-links { display: flex; flex-wrap: wrap; gap: 8px; }
  #rk-bilans-guide .rk-bh-nav-links a {
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    padding: 7px 11px;
    border: 1px solid var(--rk-bh-line);
    border-radius: 999px;
    color: var(--rk-bh-dark);
    background: var(--rk-bh-soft);
    font-size: .61rem;
    font-weight: 800;
    line-height: 1.2;
    text-decoration: none;
  }
  #rk-bilans-guide .rk-bh-nav-links a:hover,
  #rk-bilans-guide .rk-bh-nav-links a:focus-visible {
    color: #ffffff;
    border-color: var(--rk-bh-blue);
    background: var(--rk-bh-blue);
  }
  #rk-bilans-guide .rk-bh-main { padding: 0 clamp(20px, 5vw, 58px) 52px; }
  #rk-bilans-guide .rk-bh-section {
    scroll-margin-top: 18px;
    padding: clamp(42px, 7vw, 76px) 0;
    border-bottom: 1px solid var(--rk-bh-line);
  }
  #rk-bilans-guide .rk-bh-section:last-child { border-bottom: 0; }
  #rk-bilans-guide .rk-bh-eyebrow {
    display: block;
    margin-bottom: 11px;
    color: var(--rk-bh-orange);
    font-size: .66rem;
    font-weight: 950;
    letter-spacing: .095em;
    line-height: 1.25;
    text-transform: uppercase;
  }
  #rk-bilans-guide .rk-bh-intro { max-width: 950px; color: var(--rk-bh-text); font-size: 1.01rem; }
  #rk-bilans-guide .rk-bh-note {
    margin: 24px 0 0;
    padding: 17px 19px;
    border-left: 5px solid var(--rk-bh-blue);
    border-radius: 0 13px 13px 0;
    color: var(--rk-bh-text);
    background: var(--rk-bh-cyan-soft);
    font-size: .78rem;
  }
  #rk-bilans-guide .rk-bh-note strong { color: var(--rk-bh-dark); }
  #rk-bilans-guide .rk-bh-warning { border-left-color: var(--rk-bh-orange); background: var(--rk-bh-orange-soft); }
  #rk-bilans-guide .rk-bh-grid-2,
  #rk-bilans-guide .rk-bh-grid-3,
  #rk-bilans-guide .rk-bh-grid-4 { display: grid; gap: 15px; margin-top: 24px; }
  #rk-bilans-guide .rk-bh-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #rk-bilans-guide .rk-bh-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-bilans-guide .rk-bh-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  #rk-bilans-guide .rk-bh-card {
    min-width: 0;
    padding: 22px;
    border: 1px solid var(--rk-bh-line);
    border-radius: 17px;
    background: #ffffff;
  }
  #rk-bilans-guide .rk-bh-card-accent { background: var(--rk-bh-cyan-soft); }
  #rk-bilans-guide .rk-bh-card-orange { background: var(--rk-bh-orange-soft); }
  #rk-bilans-guide .rk-bh-card-green { background: var(--rk-bh-green-soft); }
  #rk-bilans-guide .rk-bh-card-purple { background: var(--rk-bh-purple-soft); }
  #rk-bilans-guide .rk-bh-card p:last-child,
  #rk-bilans-guide .rk-bh-card ul:last-child { margin-bottom: 0; }
  #rk-bilans-guide .rk-bh-card p,
  #rk-bilans-guide .rk-bh-card li { color: var(--rk-bh-text); font-size: .78rem; }
  #rk-bilans-guide .rk-bh-answer {
    display: grid;
    grid-template-columns: 1.25fr .75fr;
    gap: 17px;
    margin-top: 24px;
  }
  #rk-bilans-guide .rk-bh-answer-main {
    padding: clamp(25px, 4vw, 39px);
    border-radius: 20px;
    color: #ffffff !important;
    background: linear-gradient(135deg, var(--rk-bh-dark), var(--rk-bh-navy-2));
  }
  #rk-bilans-guide .rk-bh-answer-main h3,
  #rk-bilans-guide .rk-bh-answer-main p,
  #rk-bilans-guide .rk-bh-answer-main strong { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-answer-main p:last-child { margin-bottom: 0; }
  #rk-bilans-guide .rk-bh-answer-side { display: grid; gap: 12px; }
  #rk-bilans-guide .rk-bh-answer-stat {
    padding: 18px;
    border: 1px solid var(--rk-bh-line);
    border-radius: 15px;
    background: var(--rk-bh-soft);
  }
  #rk-bilans-guide .rk-bh-answer-stat strong { display: block; margin-bottom: 4px; color: var(--rk-bh-dark); font-size: .84rem; }
  #rk-bilans-guide .rk-bh-answer-stat span { display: block; color: var(--rk-bh-text); font-size: .68rem; line-height: 1.5; }

  #rk-bilans-guide .rk-bh-table-wrap {
    width: 100%;
    margin-top: 25px;
    overflow: hidden;
    border: 1px solid var(--rk-bh-line);
    border-radius: 17px;
    background: #ffffff;
  }
  #rk-bilans-guide table { width: 100%; border-collapse: collapse; table-layout: fixed; }
  #rk-bilans-guide th,
  #rk-bilans-guide td { padding: 15px 16px; border-right: 1px solid var(--rk-bh-line); border-bottom: 1px solid var(--rk-bh-line); text-align: left; vertical-align: top; }
  #rk-bilans-guide tr:last-child td { border-bottom: 0; }
  #rk-bilans-guide th:last-child,
  #rk-bilans-guide td:last-child { border-right: 0; }
  #rk-bilans-guide th { color: #ffffff; background: var(--rk-bh-navy); font-size: .7rem; font-weight: 900; line-height: 1.42; }
  #rk-bilans-guide td { color: var(--rk-bh-text); font-size: .72rem; line-height: 1.55; }
  #rk-bilans-guide td strong { color: var(--rk-bh-dark); }
  #rk-bilans-guide .rk-bh-formula {
    margin: 23px 0;
    padding: 17px 19px;
    border: 1px solid #bce3ec;
    border-radius: 14px;
    color: var(--rk-bh-dark);
    background: #f2fbfd;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: clamp(.7rem, 2vw, .86rem);
    font-weight: 800;
    line-height: 1.55;
    text-align: center;
    overflow-wrap: anywhere;
  }

  #rk-bilans-guide .rk-bh-numbered-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin-top: 25px;
  }
  #rk-bilans-guide .rk-bh-numbered-card {
    display: grid;
    grid-template-columns: 54px minmax(0, 1fr);
    gap: 16px;
    align-items: start;
    min-width: 0;
    padding: 21px;
    border: 1px solid var(--rk-bh-line);
    border-radius: 17px;
    background: #ffffff;
  }
  #rk-bilans-guide .rk-bh-number,
  #rk-bilans-guide .rk-bh-numbered-card > .rk-bh-number,
  #rk-bilans-guide .rk-bh-edu-card > .rk-bh-number,
  #rk-bilans-guide .rk-bh-check-card > .rk-bh-number {
    display: grid !important;
    place-items: center !important;
    align-items: center !important;
    justify-content: center !important;
    width: 52px !important;
    min-width: 52px !important;
    max-width: 52px !important;
    height: 52px !important;
    min-height: 52px !important;
    max-height: 52px !important;
    padding: 0 !important;
    margin: 0 !important;
    border: 0 !important;
    border-radius: 50% !important;
    color: #17384b !important;
    background: #d9f5f9 !important;
    font-size: .78rem !important;
    font-style: normal !important;
    font-weight: 950 !important;
    letter-spacing: 0 !important;
    line-height: 1 !important;
    text-align: center !important;
    text-indent: 0 !important;
    white-space: nowrap !important;
    transform: none !important;
  }
  #rk-bilans-guide .rk-bh-numbered-card:nth-child(4n+2) > .rk-bh-number,
  #rk-bilans-guide .rk-bh-edu-card:nth-child(4n+2) > .rk-bh-number,
  #rk-bilans-guide .rk-bh-check-card:nth-child(4n+2) > .rk-bh-number { background: #ffe0d5 !important; }
  #rk-bilans-guide .rk-bh-numbered-card:nth-child(4n+3) > .rk-bh-number,
  #rk-bilans-guide .rk-bh-edu-card:nth-child(4n+3) > .rk-bh-number,
  #rk-bilans-guide .rk-bh-check-card:nth-child(4n+3) > .rk-bh-number { background: #dff3eb !important; }
  #rk-bilans-guide .rk-bh-numbered-card:nth-child(4n+4) > .rk-bh-number,
  #rk-bilans-guide .rk-bh-edu-card:nth-child(4n+4) > .rk-bh-number,
  #rk-bilans-guide .rk-bh-check-card:nth-child(4n+4) > .rk-bh-number { background: #e5e0ff !important; }
  #rk-bilans-guide .rk-bh-numbered-card h3 { margin: 3px 0 7px; font-size: 1rem; }
  #rk-bilans-guide .rk-bh-numbered-card p { margin: 0; color: var(--rk-bh-text); font-size: .75rem; }

  #rk-bilans-guide .rk-bh-edu {
    margin-top: 27px;
    overflow: hidden;
    border: 1px solid var(--rk-bh-line);
    border-radius: 22px;
    background: #ffffff;
  }
  #rk-bilans-guide .rk-bh-edu-head {
    padding: 25px clamp(21px, 4vw, 36px);
    color: #ffffff !important;
    background: linear-gradient(115deg, var(--rk-bh-dark), #176b74);
  }
  #rk-bilans-guide .rk-bh-edu-head h3,
  #rk-bilans-guide .rk-bh-edu-head p { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-edu-head p { margin-bottom: 0; font-size: .76rem; }
  #rk-bilans-guide .rk-bh-edu-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    padding: 24px;
  }
  #rk-bilans-guide .rk-bh-edu-card {
    display: grid;
    grid-template-columns: 52px minmax(0, 1fr);
    gap: 13px;
    align-items: start;
    min-width: 0;
    min-height: 152px;
    padding: 18px;
    border: 1px solid var(--rk-bh-line);
    border-radius: 16px;
    color: var(--rk-bh-dark);
    background: #ffffff;
    text-align: left;
  }
  #rk-bilans-guide .rk-bh-edu-card:hover,
  #rk-bilans-guide .rk-bh-edu-card:focus-visible,
  #rk-bilans-guide .rk-bh-edu-card[aria-pressed="true"] {
    border-color: var(--rk-bh-blue);
    background: var(--rk-bh-cyan-soft);
  }
  #rk-bilans-guide .rk-bh-edu-copy { min-width: 0; }
  #rk-bilans-guide .rk-bh-edu-copy strong { display: block; margin: 3px 0 6px; color: var(--rk-bh-dark); font-size: .76rem; line-height: 1.35; }
  #rk-bilans-guide .rk-bh-edu-copy span { display: block; color: var(--rk-bh-text); font-size: .65rem; line-height: 1.48; }
  #rk-bilans-guide .rk-bh-edu-detail {
    margin: 0 24px 24px;
    padding: 23px;
    border-radius: 17px;
    color: #ffffff !important;
    background: var(--rk-bh-navy);
  }
  #rk-bilans-guide .rk-bh-edu-detail h3,
  #rk-bilans-guide .rk-bh-edu-detail p,
  #rk-bilans-guide .rk-bh-edu-detail strong { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-edu-detail p { margin-bottom: 0; font-size: .77rem; }
  #rk-bilans-guide .rk-bh-edu-unit { display: inline-flex; margin-bottom: 11px; padding: 6px 10px; border-radius: 999px; color: #0e3447 !important; background: #75eaf6; font-size: .61rem; font-weight: 900; }

  #rk-bilans-guide .rk-bh-tool {
    margin-top: 28px;
    overflow: hidden;
    border: 1px solid #c9e0e9;
    border-radius: 22px;
    background: #ffffff;
    box-shadow: 0 18px 48px rgba(16, 37, 54, .08);
  }
  #rk-bilans-guide .rk-bh-tool-head {
    padding: 25px clamp(21px, 4vw, 36px);
    color: #ffffff !important;
    background: linear-gradient(125deg, #102536, #17626e);
  }
  #rk-bilans-guide .rk-bh-tool-head h3,
  #rk-bilans-guide .rk-bh-tool-head p { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-tool-head p { max-width: 930px; margin-bottom: 0; font-size: .76rem; }
  #rk-bilans-guide .rk-bh-tool-body { padding: clamp(20px, 4vw, 34px); }
  #rk-bilans-guide .rk-bh-field-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 13px; }
  #rk-bilans-guide .rk-bh-field { min-width: 0; }
  #rk-bilans-guide .rk-bh-field label { display: block; margin-bottom: 6px; color: var(--rk-bh-dark); font-size: .64rem; font-weight: 850; line-height: 1.35; }
  #rk-bilans-guide .rk-bh-field small { display: block; margin-top: 5px; color: var(--rk-bh-muted); font-size: .55rem; line-height: 1.4; }
  #rk-bilans-guide .rk-bh-field input,
  #rk-bilans-guide .rk-bh-field select {
    width: 100%;
    min-height: 47px;
    padding: 9px 11px;
    border: 1px solid #bfcfd7;
    border-radius: 10px;
    color: var(--rk-bh-dark);
    background: #ffffff;
    font-size: .73rem;
    font-weight: 720;
  }
  #rk-bilans-guide .rk-bh-subhead { margin: 27px 0 11px; color: var(--rk-bh-dark); font-size: .72rem; font-weight: 920; letter-spacing: .02em; text-transform: uppercase; }
  #rk-bilans-guide .rk-bh-input-table th:first-child { width: 28%; }
  #rk-bilans-guide .rk-bh-input-table th { background: #eaf5f8; color: var(--rk-bh-dark); }
  #rk-bilans-guide .rk-bh-input-table td { vertical-align: middle; }
  #rk-bilans-guide .rk-bh-input-table input {
    width: 100%;
    min-height: 43px;
    padding: 8px 9px;
    border: 1px solid #c1d2da;
    border-radius: 9px;
    color: var(--rk-bh-dark);
    background: #ffffff;
    font-size: .7rem;
    font-weight: 720;
  }
  #rk-bilans-guide .rk-bh-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; }
  #rk-bilans-guide .rk-bh-action {
    min-height: 48px;
    padding: 11px 17px;
    border: 1px solid var(--rk-bh-blue);
    border-radius: 11px;
    color: #ffffff;
    background: var(--rk-bh-blue);
    font-size: .69rem;
    font-weight: 880;
  }
  #rk-bilans-guide .rk-bh-action:hover,
  #rk-bilans-guide .rk-bh-action:focus-visible { background: #087da5; }
  #rk-bilans-guide .rk-bh-action-secondary { color: var(--rk-bh-dark); border-color: var(--rk-bh-line); background: #ffffff; }
  #rk-bilans-guide .rk-bh-action-secondary:hover,
  #rk-bilans-guide .rk-bh-action-secondary:focus-visible { color: #ffffff; border-color: var(--rk-bh-dark); background: var(--rk-bh-dark); }
  #rk-bilans-guide .rk-bh-error { margin-top: 14px; padding: 11px 14px; border-radius: 10px; color: #8a2823; background: var(--rk-bh-red-soft); font-size: .66rem; font-weight: 760; }
  #rk-bilans-guide .rk-bh-results {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
    margin-top: 24px;
  }
  #rk-bilans-guide .rk-bh-result {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-bh-line);
    border-radius: 15px;
    background: var(--rk-bh-soft);
  }
  #rk-bilans-guide .rk-bh-result-featured { color: #ffffff !important; border-color: var(--rk-bh-navy); background: var(--rk-bh-navy); }
  #rk-bilans-guide .rk-bh-result span { display: block; margin-bottom: 7px; color: var(--rk-bh-muted); font-size: .57rem; font-weight: 850; letter-spacing: .04em; line-height: 1.35; text-transform: uppercase; }
  #rk-bilans-guide .rk-bh-result strong { display: block; color: var(--rk-bh-dark); font-size: clamp(1.05rem, 2.5vw, 1.48rem); line-height: 1.15; overflow-wrap: anywhere; }
  #rk-bilans-guide .rk-bh-result small { display: block; margin-top: 7px; color: var(--rk-bh-muted); font-size: .56rem; line-height: 1.4; }
  #rk-bilans-guide .rk-bh-result-featured span,
  #rk-bilans-guide .rk-bh-result-featured strong,
  #rk-bilans-guide .rk-bh-result-featured small { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-result-line { margin-top: 19px; padding: 16px 18px; border-radius: 13px; color: var(--rk-bh-dark); background: var(--rk-bh-green-soft); font-size: .72rem; font-weight: 760; }
  #rk-bilans-guide .rk-bh-disclaimer { margin: 21px 0 0; color: var(--rk-bh-muted); font-size: .61rem; line-height: 1.55; }

  #rk-bilans-guide .rk-bh-cost-table th:first-child { width: 23%; }
  #rk-bilans-guide .rk-bh-cost-table td { vertical-align: middle; }
  #rk-bilans-guide .rk-bh-cost-table input { width: 100%; min-height: 42px; padding: 8px 9px; border: 1px solid #c1d2da; border-radius: 9px; color: var(--rk-bh-dark); background: #ffffff; font-size: .68rem; font-weight: 720; }
  #rk-bilans-guide .rk-bh-cost-table .rk-bh-source { color: var(--rk-bh-dark); font-weight: 900; }
  #rk-bilans-guide .rk-bh-cost-table .rk-bh-source small { display: block; margin-top: 4px; color: var(--rk-bh-muted); font-size: .54rem; font-weight: 600; line-height: 1.35; }
  #rk-bilans-guide .rk-bh-rank { display: grid; gap: 9px; margin-top: 20px; }
  #rk-bilans-guide .rk-bh-rank-row { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; gap: 11px; align-items: center; padding: 11px 13px; border: 1px solid var(--rk-bh-line); border-radius: 12px; background: #ffffff; }
  #rk-bilans-guide .rk-bh-rank-pos { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border-radius: 50%; color: #ffffff; background: var(--rk-bh-green); font-size: .62rem; font-weight: 900; line-height: 1; text-align: center; }
  #rk-bilans-guide .rk-bh-rank-name { color: var(--rk-bh-dark); font-size: .68rem; font-weight: 850; }
  #rk-bilans-guide .rk-bh-rank-cost { color: var(--rk-bh-dark); font-size: .7rem; font-weight: 900; text-align: right; }

  #rk-bilans-guide .rk-bh-chart {
    margin-top: 27px;
    overflow: hidden;
    border: 1px solid var(--rk-bh-line);
    border-radius: 21px;
    background: #ffffff;
  }
  #rk-bilans-guide .rk-bh-chart-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; padding: 23px; border-bottom: 1px solid var(--rk-bh-line); background: var(--rk-bh-soft); }
  #rk-bilans-guide .rk-bh-chart-head h3 { margin-bottom: 6px; }
  #rk-bilans-guide .rk-bh-chart-head p { margin: 0; color: var(--rk-bh-text); font-size: .69rem; }
  #rk-bilans-guide .rk-bh-chart-tabs { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
  #rk-bilans-guide .rk-bh-chart-tab { min-height: 40px; padding: 8px 12px; border: 1px solid var(--rk-bh-line); border-radius: 999px; color: var(--rk-bh-dark); background: #ffffff; font-size: .61rem; font-weight: 850; }
  #rk-bilans-guide .rk-bh-chart-tab[aria-pressed="true"] { color: #ffffff; border-color: var(--rk-bh-blue); background: var(--rk-bh-blue); }
  #rk-bilans-guide .rk-bh-chart-body { padding: 24px; }
  #rk-bilans-guide .rk-bh-bars { display: grid; gap: 17px; }
  #rk-bilans-guide .rk-bh-bar-group { min-width: 0; }
  #rk-bilans-guide .rk-bh-bar-label { display: flex; justify-content: space-between; gap: 12px; margin-bottom: 7px; color: var(--rk-bh-dark); font-size: .65rem; font-weight: 850; }
  #rk-bilans-guide .rk-bh-bar-lines { display: grid; gap: 5px; }
  #rk-bilans-guide .rk-bh-bar-track { position: relative; height: 26px; overflow: hidden; border-radius: 7px; background: #edf3f6; }
  #rk-bilans-guide .rk-bh-bar-fill { display: flex; align-items: center; justify-content: flex-end; width: 0; height: 100%; min-width: 2px; padding-right: 7px; border-radius: 7px; color: #ffffff; background: var(--rk-bh-orange); font-size: .54rem; font-weight: 900; line-height: 1; transition: width .35s ease; }
  #rk-bilans-guide .rk-bh-bar-fill-alt { background: var(--rk-bh-blue); }
  #rk-bilans-guide .rk-bh-chart-legend { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 17px; color: var(--rk-bh-text); font-size: .61rem; }
  #rk-bilans-guide .rk-bh-chart-key { display: inline-flex; align-items: center; gap: 7px; }
  #rk-bilans-guide .rk-bh-chart-dot { width: 11px; height: 11px; border-radius: 3px; background: var(--rk-bh-orange); }
  #rk-bilans-guide .rk-bh-chart-dot-alt { background: var(--rk-bh-blue); }
  #rk-bilans-guide .rk-bh-chart-caption { margin: 18px 0 0; padding: 13px 15px; border-radius: 11px; color: var(--rk-bh-text); background: var(--rk-bh-soft); font-size: .62rem; }

  #rk-bilans-guide .rk-bh-cta {
    margin: 31px 0 0;
    padding: clamp(27px, 5vw, 43px);
    border-radius: 21px;
    color: #ffffff !important;
    background:
      radial-gradient(circle at 93% 14%, rgba(37, 199, 216, .25), transparent 27%),
      linear-gradient(135deg, #102536, #164b5e);
  }
  #rk-bilans-guide .rk-bh-cta .rk-bh-eyebrow { color: #75ebf8 !important; }
  #rk-bilans-guide .rk-bh-cta h3,
  #rk-bilans-guide .rk-bh-cta p,
  #rk-bilans-guide .rk-bh-cta strong { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-cta h3 { max-width: 910px; font-size: clamp(1.38rem, 3.3vw, 2.25rem); }
  #rk-bilans-guide .rk-bh-cta p { max-width: 930px; color: #d7e9ed !important; }
  #rk-bilans-guide .rk-bh-cta-context { margin: 18px 0; padding: 16px 18px; border: 1px solid rgba(255, 255, 255, .18); border-radius: 13px; color: #eef8fa !important; background: rgba(255, 255, 255, .07); font-size: .72rem; }
  #rk-bilans-guide .rk-bh-cta-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 51px;
    padding: 12px 18px;
    border-radius: 11px;
    color: #ffffff !important;
    background: var(--rk-bh-orange);
    font-size: .72rem;
    font-weight: 900;
    line-height: 1.3;
    text-align: center;
    text-decoration: none;
  }
  #rk-bilans-guide .rk-bh-cta-button:hover,
  #rk-bilans-guide .rk-bh-cta-button:focus-visible { color: #ffffff !important; background: #e95734; }

  #rk-bilans-guide .rk-bh-check-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 13px; margin-top: 24px; }
  #rk-bilans-guide .rk-bh-check-card { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 15px; align-items: start; min-width: 0; padding: 19px; border: 1px solid var(--rk-bh-line); border-radius: 16px; background: #ffffff; }
  #rk-bilans-guide .rk-bh-check-card h3 { margin: 3px 0 6px; font-size: .92rem; }
  #rk-bilans-guide .rk-bh-check-card p { margin: 0; color: var(--rk-bh-text); font-size: .71rem; }
  #rk-bilans-guide .rk-bh-source-list { display: grid; gap: 11px; margin-top: 23px; padding: 0; list-style: none; }
  #rk-bilans-guide .rk-bh-source-list li { padding: 16px 18px; border: 1px solid var(--rk-bh-line); border-radius: 13px; color: var(--rk-bh-text); background: #ffffff; font-size: .7rem; }
  #rk-bilans-guide .rk-bh-source-list a { overflow-wrap: anywhere; }
  #rk-bilans-guide .rk-bh-faq { display: grid; gap: 11px; margin-top: 23px; }
  #rk-bilans-guide .rk-bh-faq details { overflow: hidden; border: 1px solid var(--rk-bh-line); border-radius: 14px; background: #ffffff; }
  #rk-bilans-guide .rk-bh-faq summary { position: relative; padding: 16px 54px 16px 18px; color: var(--rk-bh-dark); cursor: pointer; font-size: .76rem; font-weight: 880; line-height: 1.45; list-style: none; }
  #rk-bilans-guide .rk-bh-faq summary::-webkit-details-marker { display: none; }
  #rk-bilans-guide .rk-bh-faq summary::after { position: absolute; top: 10px; right: 18px; color: var(--rk-bh-blue); content: "+"; font-size: 1.5rem; font-weight: 700; }
  #rk-bilans-guide .rk-bh-faq details[open] summary::after { content: "−"; }
  #rk-bilans-guide .rk-bh-faq-answer { padding: 17px 18px; border-top: 1px solid var(--rk-bh-line); color: var(--rk-bh-text); font-size: .8rem; }
  #rk-bilans-guide .rk-bh-faq-answer p:last-child { margin-bottom: 0; }

  #rk-bilans-guide .rk-bh-author {
    overflow: hidden;
    color: #ffffff !important;
    background: linear-gradient(135deg, #102b3c, #164e5d);
  }
  #rk-bilans-guide .rk-bh-author-head { padding: clamp(30px, 5vw, 51px) clamp(24px, 5vw, 54px); border-bottom: 1px solid rgba(255, 255, 255, .13); }
  #rk-bilans-guide .rk-bh-author-head .rk-bh-eyebrow { color: #70eaf8 !important; }
  #rk-bilans-guide .rk-bh-author-head h2,
  #rk-bilans-guide .rk-bh-author-head p { color: #ffffff !important; }
  #rk-bilans-guide .rk-bh-author-head p { max-width: 910px; margin: 0; color: #d6eaee !important; }
  #rk-bilans-guide .rk-bh-author-update { display: inline-flex; margin-top: 15px; padding: 7px 12px; border: 1px solid rgba(255, 255, 255, .18); border-radius: 999px; color: #ffffff !important; font-size: .61rem; font-weight: 850; }
  #rk-bilans-guide .rk-bh-author-layout { display: grid; grid-template-columns: 310px minmax(0, 1fr); }
  #rk-bilans-guide .rk-bh-author-side { padding: 38px 27px; border-right: 1px solid rgba(255, 255, 255, .13); text-align: center; }
  #rk-bilans-guide .rk-bh-author-photo { width: 168px; height: 168px; margin: 0 auto 19px; overflow: hidden; border: 7px solid rgba(255, 255, 255, .18); border-radius: 50%; background: #ffffff; }
  #rk-bilans-guide .rk-bh-author-photo img { width: 100%; height: 100%; object-fit: cover; }
  #rk-bilans-guide .rk-bh-author-name { color: #ffffff !important; font-size: 1.12rem; font-weight: 930; }
  #rk-bilans-guide .rk-bh-author-name a { color: #ffffff !important; text-decoration: none; }
  #rk-bilans-guide .rk-bh-author-role { margin: 6px 0 0; color: #c7dee4 !important; font-size: .68rem; line-height: 1.55; }
  #rk-bilans-guide .rk-bh-author-social-label { margin-top: 23px; color: #73e8f5 !important; font-size: .56rem; font-weight: 950; letter-spacing: .08em; text-transform: uppercase; }
  #rk-bilans-guide .rk-bh-author-social { display: flex; justify-content: center; gap: 10px; margin-top: 11px; }
  #rk-bilans-guide .rk-bh-author-social a { display: grid; place-items: center; width: 44px; height: 44px; border: 1px solid #487080; border-radius: 50%; color: #e6f3f5 !important; text-decoration: none; }
  #rk-bilans-guide .rk-bh-author-social a:hover,
  #rk-bilans-guide .rk-bh-author-social a:focus-visible { color: var(--rk-bh-dark) !important; border-color: var(--rk-bh-cyan); background: var(--rk-bh-cyan); }
  #rk-bilans-guide .rk-bh-author-main { min-width: 0; padding: 38px clamp(24px, 4vw, 46px); }
  #rk-bilans-guide .rk-bh-author-quote { position: relative; margin: 0 0 24px; padding: 18px 20px 18px 62px; border-radius: 15px; background: rgba(255, 255, 255, .075); }
  #rk-bilans-guide .rk-bh-author-quote::before { position: absolute; top: 4px; left: 18px; color: #65e8f7; content: "“"; font-size: 3.3rem; font-weight: 950; line-height: 1; }
  #rk-bilans-guide .rk-bh-author-quote p { margin: 0; color: #ffffff !important; font-size: 1.01rem; font-style: italic; font-weight: 760; }
  #rk-bilans-guide .rk-bh-author-main > p { color: #d2e6ea !important; }
  #rk-bilans-guide .rk-bh-author-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 23px; }
  #rk-bilans-guide .rk-bh-author-fact { min-width: 0; padding: 17px; border: 1px solid rgba(255, 255, 255, .14); border-radius: 14px; background: rgba(255, 255, 255, .075); }
  #rk-bilans-guide .rk-bh-author-fact strong { display: block; margin-bottom: 6px; color: #73eaf8 !important; font-size: .66rem; }
  #rk-bilans-guide .rk-bh-author-fact span { display: block; color: #d8e9ed !important; font-size: .64rem; line-height: 1.5; }
  #rk-bilans-guide .rk-bh-author-portals { margin-top: 21px; color: #d2e5e9 !important; font-size: .7rem; }
  #rk-bilans-guide .rk-bh-author-portals a { display: inline-flex; margin: 7px 7px 0 0; padding: 7px 11px; border: 1px solid #4b7482; border-radius: 999px; color: #ffffff !important; text-decoration: none; }

  @media (max-width: 980px) {
    #rk-bilans-guide .rk-bh-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-bilans-guide .rk-bh-field-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-bilans-guide .rk-bh-results { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-bilans-guide .rk-bh-edu-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-bilans-guide .rk-bh-author-layout { grid-template-columns: 250px minmax(0, 1fr); }
    #rk-bilans-guide .rk-bh-author-facts { grid-template-columns: 1fr; }
  }
  @media (max-width: 760px) {
    #rk-bilans-guide { margin-top: 18px; font-size: 17px; }
    #rk-bilans-guide .rk-bh-shell { border-radius: 20px; }
    #rk-bilans-guide .rk-bh-hero-metrics,
    #rk-bilans-guide .rk-bh-grid-3,
    #rk-bilans-guide .rk-bh-answer { grid-template-columns: 1fr; }
    #rk-bilans-guide .rk-bh-grid-2,
    #rk-bilans-guide .rk-bh-numbered-grid,
    #rk-bilans-guide .rk-bh-check-grid { grid-template-columns: 1fr; }
    #rk-bilans-guide .rk-bh-chart-head { display: grid; }
    #rk-bilans-guide .rk-bh-chart-tabs { justify-content: flex-start; }
    #rk-bilans-guide .rk-bh-author-layout { grid-template-columns: 1fr; }
    #rk-bilans-guide .rk-bh-author-side { border-right: 0; border-bottom: 1px solid rgba(255, 255, 255, .13); }

    #rk-bilans-guide .rk-bh-table-wrap { overflow: visible; border: 0; border-radius: 0; background: transparent; }
    #rk-bilans-guide table,
    #rk-bilans-guide thead,
    #rk-bilans-guide tbody,
    #rk-bilans-guide tr,
    #rk-bilans-guide th,
    #rk-bilans-guide td { display: block; width: 100% !important; }
    #rk-bilans-guide thead { position: absolute; width: 1px !important; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
    #rk-bilans-guide tbody { display: grid; gap: 12px; }
    #rk-bilans-guide tr { overflow: hidden; border: 1px solid var(--rk-bh-line); border-radius: 14px; background: #ffffff; }
    #rk-bilans-guide td { display: grid; grid-template-columns: minmax(105px, .75fr) minmax(0, 1.25fr); gap: 12px; padding: 12px 14px; border-right: 0; text-align: left; }
    #rk-bilans-guide td::before { color: var(--rk-bh-dark); content: attr(data-label); font-size: .61rem; font-weight: 880; line-height: 1.4; }
    #rk-bilans-guide td:last-child { border-bottom: 0; }
    #rk-bilans-guide .rk-bh-input-table td,
    #rk-bilans-guide .rk-bh-cost-table td { align-items: center; }
    #rk-bilans-guide .rk-bh-cost-table .rk-bh-source small { margin-top: 2px; }
  }
  @media (max-width: 560px) {
    #rk-bilans-guide { margin-right: -2px; margin-left: -2px; font-size: 16px; }
    #rk-bilans-guide .rk-bh-hero { padding-right: 20px; padding-left: 20px; }
    #rk-bilans-guide .rk-bh-main { padding-right: 17px; padding-left: 17px; }
    #rk-bilans-guide .rk-bh-grid-4,
    #rk-bilans-guide .rk-bh-field-grid,
    #rk-bilans-guide .rk-bh-results,
    #rk-bilans-guide .rk-bh-edu-grid { grid-template-columns: 1fr; }
    #rk-bilans-guide .rk-bh-numbered-card,
    #rk-bilans-guide .rk-bh-check-card { grid-template-columns: 48px minmax(0, 1fr); gap: 13px; padding: 17px; }
    #rk-bilans-guide .rk-bh-number,
    #rk-bilans-guide .rk-bh-numbered-card > .rk-bh-number,
    #rk-bilans-guide .rk-bh-edu-card > .rk-bh-number,
    #rk-bilans-guide .rk-bh-check-card > .rk-bh-number { width: 46px !important; min-width: 46px !important; max-width: 46px !important; height: 46px !important; min-height: 46px !important; max-height: 46px !important; }
    #rk-bilans-guide .rk-bh-edu-grid { padding: 16px; }
    #rk-bilans-guide .rk-bh-edu-card { grid-template-columns: 46px minmax(0, 1fr); min-height: 0; padding: 16px; }
    #rk-bilans-guide .rk-bh-edu-detail { margin: 0 16px 16px; padding: 18px; }
    #rk-bilans-guide .rk-bh-action,
    #rk-bilans-guide .rk-bh-cta-button { width: 100%; }
    #rk-bilans-guide .rk-bh-rank-row { grid-template-columns: 30px minmax(0, 1fr); }
    #rk-bilans-guide .rk-bh-rank-cost { grid-column: 2; text-align: left; }
    #rk-bilans-guide .rk-bh-chart-body { padding: 18px 15px; }
    #rk-bilans-guide .rk-bh-bar-label { align-items: flex-start; flex-direction: column; gap: 2px; }
    #rk-bilans-guide td { grid-template-columns: 1fr; gap: 5px; }
    #rk-bilans-guide .rk-bh-author-main { padding-right: 18px; padding-left: 18px; }
    #rk-bilans-guide .rk-bh-author-quote { padding-left: 55px; }
  }
  @media (prefers-reduced-motion: reduce) {
    #rk-bilans-guide * { scroll-behavior: auto !important; transition: none !important; }
  }
</style>

<article id="rk-bilans-guide" aria-label="Bilans cieplny budynku — kalkulator strat, mocy i kosztów ogrzewania">
  <div class="rk-bh-shell">
    <header class="rk-bh-hero">
      <span class="rk-bh-kicker">Od współczynnika U do mocy i rachunku</span>
      <div class="rk-bh-hero-title">Bilans cieplny budynku <span>bez mieszania kW, kWh i zł</span></div>
      <p class="rk-bh-lead">Bilans cieplny budynku odpowiada na kilka różnych pytań: ile ciepła dom traci w warunkach projektowych, ile energii potrzebuje przez sezon i ile kosztuje jej dostarczenie. Ten poradnik prowadzi od przegród i wentylacji do mocy źródła, podłogówki oraz kosztów — z jawnymi założeniami zamiast uniwersalnego wskaźnika W/m².</p>
      <div class="rk-bh-tags" aria-label="Zakres poradnika">
        <span class="rk-bh-tag">bilans cieplny budynku</span>
        <span class="rk-bh-tag">straty ciepła</span>
        <span class="rk-bh-tag">OZC</span>
        <span class="rk-bh-tag">moc w kW</span>
        <span class="rk-bh-tag">koszt w zł/rok</span>
      </div>
      <div class="rk-bh-byline">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 34 minuty</strong></span>
        <span>Aktualizacja techniczna: <strong>14 września 2026 r.</strong></span>
      </div>
      <div class="rk-bh-hero-metrics">
        <div class="rk-bh-hero-metric"><b>Projektowa moc</b><span>W lub kW w przyjętej temperaturze zewnętrznej. Służy do doboru mocy i emiterów.</span></div>
        <div class="rk-bh-hero-metric"><b>Roczna energia</b><span>kWh/rok wynikające z całego sezonu, klimatu, zysków, akumulacji i sposobu użytkowania.</span></div>
        <div class="rk-bh-hero-metric"><b>Koszt eksploatacji</b><span>Energia pobrana przez źródło razy cena, powiększona o opłaty stałe i serwis.</span></div>
      </div>
    </header>

    <nav class="rk-bh-nav" aria-label="Na skróty — wszystkie rozdziały">
      <span class="rk-bh-nav-label">Na skróty</span>
      <div class="rk-bh-nav-links">
        <a href="#rk-bh-odpowiedz">Odpowiedź</a>
        <a href="#rk-bh-wyniki">Trzy wyniki</a>
        <a href="#rk-bh-dane">Dane</a>
        <a href="#rk-bh-mapa">Mapa obliczeń</a>
        <a href="#rk-bh-kalkulator-mocy">Kalkulator mocy</a>
        <a href="#rk-bh-interpretacja">Interpretacja</a>
        <a href="#rk-bh-przegrody">Przegrody</a>
        <a href="#rk-bh-grunt">Grunt</a>
        <a href="#rk-bh-wentylacja">Wentylacja</a>
        <a href="#rk-bh-mostki-zyski">Mostki i zyski</a>
        <a href="#rk-bh-kalkulator-kosztow">Kalkulator kosztów</a>
        <a href="#rk-bh-wykres">Wykres</a>
        <a href="#rk-bh-podlogowka">Podłogówka</a>
        <a href="#rk-bh-pompa">Pompa ciepła</a>
        <a href="#rk-bh-bledy">Błędy</a>
        <a href="#rk-bh-checklista">Checklista</a>
        <a href="#rk-bh-podsumowanie">Podsumowanie</a>
        <a href="#rk-bh-zrodla">Źródła</a>
        <a href="#rk-bh-faq">FAQ</a>
        <a href="#rk-bh-autor">Autor</a>
      </div>
    </nav>

    <main class="rk-bh-main">
      <section class="rk-bh-section" id="rk-bh-odpowiedz">
        <span class="rk-bh-eyebrow">Najważniejsze w 30 sekund</span>
        <h2>Czym jest bilans cieplny budynku i co naprawdę można z niego odczytać?</h2>
        <p class="rk-bh-intro"><strong>Bilans cieplny budynku</strong> to uporządkowane zestawienie przepływów ciepła w zdefiniowanych warunkach. Dla doboru ogrzewania najpierw wyznacza się projektowe straty przez przegrody, mostki i wymianę powietrza. Wynik dla całego domu mówi, jakiej mocy potrzebuje źródło, ale projekt ogrzewania podłogowego wymaga jeszcze obliczeń osobno dla każdego pomieszczenia. Roczne zużycie energii i koszt powstają z innego rachunku — uwzględniają przebieg pogody, zyski, akumulację, sterowanie, sprawność źródła i cenę nośnika.</p>
        <div class="rk-bh-answer">
          <div class="rk-bh-answer-main">
            <h3>Jedna liczba nie opisuje całego budynku</h3>
            <p><strong>kW odpowiada na pytanie „jak duża moc?”, kWh/rok — „ile ciepła przez sezon?”, a zł/rok — „ile zapłacę przy konkretnym źródle i cenach?”.</strong> Przeliczanie tych wielkości jednym stałym współczynnikiem daje pozorną precyzję.</p>
          </div>
          <div class="rk-bh-answer-side">
            <div class="rk-bh-answer-stat"><strong>Najpierw pomieszczenia</strong><span>Suma domu jest potrzebna, lecz rozstaw, przepływ i powierzchnia czynna wynikają z obciążeń poszczególnych stref.</span></div>
            <div class="rk-bh-answer-stat"><strong>Potem instalacja</strong><span>Emiter musi oddać wymaganą moc przy temperaturze wody zgodnej ze źródłem oraz ograniczeniami podłogi.</span></div>
          </div>
        </div>
        <div class="rk-bh-note"><strong>Zakres kalkulatorów:</strong> pierwsze narzędzie pokazuje uproszczone projektowe straty dla dwóch wariantów przegród i wentylacji. Drugie liczy koszty z podanego rocznego zapotrzebowania na ciepło. Żadne z nich nie jest obliczeniem normowym, świadectwem energetycznym ani projektem.</div>
      </section>

      <section class="rk-bh-section" id="rk-bh-wyniki">
        <span class="rk-bh-eyebrow">Moc, energia i pieniądze</span>
        <h2>Bilans cieplny a energetyczny: dlaczego kW, kWh i zł nie są zamienne?</h2>
        <p class="rk-bh-intro">To najważniejsze rozróżnienie w całym artykule. Projektowe obciążenie cieplne wyznacza chwilową moc przy ustalonych temperaturach obliczeniowych. Zapotrzebowanie na energię obejmuje wiele godzin sezonu o różnych warunkach. Koszt zależy jeszcze od tego, ile energii końcowej pobierze urządzenie oraz jak rozlicza ją sprzedawca.</p>
        <div class="rk-bh-table-wrap">
          <table>
            <thead><tr><th>Wynik</th><th>Jednostka</th><th>Do czego służy?</th><th>Czego nie rozstrzyga?</th></tr></thead>
            <tbody>
              <tr><td data-label="Wynik"><strong>Projektowe obciążenie cieplne</strong></td><td data-label="Jednostka">W lub kW</td><td data-label="Do czego służy?">Dobór mocy źródła i sprawdzenie mocy grzewczej pomieszczeń.</td><td data-label="Czego nie rozstrzyga?">Nie jest rocznym zużyciem ani rachunkiem.</td></tr>
              <tr><td data-label="Wynik"><strong>Roczne zapotrzebowanie na energię użytkową</strong></td><td data-label="Jednostka">kWh/rok lub kWh/(m²·rok)</td><td data-label="Do czego służy?">Opisuje ciepło potrzebne strefom w całym okresie obliczeniowym.</td><td data-label="Czego nie rozstrzyga?">Nie mówi jeszcze, ile prądu, gazu lub pelletu pobierze źródło.</td></tr>
              <tr><td data-label="Wynik"><strong>Energia końcowa</strong></td><td data-label="Jednostka">kWh nośnika/rok</td><td data-label="Do czego służy?">Uwzględnia sprawność sezonową albo SCOP urządzenia i straty systemu.</td><td data-label="Czego nie rozstrzyga?">Nie uwzględnia automatycznie taryf, abonamentów i serwisu.</td></tr>
              <tr><td data-label="Wynik"><strong>Koszt eksploatacji</strong></td><td data-label="Jednostka">zł/rok</td><td data-label="Do czego służy?">Porównuje warianty przy tych samych potrzebach budynku i jawnych cenach.</td><td data-label="Czego nie rozstrzyga?">Nie gwarantuje przyszłych cen ani konkretnej sprawności w realnej instalacji.</td></tr>
            </tbody>
          </table>
        </div>
        <div class="rk-bh-formula">moc projektowa [kW] ≠ energia użytkowa [kWh/rok] ≠ energia kupiona [kWh/rok] ≠ koszt [zł/rok]</div>
        <p>Jeżeli potrzebujesz dokładnego rozwinięcia pierwszego wyniku, zobacz poradnik o <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowym obciążeniu cieplnym OZC</a> oraz omówienie tego, <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty cieplne w budynkach</a>.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-dane">
        <span class="rk-bh-eyebrow">Wejście decyduje o wyniku</span>
        <h2>Jakie dane są potrzebne do obliczenia strat ciepła budynku?</h2>
        <p class="rk-bh-intro">Dobry bilans nie zaczyna się od wyboru kotła ani pompy ciepła. Zaczyna się od geometrii, warstw przegród, temperatur projektowych, stref nieogrzewanych, wentylacji i mostków. Im więcej danych zastępuje się wartościami „typowymi”, tym większy jest przedział niepewności.</p>
        <div class="rk-bh-numbered-grid">
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">1</span><div><h3>Geometria i strefy</h3><p>Powierzchnie netto ścian, dachu, okien, drzwi i podłogi, kubatura, sąsiedztwo gruntu oraz przestrzeni nieogrzewanych.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">2</span><div><h3>Współczynniki U</h3><p>Wartości wynikające z pełnego układu warstw, mostków powtarzalnych i rzeczywistej stolarki, a nie z samej nazwy materiału.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">3</span><div><h3>Temperatury projektowe</h3><p>Temperatura zewnętrzna właściwa lokalizacji oraz osobne temperatury wewnętrzne dla salonu, sypialni, łazienki i innych stref.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">4</span><div><h3>Wymiana powietrza</h3><p>Strumienie higieniczne, sposób wentylacji, odzysk ciepła, infiltracja i zachowanie centrali podczas mrozu.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">5</span><div><h3>Mostki termiczne</h3><p>Długości złączy i liniowe współczynniki przenikania dla wieńców, ościeży, balkonów, cokołu i połączeń przegród.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">6</span><div><h3>Cel obliczenia</h3><p>Inne założenia są potrzebne do doboru mocy, inne do rocznej energii, świadectwa, audytu i oceny kosztów.</p></div></article>
        </div>
        <p class="rk-bh-note rk-bh-warning"><strong>Wskaźnik W/m² jest wynikiem kontrolnym, nie danymi wejściowymi.</strong> Dwa domy o tej samej powierzchni mogą mieć inną bryłę, przeszklenia, wentylację, temperatury i ekspozycję. Dlatego pytanie „ile kW na 150 m²?” bez tych danych nie ma jednej odpowiedzi.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-mapa">
        <span class="rk-bh-eyebrow">Interaktywna grafika edukacyjna</span>
        <h2>Od przegrody do rachunku: sześć etapów jednego procesu</h2>
        <p class="rk-bh-intro">Kliknij etap, aby zobaczyć jego jednostkę, znaczenie i granice zastosowania. Moduły są rozdzielone, bo właśnie na przejściu między nimi najczęściej powstają błędne skróty.</p>
        <div class="rk-bh-edu">
          <div class="rk-bh-edu-head"><h3>Mapa obliczeń budynku</h3><p>Każdy kafel jest samodzielny na telefonie i komputerze. Wynik kolejnego etapu wymaga dodatkowych danych — nie powstaje przez prostą zmianę jednostki.</p></div>
          <div class="rk-bh-edu-grid" role="group" aria-label="Etapy bilansu cieplnego i kosztowego">
            <button type="button" class="rk-bh-edu-card" data-rk-edu="0" aria-pressed="true" aria-controls="rk-bh-edu-detail"><span class="rk-bh-number" aria-hidden="true">1</span><span class="rk-bh-edu-copy"><strong>Warunki obliczeniowe</strong><span>Lokalizacja, temperatury, geometria i sposób użytkowania.</span></span></button>
            <button type="button" class="rk-bh-edu-card" data-rk-edu="1" aria-pressed="false" aria-controls="rk-bh-edu-detail"><span class="rk-bh-number" aria-hidden="true">2</span><span class="rk-bh-edu-copy"><strong>Przenikanie</strong><span>Ściany, dach, stolarka, grunt i mostki cieplne.</span></span></button>
            <button type="button" class="rk-bh-edu-card" data-rk-edu="2" aria-pressed="false" aria-controls="rk-bh-edu-detail"><span class="rk-bh-number" aria-hidden="true">3</span><span class="rk-bh-edu-copy"><strong>Wentylacja</strong><span>Strumień powietrza, odzysk ciepła oraz infiltracja.</span></span></button>
            <button type="button" class="rk-bh-edu-card" data-rk-edu="3" aria-pressed="false" aria-controls="rk-bh-edu-detail"><span class="rk-bh-number" aria-hidden="true">4</span><span class="rk-bh-edu-copy"><strong>Moc projektowa</strong><span>Chwilowe obciążenie całego domu i pomieszczeń.</span></span></button>
            <button type="button" class="rk-bh-edu-card" data-rk-edu="4" aria-pressed="false" aria-controls="rk-bh-edu-detail"><span class="rk-bh-number" aria-hidden="true">5</span><span class="rk-bh-edu-copy"><strong>Energia sezonowa</strong><span>Pogoda, zyski, akumulacja, harmonogramy i regulacja.</span></span></button>
            <button type="button" class="rk-bh-edu-card" data-rk-edu="5" aria-pressed="false" aria-controls="rk-bh-edu-detail"><span class="rk-bh-number" aria-hidden="true">6</span><span class="rk-bh-edu-copy"><strong>Koszt ogrzewania</strong><span>Sprawność źródła, ceny nośnika, opłaty i serwis.</span></span></button>
          </div>
          <div class="rk-bh-edu-detail" id="rk-bh-edu-detail" aria-live="polite">
            <span class="rk-bh-edu-unit" id="rk-bh-edu-unit">Dane wejściowe</span>
            <h3 id="rk-bh-edu-title">Warunki obliczeniowe</h3>
            <p id="rk-bh-edu-text">Najpierw definiuje się oceniany budynek, strefy, geometrię, temperaturę zewnętrzną właściwą lokalizacji i temperatury wewnętrzne. Bez tego żadna późniejsza wartość nie ma jednoznacznego znaczenia.</p>
          </div>
        </div>
      </section>

      <section class="rk-bh-section" id="rk-bh-kalkulator-mocy">
        <span class="rk-bh-eyebrow">Narzędzie 1 — wariant obecny i po zmianie</span>
        <h2>Kalkulator bilansu cieplnego budynku i zapotrzebowania na moc grzewczą</h2>
        <p class="rk-bh-intro">Wprowadź powierzchnie oraz współczynniki U dla wariantu A i B. Kalkulator sumuje współczynniki strat przez przegrody, uproszczony udział podłogi na gruncie, mostki oraz wentylację. Wyniki aktualizują się również na wykresie w dalszej części artykułu.</p>
        <div class="rk-bh-tool" data-rk-tool="heat">
          <div class="rk-bh-tool-head">
            <h3>Uproszczone porównanie projektowych strat ciepła</h3>
            <p>Wariant A może opisywać stan istniejący, a wariant B — modernizację lub drugi standard. Dla przegród do powietrza używany jest iloczyn A × U, dla podłogi dodatkowo jawny współczynnik redukcyjny b. W pełnym obliczeniu straty do gruntu wymagają geometrii i metody właściwej dla kontaktu z gruntem.</p>
          </div>
          <div class="rk-bh-tool-body">
            <div class="rk-bh-field-grid">
              <div class="rk-bh-field"><label for="rk-bh-ti">Temperatura wewnętrzna [°C]</label><input id="rk-bh-ti" type="number" min="5" max="35" step="0.5" value="20" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-te">Temperatura zewnętrzna [°C]</label><input id="rk-bh-te" type="number" min="-40" max="15" step="0.5" value="-20" inputmode="decimal"><small>Dobierz do lokalizacji i celu obliczenia.</small></div>
              <div class="rk-bh-field"><label for="rk-bh-floor-area">Powierzchnia ogrzewana [m²]</label><input id="rk-bh-floor-area" type="number" min="10" max="2000" step="1" value="120" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-ground-b">Współczynnik redukcyjny podłogi b</label><input id="rk-bh-ground-b" type="number" min="0" max="1" step="0.05" value="0.40" inputmode="decimal"><small>Wyłącznie parametr uproszczonego porównania.</small></div>
            </div>

            <div class="rk-bh-subhead">Przegrody — geometria wspólna, parametry dwóch wariantów</div>
            <div class="rk-bh-table-wrap">
              <table class="rk-bh-input-table">
                <thead><tr><th>Element</th><th>Powierzchnia A [m²]</th><th>U — wariant A [W/(m²·K)]</th><th>U — wariant B [W/(m²·K)]</th></tr></thead>
                <tbody>
                  <tr><td data-label="Element"><strong>Ściany zewnętrzne netto</strong></td><td data-label="Powierzchnia A [m²]"><input id="rk-bh-a-wall" type="number" min="0" max="5000" step="1" value="160" inputmode="decimal" aria-label="Powierzchnia ścian"></td><td data-label="U — wariant A"><input id="rk-bh-u1-wall" type="number" min="0.03" max="5" step="0.01" value="0.25" inputmode="decimal" aria-label="U ścian wariant A"></td><td data-label="U — wariant B"><input id="rk-bh-u2-wall" type="number" min="0.03" max="5" step="0.01" value="0.15" inputmode="decimal" aria-label="U ścian wariant B"></td></tr>
                  <tr><td data-label="Element"><strong>Dach lub strop</strong></td><td data-label="Powierzchnia A [m²]"><input id="rk-bh-a-roof" type="number" min="0" max="5000" step="1" value="120" inputmode="decimal" aria-label="Powierzchnia dachu"></td><td data-label="U — wariant A"><input id="rk-bh-u1-roof" type="number" min="0.03" max="5" step="0.01" value="0.20" inputmode="decimal" aria-label="U dachu wariant A"></td><td data-label="U — wariant B"><input id="rk-bh-u2-roof" type="number" min="0.03" max="5" step="0.01" value="0.12" inputmode="decimal" aria-label="U dachu wariant B"></td></tr>
                  <tr><td data-label="Element"><strong>Okna</strong></td><td data-label="Powierzchnia A [m²]"><input id="rk-bh-a-window" type="number" min="0" max="2000" step="0.5" value="25" inputmode="decimal" aria-label="Powierzchnia okien"></td><td data-label="U — wariant A"><input id="rk-bh-u1-window" type="number" min="0.1" max="8" step="0.05" value="0.90" inputmode="decimal" aria-label="U okien wariant A"></td><td data-label="U — wariant B"><input id="rk-bh-u2-window" type="number" min="0.1" max="8" step="0.05" value="0.70" inputmode="decimal" aria-label="U okien wariant B"></td></tr>
                  <tr><td data-label="Element"><strong>Drzwi zewnętrzne</strong></td><td data-label="Powierzchnia A [m²]"><input id="rk-bh-a-door" type="number" min="0" max="500" step="0.5" value="5" inputmode="decimal" aria-label="Powierzchnia drzwi"></td><td data-label="U — wariant A"><input id="rk-bh-u1-door" type="number" min="0.1" max="8" step="0.05" value="1.30" inputmode="decimal" aria-label="U drzwi wariant A"></td><td data-label="U — wariant B"><input id="rk-bh-u2-door" type="number" min="0.1" max="8" step="0.05" value="1.00" inputmode="decimal" aria-label="U drzwi wariant B"></td></tr>
                  <tr><td data-label="Element"><strong>Podłoga na gruncie — uproszczenie</strong></td><td data-label="Powierzchnia A [m²]"><input id="rk-bh-a-ground" type="number" min="0" max="5000" step="1" value="120" inputmode="decimal" aria-label="Powierzchnia podłogi"></td><td data-label="U — wariant A"><input id="rk-bh-u1-ground" type="number" min="0.03" max="5" step="0.01" value="0.25" inputmode="decimal" aria-label="U podłogi wariant A"></td><td data-label="U — wariant B"><input id="rk-bh-u2-ground" type="number" min="0.03" max="5" step="0.01" value="0.15" inputmode="decimal" aria-label="U podłogi wariant B"></td></tr>
                </tbody>
              </table>
            </div>

            <div class="rk-bh-subhead">Mostki i wentylacja</div>
            <div class="rk-bh-field-grid">
              <div class="rk-bh-field"><label for="rk-bh-bridge1">Mostki H<sub>TB</sub> — wariant A [W/K]</label><input id="rk-bh-bridge1" type="number" min="0" max="1000" step="1" value="20" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-bridge2">Mostki H<sub>TB</sub> — wariant B [W/K]</label><input id="rk-bh-bridge2" type="number" min="0" max="1000" step="1" value="10" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-airflow">Strumień wentylacji [m³/h]</label><input id="rk-bh-airflow" type="number" min="0" max="10000" step="5" value="150" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-eta1">Odzysk — wariant A [%]</label><input id="rk-bh-eta1" type="number" min="0" max="95" step="1" value="0" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-eta2">Odzysk — wariant B [%]</label><input id="rk-bh-eta2" type="number" min="0" max="95" step="1" value="80" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-infil1">Infiltracja — wariant A [m³/h]</label><input id="rk-bh-infil1" type="number" min="0" max="5000" step="5" value="20" inputmode="decimal"></div>
              <div class="rk-bh-field"><label for="rk-bh-infil2">Infiltracja — wariant B [m³/h]</label><input id="rk-bh-infil2" type="number" min="0" max="5000" step="5" value="15" inputmode="decimal"></div>
            </div>

            <div class="rk-bh-actions">
              <button type="button" class="rk-bh-action" id="rk-bh-heat-run">Przelicz oba warianty</button>
              <button type="button" class="rk-bh-action rk-bh-action-secondary" id="rk-bh-heat-reset">Przywróć dane przykładowe</button>
            </div>
            <div class="rk-bh-error" id="rk-bh-heat-error" role="alert" hidden="">Sprawdź pola. Powierzchnie i strumienie nie mogą być ujemne, współczynniki U muszą być dodatnie, a temperatura wewnętrzna wyższa od zewnętrznej.</div>
            <div class="rk-bh-results" aria-live="polite">
              <div class="rk-bh-result rk-bh-result-featured"><span>Moc projektowa — wariant A</span><strong id="rk-bh-q1">—</strong><small id="rk-bh-wm1">—</small></div>
              <div class="rk-bh-result rk-bh-result-featured"><span>Moc projektowa — wariant B</span><strong id="rk-bh-q2">—</strong><small id="rk-bh-wm2">—</small></div>
              <div class="rk-bh-result"><span>Redukcja mocy</span><strong id="rk-bh-q-save">—</strong><small id="rk-bh-q-save-pct">—</small></div>
              <div class="rk-bh-result"><span>Współczynnik strat H — A / B</span><strong id="rk-bh-h-pair">—</strong><small>W/K, przed pomnożeniem przez różnicę temperatur</small></div>
            </div>
            <div class="rk-bh-result-line" id="rk-bh-heat-summary">Wprowadź dane, aby porównać udział przegród, mostków i wentylacji.</div>
            <p class="rk-bh-disclaimer"><strong>Ważne:</strong> model ma wartość edukacyjną i porównawczą. Nie uwzględnia m.in. pełnej metody strat do gruntu, sąsiednich stref, nagrzewania po osłabieniu, bilansu wentylacji dla konkretnych pomieszczeń ani wszystkich zasad obliczeń projektowych. Nie dobieraj z niego urządzenia „na styk”.</p>
          </div>
        </div>
      </section>

      <section class="rk-bh-section" id="rk-bh-interpretacja">
        <span class="rk-bh-eyebrow">Co oznacza wynik?</span>
        <h2>Jak interpretować kalkulator zapotrzebowania na moc grzewczą?</h2>
        <p>Wynik całkowity pokazuje skalę projektowych strat przy wpisanej różnicy temperatur. Pozwala sprawdzić, czy większy wpływ ma przenikanie, czy wymiana powietrza, oraz porównać dwa zestawy założeń. Wartość W/m² pomaga wychwycić nietypowy wynik, ale nie zastępuje zestawienia pomieszczeń.</p>
        <div class="rk-bh-grid-3">
          <article class="rk-bh-card rk-bh-card-accent"><h3>Sprawdź największy składnik</h3><p>Modernizacja powinna odpowiadać na przyczynę. Jeżeli dominuje dach, wymiana okien może dać mniejszy efekt niż wynika z intuicji. Wykres pokazuje to bez ukrywania udziałów.</p></article>
          <article class="rk-bh-card rk-bh-card-orange"><h3>Nie dodawaj automatycznego zapasu</h3><p>Rezerwa nie naprawia błędnych danych. Powinna wynikać z celu obliczenia, sposobu pracy i wymagań systemu, a nie z uniwersalnego „plus 20%”.</p></article>
          <article class="rk-bh-card rk-bh-card-green"><h3>Rozdziel wynik na pokoje</h3><p>Salon i łazienka mogą mieć zupełnie inne W/m². Dopiero obciążenie pomieszczenia porównuje się z mocą możliwą do oddania przez jego czynną podłogę.</p></article>
        </div>
        <p class="rk-bh-note">Wartość po modernizacji nie jest prognozą rachunku. Roczna pogoda rzadko odpowiada przez cały sezon temperaturze projektowej, dlatego koszt wymaga rocznej energii użytkowej. Do tego służy drugi kalkulator.</p>

        <aside class="rk-bh-cta" aria-label="Indywidualny projekt ogrzewania podłogowego">
          <span class="rk-bh-eyebrow">Od bilansu budynku do instalacji</span>
          <h3>Masz orientacyjną moc całego domu. Projekt podłogówki musi jeszcze rozdzielić ją między pomieszczenia.</h3>
          <p>Jedna wartość w kW nie wyznacza rozstawu rur, długości pętli, przepływów ani temperatury zasilania. Potrzebne są obciążenia pomieszczeń, rzeczywista powierzchnia czynna, konstrukcja podłogi i opór okładziny.</p>
          <div class="rk-bh-cta-context"><strong>To naturalny punkt przejścia:</strong> bilans mówi, ile ciepła trzeba dostarczyć, a projekt instalacji określa, jak zrobić to równomiernie i przy parametrach odpowiednich dla źródła.</div>
          <a class="rk-bh-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Sprawdź zakres indywidualnego projektu podłogówki</a>
        </aside>
      </section>

      <section class="rk-bh-section" id="rk-bh-przegrody">
        <span class="rk-bh-eyebrow">Ściany, dach, okna i drzwi</span>
        <h2>Jak obliczyć straty ciepła przez przegrody budynku?</h2>
        <p>Dla jednorodnej przegrody oddzielającej wnętrze od powietrza zewnętrznego podstawową zależność można zapisać jako iloczyn powierzchni, współczynnika przenikania i różnicy temperatur. W obliczeniu całego budynku trzeba używać powierzchni netto, właściwych temperatur po obu stronach oraz osobno ująć mostki cieplne.</p>
        <div class="rk-bh-formula">Φ<sub>T</sub> = A × U × ΔT &nbsp; [W]</div>
        <div class="rk-bh-grid-3">
          <article class="rk-bh-card"><h3>A — powierzchnia</h3><p>Ściana netto nie obejmuje okien i drzwi liczonych oddzielnie. Błąd geometrii przenosi się wprost na wynik.</p></article>
          <article class="rk-bh-card"><h3>U — przenikanie</h3><p>Współczynnik obejmuje układ warstw przegrody. Nie jest tym samym co lambda pojedynczego materiału izolacyjnego.</p></article>
          <article class="rk-bh-card"><h3>ΔT — warunki</h3><p>Dla ściany zewnętrznej to różnica między temperaturą strefy a temperaturą zewnętrzną. Dla innych sąsiedztw warunek jest inny.</p></article>
        </div>
        <p>Współczynnika U nie należy przepisywać automatycznie z etykiety jednej warstwy. Znaczenie mają grubości, przewodność, opory przejmowania oraz ciągłość rozwiązania. Podobnie okna o tym samym Ug szyby mogą mieć inne Uw całego wyrobu. Szczegółowe zasady warto połączyć z artykułem o tym, <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak liczyć straty cieplne</a>, a wynik zweryfikować przez <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">zakres normy PN-EN 12831</a>.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-grunt">
        <span class="rk-bh-eyebrow">Najczęściej nadmiernie upraszczany element</span>
        <h2>Straty ciepła przez podłogę na gruncie nie są zwykłym A × U × ΔT</h2>
        <p>Grunt nie zachowuje się jak powietrze zewnętrzne o tej samej temperaturze. Strumień zależy między innymi od pola podłogi, obwodu, geometrii, zagłębienia, izolacji podłogi i ścian oraz właściwości gruntu. Dlatego w pełnych obliczeniach stosuje się metodę przeznaczoną dla przegród stykających się z gruntem.</p>
        <div class="rk-bh-grid-2">
          <article class="rk-bh-card rk-bh-card-accent"><h3>Co robi kalkulator?</h3><p>Używa jawnego współczynnika redukcyjnego b, aby nie traktować całej różnicy temperatura wewnętrzna–zewnętrzna jak warunku dla gruntu. To uproszczenie pomaga porównać warianty, lecz nie odtwarza obliczenia geometrycznego.</p></article>
          <article class="rk-bh-card rk-bh-card-orange"><h3>Co robi pełne opracowanie?</h3><p>Rozpoznaje typ podłogi, obwód, wymiar charakterystyczny, izolację obwodową, warunki brzegowe i strefy przyległe. Wynik może różnić się od prostego iloczynu.</p></article>
        </div>
        <p>To szczególnie ważne, gdy ogrzewanie znajduje się w <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/">płycie fundamentowej</a> albo inwestor porównuje różne warianty <a href="https://projekt-ogrzewania.pl/jakie-sa-najlepsze-sposoby-izolacji-pod-ogrzewanie-podlogowe/">izolacji pod ogrzewanie podłogowe</a>. Sama grubość styropianu nie opisuje całej drogi ucieczki ciepła.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-wentylacja">
        <span class="rk-bh-eyebrow">Powietrze też przenosi ciepło</span>
        <h2>Jak policzyć straty wentylacyjne z rekuperacją i infiltracją?</h2>
        <p>Uproszczony współczynnik strat wentylacyjnych dla suchego powietrza zapisuje się często jako 0,34 razy strumień powietrza w m³/h. Przy odzysku ciepła nie wystarczy jednak wpisać sprawności z folderu centrali. Trzeba oddzielić strumień mechaniczny od infiltracji, uwzględnić pracę odszraniania i sprawdzić rzeczywiste strumienie nawiewu oraz wywiewu.</p>
        <div class="rk-bh-formula">Φ<sub>V</sub> ≈ 0,34 × [V̇<sub>went</sub> × (1 − η<sub>odz</sub>) + V̇<sub>inf</sub>] × ΔT &nbsp; [W]</div>
        <div class="rk-bh-table-wrap">
          <table>
            <thead><tr><th>Parametr</th><th>Co oznacza?</th><th>Typowy błąd</th></tr></thead>
            <tbody>
              <tr><td data-label="Parametr"><strong>V̇<sub>went</sub></strong></td><td data-label="Co oznacza?">Projektowy strumień powietrza wynikający z funkcji i użytkowania pomieszczeń.</td><td data-label="Typowy błąd">Zastąpienie go jedną wymianą powietrza bez bilansu nawiewu i wywiewu.</td></tr>
              <tr><td data-label="Parametr"><strong>η<sub>odz</sub></strong></td><td data-label="Co oznacza?">Efektywny udział odzysku w przyjętym punkcie pracy.</td><td data-label="Typowy błąd">Użycie maksymalnej wartości katalogowej w każdych warunkach mrozu.</td></tr>
              <tr><td data-label="Parametr"><strong>V̇<sub>inf</sub></strong></td><td data-label="Co oznacza?">Niekontrolowany napływ powietrza przez nieszczelności.</td><td data-label="Typowy błąd">Założenie, że rekuperator odzyskuje również ciepło z infiltracji.</td></tr>
            </tbody>
          </table>
        </div>
        <p>Rekuperacja może istotnie ograniczyć straty wentylacyjne, ale nie zmienia współczynników U przegród. Jej współpraca z instalacją została szerzej omówiona w poradniku <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">rekuperacja i ogrzewanie podłogowe</a>.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-mostki-zyski">
        <span class="rk-bh-eyebrow">Dwie pozycje, których nie wolno liczyć procentem z przyzwyczajenia</span>
        <h2>Mostki termiczne i zyski ciepła: kiedy je dodawać, a kiedy odejmować?</h2>
        <p>Mostki liniowe opisuje się iloczynem długości złącza i liniowego współczynnika przenikania ψ. Zestawienie złączy jest bardziej przejrzyste niż stały narzut 20–30% do wszystkich przegród. Taki procent może przypadkiem zbliżyć się do wyniku jednego domu i jednocześnie mocno zniekształcić inny.</p>
        <div class="rk-bh-formula">H<sub>TB</sub> = Σ(ψ × l) &nbsp; [W/K]</div>
        <p>Zyski słoneczne i wewnętrzne są ważne w rocznym bilansie energetycznym oraz w analizie przegrzewania. Nie są jednak bezwarunkową, stałą mocą dostępną dokładnie podczas projektowego mrozu. Ich wartość zależy od pory dnia, zachmurzenia, orientacji, zacienienia, obecności ludzi i pracy urządzeń. Dlatego proste odjęcie pełnych zysków od strat projektowych może prowadzić do niedowymiarowania ogrzewania.</p>
        <div class="rk-bh-grid-3">
          <article class="rk-bh-card"><h3>Zyski słoneczne</h3><p>Wymagają powierzchni i orientacji szyb, współczynnika g, zacienienia oraz danych klimatycznych. Duże przeszklenia mogą jednocześnie zwiększać straty i chwilowe zyski.</p></article>
          <article class="rk-bh-card"><h3>Zyski wewnętrzne</h3><p>Zależą od liczby osób, urządzeń, oświetlenia i harmonogramów. Nie należy zakładać ich stałej obecności w każdym pomieszczeniu.</p></article>
          <article class="rk-bh-card"><h3>Akumulacja</h3><p>Masa budynku przesuwa reakcję temperatury w czasie. Nie usuwa energii z bilansu i nie gwarantuje, że każde nasłonecznienie zostanie użyte bez przegrzania.</p></article>
        </div>
        <p>W osobnym materiale pokazano, jak <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">podłogówka reaguje na pasywne zyski ciepła</a> i dlaczego duże okna wymagają obliczeń <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">strefy przy przeszkleniach</a>, a nie uniwersalnego pasa lub narzutu mocy.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-kalkulator-kosztow">
        <span class="rk-bh-eyebrow">Narzędzie 2 — energia i źródła ciepła</span>
        <h2>Kalkulator rocznych kosztów ogrzewania dla pompy ciepła, gazu, pelletu i prądu</h2>
        <p class="rk-bh-intro">Do kalkulatora wpisuje się <strong>roczne zapotrzebowanie na energię użytkową do ogrzewania</strong>, najlepiej z charakterystyki energetycznej, audytu lub modelu rocznego. Nie jest ono automatycznie wyprowadzane z projektowej mocy w kW. Ceny i parametry startowe są wyłącznie przykładowe — przed porównaniem zastąp je własną taryfą, ofertą paliwa i zakładanymi kosztami stałymi.</p>
        <div class="rk-bh-tool" data-rk-tool="cost">
          <div class="rk-bh-tool-head">
            <h3>Porównanie kosztów dla tych samych potrzeb budynku</h3>
            <p>Każde źródło pokrywa identyczne Q<sub>H,nd</sub>. Różni się ilością kupowanej energii, parametrem sezonowym i kosztami stałymi. Zakres ±20% pokazuje wpływ niepewności rocznego zapotrzebowania, ale nie prognozuje cen.</p>
          </div>
          <div class="rk-bh-tool-body">
            <div class="rk-bh-field-grid">
              <div class="rk-bh-field"><label for="rk-bh-qh">Energia użytkowa Q<sub>H,nd</sub> [kWh/rok]</label><input id="rk-bh-qh" type="number" min="100" max="500000" step="100" value="9000" inputmode="decimal"><small>Nie wpisuj mocy źródła w kW.</small></div>
              <div class="rk-bh-field"><label for="rk-bh-years">Horyzont porównania [lat]</label><input id="rk-bh-years" type="number" min="1" max="30" step="1" value="20" inputmode="numeric"></div>
              <div class="rk-bh-field"><label for="rk-bh-growth">Wzrost kosztów [%/rok]</label><input id="rk-bh-growth" type="number" min="0" max="20" step="0.1" value="2.5" inputmode="decimal"><small>Wspólne założenie scenariusza, nie prognoza.</small></div>
              <div class="rk-bh-field"><label for="rk-bh-season-months">Miesiące sezonu do średniej</label><input id="rk-bh-season-months" type="number" min="1" max="12" step="1" value="7" inputmode="numeric"></div>
            </div>

            <div class="rk-bh-subhead">Edytowalne parametry źródeł</div>
            <div class="rk-bh-table-wrap">
              <table class="rk-bh-cost-table">
                <thead><tr><th>Źródło</th><th>SCOP lub sprawność</th><th>Cena energii wejściowej [zł/kWh]</th><th>Koszty stałe i serwis [zł/rok]</th></tr></thead>
                <tbody>
                  <tr><td data-label="Źródło"><span class="rk-bh-source">Pompa ciepła<small>Q użytkowe ÷ SCOP</small></span></td><td data-label="SCOP lub sprawność"><input id="rk-bh-factor-hp" type="number" min="1" max="8" step="0.1" value="3.5" inputmode="decimal" aria-label="SCOP pompy ciepła"></td><td data-label="Cena energii wejściowej"><input id="rk-bh-price-hp" type="number" min="0" max="20" step="0.01" value="1.10" inputmode="decimal" aria-label="Cena prądu dla pompy ciepła"></td><td data-label="Koszty stałe i serwis"><input id="rk-bh-fixed-hp" type="number" min="0" max="50000" step="50" value="350" inputmode="decimal" aria-label="Koszty stałe pompy ciepła"></td></tr>
                  <tr><td data-label="Źródło"><span class="rk-bh-source">Kocioł gazowy<small>Q użytkowe ÷ η sezonowa</small></span></td><td data-label="SCOP lub sprawność"><input id="rk-bh-factor-gas" type="number" min="0.1" max="1.2" step="0.01" value="0.92" inputmode="decimal" aria-label="Sprawność sezonowa kotła gazowego"></td><td data-label="Cena energii wejściowej"><input id="rk-bh-price-gas" type="number" min="0" max="20" step="0.01" value="0.34" inputmode="decimal" aria-label="Cena energii z gazu"></td><td data-label="Koszty stałe i serwis"><input id="rk-bh-fixed-gas" type="number" min="0" max="50000" step="50" value="900" inputmode="decimal" aria-label="Koszty stałe kotła gazowego"></td></tr>
                  <tr><td data-label="Źródło"><span class="rk-bh-source">Kocioł na pellet<small>Q użytkowe ÷ η sezonowa</small></span></td><td data-label="SCOP lub sprawność"><input id="rk-bh-factor-pellet" type="number" min="0.1" max="1.2" step="0.01" value="0.85" inputmode="decimal" aria-label="Sprawność sezonowa kotła na pellet"></td><td data-label="Cena energii wejściowej"><input id="rk-bh-price-pellet" type="number" min="0" max="20" step="0.01" value="0.38" inputmode="decimal" aria-label="Cena energii w pellecie"></td><td data-label="Koszty stałe i serwis"><input id="rk-bh-fixed-pellet" type="number" min="0" max="50000" step="50" value="1200" inputmode="decimal" aria-label="Koszty stałe kotła na pellet"></td></tr>
                  <tr><td data-label="Źródło"><span class="rk-bh-source">Ogrzewanie elektryczne<small>Q użytkowe ÷ sprawność</small></span></td><td data-label="SCOP lub sprawność"><input id="rk-bh-factor-electric" type="number" min="0.1" max="1.2" step="0.01" value="1.00" inputmode="decimal" aria-label="Sprawność ogrzewania elektrycznego"></td><td data-label="Cena energii wejściowej"><input id="rk-bh-price-electric" type="number" min="0" max="20" step="0.01" value="1.10" inputmode="decimal" aria-label="Cena prądu dla ogrzewania elektrycznego"></td><td data-label="Koszty stałe i serwis"><input id="rk-bh-fixed-electric" type="number" min="0" max="50000" step="50" value="100" inputmode="decimal" aria-label="Koszty stałe ogrzewania elektrycznego"></td></tr>
                </tbody>
              </table>
            </div>

            <div class="rk-bh-actions">
              <button type="button" class="rk-bh-action" id="rk-bh-cost-run">Przelicz koszty źródeł</button>
              <button type="button" class="rk-bh-action rk-bh-action-secondary" id="rk-bh-cost-reset">Przywróć scenariusz przykładowy</button>
            </div>
            <div class="rk-bh-error" id="rk-bh-cost-error" role="alert" hidden="">Sprawdź pola: energia, horyzont i liczba miesięcy muszą być dodatnie, ceny oraz koszty nie mogą być ujemne, a SCOP lub sprawność muszą być większe od zera.</div>
            <div class="rk-bh-results" aria-live="polite">
              <div class="rk-bh-result rk-bh-result-featured"><span>Najniższy koszt roczny</span><strong id="rk-bh-best-annual">—</strong><small id="rk-bh-best-name">—</small></div>
              <div class="rk-bh-result"><span>Średnio na miesiąc sezonu</span><strong id="rk-bh-best-month">—</strong><small id="rk-bh-season-note">—</small></div>
              <div class="rk-bh-result"><span>Najniższy koszt w horyzoncie</span><strong id="rk-bh-best-total">—</strong><small id="rk-bh-years-note">—</small></div>
              <div class="rk-bh-result"><span>Zakres przy ±20% Q<sub>H,nd</sub></span><strong id="rk-bh-best-range">—</strong><small>Przy niezmienionych cenach i kosztach stałych</small></div>
            </div>
            <div class="rk-bh-rank" id="rk-bh-ranking" aria-live="polite"></div>
            <p class="rk-bh-disclaimer"><strong>Uwaga:</strong> porównanie nie zawiera kosztu inwestycji, finansowania, wymian urządzeń ani różnic w przygotowaniu ciepłej wody. Cena gazu lub pelletu powinna być przeliczona na kWh energii paliwa zgodnie z własną fakturą i parametrami paliwa. SCOP pompy ciepła zależy od klimatu, temperatury zasilania, doboru, odszraniania, pomp pomocniczych oraz sterowania.</p>
          </div>
        </div>
        <p>Jeżeli chcesz zestawić koszt inwestycji z eksploatacją, użyj osobno analizy <a href="https://projekt-ogrzewania.pl/zwrot-z-inwestycji-w-ogrzewanie-podlogowe-realne-wyliczenia-na-2026-rok/">zwrotu z inwestycji w ogrzewanie podłogowe</a>. Porównanie samej podłogówki wodnej z elektryczną opisuje kalkulator <a href="https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/">ogrzewanie elektryczne a wodna podłogówka</a>.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-wykres">
        <span class="rk-bh-eyebrow">Wyniki bez ukrywania założeń</span>
        <h2>Interaktywny wykres strat ciepła i kosztów ogrzewania</h2>
        <p class="rk-bh-intro">Przełącz widok, aby zobaczyć skład projektowych strat w wariantach A i B albo roczne koszty czterech źródeł. Wykres korzysta dokładnie z danych wpisanych powyżej i nie dodaje własnego scenariusza.</p>
        <div class="rk-bh-chart">
          <div class="rk-bh-chart-head">
            <div><h3 id="rk-bh-chart-title">Składniki projektowych strat ciepła</h3><p id="rk-bh-chart-subtitle">Porównanie mocy w W przy wpisanej różnicy temperatur.</p></div>
            <div class="rk-bh-chart-tabs" role="group" aria-label="Rodzaj wykresu">
              <button type="button" class="rk-bh-chart-tab" data-rk-chart="loss" aria-pressed="true">Straty ciepła</button>
              <button type="button" class="rk-bh-chart-tab" data-rk-chart="cost" aria-pressed="false">Koszty źródeł</button>
            </div>
          </div>
          <div class="rk-bh-chart-body">
            <div class="rk-bh-bars" id="rk-bh-bars" aria-live="polite"></div>
            <div class="rk-bh-chart-legend" id="rk-bh-chart-legend">
              <span class="rk-bh-chart-key"><span class="rk-bh-chart-dot" aria-hidden="true"></span>Wariant A</span>
              <span class="rk-bh-chart-key"><span class="rk-bh-chart-dot rk-bh-chart-dot-alt" aria-hidden="true"></span>Wariant B</span>
            </div>
            <p class="rk-bh-chart-caption" id="rk-bh-chart-caption">Długość słupka pokazuje udział wobec największego składnika. Wartość bezwzględna jest podana w każdym słupku.</p>
          </div>
        </div>
      </section>

      <section class="rk-bh-section" id="rk-bh-podlogowka">
        <span class="rk-bh-eyebrow">Od obciążenia pomieszczenia do emitera</span>
        <h2>Jak bilans cieplny wpływa na projekt ogrzewania podłogowego?</h2>
        <p>Ogrzewanie podłogowe nie zmniejsza strat ścian, dachu ani wentylacji. Ma dostarczyć do każdej strefy moc wynikającą z obciążenia przy zachowaniu komfortu i dopuszczalnych temperatur powierzchni. Dlatego projekt nie zaczyna się od zasady „rura co 10 lub 15 cm”, lecz od porównania wymaganej mocy z możliwościami konkretnej podłogi.</p>
        <div class="rk-bh-numbered-grid">
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">1</span><div><h3>Obciążenie pomieszczenia</h3><p>Projektowe straty w W przy temperaturze właściwej dla danej strefy, nie tylko suma całego budynku.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">2</span><div><h3>Powierzchnia czynna</h3><p>Fragment podłogi rzeczywiście dostępny do oddawania ciepła po uwzględnieniu zabudowy i ograniczeń.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">3</span><div><h3>Opór warstw i okładziny</h3><p>Wylewka, system suchy lub mokry oraz wykończenie zmieniają wymaganą temperaturę średnią czynnika.</p></div></article>
          <article class="rk-bh-numbered-card"><span class="rk-bh-number" aria-hidden="true">4</span><div><h3>Rozstaw, pętla i przepływ</h3><p>Geometria musi równocześnie spełnić warunki cieplne, hydrauliczne i wykonawcze.</p></div></article>
        </div>
        <p>W praktyce trzeba połączyć <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">dobór rozstawu rur</a>, <a href="https://projekt-ogrzewania.pl/jak-zaplanowac-rozmieszczenie-petli-grzewczych-w-ogrzewaniu-podlogowym/">rozmieszczenie pętli grzewczych</a>, <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">średnicę rur</a>, <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">wymagany przepływ i pompę obiegową</a> oraz <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">opór cieplny okładziny</a>. Żaden z tych parametrów nie wynika samodzielnie z powierzchni domu.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-pompa">
        <span class="rk-bh-eyebrow">Moc budynku to nie symbol urządzenia</span>
        <h2>Jak dobrać moc pompy ciepła z OZC i bilansu cieplnego?</h2>
        <p>Projektowe obciążenie cieplne jest kluczowym wejściem do doboru, ale nie kończy analizy. Trzeba znać charakterystykę mocy urządzenia w funkcji temperatury zewnętrznej i wymaganej temperatury wody, punkt biwalentny, udział grzałki, przygotowanie ciepłej wody, minimalną moc modulacji oraz wymagany przepływ.</p>
        <div class="rk-bh-grid-3">
          <article class="rk-bh-card rk-bh-card-accent"><h3>Moc przy warunkach pracy</h3><p>Wartość z nazwy modelu nie musi być mocą dostępną podczas mrozu i przy konkretnej temperaturze zasilania.</p></article>
          <article class="rk-bh-card rk-bh-card-orange"><h3>Modulacja i częściowe obciążenie</h3><p>Przewymiarowanie może nasilać taktowanie w łagodnej pogodzie. Sam zapas mocy nie gwarantuje lepszej pracy.</p></article>
          <article class="rk-bh-card rk-bh-card-green"><h3>Temperatura instalacji</h3><p>Niższa wymagana temperatura wody zwykle sprzyja sprawności, ale musi wystarczyć do pokrycia strat każdego pomieszczenia.</p></article>
        </div>
        <p>Pełne powiązanie opisuje poradnik <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a>. Warto też sprawdzić, dlaczego deklarowane <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">35°C nie jest uniwersalną temperaturą zasilania</a> oraz jak ustawia się <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywą grzewczą podłogówki</a>.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-bledy">
        <span class="rk-bh-eyebrow">Kontrola jakości obliczeń</span>
        <h2>Najczęstsze błędy w bilansie cieplnym budynku</h2>
        <div class="rk-bh-table-wrap">
          <table>
            <thead><tr><th>Błąd</th><th>Dlaczego zniekształca wynik?</th><th>Co zrobić?</th></tr></thead>
            <tbody>
              <tr><td data-label="Błąd"><strong>Moc tylko z W/m²</strong></td><td data-label="Dlaczego zniekształca wynik?">Pomija geometrię, przegrody, wentylację, klimat i temperatury pomieszczeń.</td><td data-label="Co zrobić?">Liczyć składniki i używać W/m² dopiero jako kontroli.</td></tr>
              <tr><td data-label="Błąd"><strong>Podłoga na gruncie jak ściana</strong></td><td data-label="Dlaczego zniekształca wynik?">Grunt ma inne warunki brzegowe i zależność od geometrii.</td><td data-label="Co zrobić?">Zastosować metodę dla gruntu; uproszczenie wyraźnie oznaczyć.</td></tr>
              <tr><td data-label="Błąd"><strong>Stałe 20–30% na mostki</strong></td><td data-label="Dlaczego zniekształca wynik?">Nie opisuje długości ani jakości konkretnych złączy.</td><td data-label="Co zrobić?">Sumować ψ × l albo stosować jawny, uzasadniony model zastępczy.</td></tr>
              <tr><td data-label="Błąd"><strong>Pełne odjęcie zysków w mrozie</strong></td><td data-label="Dlaczego zniekształca wynik?">Słońce, ludzie i urządzenia nie są stałą mocą gwarantowaną w każdej strefie.</td><td data-label="Co zrobić?">Rozdzielić obliczenie projektowe od rocznego bilansu z wykorzystaniem zysków.</td></tr>
              <tr><td data-label="Błąd"><strong>kW × 8760 = kWh/rok</strong></td><td data-label="Dlaczego zniekształca wynik?">Zakłada całoroczną pracę z mocą projektową.</td><td data-label="Co zrobić?">Roczną energię liczyć z przebiegu warunków, harmonogramów i bilansu sezonowego.</td></tr>
              <tr><td data-label="Błąd"><strong>Dobór źródła do sumy domu</strong></td><td data-label="Dlaczego zniekształca wynik?">Nie sprawdza mocy emiterów w poszczególnych pomieszczeniach ani parametrów urządzenia.</td><td data-label="Co zrobić?">Połączyć OZC pomieszczeń z obliczeniami instalacji i charakterystyką źródła.</td></tr>
            </tbody>
          </table>
        </div>
        <p>Warto również przejrzeć zestawienie <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-glowy-vs-projekt-z-obliczeniami-ile-mozesz-stracic-na-bledach/">projekt „z głowy” a projekt z obliczeniami</a> oraz listę <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/">błędów wykonawczych psujących wynik projektu</a>.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-checklista">
        <span class="rk-bh-eyebrow">Przed zleceniem lub odbiorem obliczeń</span>
        <h2>Checklista danych do bilansu cieplnego, OZC i projektu podłogówki</h2>
        <div class="rk-bh-check-grid">
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">1</span><div><h3>Rzuty i przekroje</h3><p>Wymiary, wysokości, powierzchnie, strefy, orientacja i poziomy terenu.</p></div></article>
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">2</span><div><h3>Warstwy przegród</h3><p>Ściany, dach, stropy, podłoga, fundament oraz materiały i grubości.</p></div></article>
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">3</span><div><h3>Stolarka</h3><p>Wymiary, Uw, drzwi, bramy, współczynnik g i sposób montażu.</p></div></article>
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">4</span><div><h3>Wentylacja</h3><p>System, strumienie, sprawność odzysku, infiltracja i tryb mrozowy.</p></div></article>
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">5</span><div><h3>Temperatury stref</h3><p>Założenia dla każdego pomieszczenia oraz warunki po drugiej stronie przegród.</p></div></article>
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">6</span><div><h3>Mostki</h3><p>Złącza, długości, detale, przyjęte ψ i sposób udokumentowania uproszczeń.</p></div></article>
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">7</span><div><h3>Podłoga i zabudowa</h3><p>Powierzchnia czynna, warstwy, okładziny, stała zabudowa i ograniczenia producentów.</p></div></article>
          <article class="rk-bh-check-card"><span class="rk-bh-number" aria-hidden="true">8</span><div><h3>Źródło i parametry</h3><p>Rodzaj urządzenia, charakterystyka mocy, oczekiwana temperatura wody i sposób regulacji.</p></div></article>
        </div>
        <p class="rk-bh-note">Jeżeli dokumentacja nie zawiera obciążeń poszczególnych pomieszczeń, trudno rzetelnie sprawdzić powierzchnię czynną, rozstawy i przepływy. W artykule <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">jak powinien wyglądać profesjonalny projekt podłogówki</a> pokazano, jakich informacji oczekiwać na rysunkach i w zestawieniach.</p>
      </section>

      <section class="rk-bh-section" id="rk-bh-podsumowanie">
        <span class="rk-bh-eyebrow">Wniosek końcowy</span>
        <h2>Dobry bilans cieplny prowadzi od przyczyny strat do poprawnej instalacji</h2>
        <p>Rzetelna analiza nie obiecuje jednej uniwersalnej wartości dla każdego domu. Pokazuje osobno straty przez przegrody, grunt, mostki oraz wentylację, a następnie wyznacza projektowe obciążenia pomieszczeń. Roczna energia powstaje z modelu sezonu, a koszt dopiero po uwzględnieniu sprawności i cen. Taka kolejność pozwala porównywać modernizacje, dobrać źródło oraz sprawdzić, czy ogrzewanie podłogowe pokryje wymagania przy rozsądnej temperaturze wody.</p>
        <div class="rk-bh-grid-3">
          <article class="rk-bh-card rk-bh-card-accent"><h3>W/kW</h3><p>Dobór mocy i sprawdzenie emiterów w warunkach projektowych.</p></article>
          <article class="rk-bh-card rk-bh-card-green"><h3>kWh/rok</h3><p>Roczny bilans z klimatem, zyskami, akumulacją i użytkowaniem.</p></article>
          <article class="rk-bh-card rk-bh-card-orange"><h3>zł/rok</h3><p>Energia końcowa, ceny, taryfy, opłaty stałe i serwis źródła.</p></article>
        </div>
        <aside class="rk-bh-cta" aria-label="Końcowe zamówienie projektu ogrzewania podłogowego">
          <span class="rk-bh-eyebrow">Obliczenia zamiast uniwersalnych recept</span>
          <h3>Przełóż obciążenia pomieszczeń na pętle, rozstawy, przepływy i temperaturę zasilania.</h3>
          <p>Indywidualny projekt ogrzewania podłogowego łączy bilans cieplny z geometrią instalacji, konstrukcją podłogi, ograniczeniami okładzin i wymaganiami źródła ciepła.</p>
          <div class="rk-bh-cta-context"><strong>Zakres musi odpowiadać budynkowi:</strong> przed zamówieniem przygotuj rzuty, warstwy przegród, informacje o wentylacji, źródle, okładzinach i stałej zabudowie. To skraca drogę od danych do spójnego projektu.</div>
          <a class="rk-bh-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów indywidualny projekt ogrzewania podłogowego</a>
        </aside>
      </section>

      <section class="rk-bh-section" id="rk-bh-zrodla">
        <span class="rk-bh-eyebrow">Podstawa techniczna</span>
        <h2>Źródła dotyczące obciążeń cieplnych i charakterystyki energetycznej</h2>
        <p>Artykuł rozdziela projektową moc, roczną energię i koszt zgodnie z odmiennym celem tych obliczeń. Pełne opracowania wymagają aktualnych norm, przepisów oraz danych konkretnego budynku; kalkulatory na stronie są świadomie uproszczone.</p>
        <ul class="rk-bh-source-list">
          <li><a href="https://repo.pw.edu.pl/info/article/WUT7c194b7443134803a9d035c593eba8a2/" target="_blank" rel="nofollow noopener noreferrer">Politechnika Warszawska — materiały dotyczące obliczania projektowego obciążenia cieplnego według PN-EN 12831-1</a>.</li>
          <li><a href="https://isap.sejm.gov.pl/isap.nsf/download.xsp/WDU20130000926/O/D20130926.pdf" target="_blank" rel="nofollow noopener noreferrer">Internetowy System Aktów Prawnych — wymagania techniczne i przywołane metody obliczeń cieplnych budynków</a>.</li>
          <li><a href="https://eli.gov.pl/eli/DU/2015/376/ogl/pol" target="_blank" rel="nofollow noopener noreferrer">Elektroniczny Dziennik Ustaw — metodologia wyznaczania charakterystyki energetycznej budynku</a>.</li>
          <li><a href="https://eli.gov.pl/eli/DU/2023/697/ogl/pol" target="_blank" rel="nofollow noopener noreferrer">Elektroniczny Dziennik Ustaw — zmiana metodologii charakterystyki energetycznej z 2023 r.</a>.</li>
        </ul>
      </section>

      <section class="rk-bh-section" id="rk-bh-faq">
        <span class="rk-bh-eyebrow">Najczęstsze pytania</span>
        <h2>FAQ — bilans cieplny budynku, moc, energia i koszty ogrzewania</h2>
        <div class="rk-bh-faq">
          <details><summary>Co to jest bilans cieplny budynku?</summary><div class="rk-bh-faq-answer"><p>To zestawienie przepływów ciepła dla określonego celu i warunków. W obliczeniu projektowym obejmuje przede wszystkim straty przez przegrody, mostki i wymianę powietrza, a w bilansie rocznym również zmienność klimatu, zyski oraz akumulację.</p></div></details>
          <details><summary>Czy bilans cieplny i OZC oznaczają to samo?</summary><div class="rk-bh-faq-answer"><p>W języku potocznym pojęcia bywają używane zamiennie, ale warto podać zakres opracowania. Projektowe obciążenie cieplne dotyczy mocy w warunkach obliczeniowych, natomiast bilans może też oznaczać roczne zapotrzebowanie na energię.</p></div></details>
          <details><summary>Ile kW ogrzewania potrzebuje dom 100 lub 150 m²?</summary><div class="rk-bh-faq-answer"><p>Nie da się tego poprawnie ustalić z samej powierzchni. Potrzebne są geometria, współczynniki U, stolarka, mostki, wentylacja, szczelność, lokalizacja i temperatury pomieszczeń. W/m² może służyć do kontroli gotowego wyniku, nie do zastąpienia obliczeń.</p></div></details>
          <details><summary>Czy od strat projektowych odejmuje się zyski słoneczne i od ludzi?</summary><div class="rk-bh-faq-answer"><p>Nie należy bezwarunkowo odejmować pełnej, stałej wartości. Dostępność zysków zależy od czasu, pogody i użytkowania. Sposób ich ujęcia musi odpowiadać metodzie i celowi obliczenia, szczególnie przy doborze mocy w warunkach projektowych.</p></div></details>
          <details><summary>Jak policzyć straty wentylacyjne przy rekuperacji?</summary><div class="rk-bh-faq-answer"><p>Trzeba znać projektowy strumień powietrza, efektywny odzysk w ocenianych warunkach, infiltrację oraz sposób pracy centrali podczas mrozu. Rekuperator nie odzyskuje ciepła z powietrza napływającego przez nieszczelności.</p></div></details>
          <details><summary>Czy moc w kW można przeliczyć na kWh/rok?</summary><div class="rk-bh-faq-answer"><p>Nie jednym uniwersalnym mnożnikiem. Moc projektowa dotyczy konkretnego punktu obliczeniowego, a roczna energia zależy od przebiegu pogody, temperatur wewnętrznych, zysków, akumulacji, przerw i regulacji przez cały sezon.</p></div></details>
          <details><summary>Czy kalkulator kosztów może przyjąć moc pompy ciepła zamiast QH,nd?</summary><div class="rk-bh-faq-answer"><p>Nie. Do porównania kosztów potrzebna jest roczna energia użytkowa, a następnie sezonowa sprawność lub SCOP źródła. Moc urządzenia opisuje zdolność pokrycia chwilowego obciążenia, a nie automatycznie roczne zużycie.</p></div></details>
          <details><summary>Czy ogrzewanie podłogowe zmniejsza bilans cieplny budynku?</summary><div class="rk-bh-faq-answer"><p>Nie zmienia współczynników U ani strumieni wentylacji. Może umożliwić pracę źródła przy niższej temperaturze wody i wpływać na komfort oraz regulację, ale nadal musi dostarczyć moc wynikającą ze strat każdego pomieszczenia.</p></div></details>
          <details><summary>Czy wynik bilansu całego domu wystarczy do zaprojektowania podłogówki?</summary><div class="rk-bh-faq-answer"><p>Nie. Niezbędne są obciążenia poszczególnych pomieszczeń, powierzchnie czynne, warstwy podłogi, okładziny, temperatury zasilania i powrotu, geometria pętli, przepływy oraz opory hydrauliczne.</p></div></details>
          <details><summary>Czy kalkulatory z artykułu zastępują obliczenia projektowe?</summary><div class="rk-bh-faq-answer"><p>Nie. Pierwszy jest uproszczonym narzędziem porównawczym, a drugi przelicza koszt z podanego rocznego zapotrzebowania. Nie zastępują OZC, charakterystyki energetycznej, audytu ani projektu instalacji i źródła ciepła.</p></div></details>
        </div>
      </section>
    </main>

    <section class="rk-bh-author" id="rk-bh-autor" aria-labelledby="rk-bh-author-heading">
      <div class="rk-bh-author-head">
        <span class="rk-bh-eyebrow">E-E-A-T i odpowiedzialność za treść</span>
        <h2 id="rk-bh-author-heading">Autor i weryfikacja merytoryczna</h2>
        <p>Treść przygotowana z perspektywy obliczeń cieplnych budynków, projektowania wodnego ogrzewania podłogowego, hydrauliki instalacji i współpracy z różnymi źródłami ciepła.</p>
        <span class="rk-bh-author-update">Aktualizacja: 14.09.2026</span>
      </div>
      <div class="rk-bh-author-layout">
        <aside class="rk-bh-author-side">
          <div class="rk-bh-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-bh-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <p class="rk-bh-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-bh-author-social-label">Profile branżowe</div>
          <div class="rk-bh-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-bh-author-main">
          <blockquote class="rk-bh-author-quote"><p>Moim zdaniem najdroższym błędem jest traktowanie jednej liczby jak odpowiedzi na wszystkie pytania. Projektowe kW dobierają moc, roczne kWh opisują energię, a złotówki zależą jeszcze od sprawności źródła i cen — tych wartości nie wolno mieszać.</p></blockquote>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz poradniki techniczne dla inwestorów i wykonawców. W analizie łączy obciążenia pomieszczeń, powierzchnię czynną, konstrukcję podłogi, temperatury wody, przepływy, opory rozdzielaczy i wymagania źródła.</p>
          <p>W tej aktualizacji rozdzielono projektową moc od rocznej energii oraz kosztu. Usunięto uniwersalne narzuty na mostki, bezwarunkowe odejmowanie zysków i proste traktowanie podłogi na gruncie. Kalkulatory pokazują zależności oraz wrażliwość wyniku, a ich ograniczenia są opisane przy danych i rezultatach.</p>
          <div class="rk-bh-author-facts">
            <div class="rk-bh-author-fact"><strong>Praktyka projektowa</strong><span>OZC pomieszczeń, powierzchnie czynne, pętle, przepływy, rozdzielacze, źródła i automatyka.</span></div>
            <div class="rk-bh-author-fact"><strong>Metoda</strong><span>Oddzielenie W i kW od kWh/rok oraz od kosztu energii końcowej, opłat i serwisu.</span></div>
            <div class="rk-bh-author-fact"><strong>Zakres aktualizacji</strong><span>Przegrody, grunt, mostki, wentylacja, zyski, kalkulatory, wykres i powiązanie z projektem podłogówki.</span></div>
          </div>
          <p class="rk-bh-author-portals">Autor i właściciel serwisów:<br>
            <a href="https://projekt-ogrzewania.pl/author/admin3399/">Projekt-Ogrzewania.pl</a>
            <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a>
            <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>
          </p>
        </div>
      </div>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg"
      },
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@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",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski-image" },
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ],
      "knowsAbout": [
        "bilans cieplny budynku",
        "projektowe obciążenie cieplne",
        "ogrzewanie podłogowe",
        "hydraulika instalacji",
        "pompy ciepła",
        "koszty ogrzewania"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu.webp",
      "width": 945,
      "height": 945,
      "caption": "Bilans cieplny budynku — kalkulator strat, mocy i kosztów ogrzewania",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski-image",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "caption": "Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#webpage",
      "url": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/",
      "name": "Bilans cieplny budynku – kalkulator strat, mocy i kosztów ogrzewania",
      "description": "Bilans cieplny budynku: oblicz straty przez przegrody i wentylację, potrzebną moc grzewczą oraz koszty ogrzewania pompą ciepła, gazem, pelletem i prądem online.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#primaryimage" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#breadcrumb" },
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#article" },
      "datePublished": "2026-01-19T09:22:38+00:00",
      "dateModified": "2026-09-14",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/" },
        { "@type": "ListItem", "position": 2, "name": "Efektywność cieplna", "item": "https://projekt-ogrzewania.pl/category/efektywnosc-cieplna/" },
        { "@type": "ListItem", "position": 3, "name": "Bilans cieplny budynku", "item": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" }
      ]
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#article",
      "headline": "Bilans cieplny budynku – kalkulator strat, mocy i kosztów ogrzewania",
      "description": "Praktyczny poradnik rozdzielający projektowe straty i moc w kW, roczne zapotrzebowanie na energię w kWh oraz koszt ogrzewania w złotych.",
      "url": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#webpage" },
      "image": { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#primaryimage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "reviewedBy": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-01-19T09:22:38+00:00",
      "dateModified": "2026-09-14",
      "timeRequired": "PT34M",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "proficiencyLevel": "Beginner to Intermediate",
      "about": [
        { "@type": "Thing", "name": "Bilans cieplny budynku" },
        { "@type": "Thing", "name": "Projektowe obciążenie cieplne" },
        { "@type": "Thing", "name": "Straty ciepła" },
        { "@type": "Thing", "name": "Zapotrzebowanie na energię" },
        { "@type": "Thing", "name": "Koszty ogrzewania" },
        { "@type": "Thing", "name": "Ogrzewanie podłogowe" }
      ],
      "mentions": [
        { "@type": "Thing", "name": "Rekuperacja" },
        { "@type": "Thing", "name": "Mostki termiczne" },
        { "@type": "Thing", "name": "Pompa ciepła" },
        { "@type": "Thing", "name": "Kocioł gazowy" },
        { "@type": "Thing", "name": "Kocioł na pellet" }
      ],
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#heat-calculator" },
        { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#cost-calculator" },
        { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#interactive-chart" },
        { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#faq" }
      ],
      "citation": [
        "https://repo.pw.edu.pl/info/article/WUT7c194b7443134803a9d035c593eba8a2/",
        "https://isap.sejm.gov.pl/isap.nsf/download.xsp/WDU20130000926/O/D20130926.pdf",
        "https://eli.gov.pl/eli/DU/2015/376/ogl/pol",
        "https://eli.gov.pl/eli/DU/2023/697/ogl/pol"
      ],
      "keywords": "bilans cieplny budynku kalkulator, straty ciepła budynku, projektowe obciążenie cieplne, OZC, ile kW potrzebuje dom, kW a kWh, kalkulator kosztów ogrzewania, ogrzewanie podłogowe"
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#heat-calculator",
      "name": "Kalkulator bilansu cieplnego i projektowych strat budynku",
      "url": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#rk-bh-kalkulator-mocy",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "creator": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "description": "Uproszczone narzędzie porównuje projektowe straty przez przegrody, grunt, mostki i wentylację dla dwóch wariantów budynku.",
      "featureList": [
        "Porównanie dwóch wariantów przegród",
        "Oddzielny udział mostków cieplnych",
        "Wentylacja z odzyskiem i infiltracją",
        "Wynik w kW, W/m² oraz W/K",
        "Połączenie z interaktywnym wykresem"
      ],
      "inLanguage": "pl-PL"
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#cost-calculator",
      "name": "Kalkulator rocznych kosztów ogrzewania dla czterech źródeł",
      "url": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#rk-bh-kalkulator-kosztow",
      "applicationCategory": "FinanceApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "creator": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "description": "Kalkulator porównuje roczne i wieloletnie koszty pompy ciepła, kotła gazowego, kotła na pellet i ogrzewania elektrycznego dla tej samej energii użytkowej.",
      "featureList": [
        "Edytowalne zapotrzebowanie na energię użytkową",
        "Edytowalne SCOP i sprawności sezonowe",
        "Edytowalne ceny oraz koszty stałe",
        "Zakres wyniku przy zmianie energii o 20 procent",
        "Ranking roczny i wieloletni"
      ],
      "inLanguage": "pl-PL"
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#interactive-chart",
      "name": "Interaktywny wykres strat ciepła i kosztów ogrzewania",
      "url": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#rk-bh-wykres",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "creator": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "description": "Wykres przełącza się między składem strat projektowych dwóch wariantów oraz rocznymi kosztami czterech źródeł i reaguje na dane kalkulatorów.",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#howto",
      "name": "Jak przejść od danych budynku do kosztu ogrzewania",
      "description": "Sześć etapów oddzielających warunki obliczeniowe, straty, moc, energię sezonową i koszt.",
      "totalTime": "PT30M",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Zdefiniuj warunki i strefy", "text": "Zbierz geometrię, warstwy, temperatury, lokalizację, wentylację oraz sposób użytkowania budynku." },
        { "@type": "HowToStep", "position": 2, "name": "Oblicz straty przez przenikanie", "text": "Policz przegrody do powietrza, gruntu i stref sąsiednich oraz oddzielnie ujmij mostki cieplne." },
        { "@type": "HowToStep", "position": 3, "name": "Oblicz straty wentylacyjne", "text": "Ustal strumienie powietrza, odzysk ciepła, infiltrację i tryb pracy systemu podczas mrozu." },
        { "@type": "HowToStep", "position": 4, "name": "Wyznacz moc projektową", "text": "Określ obciążenie cieplne każdego pomieszczenia oraz sumę dla źródła w zdefiniowanych warunkach." },
        { "@type": "HowToStep", "position": 5, "name": "Wyznacz energię sezonową", "text": "Zastosuj model roczny uwzględniający pogodę, zyski, akumulację, harmonogramy i regulację." },
        { "@type": "HowToStep", "position": 6, "name": "Policz energię końcową i koszt", "text": "Podziel potrzeby użytkowe przez sprawność sezonową lub SCOP, a następnie zastosuj ceny, opłaty i serwis." }
      ],
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/#faq",
      "mainEntity": [
        { "@type": "Question", "name": "Co to jest bilans cieplny budynku?", "acceptedAnswer": { "@type": "Answer", "text": "To zestawienie przepływów ciepła dla określonego celu i warunków. W obliczeniu projektowym obejmuje przede wszystkim straty przez przegrody, mostki i wymianę powietrza, a w bilansie rocznym także klimat, zyski i akumulację." } },
        { "@type": "Question", "name": "Czy bilans cieplny i OZC oznaczają to samo?", "acceptedAnswer": { "@type": "Answer", "text": "Pojęcia bywają używane zamiennie, ale zakres trzeba doprecyzować. Projektowe obciążenie cieplne dotyczy mocy w warunkach obliczeniowych, natomiast bilans może też oznaczać roczne zapotrzebowanie na energię." } },
        { "@type": "Question", "name": "Ile kW ogrzewania potrzebuje dom 100 lub 150 m²?", "acceptedAnswer": { "@type": "Answer", "text": "Nie można tego poprawnie ustalić z samej powierzchni. Potrzebne są geometria, współczynniki U, stolarka, mostki, wentylacja, szczelność, lokalizacja i temperatury pomieszczeń." } },
        { "@type": "Question", "name": "Czy od strat projektowych odejmuje się zyski słoneczne i od ludzi?", "acceptedAnswer": { "@type": "Answer", "text": "Nie należy bezwarunkowo odejmować pełnej stałej wartości. Dostępność zysków zależy od czasu, pogody i użytkowania, a sposób ich ujęcia musi odpowiadać metodzie oraz celowi obliczenia." } },
        { "@type": "Question", "name": "Jak policzyć straty wentylacyjne przy rekuperacji?", "acceptedAnswer": { "@type": "Answer", "text": "Trzeba znać projektowy strumień powietrza, efektywny odzysk w ocenianych warunkach, infiltrację oraz sposób pracy centrali podczas mrozu. Rekuperator nie odzyskuje ciepła z infiltracji." } },
        { "@type": "Question", "name": "Czy moc w kW można przeliczyć na kWh rocznie?", "acceptedAnswer": { "@type": "Answer", "text": "Nie jednym uniwersalnym mnożnikiem. Moc projektowa dotyczy konkretnego punktu, a roczna energia zależy od przebiegu pogody, temperatur, zysków, akumulacji, przerw i regulacji." } },
        { "@type": "Question", "name": "Czy kalkulator kosztów może przyjąć moc pompy ciepła zamiast QH,nd?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Do porównania kosztów potrzebna jest roczna energia użytkowa, a następnie sezonowa sprawność lub SCOP. Moc urządzenia opisuje zdolność pokrycia chwilowego obciążenia." } },
        { "@type": "Question", "name": "Czy ogrzewanie podłogowe zmniejsza bilans cieplny budynku?", "acceptedAnswer": { "@type": "Answer", "text": "Nie zmienia współczynników U ani strumieni wentylacji. Może umożliwić pracę źródła przy niższej temperaturze wody, ale nadal musi pokryć straty każdego pomieszczenia." } },
        { "@type": "Question", "name": "Czy wynik bilansu całego domu wystarczy do zaprojektowania podłogówki?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Potrzebne są obciążenia pomieszczeń, powierzchnie czynne, warstwy podłogi, okładziny, temperatury wody, geometria pętli, przepływy i opory hydrauliczne." } },
        { "@type": "Question", "name": "Czy kalkulatory z artykułu zastępują obliczenia projektowe?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Pierwszy jest uproszczonym narzędziem porównawczym, a drugi przelicza koszt z podanej energii rocznej. Nie zastępują OZC, charakterystyki energetycznej, audytu ani projektu instalacji." } }
      ],
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Service",
      "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#service",
      "name": "Indywidualny projekt instalacji ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "serviceType": "Projektowanie instalacji ogrzewania podłogowego",
      "description": "Projekt pętli, rozstawów, przepływów, rozdzielaczy i parametrów wodnego ogrzewania podłogowego przygotowany dla konkretnego budynku.",
      "audience": { "@type": "Audience", "audienceType": "Inwestorzy budujący i modernizujący dom" }
    }
  ]
}
</script>

<script>
(function () {
  "use strict";

  var heatDefaults = {
    "rk-bh-ti": 20,
    "rk-bh-te": -20,
    "rk-bh-floor-area": 120,
    "rk-bh-ground-b": 0.40,
    "rk-bh-a-wall": 160,
    "rk-bh-u1-wall": 0.25,
    "rk-bh-u2-wall": 0.15,
    "rk-bh-a-roof": 120,
    "rk-bh-u1-roof": 0.20,
    "rk-bh-u2-roof": 0.12,
    "rk-bh-a-window": 25,
    "rk-bh-u1-window": 0.90,
    "rk-bh-u2-window": 0.70,
    "rk-bh-a-door": 5,
    "rk-bh-u1-door": 1.30,
    "rk-bh-u2-door": 1.00,
    "rk-bh-a-ground": 120,
    "rk-bh-u1-ground": 0.25,
    "rk-bh-u2-ground": 0.15,
    "rk-bh-bridge1": 20,
    "rk-bh-bridge2": 10,
    "rk-bh-airflow": 150,
    "rk-bh-eta1": 0,
    "rk-bh-eta2": 80,
    "rk-bh-infil1": 20,
    "rk-bh-infil2": 15
  };

  var costDefaults = {
    "rk-bh-qh": 9000,
    "rk-bh-years": 20,
    "rk-bh-growth": 2.5,
    "rk-bh-season-months": 7,
    "rk-bh-factor-hp": 3.5,
    "rk-bh-price-hp": 1.10,
    "rk-bh-fixed-hp": 350,
    "rk-bh-factor-gas": 0.92,
    "rk-bh-price-gas": 0.34,
    "rk-bh-fixed-gas": 900,
    "rk-bh-factor-pellet": 0.85,
    "rk-bh-price-pellet": 0.38,
    "rk-bh-fixed-pellet": 1200,
    "rk-bh-factor-electric": 1.00,
    "rk-bh-price-electric": 1.10,
    "rk-bh-fixed-electric": 100
  };

  var eduData = [
    {
      unit: "Dane wejściowe",
      title: "Warunki obliczeniowe",
      text: "Najpierw definiuje się oceniany budynek, strefy, geometrię, temperaturę zewnętrzną właściwą lokalizacji i temperatury wewnętrzne. Bez tego żadna późniejsza wartość nie ma jednoznacznego znaczenia."
    },
    {
      unit: "W/K oraz W",
      title: "Przenikanie przez przegrody i mostki",
      text: "Powierzchnie i współczynniki U tworzą współczynniki strat przegród, a długości złączy i wartości psi — udział mostków. Po uwzględnieniu warunków brzegowych oraz różnicy temperatur otrzymuje się moc strat."
    },
    {
      unit: "m³/h, W/K oraz W",
      title: "Wentylacja, odzysk i infiltracja",
      text: "Strumień wymaganej wymiany powietrza przenosi ciepło. Odzysk może ograniczyć część strat wentylacyjnych, lecz infiltracja pozostaje osobną drogą napływu i nie korzysta automatycznie z wymiennika."
    },
    {
      unit: "W lub kW",
      title: "Projektowe obciążenie cieplne",
      text: "To chwilowa moc potrzebna przy zdefiniowanych warunkach. Liczy się ją dla pomieszczeń i całego budynku. Służy do sprawdzenia emiterów oraz doboru źródła, ale nie jest rocznym zużyciem."
    },
    {
      unit: "kWh/rok",
      title: "Roczne zapotrzebowanie na energię",
      text: "Bilans sezonowy uwzględnia zmienną pogodę, zyski słoneczne i wewnętrzne, akumulację, harmonogramy oraz regulację. Nie powstaje przez pomnożenie projektowej mocy przez stałą liczbę godzin."
    },
    {
      unit: "zł/rok",
      title: "Koszt energii końcowej i obsługi",
      text: "Potrzeby użytkowe dzieli się przez sezonową sprawność lub SCOP, a energię kupowaną mnoży przez aktualną cenę. Do wyniku dodaje się opłaty stałe, serwis i inne koszty właściwe wariantowi."
    }
  ];

  var state = {
    chartMode: "loss",
    loss: [],
    cost: []
  };

  function getRoot() {
    return document.getElementById("rk-bilans-guide");
  }

  function byId(id) {
    return document.getElementById(id);
  }

  function readNumber(id) {
    var element = byId(id);
    if (!element) { return NaN; }
    var value = String(element.value).replace(",", ".");
    return Number(value);
  }

  function isFiniteNumber(value) {
    return typeof value === "number" ? Number.isFinite(value) : false;
  }

  function setText(id, value) {
    var element = byId(id);
    if (element) { element.textContent = value; }
  }

  function formatNumber(value, digits) {
    if (!isFiniteNumber(value)) { return "—"; }
    try {
      return new Intl.NumberFormat("pl-PL", {
        minimumFractionDigits: digits,
        maximumFractionDigits: digits
      }).format(value);
    } catch (error) {
      return value.toFixed(digits).replace(".", ",");
    }
  }

  function formatMoney(value) {
    if (!isFiniteNumber(value)) { return "—"; }
    try {
      return new Intl.NumberFormat("pl-PL", {
        style: "currency",
        currency: "PLN",
        maximumFractionDigits: 0
      }).format(value);
    } catch (error) {
      return formatNumber(value, 0) + " zł";
    }
  }

  function formatPower(value) {
    if (!isFiniteNumber(value)) { return "—"; }
    if (value >= 1000) {
      return formatNumber(value / 1000, 2) + " kW";
    }
    return formatNumber(value, 0) + " W";
  }

  function setDefaults(values) {
    Object.keys(values).forEach(function (id) {
      var element = byId(id);
      if (element) { element.value = values[id]; }
    });
  }

  function calculateHeat() {
    var errorBox = byId("rk-bh-heat-error");
    var ti = readNumber("rk-bh-ti");
    var te = readNumber("rk-bh-te");
    var heatedArea = readNumber("rk-bh-floor-area");
    var groundB = readNumber("rk-bh-ground-b");
    var bridge1 = readNumber("rk-bh-bridge1");
    var bridge2 = readNumber("rk-bh-bridge2");
    var airflow = readNumber("rk-bh-airflow");
    var eta1 = readNumber("rk-bh-eta1");
    var eta2 = readNumber("rk-bh-eta2");
    var infil1 = readNumber("rk-bh-infil1");
    var infil2 = readNumber("rk-bh-infil2");
    var keys = ["wall", "roof", "window", "door", "ground"];
    var labels = ["Ściany", "Dach / strop", "Okna", "Drzwi", "Podłoga / grunt"];
    var components = [];
    var valid = true;

    [ti, te, heatedArea, groundB, bridge1, bridge2, airflow, eta1, eta2, infil1, infil2].forEach(function (value) {
      if (!isFiniteNumber(value)) { valid = false; }
    });
    if (isFiniteNumber(ti)) {
      if (isFiniteNumber(te)) {
        if (ti <= te) { valid = false; }
      }
    }
    if (heatedArea <= 0) { valid = false; }
    if (groundB < 0) { valid = false; }
    if (groundB > 1) { valid = false; }
    if (bridge1 < 0) { valid = false; }
    if (bridge2 < 0) { valid = false; }
    if (airflow < 0) { valid = false; }
    if (infil1 < 0) { valid = false; }
    if (infil2 < 0) { valid = false; }
    if (eta1 < 0) { valid = false; }
    if (eta1 > 95) { valid = false; }
    if (eta2 < 0) { valid = false; }
    if (eta2 > 95) { valid = false; }

    keys.forEach(function (key, index) {
      var area = readNumber("rk-bh-a-" + key);
      var u1 = readNumber("rk-bh-u1-" + key);
      var u2 = readNumber("rk-bh-u2-" + key);
      if (!isFiniteNumber(area)) { valid = false; }
      if (!isFiniteNumber(u1)) { valid = false; }
      if (!isFiniteNumber(u2)) { valid = false; }
      if (area < 0) { valid = false; }
      if (u1 <= 0) { valid = false; }
      if (u2 <= 0) { valid = false; }
      components.push({
        key: key,
        label: labels[index],
        area: area,
        u1: u1,
        u2: u2
      });
    });

    if (!valid) {
      if (errorBox) { errorBox.hidden = false; }
      return false;
    }
    if (errorBox) { errorBox.hidden = true; }

    var deltaT = ti - te;
    var h1 = 0;
    var h2 = 0;
    var lossRows = [];

    components.forEach(function (component) {
      var reduction = 1;
      if (component.key === "ground") { reduction = groundB; }
      var componentH1 = component.area * component.u1 * reduction;
      var componentH2 = component.area * component.u2 * reduction;
      h1 += componentH1;
      h2 += componentH2;
      lossRows.push({
        label: component.label,
        a: componentH1 * deltaT,
        b: componentH2 * deltaT
      });
    });

    h1 += bridge1;
    h2 += bridge2;
    lossRows.push({ label: "Mostki cieplne", a: bridge1 * deltaT, b: bridge2 * deltaT });

    var hVent1 = 0.34 * (airflow * (1 - eta1 / 100) + infil1);
    var hVent2 = 0.34 * (airflow * (1 - eta2 / 100) + infil2);
    h1 += hVent1;
    h2 += hVent2;
    lossRows.push({ label: "Wentylacja i infiltracja", a: hVent1 * deltaT, b: hVent2 * deltaT });

    var q1 = h1 * deltaT;
    var q2 = h2 * deltaT;
    var saving = q1 - q2;
    var savingPct = q1 > 0 ? saving / q1 * 100 : 0;
    var wm1 = q1 / heatedArea;
    var wm2 = q2 / heatedArea;

    setText("rk-bh-q1", formatPower(q1));
    setText("rk-bh-q2", formatPower(q2));
    setText("rk-bh-wm1", formatNumber(wm1, 1) + " W/m² powierzchni ogrzewanej");
    setText("rk-bh-wm2", formatNumber(wm2, 1) + " W/m² powierzchni ogrzewanej");
    setText("rk-bh-q-save", formatPower(saving));
    setText("rk-bh-q-save-pct", formatNumber(savingPct, 1) + "% względem wariantu A");
    setText("rk-bh-h-pair", formatNumber(h1, 1) + " / " + formatNumber(h2, 1));
    setText("rk-bh-heat-summary", "Dla ΔT = " + formatNumber(deltaT, 1) + " K wariant A daje " + formatPower(q1) + ", a wariant B " + formatPower(q2) + ". Różnica wynosi " + formatPower(saving) + ". To porównanie projektowej mocy, nie rocznej energii.");

    state.loss = lossRows;
    if (state.chartMode === "loss") { renderChart(); }
    return true;
  }

  function geometricFactor(growth, years) {
    if (growth === 0) { return years; }
    return (Math.pow(1 + growth, years) - 1) / growth;
  }

  function calculateCost() {
    var errorBox = byId("rk-bh-cost-error");
    var qh = readNumber("rk-bh-qh");
    var yearsRaw = readNumber("rk-bh-years");
    var growthRaw = readNumber("rk-bh-growth");
    var monthsRaw = readNumber("rk-bh-season-months");
    var years = Math.round(yearsRaw);
    var months = Math.round(monthsRaw);
    var sources = [
      { key: "hp", name: "Pompa ciepła" },
      { key: "gas", name: "Kocioł gazowy" },
      { key: "pellet", name: "Kocioł na pellet" },
      { key: "electric", name: "Ogrzewanie elektryczne" }
    ];
    var valid = true;

    [qh, yearsRaw, growthRaw, monthsRaw].forEach(function (value) {
      if (!isFiniteNumber(value)) { valid = false; }
    });
    if (qh <= 0) { valid = false; }
    if (years < 1) { valid = false; }
    if (years > 30) { valid = false; }
    if (growthRaw < 0) { valid = false; }
    if (growthRaw > 20) { valid = false; }
    if (months < 1) { valid = false; }
    if (months > 12) { valid = false; }

    sources.forEach(function (source) {
      source.factor = readNumber("rk-bh-factor-" + source.key);
      source.price = readNumber("rk-bh-price-" + source.key);
      source.fixed = readNumber("rk-bh-fixed-" + source.key);
      if (!isFiniteNumber(source.factor)) { valid = false; }
      if (!isFiniteNumber(source.price)) { valid = false; }
      if (!isFiniteNumber(source.fixed)) { valid = false; }
      if (source.factor <= 0) { valid = false; }
      if (source.price < 0) { valid = false; }
      if (source.fixed < 0) { valid = false; }
    });

    if (!valid) {
      if (errorBox) { errorBox.hidden = false; }
      return false;
    }
    if (errorBox) { errorBox.hidden = true; }

    var growth = growthRaw / 100;
    var factorYears = geometricFactor(growth, years);
    var results = sources.map(function (source) {
      var inputEnergy = qh / source.factor;
      var variableCost = inputEnergy * source.price;
      var annual = variableCost + source.fixed;
      var annualLow = qh * 0.8 / source.factor * source.price + source.fixed;
      var annualHigh = qh * 1.2 / source.factor * source.price + source.fixed;
      return {
        key: source.key,
        name: source.name,
        annual: annual,
        annualLow: annualLow,
        annualHigh: annualHigh,
        inputEnergy: inputEnergy,
        total: annual * factorYears
      };
    });

    results.sort(function (a, b) { return a.annual - b.annual; });
    var best = results[0];
    setText("rk-bh-best-annual", formatMoney(best.annual));
    setText("rk-bh-best-name", best.name + ", przy wpisanych parametrach");
    setText("rk-bh-best-month", formatMoney(best.annual / months));
    setText("rk-bh-season-note", "średnio przez " + months + " miesięcy sezonu");
    setText("rk-bh-best-total", formatMoney(best.total));
    setText("rk-bh-years-note", best.name + ", horyzont " + years + " lat");
    setText("rk-bh-best-range", formatMoney(best.annualLow) + "–" + formatMoney(best.annualHigh));

    var ranking = byId("rk-bh-ranking");
    if (ranking) {
      ranking.innerHTML = results.map(function (result, index) {
        return '<div class="rk-bh-rank-row"><span class="rk-bh-rank-pos">' + (index + 1) + '</span><span class="rk-bh-rank-name">' + result.name + '<br><small>' + formatNumber(result.inputEnergy, 0) + ' kWh energii wejściowej/rok</small></span><span class="rk-bh-rank-cost">' + formatMoney(result.annual) + '/rok<br><small>' + formatMoney(result.total) + ' / ' + years + ' lat</small></span></div>';
      }).join("");
    }

    state.cost = results;
    if (state.chartMode === "cost") { renderChart(); }
    return true;
  }

  function renderChart() {
    var bars = byId("rk-bh-bars");
    var legend = byId("rk-bh-chart-legend");
    if (!bars) { return; }

    if (state.chartMode === "cost") {
      setText("rk-bh-chart-title", "Roczne koszty czterech źródeł");
      setText("rk-bh-chart-subtitle", "Wyniki dla tego samego QH,nd oraz edytowalnych cen i parametrów sezonowych.");
      setText("rk-bh-chart-caption", "Najkrótszy słupek nie oznacza automatycznie najniższego całkowitego kosztu inwestycji. Wykres obejmuje wyłącznie obliczony koszt eksploatacyjny.");
      if (legend) {
        legend.innerHTML = '<span class="rk-bh-chart-key"><span class="rk-bh-chart-dot rk-bh-chart-dot-alt" aria-hidden="true"></span>Koszt roczny przy wpisanych założeniach</span>';
      }
      var maxCost = 1;
      state.cost.forEach(function (item) {
        if (item.annual > maxCost) { maxCost = item.annual; }
      });
      bars.innerHTML = state.cost.map(function (item) {
        var width = Math.max(2, item.annual / maxCost * 100);
        return '<div class="rk-bh-bar-group"><div class="rk-bh-bar-label"><span>' + item.name + '</span><span>' + formatMoney(item.annual) + '/rok</span></div><div class="rk-bh-bar-lines"><div class="rk-bh-bar-track"><div class="rk-bh-bar-fill rk-bh-bar-fill-alt" style="width:' + width.toFixed(2) + '%"><span>' + formatMoney(item.annual) + '</span></div></div></div></div>';
      }).join("");
      return;
    }

    setText("rk-bh-chart-title", "Składniki projektowych strat ciepła");
    setText("rk-bh-chart-subtitle", "Porównanie mocy w W przy wpisanej różnicy temperatur.");
    setText("rk-bh-chart-caption", "Długość słupka pokazuje udział wobec największego składnika. Wartość bezwzględna jest podana w każdym słupku.");
    if (legend) {
      legend.innerHTML = '<span class="rk-bh-chart-key"><span class="rk-bh-chart-dot" aria-hidden="true"></span>Wariant A</span><span class="rk-bh-chart-key"><span class="rk-bh-chart-dot rk-bh-chart-dot-alt" aria-hidden="true"></span>Wariant B</span>';
    }
    var maxLoss = 1;
    state.loss.forEach(function (item) {
      if (item.a > maxLoss) { maxLoss = item.a; }
      if (item.b > maxLoss) { maxLoss = item.b; }
    });
    bars.innerHTML = state.loss.map(function (item) {
      var widthA = Math.max(2, item.a / maxLoss * 100);
      var widthB = Math.max(2, item.b / maxLoss * 100);
      return '<div class="rk-bh-bar-group"><div class="rk-bh-bar-label"><span>' + item.label + '</span><span>A: ' + formatPower(item.a) + ' · B: ' + formatPower(item.b) + '</span></div><div class="rk-bh-bar-lines"><div class="rk-bh-bar-track"><div class="rk-bh-bar-fill" style="width:' + widthA.toFixed(2) + '%"><span>' + formatNumber(item.a, 0) + ' W</span></div></div><div class="rk-bh-bar-track"><div class="rk-bh-bar-fill rk-bh-bar-fill-alt" style="width:' + widthB.toFixed(2) + '%"><span>' + formatNumber(item.b, 0) + ' W</span></div></div></div></div>';
    }).join("");
  }

  function selectEdu(index) {
    var item = eduData[index];
    if (!item) { return; }
    setText("rk-bh-edu-unit", item.unit);
    setText("rk-bh-edu-title", item.title);
    setText("rk-bh-edu-text", item.text);
    var buttons = document.querySelectorAll("#rk-bilans-guide [data-rk-edu]");
    buttons.forEach(function (button) {
      var isActive = Number(button.getAttribute("data-rk-edu")) === index;
      button.setAttribute("aria-pressed", isActive ? "true" : "false");
    });
  }

  function selectChart(mode) {
    if (mode !== "loss") {
      if (mode !== "cost") { return; }
    }
    state.chartMode = mode;
    var buttons = document.querySelectorAll("#rk-bilans-guide [data-rk-chart]");
    buttons.forEach(function (button) {
      var isActive = button.getAttribute("data-rk-chart") === mode;
      button.setAttribute("aria-pressed", isActive ? "true" : "false");
    });
    renderChart();
  }

  function bindAutoCalculation(root) {
    var heatTool = root.querySelector('[data-rk-tool="heat"]');
    var costTool = root.querySelector('[data-rk-tool="cost"]');
    if (heatTool) {
      heatTool.querySelectorAll("input").forEach(function (input) {
        input.addEventListener("input", calculateHeat);
        input.addEventListener("change", calculateHeat);
      });
    }
    if (costTool) {
      costTool.querySelectorAll("input").forEach(function (input) {
        input.addEventListener("input", calculateCost);
        input.addEventListener("change", calculateCost);
      });
    }
  }

  function init() {
    var root = getRoot();
    if (!root) { return false; }
    if (root.getAttribute("data-rk-ready") === "1") { return true; }

    var heatRun = byId("rk-bh-heat-run");
    var heatReset = byId("rk-bh-heat-reset");
    var costRun = byId("rk-bh-cost-run");
    var costReset = byId("rk-bh-cost-reset");

    if (heatRun) { heatRun.addEventListener("click", calculateHeat); }
    if (heatReset) {
      heatReset.addEventListener("click", function () {
        setDefaults(heatDefaults);
        calculateHeat();
      });
    }
    if (costRun) { costRun.addEventListener("click", calculateCost); }
    if (costReset) {
      costReset.addEventListener("click", function () {
        setDefaults(costDefaults);
        calculateCost();
      });
    }

    root.querySelectorAll("[data-rk-edu]").forEach(function (button) {
      button.addEventListener("click", function () {
        selectEdu(Number(button.getAttribute("data-rk-edu")));
      });
    });
    root.querySelectorAll("[data-rk-chart]").forEach(function (button) {
      button.addEventListener("click", function () {
        selectChart(button.getAttribute("data-rk-chart"));
      });
    });

    bindAutoCalculation(root);
    root.setAttribute("data-rk-ready", "1");
    calculateHeat();
    calculateCost();
    selectEdu(0);
    selectChart("loss");
    return true;
  }

  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", init);
  } else {
    init();
  }

  var attempts = 0;
  var retryTimer = window.setInterval(function () {
    attempts += 1;
    if (init()) {
      window.clearInterval(retryTimer);
    } else if (attempts > 20) {
      window.clearInterval(retryTimer);
    }
  }, 300);
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">Bilans cieplny budynku – kalkulator strat, mocy i kosztów ogrzewania.</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 – kiedy jest potrzebna?</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 – kiedy jest potrzebna?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-edge-guide {
    --rk-navy: #0b2536;
    --rk-navy-2: #12394d;
    --rk-navy-3: #1b465b;
    --rk-cyan: #29c4d7;
    --rk-cyan-dark: #0787a8;
    --rk-cyan-soft: #def7fa;
    --rk-orange: #ff6846;
    --rk-orange-dark: #dc4b2e;
    --rk-yellow: #f2b526;
    --rk-green: #2fcda1;
    --rk-green-dark: #14775f;
    --rk-red: #d7504a;
    --rk-ink: #10283a;
    --rk-copy: #3c5668;
    --rk-muted: #667f90;
    --rk-line: #d3e2e8;
    --rk-bg: #f3f8fa;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: Arial, Helvetica, sans-serif;
    line-height: 1.62;
    margin: 0 auto;
    max-width: 1360px;
    overflow-wrap: anywhere;
    width: 100%;
  }

  #rk-edge-guide,
  #rk-edge-guide * {
    box-sizing: border-box;
    min-width: 0;
  }

  #rk-edge-guide a {
    color: var(--rk-cyan-dark);
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }

  #rk-edge-guide a:hover,
  #rk-edge-guide a:focus-visible {
    color: var(--rk-orange-dark);
  }

  #rk-edge-guide button,
  #rk-edge-guide input,
  #rk-edge-guide select {
    font: inherit;
  }

  #rk-edge-guide button:focus-visible,
  #rk-edge-guide a:focus-visible,
  #rk-edge-guide summary:focus-visible,
  #rk-edge-guide select:focus-visible {
    outline: 3px solid rgba(41, 196, 215, 0.5);
    outline-offset: 3px;
  }

  #rk-edge-guide img {
    display: block;
    height: auto;
    max-width: 100%;
  }

  #rk-edge-guide .rk-edge-shell {
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    box-shadow: 0 22px 65px rgba(13, 41, 57, 0.12);
    overflow: hidden;
  }

  #rk-edge-guide .rk-edge-hero {
    background:
      radial-gradient(circle at 90% 112%, rgba(41, 196, 215, 0.25) 0, rgba(41, 196, 215, 0.25) 18%, transparent 18.2%),
      linear-gradient(120deg, #0b2536 0%, #143e52 61%, #0d6576 100%);
    color: #ffffff;
    overflow: hidden;
    padding: 62px 58px 56px;
    position: relative;
  }

  #rk-edge-guide .rk-edge-hero::before {
    background: var(--rk-orange);
    border-radius: 50%;
    box-shadow: 0 0 0 9px rgba(255, 104, 70, 0.14);
    content: "";
    height: 12px;
    left: 58px;
    position: absolute;
    top: 43px;
    width: 12px;
  }

  #rk-edge-guide .rk-edge-kicker {
    color: #71e8f2;
    display: block;
    font-size: 0.77rem;
    font-weight: 900;
    letter-spacing: 0.13em;
    margin: 0 0 19px 28px;
    text-transform: uppercase;
  }

  #rk-edge-guide .rk-edge-hero-title,
  #rk-edge-guide .rk-edge-section-title,
  #rk-edge-guide .rk-edge-cta-title,
  #rk-edge-guide .rk-edge-author-title {
    font-family: Arial, Helvetica, sans-serif;
    font-weight: 900;
    letter-spacing: -0.035em;
    line-height: 1.06;
  }

  #rk-edge-guide .rk-edge-hero-title {
    color: #ffffff;
    font-size: clamp(2.35rem, 5.6vw, 5.15rem);
    margin: 0;
    max-width: 1210px;
  }

  #rk-edge-guide .rk-edge-hero-title span {
    color: #69e7f2;
  }

  #rk-edge-guide .rk-edge-hero-lead {
    color: #e3f0f4;
    font-size: clamp(1.08rem, 2vw, 1.43rem);
    line-height: 1.55;
    margin: 27px 0 0;
    max-width: 1110px;
  }

  #rk-edge-guide .rk-edge-hero-tags,
  #rk-edge-guide .rk-edge-meta,
  #rk-edge-guide .rk-edge-shortcuts {
    display: flex;
    flex-wrap: wrap;
  }

  #rk-edge-guide .rk-edge-hero-tags {
    gap: 10px;
    margin-top: 30px;
  }

  #rk-edge-guide .rk-edge-hero-tags span {
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 999px;
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 800;
    padding: 8px 14px;
  }

  #rk-edge-guide .rk-edge-meta {
    color: #c5d9df;
    font-size: 0.83rem;
    font-weight: 700;
    gap: 12px 24px;
    margin-top: 34px;
  }

  #rk-edge-guide .rk-edge-meta strong {
    color: #ffffff;
  }

  #rk-edge-guide .rk-edge-shortcuts {
    align-items: center;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    gap: 9px;
    padding: 22px 34px;
    position: static;
  }

  #rk-edge-guide .rk-edge-shortcuts-label {
    color: var(--rk-ink);
    flex: 0 0 auto;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-right: 4px;
    text-transform: uppercase;
  }

  #rk-edge-guide .rk-edge-shortcuts a {
    background: #f1f6f8;
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--rk-ink);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    padding: 8px 12px;
    text-decoration: none;
  }

  #rk-edge-guide .rk-edge-shortcuts a:hover,
  #rk-edge-guide .rk-edge-shortcuts a:focus-visible {
    background: var(--rk-cyan-soft);
    border-color: #91dce5;
    color: #075f78;
  }

  #rk-edge-guide .rk-edge-section {
    padding: 64px 58px;
  }

  #rk-edge-guide .rk-edge-section + .rk-edge-section {
    border-top: 1px solid var(--rk-line);
  }

  #rk-edge-guide .rk-edge-section-soft {
    background: var(--rk-bg);
  }

  #rk-edge-guide .rk-edge-section-dark {
    background: var(--rk-navy);
    color: #ffffff;
  }

  #rk-edge-guide .rk-edge-final {
    background: linear-gradient(180deg, #f4fafb 0%, #ffffff 100%);
  }

  #rk-edge-guide .rk-edge-eyebrow {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.75rem;
    font-weight: 900;
    letter-spacing: 0.12em;
    margin-bottom: 12px;
    text-transform: uppercase;
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-eyebrow {
    color: #71e8f2;
  }

  #rk-edge-guide .rk-edge-section-title,
  #rk-edge-guide .rk-edge-author-title {
    color: var(--rk-ink);
    font-size: clamp(2rem, 4vw, 3.65rem);
    margin: 0;
    max-width: 1100px;
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-section-title {
    color: #ffffff;
  }

  #rk-edge-guide .rk-edge-lead {
    color: var(--rk-copy);
    font-size: clamp(1.03rem, 1.7vw, 1.25rem);
    line-height: 1.7;
    margin: 22px 0 0;
    max-width: 1130px;
  }

  #rk-edge-guide .rk-edge-copy {
    color: var(--rk-copy);
    margin: 22px 0 0;
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-lead,
  #rk-edge-guide .rk-edge-section-dark .rk-edge-copy {
    color: #c8dbe2;
  }

  #rk-edge-guide .rk-edge-lead strong,
  #rk-edge-guide .rk-edge-copy strong {
    color: var(--rk-ink);
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-lead strong,
  #rk-edge-guide .rk-edge-section-dark .rk-edge-copy strong {
    color: #ffffff;
  }

  #rk-edge-guide .rk-edge-answer {
    background: linear-gradient(135deg, #e6fafd 0%, #f8fcfd 100%);
    border: 1px solid #9cdfe8;
    border-left: 7px solid var(--rk-cyan);
    border-radius: 18px;
    margin-top: 28px;
    padding: 27px 29px;
  }

  #rk-edge-guide .rk-edge-answer strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.24rem;
    line-height: 1.4;
  }

  #rk-edge-guide .rk-edge-answer p {
    color: var(--rk-copy);
    margin: 10px 0 0;
  }

  #rk-edge-guide .rk-edge-grid-2,
  #rk-edge-guide .rk-edge-grid-3,
  #rk-edge-guide .rk-edge-grid-4,
  #rk-edge-guide .rk-edge-source-grid,
  #rk-edge-guide .rk-edge-author-facts,
  #rk-edge-guide .rk-edge-check-grid {
    display: grid;
    gap: 18px;
    margin-top: 30px;
  }

  #rk-edge-guide .rk-edge-grid-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  #rk-edge-guide .rk-edge-grid-3,
  #rk-edge-guide .rk-edge-check-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-edge-guide .rk-edge-grid-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  #rk-edge-guide .rk-edge-card {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 17px;
    padding: 24px;
  }

  #rk-edge-guide .rk-edge-section-soft .rk-edge-card {
    background: rgba(255, 255, 255, 0.9);
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-card {
    background: #15394b;
    border-color: #315a70;
  }

  #rk-edge-guide .rk-edge-card-number,
  #rk-edge-guide .rk-edge-icon {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 10px;
    color: #076c85;
    display: inline-flex;
    font-size: 0.82rem;
    font-weight: 900;
    height: 36px;
    justify-content: center;
    margin-bottom: 14px;
    min-width: 36px;
    padding: 0 10px;
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-card-number,
  #rk-edge-guide .rk-edge-section-dark .rk-edge-icon {
    background: #225369;
    color: #79ebf3;
  }

  #rk-edge-guide .rk-edge-card h3,
  #rk-edge-guide .rk-edge-card h4 {
    color: var(--rk-ink);
    font-size: 1.12rem;
    line-height: 1.3;
    margin: 0 0 9px;
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-card h3,
  #rk-edge-guide .rk-edge-section-dark .rk-edge-card h4 {
    color: #ffffff;
  }

  #rk-edge-guide .rk-edge-card p {
    color: var(--rk-copy);
    margin: 0;
  }

  #rk-edge-guide .rk-edge-section-dark .rk-edge-card p,
  #rk-edge-guide .rk-edge-section-dark .rk-edge-card li {
    color: #c9dce3;
  }

  #rk-edge-guide .rk-edge-bullets {
    color: var(--rk-copy);
    margin: 18px 0 0;
    padding-left: 22px;
  }

  #rk-edge-guide .rk-edge-bullets li + li {
    margin-top: 9px;
  }

  #rk-edge-guide .rk-edge-note {
    background: #fff6e2;
    border-left: 6px solid var(--rk-yellow);
    border-radius: 14px;
    color: #5b4a1d;
    margin-top: 26px;
    padding: 18px 21px;
  }

  #rk-edge-guide .rk-edge-note p {
    color: inherit;
    margin: 0;
  }

  #rk-edge-guide .rk-edge-note-good {
    background: #e9faf5;
    border-left-color: var(--rk-green);
    color: #145e4d;
  }

  #rk-edge-guide .rk-edge-note-bad {
    background: #fff0ec;
    border-left-color: var(--rk-orange);
    color: #743425;
  }

  #rk-edge-guide .rk-edge-formula {
    background: #edf8fa;
    border: 1px solid #b4e1e7;
    border-radius: 13px;
    color: #086b82;
    font-family: Consolas, Monaco, monospace;
    font-size: 1rem;
    font-weight: 700;
    margin-top: 20px;
    padding: 15px 18px;
  }

  #rk-edge-guide .rk-edge-table-wrap {
    margin-top: 30px;
    overflow-x: auto;
  }

  #rk-edge-guide table {
    border-collapse: separate;
    border-spacing: 0;
    min-width: 760px;
    width: 100%;
  }

  #rk-edge-guide th {
    background: var(--rk-navy);
    border-bottom: 1px solid #31576a;
    color: #ffffff;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
    padding: 15px 16px;
    text-align: left;
    text-transform: uppercase;
  }

  #rk-edge-guide th:first-child {
    border-radius: 14px 0 0;
  }

  #rk-edge-guide th:last-child {
    border-radius: 0 14px 0 0;
  }

  #rk-edge-guide td {
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    color: var(--rk-copy);
    padding: 16px;
    vertical-align: top;
  }

  #rk-edge-guide tbody tr td:first-child {
    border-left: 1px solid var(--rk-line);
  }

  #rk-edge-guide tbody tr td:last-child {
    border-right: 1px solid var(--rk-line);
  }

  #rk-edge-guide tbody tr:last-child td:first-child {
    border-radius: 0 0 0 14px;
  }

  #rk-edge-guide tbody tr:last-child td:last-child {
    border-radius: 0 0 14px;
  }

  #rk-edge-guide td strong {
    color: var(--rk-ink);
  }

  /* Modułowa grafika edukacyjna bez pseudo-rysunku instalacji */
  #rk-edge-guide .rk-edge-visual {
    background: var(--rk-navy);
    border-radius: 22px;
    color: #ffffff;
    margin-top: 32px;
    padding: 28px;
  }

  #rk-edge-guide .rk-edge-visual-intro {
    color: #bed6de;
    margin: 0 0 20px;
  }

  #rk-edge-guide .rk-edge-visual-tabs {
    display: grid;
    gap: 10px;
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  #rk-edge-guide .rk-edge-visual-tab {
    background: #173e51;
    border: 1px solid #356178;
    border-radius: 13px;
    color: #ffffff;
    cursor: pointer;
    font-weight: 900;
    line-height: 1.25;
    min-height: 54px;
    padding: 11px 13px;
  }

  #rk-edge-guide .rk-edge-visual-tab[aria-selected="true"] {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    color: #072838;
  }

  #rk-edge-guide .rk-edge-visual-panel {
    background: #17394b;
    border: 1px solid #356178;
    border-radius: 18px;
    margin-top: 18px;
    padding: 25px;
  }

  #rk-edge-guide .rk-edge-visual-label {
    color: #71e6ef;
    display: block;
    font-size: 0.73rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  #rk-edge-guide .rk-edge-visual-panel h3 {
    color: #ffffff;
    font-size: clamp(1.45rem, 3vw, 2rem);
    line-height: 1.25;
    margin: 7px 0 8px;
  }

  #rk-edge-guide .rk-edge-visual-panel > p {
    color: #c8dce3;
    margin: 0;
  }

  #rk-edge-guide .rk-edge-module-grid {
    display: grid;
    gap: 12px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 21px;
  }

  #rk-edge-guide .rk-edge-module-card {
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.14);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-edge-guide .rk-edge-module-card strong {
    color: #71e6ef;
    display: block;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
    margin-bottom: 7px;
    text-transform: uppercase;
  }

  #rk-edge-guide .rk-edge-module-card span {
    color: #ffffff;
    display: block;
    line-height: 1.55;
  }

  #rk-edge-guide .rk-edge-sequence {
    display: grid;
    gap: 10px;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-top: 20px;
  }

  #rk-edge-guide .rk-edge-sequence-step {
    background: #21536a;
    border: 1px solid #3c6a80;
    border-radius: 12px;
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 800;
    min-height: 70px;
    padding: 14px;
    text-align: center;
  }

  /* Analizator */
  #rk-edge-guide .rk-edge-analyzer {
    background: #102f42;
    border: 1px solid #315a70;
    border-radius: 22px;
    margin-top: 32px;
    padding: 28px;
  }

  #rk-edge-guide .rk-edge-analyzer-head {
    border-bottom: 1px solid #315a70;
    margin-bottom: 25px;
    padding-bottom: 20px;
  }

  #rk-edge-guide .rk-edge-analyzer-head h3 {
    color: #ffffff;
    font-size: clamp(1.55rem, 3vw, 2.3rem);
    line-height: 1.2;
    margin: 0;
  }

  #rk-edge-guide .rk-edge-analyzer-head p {
    color: #bad3dc;
    margin: 9px 0 0;
  }

  #rk-edge-guide .rk-edge-analyzer-stage {
    background: #17394b;
    border: 1px solid #376177;
    border-radius: 17px;
    margin-top: 18px;
    padding: 22px;
  }

  #rk-edge-guide .rk-edge-stage-head {
    align-items: flex-start;
    display: flex;
    gap: 13px;
    margin-bottom: 18px;
  }

  #rk-edge-guide .rk-edge-stage-number {
    align-items: center;
    background: var(--rk-cyan);
    border-radius: 10px;
    color: #082c3c;
    display: inline-flex;
    flex: 0 0 38px;
    font-weight: 900;
    height: 38px;
    justify-content: center;
  }

  #rk-edge-guide .rk-edge-stage-head h4 {
    color: #ffffff;
    font-size: 1.15rem;
    line-height: 1.3;
    margin: 0;
  }

  #rk-edge-guide .rk-edge-stage-head p {
    color: #aecad5;
    font-size: 0.88rem;
    margin: 4px 0 0;
  }

  #rk-edge-guide .rk-edge-fields {
    display: grid;
    gap: 15px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  #rk-edge-guide .rk-edge-field {
    display: block;
  }

  #rk-edge-guide .rk-edge-field span {
    color: #eaf6f8;
    display: block;
    font-size: 0.78rem;
    font-weight: 800;
    line-height: 1.35;
    margin-bottom: 7px;
  }

  #rk-edge-guide .rk-edge-field select {
    appearance: auto;
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    color: var(--rk-ink);
    min-height: 48px;
    padding: 10px 12px;
    width: 100%;
  }

  #rk-edge-guide .rk-edge-analyzer-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 11px;
    margin-top: 20px;
  }

  #rk-edge-guide .rk-edge-analyze-button,
  #rk-edge-guide .rk-edge-reset-button {
    border-radius: 11px;
    cursor: pointer;
    font-weight: 900;
    min-height: 48px;
    padding: 11px 18px;
  }

  #rk-edge-guide .rk-edge-analyze-button {
    background: var(--rk-orange);
    border: 1px solid var(--rk-orange);
    color: #ffffff;
  }

  #rk-edge-guide .rk-edge-analyze-button:hover {
    background: var(--rk-orange-dark);
  }

  #rk-edge-guide .rk-edge-reset-button {
    background: transparent;
    border: 1px solid #5d7c8d;
    color: #ffffff;
  }

  #rk-edge-guide .rk-edge-result {
    background: #ffffff;
    border-left: 7px solid var(--rk-yellow);
    border-radius: 17px;
    margin-top: 22px;
    padding: 24px;
  }

  #rk-edge-guide .rk-edge-result.is-good {
    border-left-color: var(--rk-green);
  }

  #rk-edge-guide .rk-edge-result.is-stop {
    border-left-color: var(--rk-orange);
  }

  #rk-edge-guide .rk-edge-result-status {
    color: var(--rk-ink);
    font-size: clamp(1.35rem, 2.6vw, 2rem);
    font-weight: 900;
    line-height: 1.25;
    margin: 0;
  }

  #rk-edge-guide .rk-edge-result-intro {
    color: var(--rk-copy);
    margin: 8px 0 0;
  }

  #rk-edge-guide .rk-edge-result-grid {
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 19px;
  }

  #rk-edge-guide .rk-edge-result-column {
    background: #f5f9fa;
    border: 1px solid var(--rk-line);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-edge-guide .rk-edge-result-column h4 {
    color: var(--rk-ink);
    font-size: 0.88rem;
    letter-spacing: 0.05em;
    margin: 0 0 10px;
    text-transform: uppercase;
  }

  #rk-edge-guide .rk-edge-result-column.is-ok h4 {
    color: var(--rk-green-dark);
  }

  #rk-edge-guide .rk-edge-result-column.is-check h4 {
    color: #88600e;
  }

  #rk-edge-guide .rk-edge-result-column.is-stop h4 {
    color: #a83d2d;
  }

  #rk-edge-guide .rk-edge-result-column ul {
    color: var(--rk-copy);
    font-size: 0.88rem;
    margin: 0;
    padding-left: 18px;
  }

  #rk-edge-guide .rk-edge-result-column li + li {
    margin-top: 7px;
  }

  #rk-edge-guide .rk-edge-disclaimer {
    color: #5f7787;
    font-size: 0.78rem;
    margin: 15px 0 0;
  }

  /* CTA */
  #rk-edge-guide .rk-edge-cta {
    background:
      radial-gradient(circle at 93% 120%, rgba(41, 196, 215, 0.22) 0, rgba(41, 196, 215, 0.22) 19%, transparent 19.2%),
      linear-gradient(125deg, #0b2536 0%, #153e51 62%, #0d6272 100%);
    border-radius: 21px;
    color: #ffffff;
    margin-top: 34px;
    overflow: hidden;
    padding: 36px;
  }

  #rk-edge-guide .rk-edge-cta-title {
    color: #ffffff;
    font-size: clamp(1.7rem, 3.3vw, 2.8rem);
    margin: 0;
    max-width: 970px;
  }

  #rk-edge-guide .rk-edge-cta p {
    color: #cee0e6;
    margin: 14px 0 0;
    max-width: 1000px;
  }

  #rk-edge-guide .rk-edge-cta-button {
    background: var(--rk-orange);
    border-radius: 12px;
    box-shadow: 0 12px 25px rgba(255, 104, 70, 0.24);
    color: #ffffff;
    display: inline-block;
    font-weight: 900;
    margin-top: 22px;
    padding: 14px 20px;
    text-decoration: none;
  }

  #rk-edge-guide .rk-edge-cta-button:hover,
  #rk-edge-guide .rk-edge-cta-button:focus-visible {
    background: #ffffff;
    color: var(--rk-orange-dark);
  }

  #rk-edge-guide .rk-edge-link-disclosure {
    color: #aec9d2;
    display: block;
    font-size: 0.75rem;
    margin-top: 12px;
  }

  /* Kroki, checklisty, źródła i FAQ */
  #rk-edge-guide .rk-edge-steps {
    counter-reset: edge-step;
    display: grid;
    gap: 14px;
    margin-top: 30px;
  }

  #rk-edge-guide .rk-edge-step {
    align-items: flex-start;
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    display: grid;
    gap: 17px;
    grid-template-columns: 48px minmax(0, 1fr);
    padding: 20px;
  }

  #rk-edge-guide .rk-edge-step::before {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 12px;
    color: #076c85;
    content: counter(edge-step, decimal-leading-zero);
    counter-increment: edge-step;
    display: flex;
    font-weight: 900;
    height: 48px;
    justify-content: center;
  }

  #rk-edge-guide .rk-edge-step h3 {
    color: var(--rk-ink);
    font-size: 1.08rem;
    margin: 0 0 5px;
  }

  #rk-edge-guide .rk-edge-step p {
    color: var(--rk-copy);
    margin: 0;
  }

  #rk-edge-guide .rk-edge-check-card {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    padding: 22px;
  }

  #rk-edge-guide .rk-edge-check-card h3 {
    color: var(--rk-ink);
    font-size: 1.1rem;
    margin: 0 0 12px;
  }

  #rk-edge-guide .rk-edge-check-card ul {
    color: var(--rk-copy);
    margin: 0;
    padding-left: 20px;
  }

  #rk-edge-guide .rk-edge-check-card li + li {
    margin-top: 8px;
  }

  #rk-edge-guide .rk-edge-source-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-edge-guide .rk-edge-source-card {
    background: #f2f7f9;
    border: 1px solid #cfe0e7;
    border-radius: 15px;
    padding: 20px;
  }

  #rk-edge-guide .rk-edge-source-card a {
    color: var(--rk-cyan-dark);
    font-size: 1rem;
    font-weight: 900;
  }

  #rk-edge-guide .rk-edge-source-card p {
    color: var(--rk-copy);
    margin: 8px 0 0;
  }

  #rk-edge-guide .rk-edge-responsibility {
    background: #fff0eb;
    border-left: 6px solid var(--rk-orange);
    border-radius: 14px;
    color: #613427;
    margin-top: 26px;
    padding: 19px 22px;
  }

  #rk-edge-guide .rk-edge-responsibility p {
    margin: 0;
  }

  #rk-edge-guide .rk-edge-faq {
    display: grid;
    gap: 12px;
    margin-top: 30px;
  }

  #rk-edge-guide .rk-edge-faq details {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    overflow: hidden;
  }

  #rk-edge-guide .rk-edge-faq summary {
    color: var(--rk-ink);
    cursor: pointer;
    font-weight: 900;
    list-style: none;
    padding: 19px 52px 19px 20px;
    position: relative;
  }

  #rk-edge-guide .rk-edge-faq summary::-webkit-details-marker {
    display: none;
  }

  #rk-edge-guide .rk-edge-faq summary::after {
    color: var(--rk-cyan-dark);
    content: "+";
    font-size: 1.55rem;
    font-weight: 700;
    position: absolute;
    right: 20px;
    top: 12px;
  }

  #rk-edge-guide .rk-edge-faq details[open] summary::after {
    content: "−";
  }

  #rk-edge-guide .rk-edge-faq-answer {
    border-top: 1px solid var(--rk-line);
    color: var(--rk-copy);
    padding: 18px 20px;
  }

  #rk-edge-guide .rk-edge-faq-answer p {
    margin: 0;
  }

  /* Autor — ustalony format */
  #rk-edge-guide .rk-edge-author {
    background: #eef6f8;
    border-top: 1px solid var(--rk-line);
    padding: 64px 58px;
  }

  #rk-edge-guide .rk-edge-author-layout {
    background: #ffffff;
    border: 1px solid #cbdde5;
    border-radius: 21px;
    display: grid;
    grid-template-columns: 290px minmax(0, 1fr);
    overflow: hidden;
  }

  #rk-edge-guide .rk-edge-author-side {
    align-items: center;
    background: var(--rk-navy);
    color: #ffffff;
    display: flex;
    flex-direction: column;
    padding: 35px 25px;
    text-align: center;
  }

  #rk-edge-guide .rk-edge-author-photo {
    background: #ffffff;
    border: 6px solid rgba(255, 255, 255, 0.2);
    border-radius: 50%;
    overflow: hidden;
    width: 158px;
  }

  #rk-edge-guide .rk-edge-author-name {
    color: #ffffff;
    font-size: 1.25rem;
    font-weight: 900;
    margin-top: 20px;
  }

  #rk-edge-guide .rk-edge-author-role {
    color: #bcd2db;
    font-size: 0.82rem;
    margin: 8px 0 0;
  }

  #rk-edge-guide .rk-edge-author-social {
    display: flex;
    gap: 10px;
    margin-top: 21px;
  }

  #rk-edge-guide .rk-edge-author-social a {
    align-items: center;
    border: 1px solid #497185;
    border-radius: 50%;
    color: #d8e9ee;
    display: inline-flex;
    height: 42px;
    justify-content: center;
    text-decoration: none;
    width: 42px;
  }

  #rk-edge-guide .rk-edge-author-social a:hover {
    background: var(--rk-cyan);
    color: var(--rk-navy);
  }

  #rk-edge-guide .rk-edge-author-main {
    padding: 37px;
  }

  #rk-edge-guide .rk-edge-author-title {
    font-size: clamp(1.85rem, 3.5vw, 3rem);
  }

  #rk-edge-guide .rk-edge-author-quote {
    background: #f7fbfc;
    border: 1px solid #cfe0e7;
    border-left: 6px solid var(--rk-cyan);
    border-radius: 14px;
    color: var(--rk-ink);
    font-size: 1.04rem;
    font-style: italic;
    font-weight: 700;
    line-height: 1.7;
    margin-top: 24px;
    padding: 20px 22px;
  }

  #rk-edge-guide .rk-edge-author-main > p {
    color: var(--rk-copy);
    margin: 18px 0 0;
  }

  #rk-edge-guide .rk-edge-author-facts {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-edge-guide .rk-edge-author-fact {
    background: #eef7f9;
    border: 1px solid #d2e4e9;
    border-radius: 13px;
    color: var(--rk-copy);
    font-size: 0.84rem;
    padding: 15px;
  }

  #rk-edge-guide .rk-edge-author-fact strong {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.73rem;
    letter-spacing: 0.06em;
    margin-bottom: 5px;
    text-transform: uppercase;
  }

  #rk-edge-guide .rk-edge-portals {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-top: 20px;
  }

  #rk-edge-guide .rk-edge-portals a {
    background: #f2f7f9;
    border: 1px solid #cfe0e7;
    border-radius: 999px;
    font-size: 0.78rem;
    font-weight: 900;
    padding: 8px 12px;
    text-decoration: none;
  }

  #rk-edge-guide .rk-edge-visually-hidden {
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    height: 1px;
    overflow: hidden;
    position: absolute;
    white-space: nowrap;
    width: 1px;
  }

  @media (max-width: 1050px) {
    #rk-edge-guide .rk-edge-grid-4,
    #rk-edge-guide .rk-edge-visual-tabs {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-edge-guide .rk-edge-result-grid,
    #rk-edge-guide .rk-edge-source-grid {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  @media (max-width: 820px) {
    #rk-edge-guide .rk-edge-hero,
    #rk-edge-guide .rk-edge-section,
    #rk-edge-guide .rk-edge-author {
      padding-left: 28px;
      padding-right: 28px;
    }

    #rk-edge-guide .rk-edge-hero::before {
      left: 28px;
    }

    #rk-edge-guide .rk-edge-shortcuts {
      padding-left: 22px;
      padding-right: 22px;
    }

    #rk-edge-guide .rk-edge-grid-3,
    #rk-edge-guide .rk-edge-check-grid,
    #rk-edge-guide .rk-edge-module-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-edge-guide .rk-edge-author-layout {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  @media (max-width: 660px) {
    #rk-edge-guide .rk-edge-hero {
      padding-bottom: 42px;
      padding-top: 52px;
    }

    #rk-edge-guide .rk-edge-section,
    #rk-edge-guide .rk-edge-author {
      padding-bottom: 46px;
      padding-top: 46px;
    }

    #rk-edge-guide .rk-edge-grid-2,
    #rk-edge-guide .rk-edge-grid-3,
    #rk-edge-guide .rk-edge-grid-4,
    #rk-edge-guide .rk-edge-check-grid,
    #rk-edge-guide .rk-edge-fields,
    #rk-edge-guide .rk-edge-module-grid,
    #rk-edge-guide .rk-edge-author-facts,
    #rk-edge-guide .rk-edge-visual-tabs {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-edge-guide .rk-edge-sequence {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-edge-guide .rk-edge-visual,
    #rk-edge-guide .rk-edge-analyzer,
    #rk-edge-guide .rk-edge-cta {
      border-radius: 17px;
      padding: 20px;
    }

    #rk-edge-guide .rk-edge-visual-panel,
    #rk-edge-guide .rk-edge-analyzer-stage,
    #rk-edge-guide .rk-edge-result {
      padding: 18px;
    }

    #rk-edge-guide .rk-edge-analyzer-actions {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-edge-guide .rk-edge-analyze-button,
    #rk-edge-guide .rk-edge-reset-button,
    #rk-edge-guide .rk-edge-cta-button {
      text-align: center;
      width: 100%;
    }

    #rk-edge-guide .rk-edge-table-wrap {
      overflow: visible;
    }

    #rk-edge-guide table,
    #rk-edge-guide thead,
    #rk-edge-guide tbody,
    #rk-edge-guide tr,
    #rk-edge-guide th,
    #rk-edge-guide td {
      display: block;
      min-width: 0;
      width: 100%;
    }

    #rk-edge-guide thead {
      clip: rect(0 0 0 0);
      clip-path: inset(50%);
      height: 1px;
      overflow: hidden;
      position: absolute;
      white-space: nowrap;
      width: 1px;
    }

    #rk-edge-guide tbody {
      display: grid;
      gap: 14px;
    }

    #rk-edge-guide tbody tr {
      background: #ffffff;
      border: 1px solid var(--rk-line);
      border-radius: 14px;
      overflow: hidden;
    }

    #rk-edge-guide td,
    #rk-edge-guide tbody tr td:first-child,
    #rk-edge-guide tbody tr td:last-child {
      border: 0;
      border-bottom: 1px solid #e1ebef;
      border-radius: 0;
      padding: 13px 15px;
    }

    #rk-edge-guide td:last-child {
      border-bottom: 0;
    }

    #rk-edge-guide td::before {
      color: var(--rk-cyan-dark);
      content: attr(data-label);
      display: block;
      font-size: 0.69rem;
      font-weight: 900;
      letter-spacing: 0.07em;
      margin-bottom: 4px;
      text-transform: uppercase;
    }

    #rk-edge-guide .rk-edge-author-main {
      padding: 25px 20px;
    }
  }

  @media (max-width: 430px) {
    #rk-edge-guide .rk-edge-hero,
    #rk-edge-guide .rk-edge-section,
    #rk-edge-guide .rk-edge-author {
      padding-left: 18px;
      padding-right: 18px;
    }

    #rk-edge-guide .rk-edge-hero::before {
      left: 18px;
    }

    #rk-edge-guide .rk-edge-shortcuts {
      padding-left: 14px;
      padding-right: 14px;
    }

    #rk-edge-guide .rk-edge-shortcuts a {
      flex: 1 1 calc(50% - 9px);
      text-align: center;
    }

    #rk-edge-guide .rk-edge-shortcuts-label {
      flex: 1 0 100%;
    }

    #rk-edge-guide .rk-edge-hero-title {
      font-size: 2.25rem;
    }

    #rk-edge-guide .rk-edge-section-title {
      font-size: 1.9rem;
    }

    #rk-edge-guide .rk-edge-step {
      grid-template-columns: 42px minmax(0, 1fr);
      padding: 16px;
    }

    #rk-edge-guide .rk-edge-step::before {
      height: 42px;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    #rk-edge-guide *,
    #rk-edge-guide *::before,
    #rk-edge-guide *::after {
      scroll-behavior: auto;
      transition-duration: 0.01ms;
    }
  }
</style>

<article id="rk-edge-guide" aria-labelledby="rk-edge-visual-title">
  <div class="rk-edge-shell">
    <header class="rk-edge-hero">
      <span class="rk-edge-kicker">Projektowanie podłogówki · aktualizacja techniczna 2026</span>
      <div class="rk-edge-hero-title" id="rk-edge-visual-title">Strefa brzegowa w ogrzewaniu podłogowym: <span>potrzeba z obliczeń, nie z przyzwyczajenia</span></div>
      <p class="rk-edge-hero-lead">Gęstszy pas rur przy przeszkleniu może zwiększyć lokalną moc i ograniczyć dyskomfort, ale nie jest obowiązkowym obramowaniem każdego pomieszczenia. O jego położeniu, szerokości, rozstawie oraz podziale pętli decydują obciążenie cieplne, konstrukcja podłogi, temperatura powierzchni i hydraulika.</p>
      <div class="rk-edge-hero-tags" aria-label="Zakres poradnika">
        <span>kiedy stosować</span>
        <span>szerokość i rozstaw</span>
        <span>temperatura powierzchni</span>
        <span>pętle i przepływy</span>
        <span>duże przeszklenia</span>
      </div>
      <div class="rk-edge-meta">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 24 minuty</strong></span>
        <span>Aktualizacja techniczna: <strong>18 września 2026 r.</strong></span>
      </div>
    </header>

    <nav class="rk-edge-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-edge-shortcuts-label">Na skróty</span>
      <a href="#rk-edge-answer">Szybka odpowiedź</a>
      <a href="#rk-edge-terms">Trzy pojęcia</a>
      <a href="#rk-edge-when">Kiedy potrzebna</a>
      <a href="#rk-edge-when-not">Kiedy zbędna</a>
      <a href="#rk-edge-limits">Normy i limity</a>
      <a href="#rk-edge-visual-section">Moduł edukacyjny</a>
      <a href="#rk-edge-analyzer-section">Analizator</a>
      <a href="#rk-edge-geometry">Szerokość i rozstaw</a>
      <a href="#rk-edge-methods">Warianty wykonania</a>
      <a href="#rk-edge-hydraulics">Hydraulika</a>
      <a href="#rk-edge-glazing">Przeszklenia i pompa</a>
      <a href="#rk-edge-execution">Wykonanie</a>
      <a href="#rk-edge-errors">Błędy</a>
      <a href="#rk-edge-checklist">Checklista</a>
      <a href="#rk-edge-final">Podsumowanie</a>
      <a href="#rk-edge-sources">Źródła</a>
      <a href="#rk-edge-faq">FAQ</a>
      <a href="#rk-edge-author">Autor</a>
    </nav>

    <section class="rk-edge-section" id="rk-edge-answer">
      <span class="rk-edge-eyebrow">Odpowiedź w 60 sekund</span>
      <h2 class="rk-edge-section-title">Czy strefa brzegowa jest zawsze potrzebna?</h2>
      <p class="rk-edge-lead"><strong>Nie.</strong> Strefa brzegowa jest narzędziem projektowym stosowanym tam, gdzie lokalne obciążenie cieplne lub ryzyko dyskomfortu przy przegrodzie jest większe niż w pozostałej części pomieszczenia. W dobrze izolowanym domu zwykły rozstaw na całej aktywnej podłodze może pokryć straty bez wydzielania osobnego pasa.</p>
      <div class="rk-edge-answer">
        <strong>Najpierw obliczamy straty pomieszczenia i sprawdzamy moc podłogi. Dopiero później decydujemy, czy przy przeszkleniu potrzebny jest gęstszy rozstaw.</strong>
        <p>Samo duże okno, ściana zewnętrzna albo narożne położenie pokoju nie wyznacza automatycznie szerokości strefy. Trzeba znać parametry przegrody, powierzchnię aktywną, opór wykończenia, temperatury wody, dopuszczalną temperaturę powierzchni oraz przepływ w pętli.</p>
      </div>
      <div class="rk-edge-grid-3">
        <article class="rk-edge-card">
          <span class="rk-edge-icon">Q</span>
          <h3>Pokrycie lokalnej straty</h3>
          <p>Pas może oddawać większą moc z 1 m² niż część podstawowa, jeżeli pozwalają na to konstrukcja i temperatura powierzchni.</p>
        </article>
        <article class="rk-edge-card">
          <span class="rk-edge-icon">T°</span>
          <h3>Komfort przy przegrodzie</h3>
          <p>Wyższa lokalna emisja może ograniczać odczucie chłodu przy dużym oknie, ale nie naprawia słabej izolacji ani mostka cieplnego.</p>
        </article>
        <article class="rk-edge-card">
          <span class="rk-edge-icon">Δp</span>
          <h3>Konsekwencje hydrauliczne</h3>
          <p>Mniejszy rozstaw zwiększa długość rury, pojemność obwodu i stratę ciśnienia. Strefę trzeba sprawdzić razem z całą pętlą.</p>
        </article>
      </div>
      <p class="rk-edge-copy">Punktem startowym powinno być <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne</a> obliczone dla każdego pomieszczenia, a nie przyjęta z góry zasada „przy oknie zawsze co 10 cm”.</p>
    </section>

    <section class="rk-edge-section rk-edge-section-soft" id="rk-edge-terms">
      <span class="rk-edge-eyebrow">Podobne nazwy, inne funkcje</span>
      <h2 class="rk-edge-section-title">Strefa brzegowa, strefa podstawowa i taśma brzegowa</h2>
      <p class="rk-edge-lead">Najczęstszy błąd terminologiczny polega na łączeniu elementu grzewczego z elementem konstrukcyjnym jastrychu. Te pojęcia trzeba rozdzielić przed rozmową o rozstawie rur.</p>
      <div class="rk-edge-table-wrap">
        <table>
          <thead>
            <tr><th>Pojęcie</th><th>Co oznacza?</th><th>Co dobieramy?</th><th>Czego nie robi?</th></tr>
          </thead>
          <tbody>
            <tr>
              <td data-label="Pojęcie"><strong>Strefa podstawowa</strong></td>
              <td data-label="Co oznacza?">Główna aktywna powierzchnia grzewcza pomieszczenia.</td>
              <td data-label="Co dobieramy?">Moc, rozstaw, temperatury, przepływ oraz podział pętli.</td>
              <td data-label="Czego nie robi?">Nie wymaga z definicji jednego rozstawu w całym budynku.</td>
            </tr>
            <tr>
              <td data-label="Pojęcie"><strong>Strefa brzegowa</strong></td>
              <td data-label="Co oznacza?">Wydzielony pas aktywnej podłogi o podwyższonej lokalnej mocy.</td>
              <td data-label="Co dobieramy?">Położenie, szerokość, rozstaw, temperaturę powierzchni i hydraulikę.</td>
              <td data-label="Czego nie robi?">Nie poprawia izolacyjności ściany i nie zastępuje usunięcia mostka.</td>
            </tr>
            <tr>
              <td data-label="Pojęcie"><strong>Taśma brzegowa</strong></td>
              <td data-label="Co oznacza?">Elastyczne oddzielenie jastrychu od ścian, słupów i innych elementów pionowych.</td>
              <td data-label="Co dobieramy?">Materiał i wymiary odpowiednie do konstrukcji posadzki.</td>
              <td data-label="Czego nie robi?">Nie jest strefą grzewczą i nie określa rozstawu rur.</td>
            </tr>
          </tbody>
        </table>
      </div>
      <p class="rk-edge-copy">Funkcje taśmy, szczelin oraz pól jastrychu rozwija poradnik o <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolacji brzegowej i dylatacjach ogrzewania podłogowego</a>.</p>
      <div class="rk-edge-note"><p><strong>Ważne:</strong> słowo „brzegowa” nie oznacza, że gęsty pas należy poprowadzić wzdłuż całego obwodu pokoju. Strefa powinna odpowiadać rzeczywistemu miejscu zwiększonego obciążenia.</p></div>
    </section>

    <section class="rk-edge-section" id="rk-edge-when">
      <span class="rk-edge-eyebrow">Decyzja z bilansu pomieszczenia</span>
      <h2 class="rk-edge-section-title">Kiedy strefa brzegowa może być potrzebna?</h2>
      <p class="rk-edge-lead">Uzasadnieniem nie jest sam typ pomieszczenia, lecz połączenie większej lokalnej straty, ograniczonej powierzchni grzewczej oraz wymagań komfortu.</p>
      <div class="rk-edge-grid-4">
        <article class="rk-edge-card"><span class="rk-edge-card-number">01</span><h3>Duże przeszklenie</h3><p>Niższa temperatura wewnętrznej powierzchni szyby może zwiększać asymetrię promieniowania i lokalne odczucie chłodu.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">02</span><h3>Drzwi tarasowe lub wejściowe</h3><p>Większy udział ramy, progu i infiltracji może podnosić obciążenie analizowanego fragmentu pomieszczenia.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">03</span><h3>Pomieszczenie narożne</h3><p>Dwie przegrody zewnętrzne i większa powierzchnia wymiany ciepła mogą wymagać większej mocy z aktywnej podłogi.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">04</span><h3>Ograniczona powierzchnia aktywna</h3><p>Stała zabudowa lub wyłączenia zmniejszają powierzchnię, z której trzeba pokryć całe obciążenie pomieszczenia.</p></article>
      </div>
      <div class="rk-edge-note rk-edge-note-good"><p><strong>Prawidłowa kolejność:</strong> obciążenie cieplne → powierzchnia aktywna → wymagana moc z 1 m² → konstrukcja podłogi → temperatury wody → rozstaw → temperatura powierzchni → hydraulika.</p></div>
      <p class="rk-edge-copy">Osobny przypadek stanowią wnętrza z fasadami szklanymi. Szczegółową procedurę opisuje poradnik o <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">projekcie ogrzewania podłogowego w domu z dużymi przeszkleniami</a>.</p>
    </section>

    <section class="rk-edge-section rk-edge-section-soft" id="rk-edge-when-not">
      <span class="rk-edge-eyebrow">Więcej rury nie zawsze znaczy lepiej</span>
      <h2 class="rk-edge-section-title">Kiedy wydzielanie strefy może być zbędne?</h2>
      <p class="rk-edge-lead">W nowym, dobrze izolowanym budynku lokalny pas nie musi wnieść mierzalnej korzyści. Czasami tylko zwiększa długość obwodów i utrudnia równoważenie.</p>
      <div class="rk-edge-grid-3">
        <article class="rk-edge-card"><span class="rk-edge-icon">✓</span><h3>Zwykły układ pokrywa straty</h3><p>Obliczona moc strefy podstawowej wystarcza przy przyjętej temperaturze wody i bez przekraczania limitu powierzchni.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-icon">U</span><h3>Przegroda ma dobre parametry</h3><p>Ciepłe przeszklenie, poprawny montaż oraz niski współczynnik przenikania ograniczają lokalną różnicę temperatur.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-icon">R</span><h3>Ogranicza okładzina</h3><p>Jeżeli wysoki opór podłogi lub jej dopuszczalna temperatura blokuje emisję, samo zagęszczenie nie rozwiąże problemu.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-icon">A</span><h3>Brak aktywnego pasa</h3><p>Stała zabudowa przy ścianie albo przeszkleniu może uniemożliwiać wykorzystanie fragmentu jako czynnej powierzchni.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-icon">t</span><h3>Całość ma gęsty rozstaw</h3><p>Jeżeli obliczenia wymagają jednakowej gęstości w całym pokoju, nie powstaje odrębna strefa o innej charakterystyce.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-icon">L</span><h3>Hydraulika staje się gorsza</h3><p>Dodatkowe metry mogą przekroczyć rozsądną długość pętli lub zwiększyć opór bez potrzebnego efektu cieplnego.</p></article>
      </div>
      <div class="rk-edge-note rk-edge-note-bad"><p><strong>Nie projektuj „na zapas”.</strong> Nadmiar rur nie poprawia izolacyjności i może zwiększyć koszty materiału, opory hydrauliczne oraz trudność regulacji bez podniesienia użytecznej mocy.</p></div>
    </section>

    <section class="rk-edge-section" id="rk-edge-limits">
      <span class="rk-edge-eyebrow">Granice, nie cele eksploatacyjne</span>
      <h2 class="rk-edge-section-title">Co określają normy i limity temperatury powierzchni?</h2>
      <p class="rk-edge-lead">Metodyka systemów płaszczyznowych pozwala analizować wydzieloną strefę brzegową inaczej niż powierzchnię przeznaczoną do stałego przebywania ludzi. Nie oznacza to jednak obowiązku wykonania takiego pasa w każdym pokoju.</p>
      <div class="rk-edge-table-wrap">
        <table>
          <thead><tr><th>Obszar lub parametr</th><th>Wartość projektowa</th><th>Jak ją interpretować?</th><th>Co jeszcze sprawdzić?</th></tr></thead>
          <tbody>
            <tr><td data-label="Obszar lub parametr"><strong>Strefa przebywania ludzi</strong></td><td data-label="Wartość projektowa">do około 29°C</td><td data-label="Jak interpretować?">Górna temperatura powierzchni w typowych pomieszczeniach, a nie codzienna nastawa.</td><td data-label="Co jeszcze sprawdzić?">Komfort, moc, rozkład temperatur i ograniczenia wykończenia.</td></tr>
            <tr><td data-label="Obszar lub parametr"><strong>Łazienka</strong></td><td data-label="Wartość projektowa">do około 33°C</td><td data-label="Jak interpretować?">Wyższa granica wynika z innej temperatury obliczeniowej i sposobu użytkowania.</td><td data-label="Co jeszcze sprawdzić?">Powierzchnię wyłączoną, hydroizolację, klej i okładzinę.</td></tr>
            <tr><td data-label="Obszar lub parametr"><strong>Wydzielona strefa brzegowa</strong></td><td data-label="Wartość projektowa">do około 35°C</td><td data-label="Jak interpretować?">Wartość graniczna dla odpowiednio zdefiniowanego pasa, nie zalecana temperatura pracy.</td><td data-label="Co jeszcze sprawdzić?">Czy pas nie służy do stałego pobytu i czy materiał podłogi dopuszcza tę temperaturę.</td></tr>
            <tr><td data-label="Obszar lub parametr"><strong>Podłoga drewniana</strong></td><td data-label="Wartość projektowa">często maks. około 27°C</td><td data-label="Jak interpretować?">Ograniczenie produktu lub układu warstw może być niższe od wartości ogólnych.</td><td data-label="Co jeszcze sprawdzić?">Dokumentację drewna, kleju, podkładu i warunki wilgotnościowe.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-edge-copy">Podane wartości są limitami używanymi przy projektowaniu, a nie instrukcją ustawienia sterownika. Dokumentacja konkretnej okładziny może wymagać niższej temperatury. Zależność tę rozwija poradnik o tym, <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">jak okładzina wpływa na wydajność podłogówki</a>.</p>
      <div class="rk-edge-note"><p><strong>Norma nie projektuje pomieszczenia za projektanta.</strong> Dostarcza metody, definicje i warunki brzegowe. Potrzeba strefy oraz jej parametry nadal muszą wynikać z obliczeń konkretnego budynku.</p></div>
    </section>

    <section class="rk-edge-section rk-edge-section-soft" id="rk-edge-visual-section">
      <span class="rk-edge-eyebrow">Interaktywna grafika modułowa</span>
      <h2 class="rk-edge-section-title">Jak działa strefa brzegowa — bez mylącego rysunku rur</h2>
      <p class="rk-edge-lead">Zamiast przedstawiać jeden schemat jako gotowy projekt, moduł rozdziela pojęcia, warunki decyzji, warianty wykonania i ograniczenia. Wybierz zakładkę.</p>
      <div class="rk-edge-visual" aria-labelledby="rk-edge-visual-module-title">
        <p class="rk-edge-visual-intro" id="rk-edge-visual-module-title"><strong>Moduł edukacyjny:</strong> każda zakładka pokazuje inny etap rozumowania. Układ nie przedstawia trasy konkretnej pętli.</p>
        <div class="rk-edge-visual-tabs" role="tablist" aria-label="Zakres modułu edukacyjnego">
          <button class="rk-edge-visual-tab" type="button" role="tab" aria-selected="true" data-rk-edge-visual="terms">Co jest czym?</button>
          <button class="rk-edge-visual-tab" type="button" role="tab" aria-selected="false" data-rk-edge-visual="decision">Kiedy analizować?</button>
          <button class="rk-edge-visual-tab" type="button" role="tab" aria-selected="false" data-rk-edge-visual="variants">Jak wykonać?</button>
          <button class="rk-edge-visual-tab" type="button" role="tab" aria-selected="false" data-rk-edge-visual="limits">Co ogranicza?</button>
        </div>
        <div class="rk-edge-visual-panel" role="tabpanel" aria-live="polite">
          <span class="rk-edge-visual-label" id="rk-edge-visual-label">Pojęcia</span>
          <h3 id="rk-edge-visual-heading">Trzy elementy o różnych zadaniach</h3>
          <p id="rk-edge-visual-summary">Strefa podstawowa ogrzewa główną część pomieszczenia, strefa brzegowa zwiększa lokalną moc, a taśma brzegowa oddziela jastrych od elementów pionowych.</p>
          <div class="rk-edge-module-grid" id="rk-edge-module-grid">
            <div class="rk-edge-module-card"><strong>Strefa podstawowa</strong><span>Główna aktywna powierzchnia dobrana do obciążenia pomieszczenia.</span></div>
            <div class="rk-edge-module-card"><strong>Strefa brzegowa</strong><span>Wydzielony pas o większej lokalnej mocy, jeżeli wykaże ją projekt.</span></div>
            <div class="rk-edge-module-card"><strong>Taśma brzegowa</strong><span>Element konstrukcyjny jastrychu, a nie część układu grzewczego.</span></div>
          </div>
          <div class="rk-edge-sequence" id="rk-edge-sequence" aria-label="Kolejność projektowania">
            <div class="rk-edge-sequence-step">1. Obciążenie pomieszczenia</div>
            <div class="rk-edge-sequence-step">2. Aktywna powierzchnia</div>
            <div class="rk-edge-sequence-step">3. Moc i temperatura podłogi</div>
            <div class="rk-edge-sequence-step">4. Rozstaw i hydraulika</div>
          </div>
        </div>
      </div>
    </section>

    <section class="rk-edge-section rk-edge-section-dark" id="rk-edge-analyzer-section">
      <span class="rk-edge-eyebrow">Narzędzie decyzyjne przed rysowaniem pętli</span>
      <h2 class="rk-edge-section-title">Czy w tym pomieszczeniu warto analizować strefę brzegową?</h2>
      <p class="rk-edge-lead">Analizator nie dobiera szerokości ani rozstawu. Porządkuje przesłanki i wskazuje dane, bez których decyzja byłaby zgadywaniem.</p>
      <div class="rk-edge-analyzer" id="rk-edge-analyzer">
        <div class="rk-edge-analyzer-head">
          <h3>Sprawdź kompletność decyzji projektowej</h3>
          <p>Odpowiadaj na podstawie obliczeń, projektu przegród i planu podłogi. Brak danych nie jest odpowiedzią „strefa potrzebna”.</p>
        </div>

        <div class="rk-edge-analyzer-stage">
          <div class="rk-edge-stage-head"><span class="rk-edge-stage-number">1</span><div><h4>Obciążenie i przegroda</h4><p>Najpierw ustalamy, czy rzeczywiście występuje lokalnie zwiększona potrzeba grzewcza.</p></div></div>
          <div class="rk-edge-fields">
            <label class="rk-edge-field"><span>Obciążenie cieplne pomieszczenia</span><select id="rk-edge-load"><option value="unknown">Nie mam obliczeń</option><option value="known">Obliczone dla pomieszczenia</option><option value="estimate">Tylko szacunek na m² domu</option></select></label>
            <label class="rk-edge-field"><span>Przegroda przy analizowanym pasie</span><select id="rk-edge-envelope"><option value="unknown">Brak danych</option><option value="normal">Niewielkie, ciepłe okno / dobra ściana</option><option value="large">Duże przeszklenie lub drzwi zewnętrzne</option><option value="weak">Gorsza przegroda albo rozpoznany mostek</option></select></label>
            <label class="rk-edge-field"><span>Moc standardowego układu</span><select id="rk-edge-standard-capacity"><option value="unknown">Nie została sprawdzona</option><option value="enough">Pokrywa obciążenie z bezpiecznym zapasem</option><option value="borderline">Jest blisko wymaganej wartości</option><option value="insufficient">Nie pokrywa obciążenia</option></select></label>
            <label class="rk-edge-field"><span>Dyskomfort przy przeszkleniu</span><select id="rk-edge-comfort"><option value="unknown">Nie oceniono</option><option value="low">Nie przewiduje się istotnego problemu</option><option value="possible">Możliwa asymetria lub chłodny pas</option><option value="known">Problem występuje w istniejącym budynku</option></select></label>
          </div>
        </div>

        <div class="rk-edge-analyzer-stage">
          <div class="rk-edge-stage-head"><span class="rk-edge-stage-number">2</span><div><h4>Podłoga i powierzchnia aktywna</h4><p>Strefa może oddać większą moc tylko wtedy, gdy powierzchnia jest dostępna i nie ogranicza jej wykończenie.</p></div></div>
          <div class="rk-edge-fields">
            <label class="rk-edge-field"><span>Powierzchnia aktywna przy przegrodzie</span><select id="rk-edge-active-area"><option value="unknown">Nie wyznaczono</option><option value="available">Pas jest dostępny i wolny od stałej zabudowy</option><option value="limited">Częściowo ograniczony</option><option value="blocked">Stała zabudowa / brak aktywnego pasa</option></select></label>
            <label class="rk-edge-field"><span>Opór cieplny wykończenia</span><select id="rk-edge-covering"><option value="unknown">Nieznany</option><option value="low">Niski i potwierdzony</option><option value="medium">Umiarkowany</option><option value="high">Wysoki lub niekorzystny podkład</option></select></label>
            <label class="rk-edge-field"><span>Temperatura powierzchni</span><select id="rk-edge-surface"><option value="unknown">Nie została obliczona</option><option value="verified">Sprawdzona wraz z limitem okładziny</option><option value="limit">Wymagana moc przekracza dopuszczalny limit</option></select></label>
            <label class="rk-edge-field"><span>Układ wyposażenia</span><select id="rk-edge-furniture"><option value="unknown">Nieustalony</option><option value="stable">Znany i uwzględniony</option><option value="conflict">Koliduje ze strefą</option></select></label>
          </div>
        </div>

        <div class="rk-edge-analyzer-stage">
          <div class="rk-edge-stage-head"><span class="rk-edge-stage-number">3</span><div><h4>Pętle i hydraulika</h4><p>Ostatni etap sprawdza, czy geometryczny pomysł da się zasilić, wyregulować i wykonać.</p></div></div>
          <div class="rk-edge-fields">
            <label class="rk-edge-field"><span>Długość pętli po zagęszczeniu</span><select id="rk-edge-loop"><option value="unknown">Niepoliczona</option><option value="verified">Sprawdzona z podejściami</option><option value="too-long">Przekracza przyjęty limit projektu</option></select></label>
            <label class="rk-edge-field"><span>Przepływ i strata ciśnienia</span><select id="rk-edge-hydraulic"><option value="unknown">Niepoliczone</option><option value="verified">Sprawdzone dla projektowego przepływu</option><option value="problem">Występuje problem z oporem lub równoważeniem</option></select></label>
            <label class="rk-edge-field"><span>Planowany wariant wykonania</span><select id="rk-edge-variant"><option value="unknown">Jeszcze nie wybrano</option><option value="integrated">Zagęszczona część pętli pokoju</option><option value="separate">Osobna pętla strefy</option><option value="uniform">Jednakowy gęsty rozstaw w pokoju</option></select></label>
            <label class="rk-edge-field"><span>Temperatura na rozdzielaczu</span><select id="rk-edge-supply"><option value="unknown">Nieustalona</option><option value="same">Ta sama dla wszystkich pętli rozdzielacza</option><option value="false-hotter">Założono cieplejszą wodę tylko w osobnej pętli</option><option value="separate-circuit">Przewidziano odrębny obieg temperaturowy</option></select></label>
          </div>
        </div>

        <div class="rk-edge-analyzer-actions">
          <button class="rk-edge-analyze-button" id="rk-edge-run" type="button">Przeanalizuj pomieszczenie</button>
          <button class="rk-edge-reset-button" id="rk-edge-reset" type="button">Wyczyść odpowiedzi</button>
        </div>

        <div class="rk-edge-result" id="rk-edge-result" aria-live="polite">
          <p class="rk-edge-result-status" id="rk-edge-result-status">Uzupełnij dane pomieszczenia</p>
          <p class="rk-edge-result-intro" id="rk-edge-result-intro">Wynik oddzieli przesłanki potwierdzone, dane brakujące i warunki blokujące prostą decyzję.</p>
          <div class="rk-edge-result-grid">
            <div class="rk-edge-result-column is-ok"><h4>Potwierdzone</h4><ul id="rk-edge-ok-list"><li>Jeszcze brak ocenionych danych.</li></ul></div>
            <div class="rk-edge-result-column is-check"><h4>Do sprawdzenia</h4><ul id="rk-edge-check-list"><li>Uzupełnij formularz na podstawie projektu.</li></ul></div>
            <div class="rk-edge-result-column is-stop"><h4>Warunki krytyczne</h4><ul id="rk-edge-stop-list"><li>Brak oceny nie oznacza akceptacji rozwiązania.</li></ul></div>
          </div>
          <p class="rk-edge-disclaimer">Analizator ma charakter edukacyjny. Nie oblicza strat, mocy, temperatury powierzchni, przepływów ani oporów i nie jest projektem wykonawczym.</p>
        </div>
      </div>

      <aside class="rk-edge-cta" aria-label="Projekt strefy brzegowej przy przeszkleniu">
        <div class="rk-edge-cta-title">Masz duże przeszklenia, ale nie wiesz, czy potrzebujesz osobnej strefy brzegowej?</div>
        <p>W projekcie sprawdzamy obciążenie pomieszczenia, dostępną powierzchnię podłogi, opór okładziny, temperaturę zasilania, możliwą moc powierzchniową oraz wpływ zagęszczenia rur na długość i opory pętli. Dopiero z tych danych wynika, czy wystarczy standardowy układ, potrzebny jest gęstszy pas, czy osobny obwód ma techniczne uzasadnienie.</p>
        <a class="rk-edge-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt podłogówki z analizą stref</a>
        <small class="rk-edge-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </aside>
    </section>

    <section class="rk-edge-section" id="rk-edge-geometry">
      <span class="rk-edge-eyebrow">Geometria po decyzji cieplnej</span>
      <h2 class="rk-edge-section-title">Jak dobrać szerokość strefy i rozstaw rur?</h2>
      <p class="rk-edge-lead">Nie istnieje jedna poprawna szerokość ani jeden „obowiązkowy” rozstaw. Pas powinien odpowiadać fragmentowi przegrody o zwiększonym obciążeniu, wymaganej powierzchni oddawania ciepła i granicom komfortu.</p>
      <div class="rk-edge-grid-3">
        <article class="rk-edge-card"><span class="rk-edge-card-number">DŁUGOŚĆ</span><h3>Wzdłuż rzeczywistej przegrody</h3><p>Strefę prowadzi się przy odcinku przeszklenia, drzwi lub ściany, który uzasadnia zwiększoną moc — nie automatycznie wokół całego pokoju.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">SZEROKOŚĆ</span><h3>Z potrzebnej powierzchni</h3><p>W praktyce analizuje się pas do około 1 m, ale pełny metr nie jest domyślną receptą. Węższa strefa musi mieć wystarczającą powierzchnię.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">ROZSTAW</span><h3>Z wymaganej mocy</h3><p>Rozstaw 5, 10, 15 albo 20 cm porównuje się z konstrukcją podłogi, temperaturami wody i dopuszczalną temperaturą powierzchni.</p></article>
      </div>
      <div class="rk-edge-table-wrap">
        <table>
          <thead><tr><th>Rozstaw</th><th>Orientacyjna ilość rury w polu</th><th>Co daje?</th><th>Co może ograniczyć?</th></tr></thead>
          <tbody>
            <tr><td data-label="Rozstaw"><strong>5 cm</strong></td><td data-label="Orientacyjna ilość rury w polu">około 20 m/m²</td><td data-label="Co daje?">Bardzo równomierny rozkład i wysoka gęstość przewodu.</td><td data-label="Co może ograniczyć?">Promień gięcia, długość obwodu, opór, moc graniczna i dokumentacja systemu.</td></tr>
            <tr><td data-label="Rozstaw"><strong>10 cm</strong></td><td data-label="Orientacyjna ilość rury w polu">około 10 m/m²</td><td data-label="Co daje?">Częsty wariant stref o większej lokalnej mocy.</td><td data-label="Co może ograniczyć?">Temperatura powierzchni, okładzina i przepływ pętli.</td></tr>
            <tr><td data-label="Rozstaw"><strong>15 cm</strong></td><td data-label="Orientacyjna ilość rury w polu">około 6,7 m/m²</td><td data-label="Co daje?">Mniejszy metraż i opór przy umiarkowanym zapotrzebowaniu.</td><td data-label="Co może ograniczyć?">Niewystarczająca moc przy niskiej temperaturze wody.</td></tr>
            <tr><td data-label="Rozstaw"><strong>20 cm</strong></td><td data-label="Orientacyjna ilość rury w polu">około 5 m/m²</td><td data-label="Co daje?">Niski metraż przy niewielkim obciążeniu.</td><td data-label="Co może ograniczyć?">Nierównomierność temperatury i moc w wymagających strefach.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-edge-formula">orientacyjna długość rury w prostym polu: L ≈ A / t, gdzie A [m²], a rozstaw t [m]</div>
      <p class="rk-edge-copy">Do wyniku trzeba doliczyć łuki, korekty przebiegu i podwójne podejście od rozdzielacza. W narożniku dwóch pasów nie wolno dwukrotnie liczyć wspólnej powierzchni. Więcej o konsekwencjach wyboru opisuje porównanie <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstawu rur co 10 i 15 cm</a>.</p>
    </section>

    <section class="rk-edge-section rk-edge-section-soft" id="rk-edge-methods">
      <span class="rk-edge-eyebrow">Trzy poprawne strategie</span>
      <h2 class="rk-edge-section-title">Osobna pętla czy zagęszczona część obwodu?</h2>
      <p class="rk-edge-lead">Wariant wykonania wynika z geometrii, długości rur, wymaganej mocy i możliwości regulacji. Sam fakt wydzielenia osobnej sekcji nie podnosi automatycznie temperatury jej zasilania.</p>
      <div class="rk-edge-grid-3">
        <article class="rk-edge-card">
          <span class="rk-edge-card-number">WARIANT A</span>
          <h3>Osobna pętla strefy</h3>
          <p>Ułatwia niezależne ustawienie przepływu i kontrolę długości obwodu. Jest uzasadniona, gdy pas ma dużą powierzchnię lub wysoką wymaganą moc.</p>
          <ul class="rk-edge-bullets"><li>osobna sekcja rozdzielacza,</li><li>ten sam parametr zasilania przy wspólnym rozdzielaczu,</li><li>wymagane obliczenie przepływu i oporu.</li></ul>
        </article>
        <article class="rk-edge-card">
          <span class="rk-edge-card-number">WARIANT B</span>
          <h3>Zagęszczony początek pętli</h3>
          <p>Zasilanie prowadzi się najpierw przez pas przy przegrodzie, a następnie przez strefę podstawową. Rozwiązanie ogranicza liczbę sekcji.</p>
          <ul class="rk-edge-bullets"><li>jedna pętla i jeden przepływ,</li><li>kontrola całkowitej długości,</li><li>ważna kolejność prowadzenia rury.</li></ul>
        </article>
        <article class="rk-edge-card">
          <span class="rk-edge-card-number">WARIANT C</span>
          <h3>Jednolity gęsty rozstaw</h3>
          <p>Bywa prostszy, jeżeli obliczenia wymagają podobnej gęstości na całej powierzchni. Formalnie nie tworzy pasa o odrębnej charakterystyce.</p>
          <ul class="rk-edge-bullets"><li>prostsze wykonanie,</li><li>podział według hydrauliki,</li><li>brak sztucznego obramowania pokoju.</li></ul>
        </article>
      </div>
      <div class="rk-edge-note rk-edge-note-bad"><p><strong>Osobna pętla nie oznacza cieplejszej wody.</strong> Wszystkie sekcje tego samego rozdzielacza otrzymują zasadniczo ten sam parametr zasilania. Inną temperaturę zapewnia dopiero odrębny, prawidłowo zaprojektowany obieg.</p></div>
      <p class="rk-edge-copy">Rozmieszczenie stref trzeba połączyć z układem pozostałych obwodów. Pomaga w tym przewodnik <a href="https://projekt-ogrzewania.pl/jak-zaplanowac-rozmieszczenie-petli-grzewczych-w-ogrzewaniu-podlogowym/">jak zaplanować rozmieszczenie pętli grzewczych</a>.</p>
    </section>

    <section class="rk-edge-section" id="rk-edge-hydraulics">
      <span class="rk-edge-eyebrow">Gęstszy pas zmienia cały obwód</span>
      <h2 class="rk-edge-section-title">Długość pętli, przepływ i strata ciśnienia</h2>
      <p class="rk-edge-lead">Cieplnie poprawna strefa może być hydraulicznie niewykonalna. Po dodaniu metrów rury trzeba ponownie sprawdzić długość, wymagany przepływ, prędkość, opór pętli oraz punkt pracy pompy.</p>
      <div class="rk-edge-grid-4">
        <article class="rk-edge-card"><span class="rk-edge-card-number">Q</span><h3>Moc pętli</h3><p>Wymagana moc i projektowa różnica temperatur wyznaczają przepływ, którego nie dobiera się „na rotametr”.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">L</span><h3>Długość całkowita</h3><p>Liczy się pas grzewczy, strefa podstawowa, łuki i oba podejścia między rozdzielaczem a pomieszczeniem.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">dᵢ</span><h3>Światło rury</h3><p>Średnica wewnętrzna konkretnego produktu wpływa na prędkość i jednostkową stratę ciśnienia.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">Δp</span><h3>Droga krytyczna</h3><p>Pompa pokrywa opór najbardziej niekorzystnego obiegu przy sumarycznym przepływie pracujących pętli.</p></article>
      </div>
      <div class="rk-edge-formula">V̇ [l/h] ≈ Q [W] / (1,163 × ΔT [K])</div>
      <p class="rk-edge-copy">Przykładowo 800 W przy różnicy 5 K wymaga około 138 l/h. To dopiero przepływ cieplny. Do oceny obwodu potrzebna jest jeszcze charakterystyka rury, rozdzielacza, armatury i podejść. Dlatego nie istnieje jeden bezpieczny limit długości dla każdej pętli — wyjaśnia to poradnik o <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalnej długości pętli ogrzewania podłogowego</a>.</p>
      <div class="rk-edge-note"><p><strong>Praktyczny test:</strong> jeżeli dodanie strefy powoduje bardzo nierówne długości lub wyraźnie podnosi opór jednego obwodu, trzeba zmienić podział pętli, a nie liczyć na późniejsze przypadkowe dławienie.</p></div>
    </section>

    <section class="rk-edge-section rk-edge-section-soft" id="rk-edge-glazing">
      <span class="rk-edge-eyebrow">Lokalna moc przy niskim parametrze</span>
      <h2 class="rk-edge-section-title">Duże przeszklenia, pompa ciepła i strefa brzegowa</h2>
      <p class="rk-edge-lead">W instalacji z pompą ciepła strefa może pomóc uzyskać potrzebną lokalną moc bez podnoszenia temperatury całego systemu tak wysoko, jak wymagałby rzadki rozstaw. Nie daje jednak gwarantowanego procentu oszczędności.</p>
      <div class="rk-edge-grid-3">
        <article class="rk-edge-card"><span class="rk-edge-card-number">1</span><h3>Najpierw przegroda</h3><p>Sprawdź powierzchnię szyby, współczynnik przenikania, ramę, próg, montaż oraz temperaturę obliczeniową lokalizacji.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">2</span><h3>Potem podłoga</h3><p>Oblicz, czy aktywna powierzchnia może pokryć stratę przy ograniczeniu temperatury i oporze wykończenia.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">3</span><h3>Na końcu źródło</h3><p>Oceń wymaganą temperaturę zasilania, przepływ i rzeczywisty punkt pracy pompy dla warunków projektowych.</p></article>
      </div>
      <p class="rk-edge-copy">Jeżeli wymagana moc przy przeszkleniu wymusza przekroczenie dopuszczalnej temperatury podłogi, samo dalsze zagęszczanie rur nie rozwiąże problemu. Trzeba poprawić przegrodę, zwiększyć aktywną powierzchnię, ograniczyć opór okładziny albo przewidzieć dodatkowy emiter.</p>
      <p class="rk-edge-copy">Całościowe powiązanie temperatur, przepływów i źródła opisuje <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a>. Zobacz również, dlaczego <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalna temperatura zasilania podłogówki</a> nie jest nastawą roboczą.</p>
    </section>

    <section class="rk-edge-section" id="rk-edge-execution">
      <span class="rk-edge-eyebrow">Od rzutu do jastrychu</span>
      <h2 class="rk-edge-section-title">Jak wykonać i odebrać strefę brzegową?</h2>
      <p class="rk-edge-lead">Rzut musi przełożyć się na mierzalny układ rur, prawidłowe przejścia, stabilne mocowanie i dokumentację przed zakryciem.</p>
      <div class="rk-edge-steps">
        <article class="rk-edge-step"><div><h3>Przenieś granice z projektu</h3><p>Oznacz długość i szerokość pasa oraz powierzchnie wyłączone. Nie rozszerzaj strefy na budowie bez ponownego sprawdzenia pętli.</p></div></article>
        <article class="rk-edge-step"><div><h3>Sprawdź technologię układania</h3><p>Zachowaj odległości od przegród, minimalny promień gięcia, sposób mocowania i dopuszczony rozstaw konkretnego systemu.</p></div></article>
        <article class="rk-edge-step"><div><h3>Kontroluj rzeczywisty metraż</h3><p>Zapisuj długość pętli wraz z podejściami. Oznacz każdą sekcję przy rozdzielaczu zgodnie z dokumentacją.</p></div></article>
        <article class="rk-edge-step"><div><h3>Wykonaj próbę i dokumentację</h3><p>Przeprowadź próbę według przyjętej procedury, sfotografuj trasy i zachowaj protokół przed wykonaniem jastrychu.</p></div></article>
        <article class="rk-edge-step"><div><h3>Ustaw przepływy po uruchomieniu</h3><p>Rotametry ustaw według wartości projektowych. Obserwuj przepływ, różnicę temperatur i zachowanie pomieszczenia.</p></div></article>
      </div>
      <p class="rk-edge-copy">Procedurę kontroli przed zakryciem rozwija artykuł o <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbie szczelności ogrzewania podłogowego</a>. Rozmieszczenie zabudowy trzeba ustalić wcześniej — zobacz także, <a href="https://projekt-ogrzewania.pl/gdzie-nie-ukladac-ogrzewania-podlogowego/">gdzie nie układać ogrzewania podłogowego</a>.</p>
    </section>

    <section class="rk-edge-section rk-edge-section-soft" id="rk-edge-errors">
      <span class="rk-edge-eyebrow">Mity i skróty wykonawcze</span>
      <h2 class="rk-edge-section-title">Najczęstsze błędy przy strefach brzegowych</h2>
      <div class="rk-edge-grid-4">
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 1</span><h3>Pas przy każdej ścianie</h3><p>Obwodowe zagęszczenie zwiększa metraż, ale nie musi odpowiadać rzeczywistemu rozkładowi strat.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 2</span><h3>Pełny metr z automatu</h3><p>Szerokość przyjmuje się z przyzwyczajenia, bez sprawdzenia potrzebnej powierzchni i geometrii pomieszczenia.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 3</span><h3>35°C jako nastawa</h3><p>Górna granica temperatury powierzchni zostaje potraktowana jak docelowa temperatura codziennej pracy.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 4</span><h3>Ochrona przed pleśnią</h3><p>Strefa ma maskować problem wilgotności, wentylacji lub mostka zamiast usunięcia przyczyny w przegrodzie.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 5</span><h3>Ignorowanie okładziny</h3><p>Rozstaw dobiera się bez oporu panelu, drewna, podkładu, kleju i ich ograniczeń temperaturowych.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 6</span><h3>Cieplejsza osobna pętla</h3><p>Zakłada się różne zasilanie dwóch sekcji podłączonych do tej samej belki rozdzielacza.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 7</span><h3>Zbyt długa pętla</h3><p>Gęsty pas dopisuje się do obwodu bez ponownego obliczenia przepływu i straty ciśnienia.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">BŁĄD 8</span><h3>Podwójny narożnik</h3><p>Powierzchnia wspólna dwóch prostopadłych pasów zostaje dwukrotnie dodana do metrażu i mocy.</p></article>
      </div>
      <div class="rk-edge-note rk-edge-note-bad"><p><strong>Strefa brzegowa nie jest kurtyną powietrzną.</strong> Może ograniczyć odczucie chłodu przy przegrodzie, lecz nie tworzy pionowej bariery o działaniu identycznym jak grzejnik kanałowy lub nawiew.</p></div>
    </section>

    <section class="rk-edge-section" id="rk-edge-checklist">
      <span class="rk-edge-eyebrow">Kontrola przed betonowaniem</span>
      <h2 class="rk-edge-section-title">Checklista inwestora, projektanta i wykonawcy</h2>
      <p class="rk-edge-lead">Każda osoba kontroluje inny fragment procesu. Dzięki podziałowi odpowiedzialności rysunek, materiał i wykonanie można porównać przed etapem, którego nie da się łatwo cofnąć.</p>
      <div class="rk-edge-check-grid">
        <article class="rk-edge-check-card"><h3>Projektant</h3><ul><li>obciążenie każdego pomieszczenia,</li><li>powierzchnia aktywna i wyłączenia,</li><li>wymagana moc powierzchniowa,</li><li>temperatura powierzchni,</li><li>rozstaw, długości i przepływy,</li><li>opory i nastawy rozdzielacza.</li></ul></article>
        <article class="rk-edge-check-card"><h3>Wykonawca</h3><ul><li>zgodność trasy z rzutem,</li><li>właściwy wymiar i typ rury,</li><li>promienie gięcia i mocowanie,</li><li>ochrona przy dylatacjach,</li><li>opis sekcji rozdzielacza,</li><li>próba i dokumentacja zdjęciowa.</li></ul></article>
        <article class="rk-edge-check-card"><h3>Inwestor</h3><ul><li>ostateczny plan stałej zabudowy,</li><li>potwierdzona okładzina i podkład,</li><li>brak samowolnej zmiany rozstawu,</li><li>protokół próby przed wylewką,</li><li>zdjęcia z miarą i punktami odniesienia,</li><li>wartości nastaw po uruchomieniu.</li></ul></article>
      </div>
      <div class="rk-edge-note rk-edge-note-good"><p><strong>Warunek odbioru:</strong> zgadza się nie tylko liczba pętli. Z projektem muszą być zgodne granice stref, rozstaw, długości, podejścia, powierzchnie wyłączone i przypisanie obwodów do rozdzielacza.</p></div>
    </section>

    <section class="rk-edge-section rk-edge-final" id="rk-edge-final">
      <span class="rk-edge-eyebrow">Wniosek projektowy</span>
      <h2 class="rk-edge-section-title">Strefa brzegowa ma wynikać z obciążenia, nie z nawyku</h2>
      <p class="rk-edge-lead">Dobra strefa nie zaczyna się od decyzji „dajmy rurę co 10 cm”. Zaczyna się od pytania, ile ciepła traci konkretny fragment pomieszczenia, jaką powierzchnię można aktywnie wykorzystać i czy podłoga odda wymaganą moc bez przekroczenia swoich ograniczeń.</p>
      <div class="rk-edge-grid-3">
        <article class="rk-edge-card"><span class="rk-edge-card-number">1</span><h3>Nie zawsze potrzebna</h3><p>W dobrze izolowanym pomieszczeniu standardowy układ może w pełni pokrywać obciążenie.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">2</span><h3>Nie tylko rozstaw</h3><p>Moc zależy również od temperatur wody, konstrukcji podłogi, okładziny i przepływu.</p></article>
        <article class="rk-edge-card"><span class="rk-edge-card-number">3</span><h3>Nie bez hydrauliki</h3><p>Zagęszczenie zmienia długość, opór, liczbę pętli i wymagane nastawy rozdzielacza.</p></article>
      </div>
      <div class="rk-edge-cta">
        <div class="rk-edge-cta-title">Projekt zamienia gęsty pas rur w policzony element całej instalacji</div>
        <p>Otrzymasz rozstawy, podział i długości pętli, przepływy, opory oraz nastawy powiązane z obciążeniem pomieszczeń, okładziną i źródłem ciepła. Dzięki temu wykonawca wie nie tylko, gdzie zagęścić rury, ale również czy jest to potrzebne.</p>
        <a class="rk-edge-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów indywidualny projekt ogrzewania podłogowego</a>
        <small class="rk-edge-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-edge-section" id="rk-edge-sources">
      <span class="rk-edge-eyebrow">Podstawa techniczna</span>
      <h2 class="rk-edge-section-title">Źródła oficjalne i zakres odpowiedzialności</h2>
      <p class="rk-edge-lead">Poniższe dokumenty opisują metody wyznaczania mocy, projektowania, wymiarowania i wykonywania wbudowanych wodnych systemów płaszczyznowych.</p>
      <div class="rk-edge-source-grid">
        <article class="rk-edge-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 — wydajność grzewcza i chłodnicza</a><p>Oficjalna karta metod wyznaczania strumienia ciepła wodnych systemów płaszczyznowych.</p></article>
        <article class="rk-edge-source-card"><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 — projektowanie i wymiarowanie</a><p>Oficjalna karta części opisującej metody projektowania oraz wymiarowania systemów promiennikowych.</p></article>
        <article class="rk-edge-source-card"><a href="https://www.iso.org/standard/74685.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-5:2021 — wymagania instalacyjne</a><p>Oficjalna karta wymagań dla wykonywania systemów wbudowanych w podłogi, ściany i sufity.</p></article>
      </div>
      <div class="rk-edge-responsibility"><p><strong>Zakres poradnika:</strong> materiał pomaga zrozumieć decyzję o strefie brzegowej, lecz nie stanowi projektu, obliczenia mocy, instrukcji konkretnego systemu ani zgody na samowolną zmianę rozstawu. Wiążące są dokumenty przyjętego systemu, obliczenia budynku oraz warunki rzeczywistego wykonania.</p></div>
    </section>

    <section class="rk-edge-section rk-edge-section-soft" id="rk-edge-faq">
      <span class="rk-edge-eyebrow">Pytania inwestorów i wykonawców</span>
      <h2 class="rk-edge-section-title">FAQ — strefa brzegowa w ogrzewaniu podłogowym</h2>
      <div class="rk-edge-faq">
        <details><summary>Czy strefa brzegowa jest obowiązkowa przy każdej ścianie zewnętrznej?</summary><div class="rk-edge-faq-answer"><p>Nie. Jej potrzebę określa obciążenie cieplne pomieszczenia, parametry przegrody, dostępna powierzchnia podłogi, wymagana moc i komfort. W dobrze izolowanym pomieszczeniu standardowy rozstaw może wystarczyć.</p></div></details>
        <details><summary>Jaka powinna być szerokość strefy brzegowej?</summary><div class="rk-edge-faq-answer"><p>Szerokość wynika z potrzebnej powierzchni oddawania ciepła i geometrii przegrody. W praktyce analizuje się pas do około 1 m, ale nie oznacza to konieczności przyjmowania pełnego metra w każdym projekcie.</p></div></details>
        <details><summary>Jaki rozstaw rur stosuje się przy dużym przeszkleniu?</summary><div class="rk-edge-faq-answer"><p>Spotyka się 5, 10, 15 lub 20 cm, lecz właściwy rozstaw wynika z mocy, konstrukcji podłogi, temperatur wody, okładziny, temperatury powierzchni i hydrauliki. Sama wielkość okna nie wyznacza rozstawu.</p></div></details>
        <details><summary>Czy rozstaw 5 cm zawsze daje większą moc niż 10 cm?</summary><div class="rk-edge-faq-answer"><p>Zwykle zwiększa gęstość przewodu i wyrównuje temperaturę powierzchni, ale przy ograniczeniu temperatury podłogi lub wysokim oporze okładziny przyrost użytecznej mocy może być niewielki. Trzeba też sprawdzić promień gięcia i opory.</p></div></details>
        <details><summary>Czy temperatura powierzchni strefy może wynosić 35°C?</summary><div class="rk-edge-faq-answer"><p>Około 35°C traktuje się jako górną granicę dla odpowiednio wydzielonej strefy brzegowej, a nie zalecaną nastawę. Dokumentacja podłogi, kleju albo jastrychu może wprowadzać niższy limit.</p></div></details>
        <details><summary>Czy osobna pętla strefy ma wyższą temperaturę zasilania?</summary><div class="rk-edge-faq-answer"><p>Nie, jeżeli jest podłączona do tego samego rozdzielacza co pozostałe pętle. Otrzymuje zasadniczo tę samą temperaturę wody. Niezależnie można dobrać jej rozstaw, długość i przepływ. Inna temperatura wymaga osobnego obiegu.</p></div></details>
        <details><summary>Czy strefa brzegowa musi mieć osobną pętlę?</summary><div class="rk-edge-faq-answer"><p>Nie. Może być osobnym obwodem, zagęszczoną częścią pętli pomieszczenia albo zostać zastąpiona jednolitym gęstym rozstawem. Wybór zależy od mocy, długości, przepływu, oporu i geometrii.</p></div></details>
        <details><summary>Ile rury potrzeba na 1 m² strefy?</summary><div class="rk-edge-faq-answer"><p>Orientacyjnie około 20 m/m² przy 5 cm, 10 m/m² przy 10 cm, 6,7 m/m² przy 15 cm i 5 m/m² przy 20 cm. Należy doliczyć łuki, korekty oraz oba podejścia do rozdzielacza.</p></div></details>
        <details><summary>Czy strefa brzegowa chroni przed pleśnią?</summary><div class="rk-edge-faq-answer"><p>Nie należy jej traktować jako zabezpieczenia przed pleśnią. Kondensacja wymaga sprawdzenia temperatury przegrody, mostków cieplnych, wilgotności i wentylacji. Ogrzewanie nie zastępuje naprawy wad budynku.</p></div></details>
        <details><summary>Czy strefa brzegowa poprawia izolacyjność ściany?</summary><div class="rk-edge-faq-answer"><p>Nie. Nie zmienia współczynnika przenikania ciepła ani budowy przegrody. Dostarcza jedynie lokalnie więcej ciepła, co przy słabym detalu może także zwiększać przepływ energii na zewnątrz.</p></div></details>
        <details><summary>Czy strefa zawsze obniża rachunki za ogrzewanie?</summary><div class="rk-edge-faq-answer"><p>Nie ma takiej gwarancji. Może pomóc uzyskać lokalną moc przy niższej temperaturze całego obiegu, ale efekt zależy od strat budynku, źródła, regulacji, przepływów i sposobu użytkowania.</p></div></details>
        <details><summary>Czy strefa brzegowa poprawia pracę pompy ciepła?</summary><div class="rk-edge-faq-answer"><p>Może być pomocna, jeżeli pozwala pokryć miejscową stratę przy niższej temperaturze wody. O sprawności decyduje jednak cały punkt pracy pompy, a nie samo zagęszczenie rur.</p></div></details>
        <details><summary>Czy można ułożyć strefę pod stałą zabudową?</summary><div class="rk-edge-faq-answer"><p>Stałą zabudowę trzeba uwzględnić przy wyznaczaniu powierzchni aktywnej. Nie należy przypisywać mocy fragmentowi podłogi, którego emisję ograniczają meble, zabudowa lub warunki dokumentacji systemu.</p></div></details>
        <details><summary>Czym strefa brzegowa różni się od taśmy brzegowej?</summary><div class="rk-edge-faq-answer"><p>Strefa brzegowa jest częścią powierzchni grzewczej o podwyższonej lokalnej mocy. Taśma brzegowa oddziela jastrych od ścian i innych elementów pionowych, umożliwiając jego odkształcenia. Są to dwa różne rozwiązania.</p></div></details>
        <details><summary>Czy można dodać strefę na budowie bez zmiany projektu?</summary><div class="rk-edge-faq-answer"><p>Nie powinno się tego robić bez ponownej weryfikacji. Zmiana rozstawu wpływa na metraż, długość pętli, opór, przepływ, temperaturę powierzchni i często na podział sekcji rozdzielacza.</p></div></details>
        <details><summary>Czy analizator z artykułu zastępuje projekt?</summary><div class="rk-edge-faq-answer"><p>Nie. Narzędzie porządkuje przesłanki i braki danych. Nie oblicza obciążenia, mocy, temperatury powierzchni, przepływów, oporów ani nastaw rozdzielacza.</p></div></details>
      </div>
    </section>

    <section class="rk-edge-author" id="rk-edge-author">
      <span class="rk-edge-eyebrow">Opracowanie eksperckie</span>
      <h2 class="rk-edge-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-edge-author-layout">
        <aside class="rk-edge-author-side">
          <div class="rk-edge-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-edge-author-name">Robert Kucharski</div>
          <p class="rk-edge-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-edge-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-b8b906199/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-edge-author-main">
          <div class="rk-edge-author-quote">„Dobra strefa brzegowa nie zaczyna się od decyzji: dajmy rurę co 10 centymetrów. Zaczyna się od pytania, ile ciepła traci konkretny fragment pomieszczenia i czy podłoga może tę moc bezpiecznie oddać.”</div>
          <p>Robert Kucharski opracowuje projekty wodnego ogrzewania podłogowego, obliczenia obciążenia cieplnego i hydrauliki instalacji. W dokumentacji łączy konstrukcję podłogi, parametry źródła, rozstawy, długości pętli, przepływy i nastawy rozdzielacza.</p>
          <p>Przy analizie stref przy przeszkleniach ocenia nie tylko rozstaw rur, lecz również parametry przegrody, powierzchnię aktywną, opór wykończenia, temperaturę powierzchni i wpływ zagęszczenia na drogę hydraulicznie najbardziej niekorzystną. Treść poradnika została zweryfikowana pod kątem tej kolejności projektowej.</p>
          <p><a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego w serwisie Projekt-Ogrzewania.pl</a>.</p>
          <div class="rk-edge-author-facts">
            <div class="rk-edge-author-fact"><strong>Zakres</strong>ogrzewanie podłogowe, obciążenia cieplne i hydraulika instalacji</div>
            <div class="rk-edge-author-fact"><strong>Metoda</strong>obliczenia pomieszczeń, dokumentacja systemu i kontrola wykonania</div>
            <div class="rk-edge-author-fact"><strong>Aktualizacja</strong>stan techniczny materiału sprawdzony 18 września 2026 r.</div>
          </div>
          <div class="rk-edge-portals" aria-label="Portale autora">
            <a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a>
            <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a>
            <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>
          </div>
        </div>
      </div>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@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" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@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": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "strefa brzegowa w ogrzewaniu podłogowym",
        "obliczenia obciążenia cieplnego",
        "hydraulika instalacji grzewczych",
        "duże przeszklenia",
        "równoważenie hydrauliczne"
      ],
      "worksFor": [
        { "@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-b8b906199/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Strefa-brzegowa-w-ogrzewaniu-podlogowym.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Strefa-brzegowa-w-ogrzewaniu-podlogowym.webp",
      "width": 945,
      "height": 945,
      "caption": "Strefa brzegowa w ogrzewaniu podłogowym"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Strona główna",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Poradniki",
          "item": "https://projekt-ogrzewania.pl/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Strefa brzegowa w ogrzewaniu podłogowym",
          "item": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#webpage",
      "url": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/",
      "name": "Strefa brzegowa w ogrzewaniu podłogowym – kiedy jest potrzebna?",
      "description": "Techniczny poradnik o strefie brzegowej w podłogówce: zasadność, szerokość, rozstaw rur, temperatura powierzchni, pętle i hydraulika.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#breadcrumb" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#primaryimage" },
      "datePublished": "2026-01-02T08:09:34+00:00",
      "dateModified": "2026-09-18",
      "inLanguage": "pl-PL",
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#article" }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#article",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#webpage" },
      "headline": "Strefa brzegowa w ogrzewaniu podłogowym – kiedy jest potrzebna?",
      "description": "Praktyczny przewodnik projektowania strefy brzegowej z analizą obciążenia, szerokości pasa, rozstawu rur, temperatury powierzchni i hydrauliki pętli.",
      "image": { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#primaryimage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-01-02T08:09:34+00:00",
      "dateModified": "2026-09-18",
      "inLanguage": "pl-PL",
      "about": [
        "strefa brzegowa w ogrzewaniu podłogowym",
        "strefa obwodowa",
        "rozstaw rur przy przeszkleniu",
        "temperatura powierzchni podłogi",
        "hydraulika pętli ogrzewania podłogowego"
      ],
      "keywords": "strefa brzegowa w ogrzewaniu podłogowym, strefa obwodowa, rozstaw rur przy oknie, szerokość strefy brzegowej, duże przeszklenia, pętla ogrzewania podłogowego",
      "isAccessibleForFree": true,
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#analyzer" },
        { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#faq-schema" }
      ],
      "mentions": { "@id": "https://projekt-ogrzewania.pl/#floor-heating-design-service" }
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#analyzer",
      "name": "Analizator zasadności strefy brzegowej",
      "url": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#rk-edge-analyzer-section",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Narzędzie edukacyjne porządkujące przesłanki cieplne, powierzchnię aktywną, ograniczenia podłogi i hydraulikę przed decyzją o strefie brzegowej."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#howto",
      "name": "Jak zaprojektować i odebrać strefę brzegową ogrzewania podłogowego",
      "description": "Pięcioetapowa procedura od przeniesienia granic z projektu do ustawienia przepływów po uruchomieniu.",
      "totalTime": "PT30M",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Przenieś granice z projektu", "text": "Oznacz długość i szerokość strefy oraz wszystkie powierzchnie wyłączone." },
        { "@type": "HowToStep", "position": 2, "name": "Sprawdź technologię układania", "text": "Zweryfikuj odległości, promień gięcia, mocowanie i dopuszczony rozstaw systemu." },
        { "@type": "HowToStep", "position": 3, "name": "Kontroluj rzeczywisty metraż", "text": "Zapisz długość każdej pętli wraz z podejściami i oznacz sekcje rozdzielacza." },
        { "@type": "HowToStep", "position": 4, "name": "Wykonaj próbę i dokumentację", "text": "Przeprowadź próbę, sfotografuj trasy i zachowaj protokół przed wykonaniem jastrychu." },
        { "@type": "HowToStep", "position": 5, "name": "Ustaw przepływy", "text": "Po uruchomieniu ustaw rotametry według wartości projektowych i zweryfikuj pracę obwodów." }
      ]
    },
    {
      "@type": "Service",
      "@id": "https://projekt-ogrzewania.pl/#floor-heating-design-service",
      "name": "Indywidualny projekt instalacji ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "serviceType": "Projekt ogrzewania podłogowego z obliczeniami cieplnymi i hydraulicznymi"
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/#faq-schema",
      "mainEntity": [
        { "@type": "Question", "name": "Czy strefa brzegowa jest obowiązkowa przy każdej ścianie zewnętrznej?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Jej potrzebę określa obciążenie cieplne pomieszczenia, parametry przegrody, dostępna powierzchnia podłogi, wymagana moc i komfort. W dobrze izolowanym pomieszczeniu standardowy rozstaw może wystarczyć." } },
        { "@type": "Question", "name": "Jaka powinna być szerokość strefy brzegowej?", "acceptedAnswer": { "@type": "Answer", "text": "Szerokość wynika z potrzebnej powierzchni oddawania ciepła i geometrii przegrody. W praktyce analizuje się pas do około 1 m, ale nie oznacza to konieczności przyjmowania pełnego metra w każdym projekcie." } },
        { "@type": "Question", "name": "Jaki rozstaw rur stosuje się przy dużym przeszkleniu?", "acceptedAnswer": { "@type": "Answer", "text": "Spotyka się 5, 10, 15 lub 20 cm, lecz właściwy rozstaw wynika z mocy, konstrukcji podłogi, temperatur wody, okładziny, temperatury powierzchni i hydrauliki. Sama wielkość okna nie wyznacza rozstawu." } },
        { "@type": "Question", "name": "Czy rozstaw 5 cm zawsze daje większą moc niż 10 cm?", "acceptedAnswer": { "@type": "Answer", "text": "Zwykle zwiększa gęstość przewodu i wyrównuje temperaturę powierzchni, ale przy ograniczeniu temperatury podłogi lub wysokim oporze okładziny przyrost użytecznej mocy może być niewielki. Trzeba też sprawdzić promień gięcia i opory." } },
        { "@type": "Question", "name": "Czy temperatura powierzchni strefy może wynosić 35°C?", "acceptedAnswer": { "@type": "Answer", "text": "Około 35°C traktuje się jako górną granicę dla odpowiednio wydzielonej strefy brzegowej, a nie zalecaną nastawę. Dokumentacja podłogi, kleju albo jastrychu może wprowadzać niższy limit." } },
        { "@type": "Question", "name": "Czy osobna pętla strefy ma wyższą temperaturę zasilania?", "acceptedAnswer": { "@type": "Answer", "text": "Nie, jeżeli jest podłączona do tego samego rozdzielacza co pozostałe pętle. Otrzymuje zasadniczo tę samą temperaturę wody. Niezależnie można dobrać jej rozstaw, długość i przepływ. Inna temperatura wymaga osobnego obiegu." } },
        { "@type": "Question", "name": "Czy strefa brzegowa musi mieć osobną pętlę?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Może być osobnym obwodem, zagęszczoną częścią pętli pomieszczenia albo zostać zastąpiona jednolitym gęstym rozstawem. Wybór zależy od mocy, długości, przepływu, oporu i geometrii." } },
        { "@type": "Question", "name": "Ile rury potrzeba na 1 m² strefy?", "acceptedAnswer": { "@type": "Answer", "text": "Orientacyjnie około 20 m/m² przy 5 cm, 10 m/m² przy 10 cm, 6,7 m/m² przy 15 cm i 5 m/m² przy 20 cm. Należy doliczyć łuki, korekty oraz oba podejścia do rozdzielacza." } },
        { "@type": "Question", "name": "Czy strefa brzegowa chroni przed pleśnią?", "acceptedAnswer": { "@type": "Answer", "text": "Nie należy jej traktować jako zabezpieczenia przed pleśnią. Kondensacja wymaga sprawdzenia temperatury przegrody, mostków cieplnych, wilgotności i wentylacji. Ogrzewanie nie zastępuje naprawy wad budynku." } },
        { "@type": "Question", "name": "Czy strefa brzegowa poprawia izolacyjność ściany?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Nie zmienia współczynnika przenikania ciepła ani budowy przegrody. Dostarcza jedynie lokalnie więcej ciepła, co przy słabym detalu może także zwiększać przepływ energii na zewnątrz." } },
        { "@type": "Question", "name": "Czy strefa zawsze obniża rachunki za ogrzewanie?", "acceptedAnswer": { "@type": "Answer", "text": "Nie ma takiej gwarancji. Może pomóc uzyskać lokalną moc przy niższej temperaturze całego obiegu, ale efekt zależy od strat budynku, źródła, regulacji, przepływów i sposobu użytkowania." } },
        { "@type": "Question", "name": "Czy strefa brzegowa poprawia pracę pompy ciepła?", "acceptedAnswer": { "@type": "Answer", "text": "Może być pomocna, jeżeli pozwala pokryć miejscową stratę przy niższej temperaturze wody. O sprawności decyduje jednak cały punkt pracy pompy, a nie samo zagęszczenie rur." } },
        { "@type": "Question", "name": "Czy można ułożyć strefę pod stałą zabudową?", "acceptedAnswer": { "@type": "Answer", "text": "Stałą zabudowę trzeba uwzględnić przy wyznaczaniu powierzchni aktywnej. Nie należy przypisywać mocy fragmentowi podłogi, którego emisję ograniczają meble, zabudowa lub warunki dokumentacji systemu." } },
        { "@type": "Question", "name": "Czym strefa brzegowa różni się od taśmy brzegowej?", "acceptedAnswer": { "@type": "Answer", "text": "Strefa brzegowa jest częścią powierzchni grzewczej o podwyższonej lokalnej mocy. Taśma brzegowa oddziela jastrych od ścian i innych elementów pionowych, umożliwiając jego odkształcenia. Są to dwa różne rozwiązania." } },
        { "@type": "Question", "name": "Czy można dodać strefę na budowie bez zmiany projektu?", "acceptedAnswer": { "@type": "Answer", "text": "Nie powinno się tego robić bez ponownej weryfikacji. Zmiana rozstawu wpływa na metraż, długość pętli, opór, przepływ, temperaturę powierzchni i często na podział sekcji rozdzielacza." } },
        { "@type": "Question", "name": "Czy analizator z artykułu zastępuje projekt?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Narzędzie porządkuje przesłanki i braki danych. Nie oblicza obciążenia, mocy, temperatury powierzchni, przepływów, oporów ani nastaw rozdzielacza." } }
      ]
    }
  ]
}
</script>

<script>
(function () {
  "use strict";

  var guide = document.getElementById("rk-edge-guide");
  if (!guide) {
    return;
  }

  var visualData = {
    terms: {
      label: "Pojęcia",
      heading: "Trzy elementy o różnych zadaniach",
      summary: "Strefa podstawowa ogrzewa główną część pomieszczenia, strefa brzegowa zwiększa lokalną moc, a taśma brzegowa oddziela jastrych od elementów pionowych.",
      cards: [
        { title: "Strefa podstawowa", text: "Główna aktywna powierzchnia dobrana do obciążenia pomieszczenia." },
        { title: "Strefa brzegowa", text: "Wydzielony pas o większej lokalnej mocy, jeżeli wykaże ją projekt." },
        { title: "Taśma brzegowa", text: "Element konstrukcyjny jastrychu, a nie część układu grzewczego." }
      ],
      sequence: ["1. Obciążenie pomieszczenia", "2. Aktywna powierzchnia", "3. Moc i temperatura podłogi", "4. Rozstaw i hydraulika"]
    },
    decision: {
      label: "Decyzja projektowa",
      heading: "Strefę analizujemy tam, gdzie rośnie lokalne obciążenie",
      summary: "Duże przeszklenie jest przesłanką do sprawdzenia, ale nie gotową odpowiedzią. Najpierw trzeba ustalić, czy standardowa powierzchnia pokrywa straty.",
      cards: [
        { title: "Przegroda", text: "Parametry szyby, ramy, progu, ściany oraz temperatura zewnętrzna." },
        { title: "Podłoga", text: "Dostępna powierzchnia, konstrukcja, okładzina i dopuszczalna temperatura." },
        { title: "Komfort", text: "Asymetria promieniowania i odczucie chłodu przy przegrodzie." }
      ],
      sequence: ["1. Policz straty", "2. Sprawdź zwykły układ", "3. Oceń lokalny pas", "4. Potwierdź hydraulikę"]
    },
    variants: {
      label: "Warianty wykonawcze",
      heading: "Trzy strategie zamiast jednej recepty",
      summary: "Strefa może być osobnym obwodem, zagęszczoną częścią pętli albo w ogóle nie występować, gdy całe pomieszczenie ma jednakowy rozstaw.",
      cards: [
        { title: "Osobna pętla", text: "Niezależny przepływ i łatwiejsze równoważenie, lecz nie wyższa temperatura z tej samej belki." },
        { title: "Część pętli", text: "Zasilanie przechodzi najpierw przez gęsty pas, a później przez część podstawową." },
        { title: "Rozstaw jednolity", text: "Prostszy wariant, jeżeli obliczenia wymagają tej samej gęstości w całym pokoju." }
      ],
      sequence: ["1. Wybierz geometrię", "2. Policz metraż", "3. Podziel pętle", "4. Ustal przepływy"]
    },
    limits: {
      label: "Ograniczenia",
      heading: "Większej mocy nie uzyskuje się bez końca",
      summary: "Po zagęszczeniu rur granicą może stać się temperatura powierzchni, opór okładziny, długość obwodu albo dostępny przepływ.",
      cards: [
        { title: "Temperatura powierzchni", text: "Limit jest warunkiem bezpieczeństwa i komfortu, a nie docelową nastawą." },
        { title: "Opór podłogi", text: "Drewno, panel, podkład i klej mogą ograniczyć emisję bardziej niż sam rozstaw." },
        { title: "Hydraulika", text: "Dodatkowe metry zwiększają opór i mogą wymusić inny podział obwodów." }
      ],
      sequence: ["1. Limit okładziny", "2. Temperatura podłogi", "3. Długość i opór", "4. Punkt pracy źródła"]
    }
  };

  var visualButtons = guide.querySelectorAll("[data-rk-edge-visual]");
  var visualLabel = document.getElementById("rk-edge-visual-label");
  var visualHeading = document.getElementById("rk-edge-visual-heading");
  var visualSummary = document.getElementById("rk-edge-visual-summary");
  var moduleGrid = document.getElementById("rk-edge-module-grid");
  var sequence = document.getElementById("rk-edge-sequence");

  function showVisual(key) {
    var data = visualData[key];
    if (!data) {
      return;
    }
    visualLabel.textContent = data.label;
    visualHeading.textContent = data.heading;
    visualSummary.textContent = data.summary;
    moduleGrid.textContent = "";
    data.cards.forEach(function (cardData) {
      var card = document.createElement("div");
      var title = document.createElement("strong");
      var copy = document.createElement("span");
      card.className = "rk-edge-module-card";
      title.textContent = cardData.title;
      copy.textContent = cardData.text;
      card.appendChild(title);
      card.appendChild(copy);
      moduleGrid.appendChild(card);
    });
    sequence.textContent = "";
    data.sequence.forEach(function (stepText) {
      var step = document.createElement("div");
      step.className = "rk-edge-sequence-step";
      step.textContent = stepText;
      sequence.appendChild(step);
    });
    visualButtons.forEach(function (button) {
      var active = button.getAttribute("data-rk-edge-visual") === key;
      button.setAttribute("aria-selected", active ? "true" : "false");
    });
  }

  visualButtons.forEach(function (button) {
    button.addEventListener("click", function () {
      showVisual(button.getAttribute("data-rk-edge-visual"));
    });
  });

  function fieldValue(id) {
    var field = document.getElementById(id);
    if (!field) {
      return "unknown";
    }
    return field.value;
  }

  function renderList(elementId, items, emptyText) {
    var list = document.getElementById(elementId);
    list.textContent = "";
    if (items.length === 0) {
      var emptyItem = document.createElement("li");
      emptyItem.textContent = emptyText;
      list.appendChild(emptyItem);
      return;
    }
    items.forEach(function (itemText) {
      var item = document.createElement("li");
      item.textContent = itemText;
      list.appendChild(item);
    });
  }

  function analyzeEdgeZone() {
    var ok = [];
    var check = [];
    var stop = [];
    var needSignal = false;
    var lowNeedSignal = false;

    var load = fieldValue("rk-edge-load");
    var envelope = fieldValue("rk-edge-envelope");
    var capacity = fieldValue("rk-edge-standard-capacity");
    var comfort = fieldValue("rk-edge-comfort");
    var activeArea = fieldValue("rk-edge-active-area");
    var covering = fieldValue("rk-edge-covering");
    var surface = fieldValue("rk-edge-surface");
    var furniture = fieldValue("rk-edge-furniture");
    var loop = fieldValue("rk-edge-loop");
    var hydraulic = fieldValue("rk-edge-hydraulic");
    var variant = fieldValue("rk-edge-variant");
    var supply = fieldValue("rk-edge-supply");

    if (load === "known") {
      ok.push("Obciążenie cieplne pomieszczenia zostało obliczone.");
    } else {
      if (load === "estimate") {
        check.push("Wskaźnik W/m² całego domu nie zastępuje obciążenia konkretnego pomieszczenia.");
      } else {
        check.push("Oblicz obciążenie cieplne pomieszczenia przed doborem strefy.");
      }
    }

    if (envelope === "normal") {
      ok.push("Nie wskazano przegrody o wyraźnie podwyższonym lokalnym obciążeniu.");
      lowNeedSignal = true;
    } else {
      if (envelope === "large") {
        ok.push("Duże przeszklenie lub drzwi zewnętrzne uzasadniają analizę lokalnego pasa.");
        needSignal = true;
      } else {
        if (envelope === "weak") {
          needSignal = true;
          check.push("Gorszą przegrodę lub mostek trzeba ocenić budowlano; ogrzewanie nie zastępuje naprawy detalu.");
        } else {
          check.push("Ustal parametry przegrody przy analizowanym pasie.");
        }
      }
    }

    if (capacity === "enough") {
      ok.push("Standardowy układ pokrywa obciążenie pomieszczenia.");
      lowNeedSignal = true;
    } else {
      if (capacity === "borderline") {
        needSignal = true;
        check.push("Standardowy układ pracuje blisko wymaganej mocy — porównaj wariant strefy.");
      } else {
        if (capacity === "insufficient") {
          needSignal = true;
          check.push("Standardowy układ nie pokrywa obciążenia; trzeba przeanalizować podłogę, przegrodę lub dodatkowy emiter.");
        } else {
          check.push("Sprawdź moc standardowego układu przed założeniem gęstszego pasa.");
        }
      }
    }

    if (comfort === "low") {
      ok.push("Nie wskazano istotnego ryzyka dyskomfortu przy przegrodzie.");
    } else {
      if (comfort === "possible") {
        needSignal = true;
        check.push("Oceń asymetrię promieniowania i temperaturę wewnętrznej powierzchni przeszklenia.");
      } else {
        if (comfort === "known") {
          needSignal = true;
          ok.push("W istniejącym budynku potwierdzono dyskomfort przy przegrodzie.");
        } else {
          check.push("Oceń ryzyko dyskomfortu przy przeszkleniu.");
        }
      }
    }

    if (activeArea === "available") {
      ok.push("Przy przegrodzie jest dostępna aktywna powierzchnia.");
    } else {
      if (activeArea === "limited") {
        check.push("Ograniczoną powierzchnię trzeba porównać z wymaganą mocą jednostkową.");
      } else {
        if (activeArea === "blocked") {
          stop.push("Brak aktywnego pasa przy przegrodzie blokuje proste wydzielenie strefy.");
        } else {
          check.push("Wyznacz aktywną powierzchnię po odjęciu stałej zabudowy.");
        }
      }
    }

    if (covering === "low") {
      ok.push("Potwierdzono niski opór cieplny wykończenia.");
    } else {
      if (covering === "medium") {
        check.push("Uwzględnij umiarkowany opór wykończenia w obliczeniu mocy.");
      } else {
        if (covering === "high") {
          check.push("Wysoki opór podłogi może ograniczyć korzyść z zagęszczenia rur.");
        } else {
          check.push("Ustal łączny opór wszystkich warstw nad rurą.");
        }
      }
    }

    if (surface === "verified") {
      ok.push("Temperatura powierzchni została sprawdzona wraz z limitem okładziny.");
    } else {
      if (surface === "limit") {
        stop.push("Wymagana moc przekracza dopuszczalną temperaturę powierzchni — samo zagęszczenie nie wystarczy.");
      } else {
        check.push("Oblicz temperaturę powierzchni dla analizowanego wariantu.");
      }
    }

    if (furniture === "stable") {
      ok.push("Plan stałej zabudowy został uwzględniony.");
    } else {
      if (furniture === "conflict") {
        stop.push("Planowana strefa koliduje ze stałą zabudową lub powierzchnią wyłączoną.");
      } else {
        check.push("Ustal ostateczne położenie stałej zabudowy.");
      }
    }

    if (loop === "verified") {
      ok.push("Długość pętli po zagęszczeniu została sprawdzona.");
    } else {
      if (loop === "too-long") {
        stop.push("Pętla po zagęszczeniu jest zbyt długa dla przyjętych założeń projektu.");
      } else {
        check.push("Policz całkowitą długość wraz z łukami i podejściami.");
      }
    }

    if (hydraulic === "verified") {
      ok.push("Przepływ i strata ciśnienia zostały zweryfikowane.");
    } else {
      if (hydraulic === "problem") {
        stop.push("Wykryto problem z oporem lub równoważeniem — zmień podział pętli albo geometrię.");
      } else {
        check.push("Oblicz przepływ i stratę ciśnienia projektowanej pętli.");
      }
    }

    if (variant === "integrated") {
      ok.push("Rozważany jest zagęszczony fragment pętli pomieszczenia.");
    } else {
      if (variant === "separate") {
        ok.push("Rozważana jest osobna sekcja rozdzielacza dla strefy.");
        if (hydraulic !== "verified") {
          check.push("Osobna pętla wymaga własnego przepływu i sprawdzenia oporu.");
        }
      } else {
        if (variant === "uniform") {
          ok.push("Rozważany jest jednakowy gęsty rozstaw w całym pomieszczeniu.");
        } else {
          check.push("Wybierz wariant dopiero po sprawdzeniu mocy i hydrauliki.");
        }
      }
    }

    if (supply === "same") {
      ok.push("Prawidłowo przyjęto wspólną temperaturę dla pętli jednego rozdzielacza.");
    } else {
      if (supply === "false-hotter") {
        stop.push("Osobna pętla na tej samej belce nie otrzyma samoczynnie wyższej temperatury zasilania.");
      } else {
        if (supply === "separate-circuit") {
          check.push("Odrębny obieg temperaturowy wymaga osobnej analizy hydraulicznej i regulacyjnej.");
        } else {
          check.push("Ustal projektową temperaturę zasilania rozdzielacza.");
        }
      }
    }

    var result = document.getElementById("rk-edge-result");
    var status = document.getElementById("rk-edge-result-status");
    var intro = document.getElementById("rk-edge-result-intro");
    result.classList.remove("is-good");
    result.classList.remove("is-stop");

    if (stop.length > 0) {
      result.classList.add("is-stop");
      status.textContent = "Nie zatwierdzaj układu przed usunięciem warunków krytycznych";
      intro.textContent = "Co najmniej jedna odpowiedź wskazuje ograniczenie, którego nie rozwiązuje samo zagęszczenie rur.";
    } else {
      if (needSignal) {
        status.textContent = "Strefę warto sprawdzić w obliczeniach pomieszczenia";
        intro.textContent = "Występują przesłanki do analizy lokalnego pasa, lecz formularz nie wyznacza jego szerokości, rozstawu ani sposobu zasilania.";
      } else {
        if (lowNeedSignal) {
          result.classList.add("is-good");
          status.textContent = "Brak podstaw do automatycznego wydzielania strefy";
          intro.textContent = "Podane dane nie wskazują jednoznacznej potrzeby gęstszego pasa. Ostateczny wariant nadal powinien potwierdzić projekt.";
        } else {
          status.textContent = "Ocena nie jest jeszcze kompletna";
          intro.textContent = "Uzupełnij obciążenie, możliwości podłogi i hydraulikę, zanim wybierzesz rozstaw lub osobną pętlę.";
        }
      }
    }

    renderList("rk-edge-ok-list", ok, "Brak potwierdzonych warunków.");
    renderList("rk-edge-check-list", check, "Brak dodatkowych pozycji na tej liście.");
    renderList("rk-edge-stop-list", stop, "Nie wskazano warunku krytycznego.");
  }

  var runButton = document.getElementById("rk-edge-run");
  var resetButton = document.getElementById("rk-edge-reset");

  if (runButton) {
    runButton.addEventListener("click", analyzeEdgeZone);
  }

  if (resetButton) {
    resetButton.addEventListener("click", function () {
      var fields = guide.querySelectorAll(".rk-edge-analyzer select");
      fields.forEach(function (field) {
        field.selectedIndex = 0;
      });
      var result = document.getElementById("rk-edge-result");
      result.classList.remove("is-good");
      result.classList.remove("is-stop");
      document.getElementById("rk-edge-result-status").textContent = "Uzupełnij dane pomieszczenia";
      document.getElementById("rk-edge-result-intro").textContent = "Wynik oddzieli przesłanki potwierdzone, dane brakujące i warunki blokujące prostą decyzję.";
      renderList("rk-edge-ok-list", [], "Jeszcze brak ocenionych danych.");
      renderList("rk-edge-check-list", [], "Uzupełnij formularz na podstawie projektu.");
      renderList("rk-edge-stop-list", [], "Brak oceny nie oznacza akceptacji rozwiązania.");
    });
  }

  showVisual("terms");
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">Strefa brzegowa w ogrzewaniu podłogowym – kiedy jest potrzebna?</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>
