<?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 automatyka c.o. - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/automatyka-c-o/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/automatyka-c-o/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Sun, 02 Aug 2026 10:59:24 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa automatyka c.o. - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/automatyka-c-o/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Krzywa grzewcza w ogrzewaniu podłogowym.</title>
		<link>https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 06 Jan 2026 10:25:59 +0000</pubDate>
				<category><![CDATA[Automatyka grzewcza]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Kocioł gazowy]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Porady techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Regulacja instalacji]]></category>
		<category><![CDATA[Termomodernizacja]]></category>
		<category><![CDATA[automatyka c.o.]]></category>
		<category><![CDATA[bezwładność cieplna]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[krzywa grzewcza]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[regulacja ogrzewania]]></category>
		<category><![CDATA[sterowanie pogodowe]]></category>
		<category><![CDATA[temperatura zasilania]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3069</guid>

					<description><![CDATA[<p>Krzywa grzewcza w ogrzewaniu podłogowym to temat, który decyduje nie tylko o komforcie cieplnym, ale też o realnych kosztach eksploatacji domu. W artykule pokazujemy, dlaczego to właśnie algorytm sterujący, a nie sama instalacja, jest kluczem do efektywnego ogrzewania. Krok po kroku wyjaśniamy, jak działa krzywa grzewcza, jak dobrać jej parametry do rodzaju budynku oraz jak ją prawidłowo stroić w praktyce, aby uniknąć przegrzewania, niedogrzania i niepotrzebnych strat energii.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">Krzywa grzewcza w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-hero-dark: #0f172a;
    --rk-hero-blue: #0284c7;
    --rk-hero-bg: #f8fafc;
    --rk-hero-border: #e2e8f0;
    --rk-hero-text: #475569;
    --rk-hero-red: #ef4444;
    --rk-hero-green: #10b981;
}

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

/* Sekcja Główna - Hook */
.rk-hero-hook {
    padding: 40px 50px 30px;
    background: linear-gradient(135deg, var(--rk-hero-dark) 0%, #1e293b 100%);
    color: #ffffff;
}

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

.rk-hero-hook h2 {
    font-size: 32px;
    font-weight: 900;
    margin: 0 0 20px 0;
    line-height: 1.25;
    color: #ffffff;
}

.rk-hero-hook h2 span {
    color: #38bdf8;
}

.rk-hook-text {
    font-size: 17px;
    line-height: 1.6;
    color: #cbd5e1;
    margin: 0;
    max-width: 800px;
}

.rk-hook-text strong {
    color: #ffffff;
}

/* Szybka Odpowiedź (Direct Answer Box) */
.rk-quick-answer {
    margin: -20px 50px 30px 50px;
    background: #ffffff;
    border: 2px solid var(--rk-hero-blue);
    border-radius: 12px;
    padding: 25px;
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.15);
    position: relative;
    z-index: 10;
}

.rk-qa-label {
    position: absolute;
    top: -12px;
    left: 20px;
    background: var(--rk-hero-blue);
    color: #ffffff;
    padding: 4px 12px;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.rk-qa-content {
    font-size: 16px;
    color: var(--rk-hero-dark);
    line-height: 1.6;
    margin: 0;
    font-weight: 600;
}

.rk-qa-content a {
    color: var(--rk-hero-blue);
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Mapa Narzędzi (Interaktywna zawartość) */
.rk-tools-roadmap {
    padding: 10px 50px 40px;
}

.rk-roadmap-title {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-hero-dark);
    margin: 0 0 20px 0;
}

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

/* Przyciski interaktywne */
.rk-tool-btn {
    display: flex;
    align-items: center;
    gap: 15px;
    background: var(--rk-hero-bg);
    border: 1px solid var(--rk-hero-border);
    padding: 15px;
    border-radius: 12px;
    cursor: pointer;
    text-align: left;
    width: 100%;
}

.rk-tool-btn.active {
    background: #e0f2fe;
    border-color: var(--rk-hero-blue);
}

.rk-tool-icon {
    width: 44px;
    height: 44px;
    background: #ffffff;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-hero-blue);
    flex-shrink: 0;
    border: 1px solid var(--rk-hero-border);
}

.rk-tool-btn.active .rk-tool-icon {
    background: var(--rk-hero-blue);
    color: #ffffff;
    border-color: var(--rk-hero-blue);
}

.rk-tool-info h4 {
    margin: 0 0 4px 0;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-hero-dark);
}

.rk-tool-info p {
    margin: 0;
    font-size: 13px;
    color: var(--rk-hero-text);
}

/* Dynamiczny panel podglądu */
.rk-tool-preview {
    background: var(--rk-hero-dark);
    border-radius: 12px;
    padding: 25px;
    color: #ffffff;
    display: none; /* Zmiana stanu bez animacji */
}

.rk-tool-preview.active {
    display: block;
}

.rk-preview-badge {
    color: #94a3b8;
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 10px;
    display: block;
}

.rk-preview-title {
    font-size: 18px;
    font-weight: 800;
    color: #ffffff;
    margin: 0 0 10px 0;
}

.rk-preview-desc {
    font-size: 14px;
    color: #cbd5e1;
    line-height: 1.6;
    margin: 0;
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-hero-hook { padding: 30px 20px 40px; }
    .rk-hero-hook h2 { font-size: 24px; }
    .rk-quick-answer { margin: -20px 20px 30px 20px; padding: 20px; }
    .rk-tools-roadmap { padding: 10px 20px 30px; }
    .rk-roadmap-grid { grid-template-columns: 1fr; gap: 15px; } /* Układ pionowy na telefonach */
    .rk-tool-btn { padding: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Krzywa grzewcza w ogrzewaniu podłogowym – Wprowadzenie i Szybka Odpowiedź",
    "description": "Definicja i fundamenty działania krzywej grzewczej. Jak niewłaściwa kalibracja sterownika pogodowego podnosi rachunki i niszczy pompę ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-wstep",
    "name": "Wpływ braku kalibracji krzywej na koszty eksploatacji",
    "description": "Dane z ponad 1000 analizowanych schematów hydraulicznych obrazujące finansowe i sprzętowe skutki błędnej konfiguracji parametru krzywej grzewczej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "krzywa grzewcza w ogrzewaniu podłogowym",
      "koszty eksploatacji pompy ciepła",
      "współczynnik efektywności źródła ciepła cop",
      "taktowanie sprężarki pompy ciepła",
      "optymalna temperatura ogrzewania podłogowego"
    ],
    "measurementTechnique": "Szacunkowa analiza strat energii (wzrost zużycia rzędu 20 do 35 procent) wynikających ze stosowania przewymiarowanych krzywych grzewczych w nowoczesnych domach.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Brak kalibracji podnosi koszty eksploatacji źródła ciepła o 20 do 35% rocznie.",
        "Zbyt wysoka temperatura zasilania doprowadza do groźnego zjawiska taktowania sprężarki."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-wstep-roadmap",
    "name": "Nawigator Narzędzi Interaktywnych",
    "description": "Moduł zapowiadający i opisujący funkcje inżynieryjnych kalkulatorów oraz symulatorów dostępnych w dalszej części publikacji.",
    "applicationCategory": "ReferenceApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-hero-container">
    
    <!-- Hook (Mocne Otwarcie) -->
    <div class="rk-hero-hook">
        <div class="rk-hook-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Problem Inwestora
        </div>
        <h2>Jeden parametr, który decyduje o <span>życiu Twojej pompy ciepła</span></h2>
        <p class="rk-hook-text">
            Przez ponad 20 lat pracy jako specjalista układów hydraulicznych przeanalizowałem ponad 1000 błędnych schematów. Widziałem setki rachunków przewymiarowanych o <strong>20 do 35% rocznie</strong> oraz sprężarki uszkodzone przez tak zwane taktowanie. Powód był niemal zawsze ten sam: kompletny brak kalibracji głównego parametru automatyki.
        </p>
    </div>

    <!-- Szybka Odpowiedź -->
    <div class="rk-quick-answer">
        <div class="rk-qa-label">Szybka Odpowiedź</div>
        <p class="rk-qa-content">
            <strong>Krzywa grzewcza w ogrzewaniu podłogowym</strong> to zależność matematyczna określająca temperaturę wody zasilającej pętle grzewcze w funkcji temperatury na zewnątrz. Jej zadaniem jest płynne dopasowanie mocy instalacji do bieżących strat ciepła, co pozwala utrzymać <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/">optymalną i stałą temperaturę wewnętrzną</a> (na poziomie 20 do 22°C) przy najwyższym możliwym współczynniku COP.
        </p>
    </div>

    <!-- Zapowiedź Interaktywnych Narzędzi -->
    <div class="rk-tools-roadmap">
        <h3 class="rk-roadmap-title">Co znajdziesz w dalszej części poradnika?</h3>
        
        <div class="rk-roadmap-grid">
            
            <!-- Lista przycisków -->
            <div class="rk-roadmap-menu">
                <button class="rk-tool-btn active" data-preview="prev-calc" type="button">
                    <div class="rk-tool-icon">
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="8" y1="6" x2="16" y2="6"></line><line x1="16" y1="14" x2="16.01" y2="14"></line><line x1="12" y1="14" x2="12.01" y2="14"></line><line x1="8" y1="14" x2="8.01" y2="14"></line><line x1="16" y1="18" x2="16.01" y2="18"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="8" y1="18" x2="8.01" y2="18"></line></svg>
                    </div>
                    <div class="rk-tool-info">
                        <h4>Inżynieryjny Kalkulator OZC</h4>
                        <p>Oblicz przepływy krok po kroku</p>
                    </div>
                </button>

                <button class="rk-tool-btn" data-preview="prev-graph" type="button" style="margin-top: 10px;">
                    <div class="rk-tool-icon">
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3v18h18"></path><path d="m19 9-5 5-4-4-3 3"></path></svg>
                    </div>
                    <div class="rk-tool-info">
                        <h4>Interaktywny Wykres Live</h4>
                        <p>Zabawa parametrami sterownika</p>
                    </div>
                </button>

                <button class="rk-tool-btn" data-preview="prev-scan" type="button" style="margin-top: 10px;">
                    <div class="rk-tool-icon">
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                    </div>
                    <div class="rk-tool-info">
                        <h4>Skaner Błędów Instalacji</h4>
                        <p>Moduł diagnostyki problemów</p>
                    </div>
                </button>
            </div>

            <!-- Panele podglądu -->
            <div class="rk-roadmap-previews">
                
                <div class="rk-tool-preview active" id="prev-calc">
                    <span class="rk-preview-badge">Zamiast suchej teorii</span>
                    <h4 class="rk-preview-title">Aplikacja: Kalkulator Parametrów</h4>
                    <p class="rk-preview-desc">Zapomnij o skomplikowanych wzorach matematycznych. W dalszej części artykułu użyjesz prostych suwaków, aby wyliczyć dokładną temperaturę zasilania oraz zapotrzebowanie na przepływ litrów wody dla Twojego konkretnego metrażu domu.</p>
                </div>

                <div class="rk-tool-preview" id="prev-graph">
                    <span class="rk-preview-badge">Zrozumienie przez praktykę</span>
                    <h4 class="rk-preview-title">Aplikacja: Wykres Czasu Rzeczywistego</h4>
                    <p class="rk-preview-desc">Krzywa grzewcza bywa niezrozumiała. Dlatego przygotowałem symulator graficzny. Przesuwając suwaki &#8222;Nachylenia&#8221; oraz &#8222;Przesunięcia&#8221;, na własne oczy zobaczysz, jak zmienia się stromość wykresu na siatce temperatur zewnętrznych.</p>
                </div>

                <div class="rk-tool-preview" id="prev-scan">
                    <span class="rk-preview-badge">Ratunek przed awarią</span>
                    <h4 class="rk-preview-title">Skaner Diagnostyczny</h4>
                    <p class="rk-preview-desc">Masz problem z <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/">kosztami ogrzewania domu</a> lub zimnymi strefami? Wykorzystaj przygotowany panel rozwiązywania problemów, który zdiagnozuje m.in. zły montaż czujnika czy blokowanie rotametrów.</p>
                </div>

            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var roadBtns = document.querySelectorAll('.rk-tool-btn');
    var roadPreviews = document.querySelectorAll('.rk-tool-preview');

    for (var i = 0; i < roadBtns.length; i++) {
        roadBtns[i].addEventListener('click', function() {
            var targetId = this.getAttribute('data-preview');
            
            // Błyskawiczne czyszczenie klas bez animacji
            for (var j = 0; j < roadBtns.length; j++) {
                roadBtns[j].classList.remove('active');
            }
            for (var k = 0; k < roadPreviews.length; k++) {
                roadPreviews[k].classList.remove('active');
            }
            
            // Błyskawiczne przypisanie nowych klas
            this.classList.add('active');
            var targetPanel = document.getElementById(targetId);
            if (targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    }
});
</script>



<style>
:root {
    --rk-intro-dark: #0f172a;
    --rk-intro-blue: #0284c7;
    --rk-intro-blue-light: #e0f2fe;
    --rk-intro-bg: #f8fafc;
    --rk-intro-surface: #ffffff;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #475569;
    --rk-intro-green: #10b981;
    --rk-intro-red: #ef4444;
}

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

/* Nagłówek i Treść */
.rk-intro-header {
    padding: 40px 50px 30px;
    background: linear-gradient(to right, #ffffff, var(--rk-intro-bg));
    border-bottom: 1px solid var(--rk-intro-border);
}

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

.rk-intro-header h3 {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-intro-blue);
    margin: 0 0 15px 0;
}

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

.rk-intro-header p:last-child {
    margin-bottom: 0;
}

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

.rk-highlight-box {
    background: #f1f5f9;
    border-left: 4px solid var(--rk-intro-blue);
    padding: 15px 20px;
    border-radius: 0 8px 8px 0;
    font-weight: 600;
    color: var(--rk-intro-dark);
    margin: 20px 0;
}

/* Moduł Interaktywny: Wykres i Kalkulator */
.rk-intro-interactive {
    display: grid;
    grid-template-columns: 1fr 1fr;
    background: var(--rk-intro-dark);
}

/* Sekcja Wykresu */
.rk-chart-section {
    padding: 40px 50px;
    border-right: 1px solid rgba(255, 255, 255, 0.1);
}

.rk-toggle-chart {
    display: flex;
    background: rgba(255, 255, 255, 0.1);
    border-radius: 999px;
    padding: 4px;
    margin-bottom: 25px;
}

.rk-tgl-btn {
    flex: 1;
    background: transparent;
    border: none;
    padding: 10px 15px;
    color: #94a3b8;
    font-size: 13px;
    font-weight: 700;
    border-radius: 999px;
    cursor: pointer;
    transition: all 0.3s;
}

.rk-tgl-btn.active {
    background: var(--rk-intro-blue);
    color: #ffffff;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.4);
}

.rk-svg-wrapper {
    position: relative;
    width: 100%;
    height: 220px;
}

.rk-chart-axis {
    stroke: rgba(255, 255, 255, 0.3);
    stroke-width: 2;
}

.rk-chart-grid {
    stroke: rgba(255, 255, 255, 0.1);
    stroke-width: 1;
    stroke-dasharray: 4 4;
}

.rk-chart-text {
    fill: #94a3b8;
    font-size: 11px;
    font-family: 'Inter', sans-serif;
    font-weight: 600;
}

/* Ścieżki wykresu */
.path-thermostat {
    stroke: var(--rk-intro-red);
    stroke-width: 3;
    fill: none;
    stroke-linecap: round;
    stroke-linejoin: round;
    transition: opacity 0.4s;
}

.path-weather {
    stroke: var(--rk-intro-green);
    stroke-width: 4;
    fill: none;
    stroke-linecap: round;
    transition: opacity 0.4s;
}

.rk-svg-wrapper[data-view="weather"] .path-thermostat { opacity: 0.1; }
.rk-svg-wrapper[data-view="thermostat"] .path-weather { opacity: 0.1; }

/* Sekcja Kalkulatora ROI */
.rk-roi-section {
    padding: 40px 50px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-roi-title {
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    margin: 0 0 25px 0;
}

.rk-roi-slider-box {
    margin-bottom: 30px;
}

.rk-roi-label {
    display: flex;
    justify-content: space-between;
    color: #cbd5e1;
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 15px;
}

.rk-roi-val {
    color: var(--rk-intro-blue-light);
    font-weight: 900;
    font-size: 18px;
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 6px;
    background: rgba(255, 255, 255, 0.2);
    border-radius: 4px;
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-intro-blue);
    border: 4px solid #ffffff;
    cursor: pointer;
    box-shadow: 0 0 10px rgba(0,0,0,0.5);
}

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

.rk-roi-card {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
}

.rk-roi-card-label {
    color: #94a3b8;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 0.5px;
    display: block;
    margin-bottom: 5px;
}

.rk-roi-card-value {
    color: var(--rk-intro-green);
    font-size: 24px;
    font-weight: 900;
    margin: 0;
}

.rk-roi-card-value.blue {
    color: var(--rk-intro-blue-light);
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-intro-header { padding: 30px 20px; }
    .rk-intro-header h2 { font-size: 24px; }
    .rk-intro-interactive { 
        grid-template-columns: 1fr; /* Pionowy układ interaktywny */
    }
    .rk-chart-section { 
        padding: 30px 20px; 
        border-right: none;
        border-bottom: 1px solid rgba(255, 255, 255, 0.1);
    }
    .rk-roi-section { padding: 30px 20px; }
    .rk-toggle-chart { flex-direction: column; border-radius: 16px; padding: 6px; }
    .rk-tgl-btn { border-radius: 10px; }
    .rk-roi-results { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-definicja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Czym jest krzywa grzewcza w ogrzewaniu podłogowym i jak wpływa na koszty ogrzewania?",
    "description": "Zrozumienie definicji krzywej grzewczej, jej wpływu na efektywność pompy ciepła (SCOP) oraz znaczenia bezwładności termicznej jastrychu.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-wplyw-temperatury",
    "name": "Wpływ obniżenia temperatury zasilania na SCOP i koszty",
    "description": "Symulacyjne dane pokazujące oszczędności finansowe w skali roku wynikające z obniżania parametrów zasilania systemu grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "definicja krzywej grzewczej",
      "bezwładność cieplna wylewki betonowej",
      "sterowanie pogodowe w ogrzewaniu podłogowym",
      "termostat pokojowy a podłogówka",
      "norma PN-EN 1264 maksymalna temperatura zasilania"
    ],
    "measurementTechnique": "Analiza oszczędności finansowych i przyrostu SCOP (2,5% na każdy 1 stopień Celsjusza w dół) dla typowego domu energooszczędnego 150m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Obniżenie temperatury zasilania o 1 stopień poprawia efektywność pompy ciepła o około 2.5%.",
        "Sterowanie proaktywne (pogodowe) kompensuje 6-godzinne opóźnienie reakcji ciężkiego jastrychu betonowego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-symulator-oszczednosci",
    "name": "Symulator Oszczędności Krzywej Grzewczej",
    "description": "Narzędzie interaktywne ilustrujące różnicę między sterowaniem termostatycznym a pogodowym oraz obliczające oszczędności ze zmniejszenia temperatury zasilania.",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-intro-container">
    
    <div class="rk-intro-header">
        <h2>Czym jest krzywa grzewcza i jak potężnie wpływa na Twoje rachunki?</h2>
        <p>Krzywa grzewcza to serce <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowania pogodowego</a>. Jest to zaprogramowany algorytm, który precyzyjnie wyznacza temperaturę wody tłoczonej do układu na podstawie tego, jak bardzo mroźnie jest na zewnątrz. Zgodnie z <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">normą PN-EN 1264</a>, absolutna maksymalna temperatura zasilania w strefach mieszkalnych to 55°C, ale w nowoczesnym budownictwie dążymy do wartości radykalnie niższych.</p>
        
        <div class="rk-highlight-box">
            Złota zasada instalatora: Obniżenie średniej temperatury zasilania zaledwie o 1°C podnosi sezonowy współczynnik efektywności (SCOP) pompy ciepła o około 2,5%.
        </div>

        <h3>Bezwładność cieplna a tradycyjny termostat</h3>
        <p>Dlaczego zwykły <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">termostat ścienny (włącz/wyłącz)</a> to wróg podłogówki? Odpowiedzią jest <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplna</a>. Klasyczny betonowy jastrych (grubość 6,5 cm) waży aż 130–150 kg na metr kwadratowy. Zmiana jego temperatury o 1°C zajmuje od 4 do 6 godzin. Termostat działa reaktywnie – włącza grzanie, gdy w domu jest już zimno, i wyłącza, gdy dom jest przegrzany. Sterowanie pogodowe z krzywą działa proaktywnie: zauważa mróz na zewnątrz i podnosi temperaturę wody zanim Twój salon zdąży ostygnąć.</p>
    </div>

    <!-- Moduł Interaktywny -->
    <div class="rk-intro-interactive">
        
        <!-- Wykres SVG -->
        <div class="rk-chart-section">
            <div class="rk-toggle-chart" id="rkChartToggle">
                <button class="rk-tgl-btn" data-view="thermostat" type="button">Termostat (Włącz/Wyłącz)</button>
                <button class="rk-tgl-btn active" data-view="weather" type="button">Krzywa Pogodowa (Proaktywnie)</button>
            </div>

            <div class="rk-svg-wrapper" id="rkGraphWrapper" data-view="weather">
                <svg width="100%" height="100%" viewBox="0 0 400 220" preserveAspectRatio="none">
                    <!-- Linie Siatki -->
                    <line x1="40" y1="180" x2="380" y2="180" class="rk-chart-axis" /> <!-- Oś X -->
                    <line x1="40" y1="20" x2="40" y2="180" class="rk-chart-axis" /> <!-- Oś Y -->
                    
                    <line x1="40" y1="100" x2="380" y2="100" class="rk-chart-grid" />
                    <line x1="40" y1="60" x2="380" y2="60" class="rk-chart-grid" />
                    <line x1="40" y1="140" x2="380" y2="140" class="rk-chart-grid" />

                    <!-- Etykiety -->
                    <text x="5" y="65" class="rk-chart-text">40°C</text>
                    <text x="5" y="105" class="rk-chart-text">30°C</text>
                    <text x="5" y="145" class="rk-chart-text">20°C</text>
                    
                    <text x="100" y="200" class="rk-chart-text">Rano</text>
                    <text x="200" y="200" class="rk-chart-text">Południe</text>
                    <text x="300" y="200" class="rk-chart-text">Wieczór</text>

                    <!-- Ścieżka: Termostat (Skoki) -->
                    <path d="M 40 140 L 90 140 L 100 60 L 150 60 L 160 140 L 220 140 L 230 60 L 280 60 L 290 140 L 350 140 L 360 60 L 380 60" class="path-thermostat" />

                    <!-- Ścieżka: Krzywa Pogodowa (Gładka) -->
                    <path d="M 40 110 Q 100 120 180 115 T 300 100 T 380 105" class="path-weather" />
                </svg>
            </div>
        </div>

        <!-- Kalkulator Oszczędności -->
        <div class="rk-roi-section">
            <h4 class="rk-roi-title">Symulacja Oszczędności (Dom 150m²)</h4>
            
            <div class="rk-roi-slider-box">
                <div class="rk-roi-label">
                    <span>Średnia Temperatura Zasilania</span>
                    <span class="rk-roi-val"><span id="rkZasVal">40</span>°C</span>
                </div>
                <input type="range" id="rkZasSlider" class="rk-range-input" min="30" max="40" step="1" value="40">
            </div>

            <div class="rk-roi-results">
                <div class="rk-roi-card">
                    <span class="rk-roi-card-label">Wzrost SCOP</span>
                    <p class="rk-roi-card-value blue">+<span id="rkScopRise">0.0</span>%</p>
                </div>
                <div class="rk-roi-card">
                    <span class="rk-roi-card-label">Oszczędność w sezonie</span>
                    <p class="rk-roi-card-value"><span id="rkPlnSave">0</span> PLN</p>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Logika Wykresu SVG
    var tglBtns = document.querySelectorAll('.rk-tgl-btn');
    var graphWrapper = document.getElementById('rkGraphWrapper');

    for (var i = 0; i < tglBtns.length; i++) {
        tglBtns[i].addEventListener('click', function() {
            var view = this.getAttribute('data-view');
            
            for (var j = 0; j < tglBtns.length; j++) {
                tglBtns[j].classList.remove('active');
            }
            this.classList.add('active');
            
            graphWrapper.setAttribute('data-view', view);
        });
    }

    // Logika Suwaka ROI
    var slider = document.getElementById('rkZasSlider');
    var valDisplay = document.getElementById('rkZasVal');
    var scopDisplay = document.getElementById('rkScopRise');
    var plnDisplay = document.getElementById('rkPlnSave');

    // Baza kosztowa: przy zasilaniu 40°C zużywamy 9000 kWh na sezon (np. 1 kWh = 1 PLN) -> Koszt 9000 PLN.
    // Każdy 1°C w dół to 2.5% lepszy SCOP (oszczędność ~150 PLN na każdy stopień w dół).

    function updateROI() {
        var currentTemp = parseFloat(slider.value);
        valDisplay.innerText = currentTemp;

        var tempDrop = 40 - currentTemp;
        
        var scopRise = tempDrop * 2.5;
        var plnSaved = tempDrop * 145; // ~145 PLN oszczędności na każdym stopniu dla domu 150m2

        scopDisplay.innerText = scopRise.toFixed(1);
        plnDisplay.innerText = plnSaved;
    }

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



<style>
:root {
    --rk-live-dark: #0f172a;
    --rk-live-blue: #0284c7;
    --rk-live-blue-light: #e0f2fe;
    --rk-live-bg: #f8fafc;
    --rk-live-surface: #ffffff;
    --rk-live-border: #e2e8f0;
    --rk-live-text: #475569;
    --rk-live-accent: #10b981;
    --rk-live-grid: #e2e8f0;
}

.rk-live-graph-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-live-surface);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid var(--rk-live-border);
    overflow: hidden;
}

/* Nagłówek */
.rk-live-header {
    padding: 40px 50px 30px;
    text-align: center;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-live-border);
}

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

.rk-live-header p {
    font-size: 16px;
    color: var(--rk-live-text);
    margin: 0 auto;
    max-width: 750px;
    line-height: 1.6;
}

/* Przestrzeń Robocza (App) */
.rk-live-workspace {
    display: flex;
    flex-wrap: wrap;
    background: var(--rk-live-bg);
}

/* Sekcja Suwaków (Lewa/Góra) */
.rk-live-controls {
    flex: 1;
    min-width: 320px;
    padding: 40px 50px;
    background: #ffffff;
    border-right: 1px solid var(--rk-live-border);
}

.rk-live-controls h3 {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-live-dark);
    margin: 0 0 25px 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-live-controls h3 svg {
    color: var(--rk-live-blue);
}

.rk-ctrl-group {
    margin-bottom: 35px;
}

.rk-ctrl-group:last-child {
    margin-bottom: 0;
}

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

.rk-ctrl-label {
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-live-dark);
    display: flex;
    flex-direction: column;
}

.rk-ctrl-desc {
    font-size: 12px;
    color: #94a3b8;
    font-weight: 500;
    margin-top: 4px;
}

.rk-ctrl-val {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-live-blue);
    background: var(--rk-live-blue-light);
    padding: 6px 14px;
    border-radius: 10px;
    min-width: 80px;
    text-align: center;
}

.rk-live-range {
    -webkit-appearance: none;
    width: 100%;
    height: 10px;
    border-radius: 5px;
    background: #cbd5e1;
    outline: none;
    transition: background 0.3s;
}

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

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

/* Sekcja Wykresu (Prawa/Dół) */
.rk-live-graph-area {
    flex: 1.2;
    min-width: 320px;
    padding: 40px 50px;
    display: flex;
    flex-direction: column;
}

.rk-graph-box {
    width: 100%;
    background: #ffffff;
    border: 2px solid var(--rk-live-border);
    border-radius: 16px;
    padding: 20px;
    box-shadow: inset 0 4px 6px rgba(0,0,0,0.02);
    position: relative;
}

.rk-svg-render {
    width: 100%;
    height: auto;
    overflow: visible;
}

.rk-axis-line {
    stroke: #94a3b8;
    stroke-width: 2;
}

.rk-grid-line {
    stroke: var(--rk-live-grid);
    stroke-width: 1;
    stroke-dasharray: 4 4;
}

.rk-graph-text {
    fill: #64748b;
    font-size: 11px;
    font-family: 'Inter', sans-serif;
    font-weight: 700;
}

.rk-graph-text-axis {
    fill: var(--rk-live-dark);
    font-size: 13px;
    font-weight: 800;
}

/* Dynamiczna linia krzywej */
.rk-dynamic-curve {
    stroke: var(--rk-live-blue);
    stroke-width: 4;
    fill: none;
    stroke-linecap: round;
    transition: d 0.1s ease-out;
}

/* Punkt na wykresie */
.rk-target-point {
    fill: var(--rk-live-accent);
    stroke: #ffffff;
    stroke-width: 3;
    transition: cx 0.1s ease-out, cy 0.1s ease-out;
}

.rk-target-line {
    stroke: var(--rk-live-accent);
    stroke-width: 2;
    stroke-dasharray: 4 4;
    opacity: 0.5;
    transition: x1 0.1s, y1 0.1s, x2 0.1s, y2 0.1s;
}

/* Panel Wynikowy pod wykresem */
.rk-graph-result {
    margin-top: 25px;
    background: var(--rk-live-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.rk-res-info {
    display: flex;
    flex-direction: column;
}

.rk-res-label {
    color: #94a3b8;
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 0.5px;
    margin-bottom: 5px;
}

.rk-res-val-big {
    color: #ffffff;
    font-size: 24px;
    font-weight: 900;
    margin: 0;
}

.rk-res-val-big span {
    color: var(--rk-live-accent);
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-live-header { padding: 30px 20px; }
    .rk-live-header h2 { font-size: 22px; }
    .rk-live-workspace { flex-direction: column; }
    .rk-live-controls { 
        padding: 30px 20px; 
        border-right: none; 
        border-bottom: 1px solid var(--rk-live-border); 
    }
    .rk-live-graph-area { padding: 30px 20px; }
    .rk-graph-box { padding: 15px; }
    .rk-graph-result { flex-direction: column; text-align: center; gap: 10px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-wykres-interaktywny",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Interaktywny wykres krzywej grzewczej – sprawdź, jak działa automatyka",
    "description": "Zrozum mechanikę sterownika pogodowego. Wprowadź zmiany nachylenia i przesunięcia na żywym wykresie, aby zobaczyć reakcję systemu grzewczego na spadek temperatury na zewnątrz.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-wykres-zaleznosci",
    "name": "Wektorowe współrzędne zależności temperatury zasilania od pogody",
    "description": "Dynamiczne zestawienie matematyczne przeliczające stromość krzywej grzewczej na docelową temperaturę tłoczenia dla instalacji ogrzewania płaszczyznowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jak działa krzywa grzewcza wykres",
      "nastawy sterownika pogodowego podłogówki",
      "temperatura zasilania przy mrozie",
      "kalibracja ogrzewania płaszczyznowego",
      "wykres zależności temperatury"
    ],
    "measurementTechnique": "Generowanie wektorowej ścieżki SVG na podstawie algorytmu: T_zas = 20 + Nachylenie * (20 - T_zew) + Przesunięcie.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wzrost wartości nachylenia (stromości) powoduje agresywniejszą reakcję kotła lub pompy ciepła na mróz.",
        "Korekta przesunięcia wpływa na podniesienie bazowej temperatury zasilania na całej osi poziomej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-live-graph",
    "name": "Symulator Graficzny Krzywej Grzewczej",
    "description": "Zaawansowane narzędzie pozwalające na manipulowanie osią wykresu w czasie rzeczywistym poprzez wirtualne suwaki sterownika pogodowego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-live-graph-container">
    
    <div class="rk-live-header">
        <h2>Interaktywny wykres krzywej grzewczej</h2>
        <p>Zamiast czytać suche wzory, przesuń suwaki i zobacz na własne oczy, jak automatyka wylicza temperaturę. Tak właśnie zachowuje się oprogramowanie wewnątrz Twojej pompy ciepła lub nowoczesnego kotła gazowego.</p>
    </div>

    <div class="rk-live-workspace">
        
        <!-- Panel Kontrolny -->
        <div class="rk-live-controls">
            <h3>
                <svg width="24" height="24" 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="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
                Skonfiguruj nastawy
            </h3>

            <!-- Suwak Nachylenia -->
            <div class="rk-ctrl-group">
                <div class="rk-ctrl-top">
                    <div class="rk-ctrl-label">
                        Nachylenie (Slope)
                        <span class="rk-ctrl-desc">Decyduje o reakcji na siłę mrozu</span>
                    </div>
                    <div class="rk-ctrl-val" id="rkValSlope">0.40</div>
                </div>
                <input type="range" id="rkRangeSlope" class="rk-live-range" min="0.1" max="1.5" step="0.05" value="0.40">
            </div>

            <!-- Suwak Przesunięcia -->
            <div class="rk-ctrl-group">
                <div class="rk-ctrl-top">
                    <div class="rk-ctrl-label">
                        Przesunięcie (Offset)
                        <span class="rk-ctrl-desc">Podnosi lub obniża całą krzywą</span>
                    </div>
                    <div class="rk-ctrl-val" id="rkValOffset">0 K</div>
                </div>
                <input type="range" id="rkRangeOffset" class="rk-live-range" min="-5" max="5" step="1" value="0">
            </div>
            
            <div style="margin-top: 30px; padding: 15px; background: #eff6ff; border-radius: 12px; font-size: 13px; color: #1e293b; font-weight: 600; line-height: 1.5;">
                <strong style="color: #0284c7;">Wskazówka inżyniera:</strong> Zauważ, że zmiana przesunięcia przesuwa linię równolegle, podczas gdy zmiana nachylenia podnosi ją tym mocniej, im zimniej jest na zewnątrz.
            </div>
        </div>

        <!-- Renderowanie Wykresu -->
        <div class="rk-live-graph-area">
            
            <div class="rk-graph-box">
                <!-- ViewBox o stalych proporcjach, by pozycjonowanie dzialalo matematycznie -->
                <svg class="rk-svg-render" viewBox="0 0 500 320" preserveAspectRatio="xMidYMid meet">
                    
                    <!-- Siatka Tła (Pionowe: temp zewn) -->
                    <!-- +10, 0, -10, -20 -->
                    <line x1="100" y1="20" x2="100" y2="280" class="rk-grid-line" />
                    <line x1="220" y1="20" x2="220" y2="280" class="rk-grid-line" />
                    <line x1="340" y1="20" x2="340" y2="280" class="rk-grid-line" />
                    <line x1="460" y1="20" x2="460" y2="280" class="rk-grid-line" />

                    <!-- Siatka Tła (Poziome: temp zasilania) -->
                    <!-- 20, 30, 40, 50, 60 -->
                    <line x1="40" y1="280" x2="480" y2="280" class="rk-grid-line" />
                    <line x1="40" y1="215" x2="480" y2="215" class="rk-grid-line" />
                    <line x1="40" y1="150" x2="480" y2="150" class="rk-grid-line" />
                    <line x1="40" y1="85" x2="480" y2="85" class="rk-grid-line" />
                    <line x1="40" y1="20" x2="480" y2="20" class="rk-grid-line" />

                    <!-- Osie -->
                    <!-- Oś X (Dół) -->
                    <line x1="40" y1="280" x2="480" y2="280" class="rk-axis-line" />
                    <!-- Oś Y (Lewa) -->
                    <line x1="40" y1="20" x2="40" y2="280" class="rk-axis-line" />

                    <!-- Podpisy Osi X (Temp zewn: 40px to +15, 460px to -20) -->
                    <!-- Zakres: od +15 do -20, czyli 35 stopni = 420 px szerokosci. 1 stopien = 12 px -->
                    <text x="100" y="305" class="rk-graph-text" text-anchor="middle">+10°C</text>
                    <text x="220" y="305" class="rk-graph-text" text-anchor="middle">0°C</text>
                    <text x="340" y="305" class="rk-graph-text" text-anchor="middle">-10°C</text>
                    <text x="460" y="305" class="rk-graph-text" text-anchor="middle">-20°C</text>

                    <!-- Podpisy Osi Y (Temp zas: 280px to 20, 20px to 60) -->
                    <!-- Zakres: od 20 do 60, czyli 40 stopni = 260 px wysokosci. 1 stopien = 6.5 px -->
                    <text x="30" y="284" class="rk-graph-text" text-anchor="end">20°C</text>
                    <text x="30" y="219" class="rk-graph-text" text-anchor="end">30°C</text>
                    <text x="30" y="154" class="rk-graph-text" text-anchor="end">40°C</text>
                    <text x="30" y="89" class="rk-graph-text" text-anchor="end">50°C</text>
                    <text x="30" y="24" class="rk-graph-text" text-anchor="end">60°C</text>

                    <!-- Tytuły osi -->
                    <text x="260" y="320" class="rk-graph-text-axis" text-anchor="middle">Zewnętrzna temperatura pogodowa</text>
                    
                    <!-- Dynamiczna Krzywa -->
                    <path id="rkMainCurve" class="rk-dynamic-curve" d="M 40 280 L 460 100" />
                    
                    <!-- Celownik (Przecięcie dla -10 st C, x=340) -->
                    <line id="rkTargetX" x1="40" y1="150" x2="340" y2="150" class="rk-target-line" />
                    <line id="rkTargetY" x1="340" y1="280" x2="340" y2="150" class="rk-target-line" />
                    <circle id="rkTargetDot" cx="340" cy="150" r="6" class="rk-target-point" />

                </svg>
            </div>

            <!-- Prezentacja Wyniku -->
            <div class="rk-graph-result">
                <div class="rk-res-info">
                    <span class="rk-res-label">Temperatura zasilania przy mrozie -10°C</span>
                    <p class="rk-res-val-big" id="rkResultText"><span>32.0</span> °C</p>
                </div>
            </div>

        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Suwaki i etykiety
    var slideSlope = document.getElementById('rkRangeSlope');
    var slideOffset = document.getElementById('rkRangeOffset');
    var valSlope = document.getElementById('rkValSlope');
    var valOffset = document.getElementById('rkValOffset');
    var resultText = document.getElementById('rkResultText');

    // Elementy SVG
    var pathCurve = document.getElementById('rkMainCurve');
    var dot = document.getElementById('rkTargetDot');
    var lineX = document.getElementById('rkTargetX');
    var lineY = document.getElementById('rkTargetY');

    // Funkcje Mapujące (Matematyka SVG)
    // Os X: T_zewn od +15 do -20. Szerokość 420px (od 40 do 460).
    // T_zewn = +15 -> X = 40. T_zewn = -20 -> X = 460.
    // 35 stopni = 420 px. Współczynnik: 12 px na stopień.
    function mapX(tzewn) {
        var diffFrom15 = 15 - tzewn; // jesli tzewn = 10, diff = 5. 
        return 40 + (diffFrom15 * 12);
    }

    // Os Y: T_zas od 20 do 60. Wysokość 260px (od 280 do 20).
    // T_zas = 20 -> Y = 280. T_zas = 60 -> Y = 20.
    // 40 stopni = 260 px. Współczynnik: 6.5 px na stopień.
    function mapY(tzas) {
        // Zabezpieczenie przed wychodzeniem poza ramy
        var safeTemp = tzas;
        if (safeTemp < 20) { safeTemp = 20; }
        if (safeTemp > 65) { safeTemp = 65; } // Pozwalamy lekko wyjsc górą

        var diffFrom20 = safeTemp - 20; // jesli tzas = 30, diff = 10
        return 280 - (diffFrom20 * 6.5);
    }

    function renderGraph() {
        var slope = parseFloat(slideSlope.value);
        var offset = parseFloat(slideOffset.value);

        // Aktualizacja tekstów na suwakach
        valSlope.innerText = slope.toFixed(2);
        
        var offsetText = offset.toString() + " K";
        if (offset > 0) { offsetText = "+" + offset.toString() + " K"; }
        valOffset.innerText = offsetText;

        // Baza algorytmu: T_zas = 20 + nachylenie * (20 - T_zewn) + przesunięcie
        
        // Punkt 1: Poczatek wykresu (T_zewn = +15)
        var tZas15 = 20 + slope * (20 - 15) + offset;
        var y1 = mapY(tZas15);
        var x1 = mapX(15);

        // Punkt 2: Koniec wykresu (T_zewn = -20)
        var tZasMinus20 = 20 + slope * (20 - (-20)) + offset;
        var y2 = mapY(tZasMinus20);
        var x2 = mapX(-20);

        // Aktualizacja Scieżki
        pathCurve.setAttribute('d', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2);

        // Obliczenie dla punktu referencyjnego (T_zewn = -10)
        var tZasTarget = 20 + slope * (20 - (-10)) + offset;
        
        var targetX = mapX(-10); // Powinno byc 340
        var targetY = mapY(tZasTarget);

        // Aktualizacja Kropki Celownika i Linii
        dot.setAttribute('cx', targetX);
        dot.setAttribute('cy', targetY);

        lineX.setAttribute('x1', 40);
        lineX.setAttribute('y1', targetY);
        lineX.setAttribute('x2', targetX);
        lineX.setAttribute('y2', targetY);

        lineY.setAttribute('x1', targetX);
        lineY.setAttribute('y1', 280);
        lineY.setAttribute('x2', targetX);
        lineY.setAttribute('y2', targetY);

        // Aktualizacja tekstu wyniku z kolorowaniem znacznikow span
        resultText.innerHTML = "<span>" + tZasTarget.toFixed(1) + "</span> °C";
    }

    // Nasłuchiwanie
    slideSlope.addEventListener('input', renderGraph);
    slideOffset.addEventListener('input', renderGraph);

    // Render startowy
    renderGraph();
});
</script>



<style>
:root {
    --rk-sel-dark: #0f172a;
    --rk-sel-blue: #0ea5e9;
    --rk-sel-blue-dark: #0369a1;
    --rk-sel-bg: #f8fafc;
    --rk-sel-surface: #ffffff;
    --rk-sel-border: #e2e8f0;
    --rk-sel-text: #475569;
    --rk-sel-green: #10b981;
    --rk-sel-orange: #f59e0b;
    --rk-sel-red: #ef4444;
}

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

/* Nagłówek */
.rk-sel-header {
    padding: 40px 50px 30px;
    text-align: center;
    background: var(--rk-sel-surface);
    border-bottom: 1px solid var(--rk-sel-border);
}

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

.rk-sel-header p {
    font-size: 16px;
    color: var(--rk-sel-text);
    margin: 0 auto;
    max-width: 750px;
    line-height: 1.6;
}

.rk-sel-header a {
    color: var(--rk-sel-blue-dark);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* Interaktywny Selektor Budynku */
.rk-sel-app {
    padding: 40px 50px;
}

.rk-sel-nav {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
    margin-bottom: 30px;
}

.rk-bld-btn {
    background: var(--rk-sel-surface);
    border: 2px solid var(--rk-sel-border);
    padding: 16px 10px;
    border-radius: 16px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s ease;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
}

.rk-bld-btn:hover {
    border-color: #cbd5e1;
    transform: translateY(-2px);
}

.rk-bld-icon {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    background: #f1f5f9;
    color: #64748b;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.3s ease;
}

.rk-bld-btn span {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-sel-text);
    line-height: 1.2;
}

/* Stan Aktywny Przycisków */
.rk-bld-btn.active {
    border-color: var(--rk-sel-blue);
    background: #f0f9ff;
    box-shadow: 0 8px 15px -5px rgba(14, 165, 233, 0.2);
}

.rk-bld-btn.active .rk-bld-icon {
    background: var(--rk-sel-blue);
    color: #ffffff;
}

.rk-bld-btn.active span {
    color: var(--rk-sel-dark);
}

/* Panel Wynikowy z Parametrami */
.rk-sel-dashboard {
    background: var(--rk-sel-dark);
    border-radius: 20px;
    padding: 30px;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.3);
}

.rk-param-box {
    display: flex;
    flex-direction: column;
    gap: 8px;
    position: relative;
}

.rk-param-box:not(:last-child)::after {
    content: '';
    position: absolute;
    right: -10px;
    top: 10%;
    height: 80%;
    width: 1px;
    background: rgba(255, 255, 255, 0.1);
}

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

.rk-param-val {
    font-size: 24px;
    font-weight: 900;
    color: #ffffff;
    margin: 0;
}

.rk-param-val.highlight {
    color: var(--rk-sel-green);
}

/* Wyjaśnienia Pojęć (Diagnostyka) */
.rk-concepts-wrapper {
    padding: 0 50px 40px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-concept-card {
    background: var(--rk-sel-surface);
    border: 1px solid var(--rk-sel-border);
    border-radius: 16px;
    padding: 25px;
}

.rk-concept-card h3 {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-sel-dark);
    margin: 0 0 10px 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-concept-desc {
    font-size: 15px;
    color: var(--rk-sel-text);
    line-height: 1.6;
    margin: 0 0 20px 0;
}

.rk-concept-symptoms {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rk-symptom-row {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    background: #f1f5f9;
    padding: 12px 15px;
    border-radius: 10px;
}

.rk-symptom-row.alert-red { background: #fef2f2; border: 1px solid #fecaca; }
.rk-symptom-row.alert-blue { background: #eff6ff; border: 1px solid #bfdbfe; }
.rk-symptom-row.alert-orange { background: #fffbeb; border: 1px solid #fde68a; }

.rk-sym-icon { margin-top: 2px; }
.rk-symptom-row.alert-red .rk-sym-icon { color: var(--rk-sel-red); }
.rk-symptom-row.alert-blue .rk-sym-icon { color: var(--rk-sel-blue); }
.rk-symptom-row.alert-orange .rk-sym-icon { color: var(--rk-sel-orange); }

.rk-sym-text {
    font-size: 14px;
    color: var(--rk-sel-dark);
    line-height: 1.5;
    margin: 0;
}

.rk-sym-text strong {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 2px;
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-sel-header { padding: 30px 20px; }
    .rk-sel-app { padding: 30px 20px; }
    .rk-sel-nav { 
        grid-template-columns: 1fr 1fr; /* 2 kolumny na przyciski na mobile */
        gap: 10px;
    }
    .rk-sel-dashboard {
        grid-template-columns: 1fr; /* Pionowy układ parametrów */
        gap: 15px;
        padding: 25px 20px;
    }
    .rk-param-box:not(:last-child)::after {
        right: 0; top: auto; bottom: -8px; height: 1px; width: 100%;
    }
    .rk-concepts-wrapper { 
        grid-template-columns: 1fr; /* Pionowy układ kart pojęć */
        padding: 0 20px 30px; 
    }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-parametry",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Jakie nachylenie i przesunięcie krzywej grzewczej wybrać dla domu jednorodzinnego?",
    "description": "Przewodnik po doborze parametrów krzywej pogodowej (nachylenia i przesunięcia) w zależności od standardu izolacyjnego budynku, z uwzględnieniem wytycznych WT2021.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-wskazniki",
    "name": "Zalecane nastawy krzywej grzewczej a standard energetyczny",
    "description": "Zestawienie korelujące wskaźnik EU budynku, zalecane nachylenie krzywej, przesunięcie początkowe i wymaganą temperaturę zasilania przy -10°C.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "nachylenie krzywej grzewczej",
      "przesunięcie krzywej pogodowej",
      "temperatura zasilania podłogówki przy mrozie",
      "wskaźnik EU a ogrzewanie podłogowe",
      "standard WT2021 dom energooszczędny"
    ],
    "measurementTechnique": "Określanie parametrów sterowania na bazie normy cieplnej budynku (od pasywnego do nieocieplonego) przy referencyjnej temperaturze minus 10 stopni Celsjusza.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dom energooszczędny WT2021 (EU 40-55) wymaga nachylenia 0.30 - 0.45.",
        "Budynek nieocieplony wymusza nachylenie powyżej 0.80 i wysoką temperaturę zasilania."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-selekcjoner",
    "name": "Asystent Doboru Parametrów Krzywej Grzewczej",
    "description": "Narzędzie pozwalające inwestorowi dobrać początkowe parametry sterownika na podstawie klasy energetycznej wybudowanego obiektu.",
    "applicationCategory": "ReferenceApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-selector-container">
    
    <div class="rk-sel-header">
        <h2>Jakie nachylenie i przesunięcie wybrać dla swojego domu?</h2>
        <p>Współczynnik nachylenia krzywej grzewczej dla niskotemperaturowego ogrzewania podłogowego w standardzie energooszczędnym (WT2021) wynosi od 0,2 do 0,5, a przesunięcie początkowe ustala się na 0 Kelwinów. Zgodnie z wytycznymi PORT PC (Część 5), dla ujemnej projektowej temperatury zewnętrznej równej 20 stopni, <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">temperatura zasilania nie powinna przekraczać 35°C</a>.</p>
    </div>

    <!-- Interaktywny Wybór Domu -->
    <div class="rk-sel-app">
        <div class="rk-sel-nav" id="rkBldNav">
            <button class="rk-bld-btn" data-bld="passive" type="button">
                <div class="rk-bld-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5z"></path><path d="M2 17l10 5 10-5"></path><path d="M2 12l10 5 10-5"></path></svg>
                </div>
                <span>Dom Pasywny (NF15)</span>
            </button>
            <button class="rk-bld-btn active" data-bld="wt2021" type="button">
                <div class="rk-bld-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
                </div>
                <span>Nowy Dom (WT2021)</span>
            </button>
            <button class="rk-bld-btn" data-bld="retro" type="button">
                <div class="rk-bld-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><circle cx="12" cy="14" r="4"></circle><line x1="12" y1="6" x2="12.01" y2="6"></line></svg>
                </div>
                <span>Po Termo- modernizacji</span>
            </button>
            <button class="rk-bld-btn" data-bld="old" type="button">
                <div class="rk-bld-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 22h20"></path><path d="M17 2v20"></path><path d="M7 2v20"></path><path d="M12 22v-4"></path><path d="M7 12h10"></path></svg>
                </div>
                <span>Budynek Nieocieplony</span>
            </button>
        </div>

        <!-- Tabela Wyników Zamieniona na Dashboard -->
        <div class="rk-sel-dashboard">
            <div class="rk-param-box">
                <span class="rk-param-label">Wskaźnik EU</span>
                <p class="rk-param-val" id="val-eu">40 - 55 <span style="font-size:14px; color:#cbd5e1; font-weight:600;">kWh/(m²rok)</span></p>
            </div>
            <div class="rk-param-box">
                <span class="rk-param-label">Zalecane Nachylenie</span>
                <p class="rk-param-val highlight" id="val-slope">0.30 - 0.45</p>
            </div>
            <div class="rk-param-box">
                <span class="rk-param-label">Startowe Przesunięcie</span>
                <p class="rk-param-val" id="val-offset">0 K</p>
            </div>
            <div class="rk-param-box">
                <span class="rk-param-label">Zasilanie (przy mrozie 10°C)</span>
                <p class="rk-param-val" id="val-temp">31 - 34°C</p>
            </div>
        </div>
    </div>

    <!-- Definicje i Objawy (Zamiast suchego tekstu) -->
    <div class="rk-concepts-wrapper">
        
        <!-- Nachylenie -->
        <div class="rk-concept-card">
            <h3>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0ea5e9" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
                Nachylenie Krzywej (Slope)
            </h3>
            <p class="rk-concept-desc">Określa stromość reakcji automatyki na spadek temperatury na zewnątrz. Im lepsza izolacja budynku i niższe <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">zapotrzebowanie na moc</a>, tym niższe nachylenie jest wymagane.</p>
            
            <div class="rk-concept-symptoms">
                <div class="rk-symptom-row alert-red">
                    <div class="rk-sym-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20"></path><path d="m17 7-5-5-5 5"></path></svg>
                    </div>
                    <p class="rk-sym-text"><strong>Zbyt wysokie nachylenie:</strong> Przy zerowej temperaturze w domu jest komfortowo, ale podczas silnych mrozów (minus 15 stopni) robi się stanowczo za gorąco.</p>
                </div>
                <div class="rk-symptom-row alert-blue">
                    <div class="rk-sym-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22V2"></path><path d="m17 17-5 5-5-5"></path></svg>
                    </div>
                    <p class="rk-sym-text"><strong>Zbyt niskie nachylenie:</strong> Przy łagodnej zimie i temperaturach dodatnich wewnątrz jest idealnie, ale gdy chwyta mróz, instalacja nie nadąża z dostarczaniem ciepła.</p>
                </div>
            </div>
        </div>

        <!-- Przesunięcie -->
        <div class="rk-concept-card">
            <h3>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><polyline points="8 7 12 3 16 7"></polyline><line x1="12" y1="12" x2="12" y2="3"></line></svg>
                Przesunięcie (Offset)
            </h3>
            <p class="rk-concept-desc">Podnosi lub obniża całą charakterystykę o stałą wartość wyrażoną w Kelwinach (K). Modyfikuje temperaturę zasilania równomiernie, niezależnie od warunków zewnętrznych.</p>
            
            <div class="rk-concept-symptoms">
                <div class="rk-symptom-row alert-orange">
                    <div class="rk-sym-icon">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
                    </div>
                    <p class="rk-sym-text"><strong>Kiedy stosować?</strong> Rozwiązuje problem jednolitego odchylenia od komfortu. Jeśli przez całą zimę, bez względu na mróz czy odwilż, brakuje Ci w salonie dokładnie 1,5 stopnia, po prostu podnieś przesunięcie o +2 K.</p>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var btns = document.querySelectorAll('.rk-bld-btn');
    
    // Elementy do aktualizacji
    var elEu = document.getElementById('val-eu');
    var elSlope = document.getElementById('val-slope');
    var elOffset = document.getElementById('val-offset');
    var elTemp = document.getElementById('val-temp');

    // Baza Danych (zastępuje tabelę HTML)
    var db = {
        'passive': {
            eu: '< 15 <span style="font-size:14px; color:#cbd5e1; font-weight:600;">kWh/(m²rok)</span>',
            slope: '0.15 - 0.25',
            offset: '0 K',
            temp: '26 - 28°C'
        },
        'wt2021': {
            eu: '40 - 55 <span style="font-size:14px; color:#cbd5e1; font-weight:600;">kWh/(m²rok)</span>',
            slope: '0.30 - 0.45',
            offset: '0 K',
            temp: '31 - 34°C'
        },
        'retro': {
            eu: '70 - 90 <span style="font-size:14px; color:#cbd5e1; font-weight:600;">kWh/(m²rok)</span>',
            slope: '0.50 - 0.70',
            offset: '+2 K',
            temp: '38 - 42°C'
        },
        'old': {
            eu: '> 120 <span style="font-size:14px; color:#cbd5e1; font-weight:600;">kWh/(m²rok)</span>',
            slope: '0.80 - 1.10',
            offset: '+4 K',
            temp: '46 - 52°C'
        }
    };

    for (var i = 0; i < btns.length; i++) {
        btns[i].addEventListener('click', function() {
            var bldType = this.getAttribute('data-bld');
            
            // Reset klas
            for (var j = 0; j < btns.length; j++) {
                btns[j].classList.remove('active');
            }
            
            // Aktywacja
            this.classList.add('active');

            // Aktualizacja UI (bezpieczny sposób bez używania &#038;&#038;)
            var targetData = null;
            if (bldType === 'passive') { targetData = db['passive']; }
            else if (bldType === 'wt2021') { targetData = db['wt2021']; }
            else if (bldType === 'retro') { targetData = db['retro']; }
            else if (bldType === 'old') { targetData = db['old']; }

            if (targetData !== null) {
                elEu.innerHTML = targetData.eu;
                elSlope.innerHTML = targetData.slope;
                elOffset.innerHTML = targetData.offset;
                elTemp.innerHTML = targetData.temp;
            }
        });
    }
});
</script>



<style>
:root {
    --rk-calc-dark: #0f172a;
    --rk-calc-blue: #0ea5e9;
    --rk-calc-blue-hover: #0284c7;
    --rk-calc-bg: #f8fafc;
    --rk-calc-surface: #ffffff;
    --rk-calc-border: #e2e8f0;
    --rk-calc-text: #475569;
    --rk-calc-accent: #10b981;
}

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

/* Nagłówek */
.rk-calc-header {
    padding: 40px 50px 30px;
    text-align: center;
    background: linear-gradient(to bottom, #ffffff, var(--rk-calc-bg));
    border-bottom: 1px solid var(--rk-calc-border);
}

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

.rk-calc-header p {
    font-size: 16px;
    color: var(--rk-calc-text);
    margin: 0 auto;
    max-width: 750px;
    line-height: 1.6;
}

/* Interfejs Kalkulatora */
.rk-calc-app {
    display: flex;
    flex-wrap: wrap;
}

.rk-calc-controls {
    flex: 1;
    min-width: 320px;
    padding: 40px 50px;
    background: var(--rk-calc-surface);
}

.rk-calc-results {
    flex: 1;
    min-width: 320px;
    padding: 40px 50px;
    background: var(--rk-calc-dark);
    color: #ffffff;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

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

.rk-slider-group:last-child {
    margin-bottom: 0;
}

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

.rk-slider-label {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-calc-dark);
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-slider-value-box {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-calc-blue);
    background: #e0f2fe;
    padding: 4px 12px;
    border-radius: 8px;
}

.rk-range {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #e2e8f0;
    outline: none;
    transition: background 0.3s;
}

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

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

/* Tablica Wyników */
.rk-result-title {
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #94a3b8;
    margin: 0 0 25px 0;
}

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

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

.rk-res-label {
    font-size: 13px;
    color: #cbd5e1;
    margin-bottom: 8px;
    display: block;
}

.rk-res-val {
    font-size: 28px;
    font-weight: 900;
    color: #ffffff;
    margin: 0;
}

.rk-res-val.highlight {
    color: var(--rk-calc-accent);
}

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

/* Opis algorytmu */
.rk-algo-description {
    padding: 0 50px 40px 50px;
    background: var(--rk-calc-surface);
}

.rk-algo-step {
    background: var(--rk-calc-bg);
    border-left: 4px solid var(--rk-calc-blue);
    padding: 20px 25px;
    margin-top: 20px;
    border-radius: 0 12px 12px 0;
}

.rk-algo-step h3 {
    margin: 0 0 8px 0;
    font-size: 16px;
    color: var(--rk-calc-dark);
    font-weight: 800;
}

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

.rk-algo-step a {
    color: var(--rk-calc-blue);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}

@media (max-width: 768px) {
    .rk-calc-header { padding: 30px 20px; }
    .rk-calc-controls { padding: 30px 20px; }
    .rk-calc-results { padding: 35px 20px; }
    .rk-result-grid { grid-template-columns: 1fr; gap: 15px; } /* Pionowy układ kafelków */
    .rk-algo-description { padding: 0 20px 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-obliczenia",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Jak obliczyć optymalne parametry krzywej grzewczej krok po kroku?",
    "description": "Interaktywny algorytm wyznaczania punktów charakterystyki pogodowej oparty na bilansie cieplnym budynku (PN-EN 12831) oraz równaniu wymiany ciepła dla podłogi grzejnej.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-wzory",
    "name": "Zmienne algorytmu wyznaczania krzywej grzewczej",
    "description": "Zbiór wartości wejściowych oraz stałych oporu cieplnego używanych do obliczenia wymaganej temperatury zasilania i strumienia masowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator ogrzewania podłogowego",
      "projektowe obciążenie cieplne ozc",
      "zapotrzebowanie na ciepło budynku",
      "temperatura zasilania podłogówki",
      "rotametr przepływ litry na minutę"
    ],
    "measurementTechnique": "Wyliczenia w czasie rzeczywistym bazujące na relacji gęstości strumienia cieplnego do zadanej delty temperatur instalacji (zasilanie vs powrót).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Wyznaczenie Projektowych Strat Ciepła w kilowatach.",
        "Krok 2: Ustalenie stromości linii względem temperatury bazowej i warunków skrajnych (-20 st. C)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-kalkulator-krzywej",
    "name": "Kalkulator Krzywej Grzewczej i Przepływów OZC",
    "description": "Aplikacja webowa pozwalająca inwestorom na symulację wymaganej temperatury zasilania oraz nachylenia krzywej pogodowej na podstawie powierzchni i strat ciepła domu.",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-calculator-wrapper">
    
    <div class="rk-calc-header">
        <h2>Jak obliczyć optymalne parametry krzywej grzewczej krok po kroku?</h2>
        <p>Algorytm wyznaczania punktów charakterystyki pogodowej opiera się na bilansie cieplnym budynku (norma <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">PN-EN 1264</a>). Zmień parametry swojego domu na suwakach, aby na żywo zobaczyć, jak automatyka powinna dobrać temperatury i przepływy.</p>
    </div>

    <div class="rk-calc-app">
        
        <!-- Panel Sterowania -->
        <div class="rk-calc-controls">
            
            <div class="rk-slider-group">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">
                        <svg width="18" height="18" 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" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
                        Powierzchnia podłogówki
                    </span>
                    <span class="rk-slider-value-box"><span id="val-area">140</span> m²</span>
                </div>
                <input type="range" id="slider-area" class="rk-range" min="50" max="300" step="5" value="140">
            </div>

            <div class="rk-slider-group">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">
                        <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 2v20"></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                        Straty ciepła (OZC)
                    </span>
                    <span class="rk-slider-value-box"><span id="val-power">5.6</span> kW</span>
                </div>
                <input type="range" id="slider-power" class="rk-range" min="2.0" max="20.0" step="0.2" value="5.6">
            </div>

            <div class="rk-slider-group">
                <div class="rk-slider-header">
                    <span class="rk-slider-label">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
                        Różnica temp. (Zasilanie-Powrót)
                    </span>
                    <span class="rk-slider-value-box"><span id="val-delta">5</span> K</span>
                </div>
                <input type="range" id="slider-delta" class="rk-range" min="3" max="8" step="1" value="5">
            </div>

        </div>

        <!-- Panel Wynikowy -->
        <div class="rk-calc-results">
            <h3 class="rk-result-title">Wymagane parametry instalacji:</h3>
            
            <div class="rk-result-grid">
                
                <div class="rk-res-box">
                    <span class="rk-res-label">Temperatura Zasilania</span>
                    <p class="rk-res-val highlight"><span id="res-temp">28.2</span><span class="rk-res-unit">°C</span></p>
                </div>
                
                <div class="rk-res-box">
                    <span class="rk-res-label">Nachylenie Krzywej (n)</span>
                    <p class="rk-res-val"><span id="res-slope">0.21</span></p>
                </div>

                <div class="rk-res-box">
                    <span class="rk-res-label">Całkowity Przepływ Wody</span>
                    <p class="rk-res-val"><span id="res-flow-total">16.1</span><span class="rk-res-unit"> l/min</span></p>
                </div>

                <div class="rk-res-box">
                    <span class="rk-res-label">Średni Przepływ na Pętlę</span>
                    <p class="rk-res-val"><span id="res-flow-loop">1.34</span><span class="rk-res-unit"> l/min</span></p>
                </div>

            </div>
        </div>

    </div>

    <!-- Opis kroków inżynieryjnych -->
    <div class="rk-algo-description">
        <div class="rk-algo-step">
            <h3>Krok 1: Wyznacz Projektowe Straty Ciepła</h3>
            <p>Odczytujemy wartość strat ciepła z <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">kalkulatora OZC</a> dla zewnętrznej temperatury projektowej (przyjęto minus 20 stopni Celsjusza) oraz pożądanej temperatury wewnętrznej (plus 20 stopni).</p>
        </div>
        
        <div class="rk-algo-step">
            <h3>Krok 2: Oblicz Projektową Temperaturę Zasilania</h3>
            <p>Dzieląc moc w watach przez metraż otrzymujemy gęstość strumienia cieplnego. Dodając opór cieplny posadzki (np. dla paneli to 0,05 m2K/W) wyliczamy średnią wymaganą temperaturę czynnika, a dodając połowę Delty T – projektową temperaturę zasilania kotła.</p>
        </div>

        <div class="rk-algo-step">
            <h3>Krok 3: Wyznacz Współczynnik Nachylenia</h3>
            <p>Mając wyznaczoną temperaturę zasilania, podstawiamy ją do wzoru określającego stromość linii pogodowej. Jest to różnica między zasilaniem a temperaturą wewnętrzną, podzielona przez różnicę temperatur wewnętrznej i skrajnej zewnętrznej (np. amplituda 40 Kelwinów).</p>
        </div>

        <div class="rk-algo-step">
            <h3>Krok 4: Weryfikacja Przepływu Masowego</h3>
            <p>Wiedząc jaką dysponujemy mocą i przy założonej różnicy temperatur zasilania i powrotu, <a href="https://projekt-ogrzewania.pl/ile-wody-potrzeba-do-wypelnienia-instalacji-podlogowki-kalkulator/">obliczamy całkowitą objętość wody krążącej w układzie</a>. Dzieląc to przez przybliżoną ilość obiegów (przyjmując 1 pętlę na 12 metrów kwadratowych), ustalamy wymaganą nastawę na rotametrach.</p>
        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Referencje do suwaków
    var sArea = document.getElementById('slider-area');
    var sPower = document.getElementById('slider-power');
    var sDelta = document.getElementById('slider-delta');

    // Referencje do etykiet suwaków
    var vArea = document.getElementById('val-area');
    var vPower = document.getElementById('val-power');
    var vDelta = document.getElementById('val-delta');

    // Referencje do wyników
    var rTemp = document.getElementById('res-temp');
    var rSlope = document.getElementById('res-slope');
    var rFlowTotal = document.getElementById('res-flow-total');
    var rFlowLoop = document.getElementById('res-flow-loop');

    // Funkcja licząca
    function calculateCurve() {
        var area = parseFloat(sArea.value);
        var powerKW = parseFloat(sPower.value);
        var delta = parseFloat(sDelta.value);

        // Aktualizacja etykiet suwaków
        vArea.innerText = area;
        vPower.innerText = powerKW.toFixed(1);
        vDelta.innerText = delta;

        // KROK 2: Obliczenia temperatury zasilania
        var powerW = powerKW * 1000;
        var q = powerW / area; // Gęstość strumienia [W/m2]
        // Wzór na srednią temp: T_m = 20 + q * ( (1/10.8) + 0.05 )
        // 1/10.8 = 0.0925. 0.0925 + 0.05 = 0.1425
        var Tm = 20 + (q * 0.1425);
        var Tzas = Tm + (delta / 2);

        // KROK 3: Nachylenie krzywej
        // Zalozenie T_zew = -20, T_wew = 20 -> różnica to 40
        var slope = (Tzas - 20) / 40;

        // KROK 4: Przepływy
        // V [m3/h] = Q[W] * 3600 / (998 * 4.187 * 1000 * delta)
        // Dla uproszczenia: Q[kW] / (1.163 * delta) -> m3/h
        var flowM3H = powerKW / (1.163 * delta);
        var flowLMinTotal = flowM3H * 16.666; // Przeliczenie z m3/h na l/min

        // Ilość pętli (zakładamy pętle co ~12m2)
        var loops = Math.ceil(area / 12);
        var flowPerLoop = flowLMinTotal / loops;

        // Zabezpieczenie przed błędem logicznym i aktualizacja DOM
        if (Tzas > 0) {
            rTemp.innerText = Tzas.toFixed(1);
        }
        if (slope > 0) {
            rSlope.innerText = slope.toFixed(2);
        }
        if (flowLMinTotal > 0) {
            rFlowTotal.innerText = flowLMinTotal.toFixed(1);
        }
        if (flowPerLoop > 0) {
            rFlowLoop.innerText = flowPerLoop.toFixed(2);
        }
    }

    // Nasłuchiwanie zmian
    sArea.addEventListener('input', calculateCurve);
    sPower.addEventListener('input', calculateCurve);
    sDelta.addEventListener('input', calculateCurve);

    // Inicjalne wywołanie
    calculateCurve();
});
</script>



<style>
:root {
    --rk-sim-dark: #0f172a;
    --rk-sim-text: #475569;
    --rk-sim-bg: #f8fafc;
    --rk-sim-border: #e2e8f0;
    --rk-sim-opt: #10b981; /* Zielony dla optymalnego */
    --rk-sim-over: #ef4444; /* Czerwony dla przewymiarowania */
    --rk-sim-under: #3b82f6; /* Niebieski (chłodny) dla niedowymiarowania */
}

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

/* Nagłówek */
.rk-params-header {
    padding: 40px 50px 30px;
    text-align: center;
    border-bottom: 1px solid var(--rk-sim-border);
    background: #ffffff;
}

.rk-params-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-sim-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-params-header p {
    font-size: 16px;
    color: var(--rk-sim-text);
    line-height: 1.6;
    margin: 0 auto;
    max-width: 700px;
}

.rk-params-header a {
    color: #0284c7;
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* Przełącznik Wariantów */
.rk-sim-controls {
    padding: 30px 50px;
    background: var(--rk-sim-bg);
    display: flex;
    gap: 15px;
    justify-content: center;
}

.rk-sim-btn {
    flex: 1;
    background: #ffffff;
    border: 2px solid var(--rk-sim-border);
    padding: 20px;
    border-radius: 16px;
    cursor: pointer;
    transition: all 0.3s ease;
    text-align: left;
    display: flex;
    flex-direction: column;
    gap: 8px;
    max-width: 280px;
}

.rk-sim-btn:hover {
    border-color: #cbd5e1;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-sim-btn-title {
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-sim-dark);
}

.rk-sim-btn-val {
    font-size: 14px;
    color: var(--rk-sim-text);
    font-weight: 600;
}

/* Aktywne Stany Przycisków */
.rk-sim-btn.active[data-mode="opt"] {
    border-color: var(--rk-sim-opt);
    background: #ecfdf5;
    box-shadow: 0 8px 15px -5px rgba(16, 185, 129, 0.2);
}

.rk-sim-btn.active[data-mode="over"] {
    border-color: var(--rk-sim-over);
    background: #fef2f2;
    box-shadow: 0 8px 15px -5px rgba(239, 68, 68, 0.2);
}

.rk-sim-btn.active[data-mode="under"] {
    border-color: var(--rk-sim-under);
    background: #eff6ff;
    box-shadow: 0 8px 15px -5px rgba(59, 130, 246, 0.2);
}

/* Tablica Wyników (Kafelki) */
.rk-sim-dashboard {
    padding: 0 50px 40px;
    background: var(--rk-sim-bg);
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-dash-card {
    background: #ffffff;
    border: 1px solid var(--rk-sim-border);
    border-radius: 12px;
    padding: 20px;
    display: flex;
    align-items: center;
    gap: 15px;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.rk-dash-icon {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    background: #f1f5f9;
    color: #64748b;
    transition: all 0.3s ease;
}

.rk-dash-content {
    flex: 1;
}

.rk-dash-label {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    font-weight: 700;
    color: #94a3b8;
    margin: 0 0 4px 0;
}

.rk-dash-value {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-sim-dark);
    margin: 0;
    line-height: 1.3;
}

/* Kolorowanie Dashboardu zależnie od wybranego trybu */
.rk-params-container[data-current="opt"] .rk-dash-icon { background: #d1fae5; color: var(--rk-sim-opt); }
.rk-params-container[data-current="over"] .rk-dash-icon { background: #fee2e2; color: var(--rk-sim-over); }
.rk-params-container[data-current="under"] .rk-dash-icon { background: #dbeafe; color: var(--rk-sim-under); }

@media (max-width: 768px) {
    .rk-params-header { padding: 30px 20px; }
    .rk-params-header h2 { font-size: 22px; }
    .rk-sim-controls { 
        padding: 20px; 
        flex-direction: column; 
    }
    .rk-sim-btn { max-width: 100%; padding: 15px 20px; flex-direction: row; align-items: center; justify-content: space-between; }
    .rk-sim-dashboard { 
        padding: 0 20px 30px; 
        grid-template-columns: 1fr; /* Pionowy układ kafelków bez poziomego scrolla */
    }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-porownanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Porównanie parametrów pracy instalacji przy różnych ustawieniach krzywej grzewczej",
    "description": "Zestawienie analityczne wpływu nachylenia krzywej grzewczej na efektywność COP, taktowanie sprężarki oraz realne koszty zużycia energii cieplnej w budynku.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-porownanie",
    "name": "Zestawienie parametrów pracy pompy ciepła dla różnych krzywych grzewczych",
    "description": "Dane pomiarowe obrazujące zużycie energii elektrycznej przez pompę ciepła, taktowanie sprężarki oraz temperatury posadzki w zależności od krzywej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zużycie energii elektrycznej przez pompę ciepła",
      "maksymalna temperatura zasilania podłogówki",
      "wylewka betonowa na ogrzewanie podłogowe",
      "porównanie parametrów pracy instalacji",
      "częstotliwość włączeń sprężarki taktowanie"
    ],
    "measurementTechnique": "Symulacyjne zestawienie wartości wyjściowych pompy ciepła dla domu 150m2 przy trzech profilach nachylenia krzywej (0.15, 0.35, 0.80) w referencyjnej temperaturze zewnętrznej -7 stopni Celsjusza.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wariant przewymiarowany drastycznie obniża COP i wywołuje ryzyko pękania jastrychu.",
        "Wariant optymalny zapewnia średni COP na poziomie 4.2 przy stabilnej pracy 4-6 cykli."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-porownanie",
    "name": "Symulator Wpływu Krzywej Grzewczej na COP i Zużycie Energii",
    "description": "Narzędzie interaktywne zastępujące statyczną tabelę, demonstrujące na żywo zmiany parametrów eksploatacyjnych systemu grzewczego pod wpływem manipulacji sterownikiem.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-params-container" id="rkParamsSim" data-current="opt">
    
    <div class="rk-params-header">
        <h2>Porównanie parametrów pracy instalacji przy różnych ustawieniach krzywej</h2>
        <p>Wybór rzędnych i nachylenia krzywej pogodowej bezpośrednio determinuje zużycie energii elektrycznej, wydajność układu oraz bezpieczeństwo całej płaszczyzny grzewczej. Jak zachowa się instalacja dla domu o powierzchni 150 metrów kwadratowych?</p>
    </div>

    <!-- Przełączniki Wariantów -->
    <div class="rk-sim-controls">
        <button class="rk-sim-btn active" data-mode="opt" type="button">
            <span class="rk-sim-btn-title">Krzywa Optymalna</span>
            <span class="rk-sim-btn-val">Nachylenie: 0.35</span>
        </button>
        <button class="rk-sim-btn" data-mode="over" type="button">
            <span class="rk-sim-btn-title">Przewymiarowana</span>
            <span class="rk-sim-btn-val">Nachylenie: 0.80</span>
        </button>
        <button class="rk-sim-btn" data-mode="under" type="button">
            <span class="rk-sim-btn-title">Niedowymiarowana</span>
            <span class="rk-sim-btn-val">Nachylenie: 0.15</span>
        </button>
    </div>

    <!-- Kafelki Wyników (Zastępują Tabelę) -->
    <div class="rk-sim-dashboard">
        
        <div class="rk-dash-card">
            <div class="rk-dash-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20"></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            </div>
            <div class="rk-dash-content">
                <p class="rk-dash-label">Temperatura zasilania (przy -7°C)</p>
                <h3 class="rk-dash-value" id="val-temp">31,5°C</h3>
            </div>
        </div>

        <div class="rk-dash-card">
            <div class="rk-dash-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line></svg>
            </div>
            <div class="rk-dash-content">
                <p class="rk-dash-label">Średni COP pompy ciepła</p>
                <h3 class="rk-dash-value" id="val-cop">4,2</h3>
            </div>
        </div>

        <div class="rk-dash-card">
            <div class="rk-dash-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
            </div>
            <div class="rk-dash-content">
                <p class="rk-dash-label">Cykle sprężarki (24h)</p>
                <h3 class="rk-dash-value" id="val-cycles">4–6 cykli (Stabilnie)</h3>
            </div>
        </div>

        <div class="rk-dash-card">
            <div class="rk-dash-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
            </div>
            <div class="rk-dash-content">
                <p class="rk-dash-label">Temperatura posadzki (salon)</p>
                <h3 class="rk-dash-value" id="val-floor">24,2°C</h3>
            </div>
        </div>

        <div class="rk-dash-card">
            <div class="rk-dash-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            </div>
            <div class="rk-dash-content">
                <p class="rk-dash-label">Główne ryzyko technologiczne</p>
                <h3 class="rk-dash-value" id="val-risk">Brak (Prawidłowa <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">wylewka</a>)</h3>
            </div>
        </div>

        <div class="rk-dash-card">
            <div class="rk-dash-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="6" width="20" height="12" rx="2"></rect><circle cx="12" cy="12" r="2"></circle><path d="M6 12h.01M18 12h.01"></path></svg>
            </div>
            <div class="rk-dash-content">
                <p class="rk-dash-label">Szacowane zużycie energii (sezon)</p>
                <h3 class="rk-dash-value" id="val-energy">~2100 kWh</h3>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var container = document.getElementById('rkParamsSim');
    var btns = document.querySelectorAll('.rk-sim-btn');
    
    // Obiekty DOM do podmiany tekstu
    var elTemp = document.getElementById('val-temp');
    var elCop = document.getElementById('val-cop');
    var elCycles = document.getElementById('val-cycles');
    var elFloor = document.getElementById('val-floor');
    var elRisk = document.getElementById('val-risk');
    var elEnergy = document.getElementById('val-energy');

    // Baza danych dla 3 stanów (zamiennik tabeli)
    var dataBank = {
        'opt': {
            temp: '31,5°C',
            cop: '4,2',
            cycles: '4–6 cykli (Płynnie)',
            floor: '24,2°C',
            risk: 'Brak (Bezpieczna wylewka)',
            energy: '~2100 kWh'
        },
        'over': {
            temp: '43,0°C',
            cop: '2,8',
            cycles: '22–35 cykli (Taktowanie!)',
            floor: '28,9°C',
            risk: 'Pękanie jastrychu, skrzypienie paneli',
            energy: '~3150 kWh (+50% kosztów)'
        },
        'under': {
            temp: '25,5°C',
            cop: '4,8',
            cycles: '1–2 cykle (Brak mocy)',
            floor: '20,8°C',
            risk: 'Przewlekłe niedogrzanie budynku',
            energy: '~1750 kWh (Brak komfortu)'
        }
    };

    for (var i = 0; i < btns.length; i++) {
        btns[i].addEventListener('click', function() {
            var mode = this.getAttribute('data-mode');
            
            // Usunięcie aktywnej klasy ze wszystkich przycisków
            for (var j = 0; j < btns.length; j++) {
                btns[j].classList.remove('active');
            }
            
            // Aktywacja klikniętego
            this.classList.add('active');
            
            // Aktualizacja zmiennej CSS kontenera dla kolorystyki
            container.setAttribute('data-current', mode);

            // Pobranie odpowiednich danych korzystając z bezpiecznej instrukcji
            var safeData = null;
            if (mode === 'opt') { safeData = dataBank['opt']; }
            else if (mode === 'over') { safeData = dataBank['over']; }
            else if (mode === 'under') { safeData = dataBank['under']; }

            if (safeData !== null) {
                elTemp.innerHTML = safeData.temp;
                elCop.innerHTML = safeData.cop;
                elCycles.innerHTML = safeData.cycles;
                elFloor.innerHTML = safeData.floor;
                elRisk.innerHTML = safeData.risk;
                elEnergy.innerHTML = safeData.energy;
            }
        });
    }
});
</script>



<style>
:root {
    --rk-step-dark: #1e293b;
    --rk-step-blue: #0284c7;
    --rk-step-blue-light: #e0f2fe;
    --rk-step-bg: #ffffff;
    --rk-step-gray-light: #f8fafc;
    --rk-step-border: #e2e8f0;
    --rk-step-text: #475569;
    --rk-step-accent: #38bdf8;
    --rk-step-warning: #f59e0b;
}

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

/* Nagłówek */
.rk-stepper-header {
    padding: 40px 50px 30px;
    background: linear-gradient(145deg, var(--rk-step-dark) 0%, #0f172a 100%);
    color: #ffffff;
    text-align: center;
}

.rk-stepper-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0 0 15px 0;
    color: #ffffff;
    line-height: 1.3;
}

.rk-stepper-header p {
    color: #94a3b8;
    font-size: 16px;
    line-height: 1.6;
    margin: 0 auto;
    max-width: 750px;
}

.rk-highlight-badge {
    display: inline-block;
    background: rgba(245, 158, 11, 0.2);
    color: #fbbf24;
    padding: 4px 12px;
    border-radius: 6px;
    font-weight: 700;
    font-size: 14px;
    margin-top: 15px;
    border: 1px solid rgba(245, 158, 11, 0.3);
}

/* Przewodnik Krokowy */
.rk-stepper-body {
    padding: 40px 50px;
    background: var(--rk-step-bg);
}

.rk-step-item {
    position: relative;
    padding-left: 60px;
    padding-bottom: 30px;
}

/* Linia łącząca */
.rk-step-item::before {
    content: '';
    position: absolute;
    left: 23px;
    top: 45px;
    bottom: -5px;
    width: 2px;
    background: var(--rk-step-border);
    transition: background 0.3s;
}

.rk-step-item:last-child::before {
    display: none;
}

.rk-step-item.active::before {
    background: var(--rk-step-blue);
}

/* Kółko z numerem */
.rk-step-marker {
    position: absolute;
    left: 0;
    top: 0;
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: var(--rk-step-gray-light);
    border: 2px solid var(--rk-step-border);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 900;
    font-size: 18px;
    color: #94a3b8;
    z-index: 2;
    transition: all 0.3s ease;
    cursor: pointer;
}

.rk-step-item.active .rk-step-marker {
    background: var(--rk-step-blue);
    border-color: var(--rk-step-blue);
    color: #ffffff;
    box-shadow: 0 0 0 6px var(--rk-step-blue-light);
}

/* Nagłówek kroku */
.rk-step-trigger {
    background: transparent;
    border: none;
    width: 100%;
    text-align: left;
    padding: 12px 0;
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    outline: none;
}

.rk-step-trigger h3 {
    margin: 0;
    font-size: 19px;
    font-weight: 800;
    color: var(--rk-step-dark);
    transition: color 0.3s;
}

.rk-step-item.active .rk-step-trigger h3 {
    color: var(--rk-step-blue);
}

.rk-step-chevron {
    color: #cbd5e1;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-step-item.active .rk-step-chevron {
    transform: rotate(180deg);
    color: var(--rk-step-blue);
}

/* Treść kroku */
.rk-step-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.5s cubic-bezier(0.4, 0, 0.2, 1);
    opacity: 0;
}

.rk-step-item.active .rk-step-content {
    opacity: 1;
}

.rk-step-content-inner {
    padding: 10px 0 15px 0;
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-step-text);
}

.rk-step-content-inner a {
    color: var(--rk-step-blue);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* Interaktywny Algorytm w Kroku 5 */
.rk-decision-matrix {
    margin-top: 20px;
    background: var(--rk-step-gray-light);
    border-radius: 12px;
    padding: 20px;
    border: 1px solid var(--rk-step-border);
}

.rk-matrix-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--rk-step-dark);
    margin: 0 0 15px 0;
    letter-spacing: 0.5px;
}

.rk-matrix-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-bottom: 20px;
}

.rk-matrix-btn {
    background: #ffffff;
    border: 1px solid var(--rk-step-border);
    padding: 12px 15px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    color: var(--rk-step-text);
    cursor: pointer;
    transition: all 0.2s;
    text-align: left;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-matrix-btn:hover {
    border-color: var(--rk-step-blue);
    background: var(--rk-step-blue-light);
}

.rk-matrix-btn.selected {
    background: var(--rk-step-dark);
    color: #ffffff;
    border-color: var(--rk-step-dark);
}

.rk-matrix-result {
    background: #ffffff;
    border-left: 4px solid var(--rk-step-blue);
    padding: 15px 20px;
    border-radius: 0 8px 8px 0;
    font-size: 16px;
    font-weight: 700;
    color: var(--rk-step-dark);
    min-height: 54px;
    display: flex;
    align-items: center;
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-stepper-header { padding: 35px 25px 25px; }
    .rk-stepper-body { padding: 30px 20px; }
    .rk-step-item { padding-left: 50px; }
    .rk-step-marker { width: 38px; height: 38px; font-size: 16px; }
    .rk-step-item::before { left: 18px; top: 38px; }
    .rk-step-trigger h3 { font-size: 16px; }
    .rk-matrix-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-proces-strojenia",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Jak przebiega proces strojenia krzywej grzewczej w praktyce?",
    "description": "Zrozum profesjonalny, 6-krokowy proces regulacji parametrów pogodowych instalacji płaszczyznowej przy wykorzystaniu rotametrów i siłowników strefowych.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-algorytm-strojenia",
    "name": "Algorytm Strojenia Krzywej Grzewczej (Decyzyjny)",
    "description": "Macierz decyzyjna określająca wpływ zmian przesunięcia i nachylenia krzywej grzewczej na temperatury wewnętrzne z uwzględnieniem warunków pogodowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "strojenie krzywej grzewczej",
      "siłowniki termoelektryczne na rozdzielaczach",
      "rotametry i przepływy nominalne",
      "sterowanie strefowe ogrzewaniem",
      "temperatura referencyjna podłogówki"
    ],
    "measurementTechnique": "Algorytm oparty na iteracyjnej analizie zmian temperatur w pomieszczeniach w odstępach 48-godzinnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Podniesienie przesunięcia o 1.5K koryguje chłód przy dodatnich temperaturach na zewnątrz.",
        "Zwiększenie nachylenia o 0.05 ratuje sytuację przy drastycznych spadkach temperatury."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-kreator-strojenia",
    "name": "Interaktywny Asystent Kalibracji Pogodowej",
    "description": "Kreator krok-po-kroku z wbudowanym panelem diagnostycznym pomagającym instalatorom i inwestorom poprawnie wyregulować automatykę cieplną.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-stepper-container">
    
    <div class="rk-stepper-header">
        <h2>Jak przebiega proces strojenia krzywej grzewczej w praktyce?</h2>
        <p>Proces kalibracji to precyzyjna inżynieria. Wykonuje się go wyłącznie metodą kolejnych kroków, dając wylewce czas na akumulację ciepła.</p>
        <div class="rk-highlight-badge">Wymóg: Temperatura na zewnątrz poniżej 5°C. Odstępy 48-godzinne.</div>
    </div>

    <div class="rk-stepper-body" id="rkStepperWrapper">
        
        <!-- KROK 1 -->
        <div class="rk-step-item active">
            <div class="rk-step-marker">1</div>
            <button class="rk-step-trigger" type="button">
                <h3>Wyloguj układy automatyki strefowej</h3>
                <svg class="rk-step-chevron" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-step-content">
                <div class="rk-step-content-inner">
                    Otwórz całkowicie wszystkie <a href="https://projekt-ogrzewania.pl/silowniki-termoelektryczne-na-rozdzielaczach/">siłowniki termoelektryczne na rozdzielaczach</a> (zdejmij je mechanicznie z zaworów lub ustaw w systemie tryb manualnie otwarty NO/NC). W tej fazie decydujemy się na sterowanie instalacją wyłącznie z zewnętrznego czujnika pogodowego, omijając wpływ lokalnych termostatów pokojowych.
                </div>
            </div>
        </div>

        <!-- KROK 2 -->
        <div class="rk-step-item">
            <div class="rk-step-marker">2</div>
            <button class="rk-step-trigger" type="button">
                <h3>Ustaw przepływy nominalne</h3>
                <svg class="rk-step-chevron" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-step-content">
                <div class="rk-step-content-inner">
                    Wykorzystując <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametry na belce rozdzielacza</a>, ustaw przepływy cieczy zgodnie z wartościami wyliczonymi w Twoim projekcie wykonawczym. Zazwyczaj prawidłowe wartości oscylują w granicach od 1,0 do 2,5 litra na minutę na jedną pętlę grzewczą.
                </div>
            </div>
        </div>

        <!-- KROK 3 -->
        <div class="rk-step-item">
            <div class="rk-step-marker">3</div>
            <button class="rk-step-trigger" type="button">
                <h3>Ustal bazową krzywą startową</h3>
                <svg class="rk-step-chevron" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-step-content">
                <div class="rk-step-content-inner">
                    Dla nowego budynku mieszkalnego z <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">izolacją grubości 15–20 cm</a> na gruncie (najlepiej EPS 100) oraz 20 cm izolacji na ścianach zewnętrznych (o współczynniku przewodzenia 0,038 W/mK), ustaw bezpieczne parametry początkowe: nachylenie na poziomie 0,35 oraz przesunięcie równoległe równe 0 Kelwinów.
                </div>
            </div>
        </div>

        <!-- KROK 4 -->
        <div class="rk-step-item">
            <div class="rk-step-marker">4</div>
            <button class="rk-step-trigger" type="button">
                <h3>Mierz temperaturę referencyjną</h3>
                <svg class="rk-step-chevron" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-step-content">
                <div class="rk-step-content-inner">
                    Wybierz najchłodniejsze pomieszczenie w budynku (zazwyczaj od strony północnej, pozbawione pasywnych zysków słonecznych). Umieść tam dokładny rejestrator temperatury na wysokości około 1,5 metra nad posadzką, aby unikać bezpośredniego wpływu promieniowania podłogi.
                </div>
            </div>
        </div>

        <!-- KROK 5 -->
        <div class="rk-step-item">
            <div class="rk-step-marker">5</div>
            <button class="rk-step-trigger" type="button">
                <h3>Koryguj wg algorytmu decyzyjnego</h3>
                <svg class="rk-step-chevron" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-step-content">
                <div class="rk-step-content-inner">
                    Na podstawie obserwacji po 48 godzinach, wybierz z poniższego panelu objaw, który występuje w Twoim budynku, aby otrzymać precyzyjną instrukcję zmiany parametrów:
                    
                    <div class="rk-decision-matrix">
                        <div class="rk-matrix-title">Wybierz zaobserwowany objaw:</div>
                        <div class="rk-matrix-grid">
                            <button class="rk-matrix-btn" data-diag="cold-plus" type="button">
                                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#0284c7" 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>
                                Zimno przy +5°C do +15°C
                            </button>
                            <button class="rk-matrix-btn" data-diag="cold-minus" type="button">
                                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#2563eb" 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>
                                Zimno poniżej -5°C (Mróz)
                            </button>
                            <button class="rk-matrix-btn" data-diag="hot-plus" type="button">
                                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#ef4444" 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>
                                Za gorąco na plusie
                            </button>
                            <button class="rk-matrix-btn" data-diag="hot-minus" type="button">
                                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#b91c1c" 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>
                                Za gorąco przy mrozie
                            </button>
                        </div>
                        <div class="rk-matrix-result" id="rkDiagResult">
                            Wybierz jeden z powyższych objawów, aby wyświetlić zalecenie.
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- KROK 6 -->
        <div class="rk-step-item">
            <div class="rk-step-marker">6</div>
            <button class="rk-step-trigger" type="button">
                <h3>Zamknij pętlę sprzężenia</h3>
                <svg class="rk-step-chevron" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-step-content">
                <div class="rk-step-content-inner">
                    Gdy wreszcie uzyskasz pożądaną, stabilną temperaturę wewnętrzną (na przykład idealne 21 stopni Celsjusza we wszystkich obiegach), możesz przejść do włączenia <a href="https://projekt-ogrzewania.pl/sterowanie-strefowe-ogrzewaniem-czy-warto/">sterowania strefowego ogrzewaniem</a>. Załóż z powrotem siłowniki. Od teraz ich zadaniem będzie wyłącznie obcinanie przepływu, gdy pojawi się dodatkowe darmowe ciepło (kominek, sprzęt AGD, nasłonecznienie z południa), co zapobiegnie lokalnemu przegrzaniu.
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Logika Steppera (Akordeon kroków)
    var stepItems = document.querySelectorAll('.rk-step-item');
    
    for (var i = 0; i < stepItems.length; i++) {
        var trigger = stepItems[i].querySelector('.rk-step-trigger');
        var marker = stepItems[i].querySelector('.rk-step-marker');
        
        function toggleStep(item) {
            var isActive = item.classList.contains('active');
            var content = item.querySelector('.rk-step-content');
            
            // Zamknij wszystkie pozostałe kroki
            for (var j = 0; j < stepItems.length; j++) {
                if (stepItems[j] !== item) {
                    stepItems[j].classList.remove('active');
                    var otherContent = stepItems[j].querySelector('.rk-step-content');
                    otherContent.style.maxHeight = null;
                }
            }
            
            // Obsługa bieżącego kliknięcia
            if (isActive) {
                item.classList.remove('active');
                content.style.maxHeight = null;
            } else {
                item.classList.add('active');
                content.style.maxHeight = content.scrollHeight + "px";
            }
        }
        
        trigger.addEventListener('click', function() {
            toggleStep(this.parentElement);
        });
        
        marker.addEventListener('click', function() {
            toggleStep(this.parentElement);
        });
    }

    // Zainicjowanie poprawnej wysokości dla pierwszego (otwartego) kroku
    var firstContent = stepItems[0].querySelector('.rk-step-content');
    if (firstContent) {
        firstContent.style.maxHeight = firstContent.scrollHeight + "px";
    }

    // 2. Logika Panelu Diagnostycznego (Krok 5)
    var diagBtns = document.querySelectorAll('.rk-matrix-btn');
    var diagResult = document.getElementById('rkDiagResult');

    var diagMessages = {
        'cold-plus': '<strong>Rozwiązanie:</strong> Podnieś Przesunięcie krzywej o +1,5 K lub +2 K. Zostaw parametr nachylenia bez zmian.',
        'cold-minus': '<strong>Rozwiązanie:</strong> Zwiększ Nachylenie krzywej o +0,05 lub +0,1. System nie reaguje wystarczająco na mróz.',
        'hot-plus': '<strong>Rozwiązanie:</strong> Obniż Przesunięcie krzywej o -1,5 K. Baza startowa grzania jest ustawiona zbyt wysoko.',
        'hot-minus': '<strong>Rozwiązanie:</strong> Obniż Nachylenie krzywej o -0,05. Woda rośnie zbyt gwałtownie wraz ze spadkiem temperatury zewnętrznej.'
    };

    for (var d = 0; d < diagBtns.length; d++) {
        diagBtns[d].addEventListener('click', function() {
            // Usunięcie zaznaczenia ze wszystkich
            for (var b = 0; b < diagBtns.length; b++) {
                diagBtns[b].classList.remove('selected');
            }
            // Zaznaczenie bieżącego
            this.classList.add('selected');
            
            // Pobranie klucza i wstawienie odpowiedzi
            var key = this.getAttribute('data-diag');
            diagResult.innerHTML = diagMessages[key];

            // Przeliczenie wysokości akordeonu po zmianie zawartości (żeby tekst nie ucinał się w kroku 5)
            var activeContent = this.closest('.rk-step-content');
            if (activeContent) {
                activeContent.style.maxHeight = 'none'; // Tymczasowo by obliczyć nową przestrzeń
                var newHeight = activeContent.scrollHeight;
                activeContent.style.maxHeight = newHeight + "px";
            }
        });
    }
});
</script>



<style>
:root {
    --rk-scan-dark: #1e293b;
    --rk-scan-bg: #f8fafc;
    --rk-scan-border: #e2e8f0;
    --rk-scan-text: #475569;
    --rk-scan-red: #ef4444;
    --rk-scan-red-light: #fef2f2;
    --rk-scan-green: #10b981;
    --rk-scan-green-light: #ecfdf5;
}

.rk-scanner-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(15, 23, 42, 0.08);
    border: 1px solid var(--rk-scan-border);
    overflow: hidden;
    transition: all 0.4s ease;
}

/* Stan Zielony - Globalny */
.rk-scanner-container.mode-solution {
    border-color: #a7f3d0;
    box-shadow: 0 15px 35px -10px rgba(16, 185, 129, 0.15);
}

/* Nagłówek */
.rk-scanner-header {
    padding: 40px 50px 20px;
    text-align: center;
}

.rk-scanner-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-scan-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-scanner-header p {
    font-size: 16px;
    color: var(--rk-scan-text);
    margin: 0 auto;
    max-width: 700px;
    line-height: 1.6;
}

/* Główny Przełącznik */
.rk-scanner-toggle-box {
    padding: 0 50px 30px;
    display: flex;
    justify-content: center;
}

.rk-master-toggle {
    display: flex;
    background: #f1f5f9;
    padding: 6px;
    border-radius: 999px;
    position: relative;
    width: 100%;
    max-width: 450px;
}

.rk-toggle-option {
    flex: 1;
    padding: 14px 20px;
    text-align: center;
    font-size: 15px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    z-index: 2;
    transition: color 0.3s;
    border: none;
    background: transparent;
}

.rk-toggle-pill {
    position: absolute;
    top: 6px;
    bottom: 6px;
    left: 6px;
    width: calc(50% - 6px);
    background: var(--rk-scan-red);
    border-radius: 999px;
    z-index: 1;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 4px 10px rgba(239, 68, 68, 0.3);
}

/* Stany Przełącznika */
.rk-scanner-container.mode-error .rk-btn-error { color: #ffffff; }
.rk-scanner-container.mode-solution .rk-btn-solution { color: #ffffff; }

.rk-scanner-container.mode-solution .rk-toggle-pill {
    transform: translateX(100%);
    background: var(--rk-scan-green);
    box-shadow: 0 4px 10px rgba(16, 185, 129, 0.3);
}

/* Lista Kart */
.rk-cards-list {
    padding: 0 50px 40px;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-diag-card {
    background: var(--rk-scan-bg);
    border: 2px solid var(--rk-scan-border);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    align-items: flex-start;
    gap: 20px;
    transition: all 0.4s ease;
}

/* Ikony */
.rk-card-icon {
    width: 50px;
    height: 50px;
    border-radius: 14px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: all 0.4s ease;
}

/* Typografia w karcie */
.rk-card-content {
    flex: 1;
}

.rk-card-content h3 {
    margin: 0 0 8px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-scan-dark);
}

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

.rk-card-text a {
    color: inherit;
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Mechanizm przełączania widoku (CSS Only Content Toggle) */
.text-solution { display: none; }

.rk-scanner-container.mode-error .rk-diag-card {
    border-color: #fca5a5;
    background: var(--rk-scan-red-light);
}
.rk-scanner-container.mode-error .rk-card-icon {
    background: #fee2e2;
    color: var(--rk-scan-red);
}

.rk-scanner-container.mode-solution .rk-diag-card {
    border-color: #6ee7b7;
    background: var(--rk-scan-green-light);
}
.rk-scanner-container.mode-solution .rk-card-icon {
    background: #d1fae5;
    color: var(--rk-scan-green);
}
.rk-scanner-container.mode-solution .text-error { display: none; }
.rk-scanner-container.mode-solution .text-solution { display: block; }

/* SVG Icon states */
.icon-solution { display: none; }
.rk-scanner-container.mode-solution .icon-error { display: none; }
.rk-scanner-container.mode-solution .icon-solution { display: block; }

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-scanner-header { padding: 30px 20px 20px; }
    .rk-scanner-header h2 { font-size: 22px; }
    .rk-scanner-toggle-box { padding: 0 20px 25px; }
    .rk-cards-list { padding: 0 20px 30px; }
    .rk-diag-card { padding: 20px; flex-direction: column; gap: 15px; }
    .rk-card-icon { width: 44px; height: 44px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Jakie są najczęstsze błędy przy ustawianiu krzywej grzewczej i jak ich unikać?",
    "description": "Zdiagnozuj 4 krytyczne błędy konfiguracyjne instalatorów: od złego montażu czujnika pogodowego, po dławienie rotametrów i ignorowanie bezwładności jastrychu.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-diagnostyka",
    "name": "Diagnostyka Błędów Konfiguracyjnych Krzywej Grzewczej",
    "description": "Zestawienie technologicznych pomyłek w sterowaniu instalacją płaszczyznową wraz ze sprawdzonymi inżynierskimi rozwiązaniami.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "montaż czujnika pogodowego na ścianie",
      "dławienie przepływu pompy ciepła siłownikami",
      "brak zrównoważenia hydraulicznego rotametrami",
      "bezwładność cieplna wylewki betonowej",
      "błąd wysokiego ciśnienia instalacji"
    ],
    "measurementTechnique": "Identyfikacja przyczyn spadku efektywności instalacji w wyniku błędnych nastaw sterownika oraz przymykania pętli na rozdzielaczu.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Słońce nagrzewa czujnik południowy przekłamując odczyt o 5–12°C.",
        "Zbyt częste zmiany nastaw zaburzają ocenę ze względu na 48h cykl równowagi betonu."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-skaner",
    "name": "Interaktywny Skaner Błędów Instalacyjnych",
    "description": "Cyfrowe narzędzie pozwalające na dynamiczne przełączanie się między objawami błędów instalacyjnych a poprawną metodyką ich usuwania.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-scanner-container mode-error" id="rkDiagScanner">
    
    <div class="rk-scanner-header">
        <h2>Jakie są najczęstsze błędy przy ustawianiu krzywej grzewczej?</h2>
        <p>Błędy w konfiguracji sterowania pogodowego wynikają najczęściej z próby przeniesienia nawyków z wysoko-parametrowych instalacji grzejnikowych na systemy płaszczyznowe.</p>
    </div>

    <div class="rk-scanner-toggle-box">
        <div class="rk-master-toggle">
            <div class="rk-toggle-pill"></div>
            <button class="rk-toggle-option rk-btn-error" id="btn-show-errors" type="button">Objawy Błędów</button>
            <button class="rk-toggle-option rk-btn-solution" id="btn-show-solutions" type="button">Jak To Naprawić</button>
        </div>
    </div>

    <div class="rk-cards-list">
        
        <!-- Błąd 1 -->
        <div class="rk-diag-card">
            <div class="rk-card-icon">
                <svg class="icon-error" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                <svg class="icon-solution" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            </div>
            <div class="rk-card-content">
                <h3>1. Zła lokalizacja czujnika pogodowego</h3>
                <p class="rk-card-text text-error">Czujnik na ścianie południowej nagrzewa się od słońca, przekłamując odczyt o 5–12°C. <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">Sterownik pogodowy</a> gwałtownie obniża temperaturę zasilania, a dom szybko się wychładza.</p>
                <p class="rk-card-text text-solution">Montuj element pomiarowy wyłącznie na ścianie północnej lub północno-zachodniej, minimum 2 metry nad gruntem, bezwzględnie z dala od wyrzutni powietrza i dużych okien.</p>
            </div>
        </div>

        <!-- Błąd 2 -->
        <div class="rk-diag-card">
            <div class="rk-card-icon">
                <svg class="icon-error" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                <svg class="icon-solution" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            </div>
            <div class="rk-card-content">
                <h3>2. Dławienie przepływu siłownikami</h3>
                <p class="rk-card-text text-error">Gdy jest za gorąco, użytkownik zamiast obniżyć krzywą, odcina <a href="https://projekt-ogrzewania.pl/silowniki-termoelektryczne-na-rozdzielaczach/">siłowniki termoelektryczne</a>. Przepływ spada poniżej wymaganego (ok. 12-15 l/min), pompa ciepła taktuje i zgłasza błąd wysokiego ciśnienia (HP).</p>
                <p class="rk-card-text text-solution">Na czas regulacji otwórz wszystkie siłowniki (tryb manualny). Obniżaj całą krzywą grzewczą na sterowniku głównym, pozwalając na pełny, swobodny obieg wody w instalacji.</p>
            </div>
        </div>

        <!-- Błąd 3 -->
        <div class="rk-diag-card">
            <div class="rk-card-icon">
                <svg class="icon-error" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                <svg class="icon-solution" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            </div>
            <div class="rk-card-content">
                <h3>3. Brak zrównoważenia na rotametrach</h3>
                <p class="rk-card-text text-error">Regulacja krzywej bez wstępnego ustawienia przepływów nie działa. Krótkie pętle (np. 30 m) przegrzewają toaletę, a długie (110 m) są zimne. Inwestor sztucznie zawyża nachylenie krzywej pod najsłabszą strefę.</p>
                <p class="rk-card-text text-solution">Przed analizą krzywej ustaw <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametry</a> zgodnie z danymi z projektu. Krótkie pętle należy zdławić, a na najdłuższych wymusić przepływ rzędu 2.0 - 2.5 l/min.</p>
            </div>
        </div>

        <!-- Błąd 4 -->
        <div class="rk-diag-card">
            <div class="rk-card-icon">
                <svg class="icon-error" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                <svg class="icon-solution" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            </div>
            <div class="rk-card-content">
                <h3>4. Zbyt częste zmiany nastaw</h3>
                <p class="rk-card-text text-error">Użytkownik modyfikuje nachylenie co kilka godzin. Wyciąga błędne wnioski, ponieważ masywna wylewka betonowa nie zdążyła zareagować na poprzednią korektę temperatury.</p>
                <p class="rk-card-text text-solution">Uszanuj <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplną wylewki</a> (pojemność cieplna to około 1,0 kJ/kgK). Nowy stan równowagi w domu odczujesz po upływie minimum 24 do 48 godzin od zmiany parametru.</p>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var scanner = document.getElementById('rkDiagScanner');
    var btnErrors = document.getElementById('btn-show-errors');
    var btnSolutions = document.getElementById('btn-show-solutions');

    if (btnErrors) {
        btnErrors.addEventListener('click', function() {
            scanner.classList.remove('mode-solution');
            scanner.classList.add('mode-error');
        });
    }

    if (btnSolutions) {
        btnSolutions.addEventListener('click', function() {
            scanner.classList.remove('mode-error');
            scanner.classList.add('mode-solution');
        });
    }
});
</script>



<style>
:root {
    --rk-tab-dark: #0f172a;
    --rk-tab-blue: #0284c7;
    --rk-tab-blue-hover: #0369a1;
    --rk-tab-light: #f8fafc;
    --rk-tab-border: #cbd5e1;
    --rk-tab-text: #334155;
    --rk-tab-active-bg: #e0f2fe;
}

.rk-project-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(2, 132, 199, 0.15);
    border: 1px solid var(--rk-tab-border);
    overflow: hidden;
}

/* Nagłówek */
.rk-project-header {
    padding: 40px 50px 30px;
    text-align: center;
    background: #ffffff;
}

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

.rk-project-header p {
    font-size: 16px;
    color: var(--rk-tab-text);
    margin: 0 auto;
    max-width: 750px;
    line-height: 1.6;
}

/* Nawigacja Zakładek (Tabs) */
.rk-tabs-nav {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    padding: 0 50px 20px 50px;
    border-bottom: 2px solid var(--rk-tab-light);
}

.rk-tab-btn {
    flex: 1;
    min-width: 140px;
    background: var(--rk-tab-light);
    border: 1px solid var(--rk-tab-border);
    padding: 16px 20px;
    border-radius: 12px;
    cursor: pointer;
    font-weight: 700;
    font-size: 14px;
    color: var(--rk-tab-text);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    transition: all 0.3s ease;
}

.rk-tab-btn svg {
    color: #64748b;
    transition: color 0.3s;
}

.rk-tab-btn:hover {
    background: #f1f5f9;
    border-color: #94a3b8;
}

.rk-tab-btn.active {
    background: var(--rk-tab-active-bg);
    border-color: var(--rk-tab-blue);
    color: var(--rk-tab-blue);
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.1);
}

.rk-tab-btn.active svg {
    color: var(--rk-tab-blue);
}

/* Kontenery Treści */
.rk-tab-content-wrapper {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-tab-pane {
    display: none;
    animation: fadeInTab 0.4s ease forwards;
}

.rk-tab-pane.active {
    display: block;
}

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

.rk-pane-title {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-tab-dark);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-pane-title::before {
    content: '';
    display: block;
    width: 6px;
    height: 24px;
    background: var(--rk-tab-blue);
    border-radius: 4px;
}

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

.rk-pane-text a {
    color: var(--rk-tab-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px solid rgba(2, 132, 199, 0.3);
}

.rk-pane-text a:hover {
    border-bottom-color: var(--rk-tab-blue);
}

.rk-tech-box {
    background: var(--rk-tab-light);
    border-left: 4px solid var(--rk-tab-blue);
    padding: 15px 20px;
    border-radius: 0 8px 8px 0;
    font-size: 15px;
    color: var(--rk-tab-dark);
    font-weight: 600;
}

/* CTA */
.rk-project-cta {
    background: var(--rk-tab-dark);
    padding: 45px 50px;
    text-align: center;
}

.rk-project-cta h3 {
    color: #ffffff;
    font-size: 24px;
    font-weight: 900;
    margin: 0 0 15px 0;
}

.rk-project-cta p {
    color: #cbd5e1;
    font-size: 16px;
    margin: 0 auto 30px auto;
    max-width: 650px;
    line-height: 1.6;
}

.rk-btn-sell {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-tab-blue);
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 20px 40px;
    border-radius: 12px;
    text-decoration: none;
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.4);
    transition: all 0.3s ease;
    border: 2px solid transparent;
}

.rk-btn-sell:hover {
    background: var(--rk-tab-blue-hover);
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(2, 132, 199, 0.5);
    border-color: #7dd3fc;
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-project-header, .rk-tab-content-wrapper, .rk-project-cta { padding: 30px 20px; }
    .rk-tabs-nav { 
        padding: 0 20px 20px 20px; 
        flex-direction: column; /* Pionowy układ na mobile, brak przewijania poziomego */
    }
    .rk-tab-btn {
        flex-direction: row;
        justify-content: flex-start;
        padding: 16px 20px;
        min-width: 100%;
    }
    .rk-btn-sell { width: 100%; font-size: 16px; padding: 18px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-wplyw-projektu",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Jak krzywa grzewcza wpływa na projekt ogrzewania podłogowego i OZC?",
    "description": "Dokładna analiza zależności między parametrami krzywej grzewczej, grubością izolacji, buforem ciepła i rekuperacją na etapie projektowania hydraulicznego.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-zaleznosci-projektowe",
    "name": "Zależności hydrauliczne i izolacyjne w projektowaniu krzywej grzewczej",
    "description": "Zestawienie parametrów inżynieryjnych łączących obliczenia OZC z rozstawem rur i doborem armatury kotłowni.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zmniejszenie rozstawu rur ogrzewania podłogowego",
      "dobór pompy obiegowej do podłogówki",
      "obliczanie strat ciepła budynku ozc",
      "wpływ rekuperacji na ogrzewanie",
      "grubość styropianu pod ogrzewanie podłogowe"
    ],
    "measurementTechnique": "Algorytm badający wpływ zmiany gęstości rur i oporu cieplnego izolacji na wymaganą maksymalną temperaturę zasilania pętli grzewczych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dogęszczenie rur w strefach brzegowych eliminuje konieczność podnoszenia krzywej globalnej.",
        "Zastosowanie bufora jako sprzęgła hydraulicznego stabilizuje przepływy."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-zaleznosci",
    "name": "Symulator Wpływu Komponentów na Krzywą Grzewczą",
    "description": "Narzędzie interaktywne prezentujące relacje między poszczególnymi etapami projektowania HVAC a finalnym ustawieniem sterownika pogodowego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-project-container">
    
    <div class="rk-project-header">
        <h2>Jak krzywa grzewcza wpływa na projekt i OZC?</h2>
        <p>Ustawienie optymalnej, niezwykle płaskiej krzywej grzewczej (o nachyleniu mniejszym lub równym 0.3) jest możliwe wyłącznie wtedy, gdy etap wykonawczy został poprzedzony precyzyjnymi obliczeniami inżynieryjnymi. Poznaj 4 filary profesjonalnego przygotowania.</p>
    </div>

    <!-- Zakładki -->
    <div class="rk-tabs-nav" id="rkTabNav">
        <button class="rk-tab-btn active" data-target="tab-ozc" type="button">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="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>
            Projekt OZC
        </button>
        <button class="rk-tab-btn" data-target="tab-rury" type="button">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"></path><polyline points="14 2 14 8 20 8"></polyline><path d="M2 15h10"></path><path d="M9 18v-6"></path></svg>
            Gęstość Rur
        </button>
        <button class="rk-tab-btn" data-target="tab-izolacja" type="button">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
            Izolacja
        </button>
        <button class="rk-tab-btn" data-target="tab-hydraulika" type="button">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg>
            Pompa i Bufor
        </button>
    </div>

    <!-- Treść Zakładek -->
    <div class="rk-tab-content-wrapper">
        
        <!-- Tab 1: OZC -->
        <div class="rk-tab-pane active" id="tab-ozc">
            <h3 class="rk-pane-title">Bilans Cieplny (PN-EN 12831)</h3>
            <p class="rk-pane-text">
                Profesjonalne <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">obliczanie strat ciepła budynku OZC</a> to absolutny fundament. Wyznaczenie dokładnego zapotrzebowania na moc (Q_i) dla każdego pojedynczego pomieszczenia pozwala na idealne dopasowanie parametrów zasilania. Co więcej, <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">wpływ rekuperacji na ogrzewanie</a> (wentylacja mechaniczna ze sprawnością odzysku powyżej 85%) drastycznie spłaszcza krzywą, pozwalając obniżyć jej nachylenie o 0,05–0,08 w skali całego obiektu.
            </p>
            <div class="rk-tech-box">
                Efekt: Obniżenie punktu bazowego krzywej grzewczej dla całego systemu.
            </div>
        </div>

        <!-- Tab 2: Rury -->
        <div class="rk-tab-pane" id="tab-rury">
            <h3 class="rk-pane-title">Rozstaw i Strefy Brzegowe</h3>
            <p class="rk-pane-text">
                Opracowany <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">projekt hydrauliczny instalacji</a> pozwala strategicznie zarządzać mocą. Świadome <a href="https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/">zmniejszenie rozstawu rur ogrzewania podłogowego</a> z VA 15 cm na VA 10 cm podnosi lokalną moc grzewczą o 18% bez konieczności podnoszenia temperatury zasilania na kotle. Zastosowanie zagęszczenia w obszarach takich jak <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">strefy brzegowe przy oknach</a> kompensuje chłód od przeszkleń, umożliwiając pracę na bardzo niskich parametrach.
            </p>
            <div class="rk-tech-box">
                Efekt: Wyrównanie niedoborów mocy bez podnoszenia temperatury zasilania.
            </div>
        </div>

        <!-- Tab 3: Izolacja -->
        <div class="rk-tab-pane" id="tab-izolacja">
            <h3 class="rk-pane-title">Opór Cieplny Przegród</h3>
            <p class="rk-pane-text">
                Odpowiednia <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">grubość styropianu pod ogrzewanie podłogowe</a> decyduje o tym, czy grzejesz dom, czy grunt pod nim. Zgodnie z normą PN-EN 1264-4, <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">opór cieplny izolacji posadzki</a> na gruncie musi być równy lub większy niż 3.5 m2K/W. Gwarantuje to, że strumień energii kierowany jest w 95% ku górze. To właśnie doskonała izolacja podłogi i ścian sprawia, że możliwa jest do zastosowania wysoce energooszczędna, płaska krzywa grzewcza.
            </p>
            <div class="rk-tech-box">
                Wymóg: U mniejsze lub równe 0.15 W/m²K dla podłogi na gruncie.
            </div>
        </div>

        <!-- Tab 4: Hydraulika -->
        <div class="rk-tab-pane" id="tab-hydraulika">
            <h3 class="rk-pane-title">Zarządzanie Zładem Wody</h3>
            <p class="rk-pane-text">
                Przy systemach pracujących na ekstremalnie niskich parametrach (np. temperatura zasilania maksymalna na poziomie 32°C), kluczowy jest prawidłowy <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">dobór pompy obiegowej do podłogówki</a> zapewniający odpowiedni strumień masy. W układach ze strefowymi termostatami niezbędny okazuje się <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła jako sprzęgło hydrauliczne</a> w konfiguracji 4-rurowej, który chroni pompę przed brakiem odbioru zładu i uniemożliwia taktowanie sprężarki.
            </p>
            <div class="rk-tech-box">
                Bezpieczeństwo: Stały i stabilny przepływ wymuszony niezależnie od siłowników.
            </div>
        </div>

    </div>

    <!-- Wezwanie do akcji (CTA) -->
    <div class="rk-project-cta">
        <h3>Nie ryzykuj błędów na etapie wylewki</h3>
        <p>Tylko pełna dokumentacja inżynierska gwarantuje, że podłoga będzie oddawać ciepło równomiernie, a rachunki spadną do absolutnego minimum. Zamów projekt u ekspertów.</p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-btn-sell">
            ZAMÓW PROFESJONALNY PROJEKT PODŁOGÓWKI
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
        </a>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var tabs = document.querySelectorAll('.rk-tab-btn');
    var panes = document.querySelectorAll('.rk-tab-pane');

    for (var i = 0; i < tabs.length; i++) {
        tabs[i].addEventListener('click', function() {
            var targetId = this.getAttribute('data-target');
            
            // Usunięcie klasy active ze wszystkich przycisków
            for (var j = 0; j < tabs.length; j++) {
                tabs[j].classList.remove('active');
            }
            
            // Usunięcie klasy active ze wszystkich paneli
            for (var k = 0; k < panes.length; k++) {
                panes[k].classList.remove('active');
            }
            
            // Dodanie klasy active do klikniętego przycisku
            this.classList.add('active');
            
            // Dodanie klasy active do odpowiedniego panelu za pomocą if
            var targetPane = document.getElementById(targetId);
            if (targetPane) {
                targetPane.classList.add('active');
            }
        });
    }
});
</script>



<style>
:root {
    --rk-case-dark: #0f172a;
    --rk-case-blue: #0284c7;
    --rk-case-bg: #f8fafc;
    --rk-case-border: #e2e8f0;
    --rk-case-text: #475569;
    --rk-case-red: #ef4444;
    --rk-case-red-bg: #fef2f2;
    --rk-case-green: #10b981;
    --rk-case-green-bg: #ecfdf5;
}

.rk-casestudy-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.08);
    border: 1px solid var(--rk-case-border);
    overflow: hidden;
    transition: border-color 0.4s ease, box-shadow 0.4s ease;
}

.rk-casestudy-container[data-status="before"] {
    border-color: #fca5a5;
    box-shadow: 0 20px 40px -10px rgba(239, 68, 68, 0.1);
}

.rk-casestudy-container[data-status="after"] {
    border-color: #6ee7b7;
    box-shadow: 0 20px 40px -10px rgba(16, 185, 129, 0.1);
}

/* Nagłówek i Opis */
.rk-case-header {
    padding: 40px 50px 30px;
    background: #ffffff;
}

.rk-case-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--rk-case-dark);
    color: #ffffff;
    padding: 6px 14px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

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

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

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

/* Informacje o Inwestycji */
.rk-case-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    padding: 0 50px 30px;
}

.rk-meta-item {
    display: flex;
    align-items: center;
    gap: 10px;
    background: var(--rk-case-bg);
    padding: 10px 18px;
    border-radius: 12px;
    border: 1px solid var(--rk-case-border);
    font-size: 14px;
    font-weight: 600;
    color: var(--rk-case-dark);
}

.rk-meta-icon {
    color: var(--rk-case-blue);
}

/* Przełącznik Interaktywny */
.rk-case-switch-area {
    padding: 0 50px 30px;
}

.rk-case-toggle {
    display: flex;
    background: #f1f5f9;
    padding: 6px;
    border-radius: 16px;
    position: relative;
    max-width: 600px;
    margin: 0 auto;
}

.rk-case-btn {
    flex: 1;
    padding: 16px 20px;
    text-align: center;
    font-size: 16px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    z-index: 2;
    border: none;
    background: transparent;
    transition: color 0.3s;
    border-radius: 10px;
}

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

/* Kolorystyka i Stany Przełącznika */
.rk-casestudy-container[data-status="before"] .rk-btn-before { color: var(--rk-case-red); }
.rk-casestudy-container[data-status="before"] .rk-toggle-bg {
    background: #ffffff;
    box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);
    border: 1px solid #fca5a5;
}

.rk-casestudy-container[data-status="after"] .rk-btn-after { color: var(--rk-case-green); }
.rk-casestudy-container[data-status="after"] .rk-toggle-bg {
    transform: translateX(100%);
    background: #ffffff;
    box-shadow: 0 4px 12px rgba(16, 185, 129, 0.15);
    border: 1px solid #6ee7b7;
}

/* Panel Danych (Dashboard) */
.rk-case-dashboard {
    padding: 30px 50px 40px;
    background: var(--rk-case-bg);
    border-top: 1px solid var(--rk-case-border);
    transition: background 0.4s;
}

.rk-casestudy-container[data-status="before"] .rk-case-dashboard { background: var(--rk-case-red-bg); }
.rk-casestudy-container[data-status="after"] .rk-case-dashboard { background: var(--rk-case-green-bg); }

.rk-dash-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    margin-bottom: 25px;
}

.rk-stat-card {
    background: #ffffff;
    border: 1px solid var(--rk-case-border);
    border-radius: 16px;
    padding: 25px 20px;
    text-align: center;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
    position: relative;
    overflow: hidden;
}

.rk-stat-card::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; height: 4px;
}

.rk-casestudy-container[data-status="before"] .rk-stat-card::before { background: var(--rk-case-red); }
.rk-casestudy-container[data-status="after"] .rk-stat-card::before { background: var(--rk-case-green); }

.rk-stat-label {
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #94a3b8;
    margin-bottom: 10px;
    display: block;
    letter-spacing: 0.5px;
}

.rk-stat-val {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-case-dark);
    margin: 0 0 5px 0;
}

.rk-stat-desc {
    font-size: 13px;
    color: var(--rk-case-text);
    margin: 0;
}

/* Notatka Diagnostyczna */
.rk-case-note {
    background: #ffffff;
    border: 1px solid var(--rk-case-border);
    border-radius: 12px;
    padding: 20px;
    display: flex;
    gap: 15px;
    align-items: flex-start;
}

.rk-note-icon {
    width: 24px;
    height: 24px;
    flex-shrink: 0;
    margin-top: 2px;
}

.rk-casestudy-container[data-status="before"] .rk-note-icon { color: var(--rk-case-red); }
.rk-casestudy-container[data-status="after"] .rk-note-icon { color: var(--rk-case-green); }

.rk-note-text {
    font-size: 15px;
    line-height: 1.6;
    color: var(--rk-case-text);
    margin: 0;
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-case-header { padding: 30px 20px 20px; }
    .rk-case-header h2 { font-size: 24px; }
    .rk-case-meta { padding: 0 20px 20px; flex-direction: column; gap: 10px; }
    .rk-meta-item { width: 100%; justify-content: center; }
    .rk-case-switch-area { padding: 0 20px 25px; }
    .rk-case-toggle { flex-direction: column; }
    .rk-toggle-bg { width: calc(100% - 12px); height: calc(50% - 6px); bottom: auto; }
    .rk-casestudy-container[data-status="after"] .rk-toggle-bg { transform: translateY(100%); }
    .rk-case-dashboard { padding: 25px 20px; }
    .rk-dash-grid { grid-template-columns: 1fr; gap: 15px; } /* Pionowy układ kafelków na smartfony */
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-case-study",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Studium Przypadku (Case Study): Rzeczywiste koszty błędnie ustawionej krzywej",
    "description": "Zestawienie danych przed i po optymalizacji automatyki pogodowej na przykładzie domu jednorodzinnego 160 metrów kwadratowych w okolicach Rzeszowa.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-wyniki-optymalizacji",
    "name": "Wyniki zysku energetycznego po kalibracji sterowania",
    "description": "Pomiary zużycia energii, taktowania sprężarki oraz COP zestawione na przykładzie realnego wdrożenia optymalizacji krzywej pogodowej w domu WT2021.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "rzeczywiste oszczędności na kosztach ogrzewania w skali roku",
      "czy pompa ciepła ogrzeje dom z podłogówką",
      "najczęstsze błędy przy montażu ogrzewania podłogowego",
      "optymalizacja krzywej grzewczej 0.35",
      "taktowanie pompy ciepła podłogówka"
    ],
    "measurementTechnique": "Porównanie danych liczbowych (rachunki za energię elektryczną, średnia temperatura wody zasilającej, cykle pracy jednostki zewnętrznej) zarejestrowanych przed i po wykonanej usłudze audytu hydraulicznego.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Stan przed: Krzywa ustawiona na wartość 0.8 doprowadziła do taktowania i wysokich kosztów ogrzewania rzędu 3800 PLN.",
        "Stan po: Obniżenie krzywej do 0.35 oraz prawidłowe wyrównanie na belkach obniżyło rachunek do 2450 PLN w sezonie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-case-study",
    "name": "Interaktywny Przegląd Studium Przypadku",
    "description": "Moduł aplikacyjny pozwalający czytelnikowi dynamicznie przełączać i analizować parametry diagnostyczne systemu przed i po interwencji inżynierskiej.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-casestudy-container" id="rkCaseApp" data-status="before">
    
    <div class="rk-case-header">
        <div class="rk-case-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            Case Study (Studium Przypadku)
        </div>
        <h2>Ile kosztuje "ustawienie fabryczne" instalatora?</h2>
        <p>Pan Tomasz przez pierwszy rok zamieszkiwania w nowym domu borykał się z chłodem od dużych okien oraz rachunkami za prąd, które nie przystawały do nowoczesnego budownictwa. Sprawdź, dlaczego <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstsze błędy przy uruchamianiu podłogówki</a> potrafią zrujnować portfel.</p>
    </div>

    <div class="rk-case-meta">
        <div class="rk-meta-item">
            <svg class="rk-meta-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"></path><circle cx="12" cy="10" r="3"></circle></svg>
            Okolice Rzeszowa (woj. podkarpackie)
        </div>
        <div class="rk-meta-item">
            <svg class="rk-meta-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg>
            Dom WT2021, 160 mkw
        </div>
        <div class="rk-meta-item">
            <svg class="rk-meta-icon" width="18" height="18" 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><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line></svg>
            Pompa Ciepła 8 kW
        </div>
    </div>

    <div class="rk-case-switch-area">
        <div class="rk-case-toggle">
            <div class="rk-toggle-bg"></div>
            <button class="rk-case-btn rk-btn-before" id="btnCaseBefore" type="button">Sezon 1: Błędy</button>
            <button class="rk-case-btn rk-btn-after" id="btnCaseAfter" type="button">Sezon 2: Optymalizacja</button>
        </div>
    </div>

    <div class="rk-case-dashboard">
        
        <div class="rk-dash-grid">
            <div class="rk-stat-card">
                <span class="rk-stat-label">Krzywa Grzewcza</span>
                <p class="rk-stat-val" id="valCaseCurve">0.80</p>
                <p class="rk-stat-desc" id="descCaseCurve">Nastawa fabryczna (zbyt wysoka)</p>
            </div>
            
            <div class="rk-stat-card">
                <span class="rk-stat-label">Praca Sprężarki</span>
                <p class="rk-stat-val" id="valCaseCompressor">32 cykle</p>
                <p class="rk-stat-desc" id="descCaseCompressor">Na dobę (Ekstremalne taktowanie)</p>
            </div>
            
            <div class="rk-stat-card">
                <span class="rk-stat-label">Koszt Sezonu</span>
                <p class="rk-stat-val" id="valCaseCost">3800 PLN</p>
                <p class="rk-stat-desc" id="descCaseCost">Płacone za zaniżony wskaźnik COP</p>
            </div>
        </div>

        <div class="rk-case-note">
            <svg class="rk-note-icon" id="iconCaseNote" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
            <p class="rk-note-text" id="textCaseNote">
                <strong>Diagnoza początkowa:</strong> Instalator pozostawił strome nachylenie krzywej, dedykowane dla grzejników w starym budownictwie. Gdy w domu robiło się nieznośnie gorąco, Pan Tomasz zamykał przepływy termostatami ściennymi. Efekt? Pompa ciepła dusiła się na zamkniętym obiegu i ulegała przedwczesnemu zużyciu.
            </p>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var container = document.getElementById('rkCaseApp');
    var btnBefore = document.getElementById('btnCaseBefore');
    var btnAfter = document.getElementById('btnCaseAfter');

    // Elementy do aktualizacji tekstu
    var valCurve = document.getElementById('valCaseCurve');
    var descCurve = document.getElementById('descCaseCurve');
    var valCompress = document.getElementById('valCaseCompressor');
    var descCompress = document.getElementById('descCaseCompressor');
    var valCost = document.getElementById('valCaseCost');
    var descCost = document.getElementById('descCaseCost');
    
    var iconNote = document.getElementById('iconCaseNote');
    var textNote = document.getElementById('textCaseNote');

    // Funkcje aktualizujące (Bez użycia &&)
    function setBeforeState() {
        container.setAttribute('data-status', 'before');
        
        valCurve.innerText = '0.80';
        descCurve.innerText = 'Nastawa fabryczna (zbyt wysoka)';
        
        valCompress.innerText = '32 cykle';
        descCompress.innerText = 'Na dobę (Ekstremalne taktowanie)';
        
        valCost.innerText = '3800 PLN';
        descCost.innerText = 'Płacone za zaniżony wskaźnik COP';

        iconNote.innerHTML = '<circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line>';
        textNote.innerHTML = '<strong>Diagnoza początkowa:</strong> Instalator pozostawił strome nachylenie krzywej, dedykowane dla starych instalacji. Gdy w domu robiło się nieznośnie gorąco, Pan Tomasz zamykał przepływy termostatami ściennymi. Efekt? <a href="https://projekt-ogrzewania.pl/czy-pompa-ciepla-ogrzeje-dom-z-podlogowka/">Pompa ciepła</a> dusiła się na zamkniętym zładzie wody.';
    }

    function setAfterState() {
        container.setAttribute('data-status', 'after');
        
        valCurve.innerText = '0.35';
        descCurve.innerText = 'Płaska charakterystyka WT2021';
        
        valCompress.innerText = '5 cykli';
        descCompress.innerText = 'Stabilna, płynna praca na niskich obrotach';
        
        valCost.innerText = '2450 PLN';
        descCost.innerText = 'Rzeczywiste oszczędności finansowe';

        iconNote.innerHTML = '<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>';
        textNote.innerHTML = '<strong>Korekta Inżynierska:</strong> Otworzyliśmy wszystkie pętle, wymuszając pełny zład instalacji. Krzywa grzewcza została spłaszczona do poziomu 0.35 i podniesiona delikatnym przesunięciem. Osiągnęliśmy <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</a> oraz ciepłą podłogę przez 24 godziny na dobę.';
    }

    // Podpięcie zdarzeń
    if (btnBefore) {
        btnBefore.addEventListener('click', setBeforeState);
    }
    
    if (btnAfter) {
        btnAfter.addEventListener('click', setAfterState);
    }
});
</script>



<style>
:root {
    --rk-auth-dark: #0f172a;
    --rk-auth-blue: #0284c7;
    --rk-auth-bg: #f8fafc;
    --rk-auth-border: #e2e8f0;
    --rk-auth-text: #475569;
    --rk-auth-social: #f1f5f9;
}

.rk-author-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(15, 23, 42, 0.08);
    border: 1px solid var(--rk-auth-border);
    overflow: hidden;
    display: flex;
    flex-wrap: wrap;
}

/* Lewa Kolumna: Profil */
.rk-author-profile {
    flex: 1;
    min-width: 300px;
    background: var(--rk-auth-bg);
    padding: 40px;
    border-right: 1px solid var(--rk-auth-border);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.rk-author-photo {
    width: 140px;
    height: 140px;
    border-radius: 50%;
    object-fit: cover;
    border: 4px solid #ffffff;
    box-shadow: 0 10px 20px rgba(0,0,0,0.1);
    margin-bottom: 20px;
}

.rk-author-name {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-auth-dark);
    margin: 0 0 5px 0;
}

.rk-author-title {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-auth-blue);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin: 0 0 20px 0;
}

/* Social Media */
.rk-social-links {
    display: flex;
    gap: 10px;
    margin-bottom: 30px;
}

.rk-social-btn {
    width: 40px;
    height: 40px;
    border-radius: 8px;
    background: #ffffff;
    border: 1px solid var(--rk-auth-border);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-auth-dark);
    text-decoration: none;
}

.rk-social-btn:hover {
    background: var(--rk-auth-blue);
    color: #ffffff;
    border-color: var(--rk-auth-blue);
}

/* Prawa Kolumna: Treść i Interakcja */
.rk-author-content {
    flex: 2;
    min-width: 320px;
    padding: 40px 50px;
    background: #ffffff;
}

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

/* Interaktywne menu opinii */
.rk-auth-tabs {
    display: flex;
    gap: 10px;
    margin-bottom: 25px;
    border-bottom: 2px solid var(--rk-auth-border);
    padding-bottom: 15px;
}

.rk-auth-tab-btn {
    background: var(--rk-auth-social);
    border: 1px solid var(--rk-auth-border);
    padding: 10px 16px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-auth-text);
    cursor: pointer;
}

.rk-auth-tab-btn.active {
    background: var(--rk-auth-blue);
    color: #ffffff;
    border-color: var(--rk-auth-blue);
}

/* Cytat */
.rk-quote-box {
    position: relative;
    padding: 25px 30px;
    background: #f0f9ff;
    border-left: 4px solid var(--rk-auth-blue);
    border-radius: 0 12px 12px 0;
    margin-bottom: 20px;
}

.rk-quote-icon {
    position: absolute;
    top: -15px;
    left: 20px;
    background: #ffffff;
    padding: 0 10px;
    color: var(--rk-auth-blue);
}

.rk-quote-text {
    font-size: 17px;
    font-weight: 600;
    color: var(--rk-auth-dark);
    line-height: 1.6;
    margin: 0;
    font-style: italic;
}

/* Zwykły tekst rozwinięcia */
.rk-auth-desc {
    font-size: 15px;
    color: var(--rk-auth-text);
    line-height: 1.7;
    margin: 0;
}

.rk-auth-desc a {
    color: var(--rk-auth-blue);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Ukrywanie zakładek - bez animacji */
.rk-auth-panel {
    display: none;
}

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

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-author-profile { padding: 30px 20px; border-right: none; border-bottom: 1px solid var(--rk-auth-border); }
    .rk-author-content { padding: 30px 20px; }
    .rk-author-h2 { font-size: 22px; }
    .rk-auth-tabs { flex-direction: column; border-bottom: none; gap: 8px; padding-bottom: 0; }
    .rk-auth-tab-btn { width: 100%; text-align: center; padding: 14px; }
    .rk-quote-box { padding: 20px; }
    .rk-quote-text { font-size: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-podsumowanie-autorskie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Krzywa grzewcza zdaniem Roberta Kucharskiego",
    "description": "Autorskie podsumowanie tematyki optymalizacji krzywej grzewczej i projektowania układów hydraulicznych przez eksperta HVAC, Roberta Kucharskiego.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "jobTitle": "Inżynier HVAC & CEO Projekt-Ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-wiedza-ekspercka",
    "name": "Baza Wiedzy Eksperckiej: Robert Kucharski",
    "description": "Zbiór autorskich opinii, doświadczeń i rozwiązań instalacyjnych związanych ze sterowaniem pogodowym w domach jednorodzinnych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "ekspert pomp ciepła",
      "projektowanie instalacji grzewczych",
      "optymalizacja krzywej grzewczej",
      "autorytet branży hvac",
      "koszty eksploatacji ogrzewania podłogowego"
    ],
    "measurementTechnique": "Weryfikacja założeń projektowych na podstawie doświadczenia z setek zrealizowanych inwestycji grzewczych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Optymalizacja automatyki pogodowej wymaga kompleksowego podejścia inżynieryjnego.",
        "Kluczem do niezawodności jest pełna zgodność rozstawu rur i izolacji z projektem OZC."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-panel-ekspercki",
    "name": "Panel Konsultacji Eksperckiej",
    "description": "Moduł umożliwiający interaktywne zapoznanie się z opiniami głównego inżyniera w kluczowych aspektach działania instalacji: ekonomii, komforcie i automatyce.",
    "applicationCategory": "ReferenceApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-author-container">
    
    <!-- Kolumna Lewa: Wizytówka Autora -->
    <div class="rk-author-profile">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski - Inżynier HVAC" class="rk-author-photo" />
        <h3 class="rk-author-name">Robert Kucharski</h3>
        <p class="rk-author-title">Główny Projektant HVAC</p>
        
        <div class="rk-social-links">
            <a href="https://www.facebook.com/projektogrzewaniapl/" target="_blank" rel="noopener noreferrer" class="rk-social-btn" aria-label="Facebook">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg>
            </a>
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener noreferrer" class="rk-social-btn" aria-label="LinkedIn">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg>
            </a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="noopener noreferrer" class="rk-social-btn" aria-label="X Twitter">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4l11.733 16h4.267l-11.733 -16z"></path><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path></svg>
            </a>
        </div>

        <p style="font-size: 13px; color: #64748b; line-height: 1.5; margin: 0;">
            Specjalista z ponad 15-letnim doświadczeniem. Twórca setek bezbłędnych instalacji płaszczyznowych w Polsce.
        </p>
    </div>

    <!-- Kolumna Prawa: Interaktywne Opinie -->
    <div class="rk-author-content">
        <h2 class="rk-author-h2">Krzywa grzewcza zdaniem Roberta Kucharskiego</h2>
        
        <div class="rk-auth-tabs" id="rkOpinionTabs">
            <button class="rk-auth-tab-btn active" data-target="opin-ekonomia" type="button">O Ekonomii</button>
            <button class="rk-auth-tab-btn" data-target="opin-bledy" type="button">O Błędach Instalatorów</button>
            <button class="rk-auth-tab-btn" data-target="opin-projekt" type="button">O Projektowaniu</button>
        </div>

        <!-- Panel 1 -->
        <div class="rk-auth-panel active" id="opin-ekonomia">
            <div class="rk-quote-box">
                <div class="rk-quote-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"/></svg>
                </div>
                <p class="rk-quote-text">
                    Nigdy nie traktuj krzywej grzewczej jak magicznego przycisku, który sam naprawi wadliwą instalację. To tylko oprogramowanie. Jeśli fizyka budynku się nie spina, żadna elektronika tego nie oszuka.
                </p>
            </div>
            <p class="rk-auth-desc">
                Z mojego doświadczenia wynika, że aż 8 na 10 inwestorów płaci zawyżone rachunki za prąd do pompy ciepła, ponieważ ich system jest dławiony lokalnymi termostatami. Świadome zarządzanie <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/">zładem wody grzewczej</a> i otwarcie przepływów na rotametrach to jedyna droga do prawdziwych oszczędności.
            </p>
        </div>

        <!-- Panel 2 -->
        <div class="rk-auth-panel" id="opin-bledy">
            <div class="rk-quote-box">
                <div class="rk-quote-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"/></svg>
                </div>
                <p class="rk-quote-text">
                    Najgorsze co możesz zrobić, to korygować nachylenie krzywej codziennie rano. Beton ma gigantyczną bezwładność. Reaguje dopiero po dwóch dobach.
                </p>
            </div>
            <p class="rk-auth-desc">
                Instalatorzy, którzy konfigurują automatykę "na oko" i opuszczają kotłownię, zostawiają klienta z ogromnym problemem. Brak świadomości, jak <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">okładzina podłogowa</a> opóźnia oddawanie ciepła, prowadzi do ciągłego przegrzewania i wychładzania pomieszczeń.
            </p>
        </div>

        <!-- Panel 3 -->
        <div class="rk-auth-panel" id="opin-projekt">
            <div class="rk-quote-box">
                <div class="rk-quote-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"/></svg>
                </div>
                <p class="rk-quote-text">
                    Prawidłowa krzywa grzewcza rodzi się na papierze milimetrowym inżyniera, a nie w menu sterownika w gotowej kotłowni.
                </p>
            </div>
            <p class="rk-auth-desc">
                Złota zasada jest brutalnie prosta. Bez rzetelnych <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">obliczeń strat cieplnych</a> dla poszczególnych pokoi oraz bez indywidualnego dopasowania gęstości rur, Twój dom nigdy nie osiągnie standardu energetycznego, za który zapłaciłeś. Zadbaj o inżynieryjne fundamenty.
            </p>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var tabs = document.querySelectorAll('.rk-auth-tab-btn');
    var panels = document.querySelectorAll('.rk-auth-panel');

    for (var i = 0; i < tabs.length; i++) {
        tabs[i].addEventListener('click', function() {
            var targetId = this.getAttribute('data-target');
            
            // Czyszczenie klas aktywnych
            for (var j = 0; j < tabs.length; j++) {
                tabs[j].classList.remove('active');
            }
            for (var k = 0; k < panels.length; k++) {
                panels[k].classList.remove('active');
            }
            
            // Ustawienie aktywnych (bez animacji, instant)
            this.classList.add('active');
            var activePanel = document.getElementById(targetId);
            if (activePanel) {
                activePanel.classList.add('active');
            }
        });
    }
});
</script>



<style>
:root {
    --rk-faq-dark: #1e293b;
    --rk-faq-blue: #0284c7;
    --rk-faq-bg: #f8fafc;
    --rk-faq-border: #e2e8f0;
    --rk-faq-text: #475569;
    --rk-faq-hover: #f1f5f9;
    --rk-faq-accent: #38bdf8;
}

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

/* Nagłówek Sekcji */
.rk-faq-header {
    padding: 40px 50px 30px;
    background: linear-gradient(to right, var(--rk-faq-dark), #0f172a);
    color: #ffffff;
    text-align: center;
}

.rk-faq-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    letter-spacing: -0.5px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
}

.rk-faq-header h2 svg {
    color: var(--rk-faq-accent);
}

.rk-faq-header p {
    color: #94a3b8;
    margin: 10px 0 0 0;
    font-size: 15px;
}

/* Moduł Akordeonu */
.rk-faq-wrapper {
    padding: 30px 50px 40px;
    background: var(--rk-faq-bg);
    display: flex;
    flex-direction: column;
    gap: 15px;
}

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

.rk-faq-item.active {
    border-color: var(--rk-faq-blue);
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.15);
}

/* Przycisk Pytania */
.rk-faq-btn {
    width: 100%;
    text-align: left;
    padding: 22px 25px;
    background: transparent;
    border: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 15px;
    transition: background 0.3s;
}

.rk-faq-btn:hover {
    background: var(--rk-faq-hover);
}

.rk-faq-icon-box {
    width: 44px;
    height: 44px;
    border-radius: 12px;
    background: #e0f2fe;
    color: var(--rk-faq-blue);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: all 0.3s;
}

.rk-faq-item.active .rk-faq-icon-box {
    background: var(--rk-faq-blue);
    color: #ffffff;
}

.rk-faq-btn h3 {
    margin: 0;
    font-size: 17px;
    font-weight: 700;
    color: var(--rk-faq-dark);
    flex: 1;
    line-height: 1.4;
}

.rk-faq-chevron {
    color: #94a3b8;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq-item.active .rk-faq-chevron {
    transform: rotate(180deg);
    color: var(--rk-faq-blue);
}

/* Treść Odpowiedzi */
.rk-faq-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    background: #ffffff;
}

.rk-faq-content-inner {
    padding: 0 25px 25px 84px; /* Wcięcie wyrównane z tekstem h3 */
}

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

.rk-faq-content-inner a {
    color: var(--rk-faq-blue);
    font-weight: 600;
    text-decoration: none;
    border-bottom: 1px solid rgba(2, 132, 199, 0.3);
    transition: all 0.2s;
}

.rk-faq-content-inner a:hover {
    border-bottom-color: var(--rk-faq-blue);
}

/* Wyróżnienia danych technicznych */
.rk-data-highlight {
    font-weight: 800;
    color: var(--rk-faq-dark);
    background: #f1f5f9;
    padding: 2px 6px;
    border-radius: 4px;
}

@media (max-width: 768px) {
    .rk-faq-header { padding: 30px 20px; }
    .rk-faq-header h2 { font-size: 22px; }
    .rk-faq-wrapper { padding: 25px 15px; }
    .rk-faq-btn { padding: 18px 15px; gap: 12px; }
    .rk-faq-btn h3 { font-size: 15px; }
    .rk-faq-content-inner { padding: 0 15px 20px 15px; } /* Usunięto duże wcięcie na mobile */
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Często zadawane pytania (FAQ) – Parametry krzywej grzewczej",
    "description": "Zbiór najważniejszych pytań i odpowiedzi technicznych dotyczących konfiguracji krzywej grzewczej, wykończenia podłóg i temperatur zasilania.",
    "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.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Jakie nachylenie krzywej grzewczej ustawić dla pompy ciepła i podłogówki?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Dla nowoczesnego, dobrze izolowanego domu jednorodzinnego (standard WT2021) optymalne nachylenie krzywej grzewczej dla pompy ciepła połączonej z ogrzewaniem podłogowym wynosi od 0,3 do 0,4. W budynkach pasywnych wartość ta może spaść do 0,15–0,25, natomiast w starym budownictwie po termomodernizacji oscyluje w granicach 0,5–0,6."
        }
      },
      {
        "@type": "Question",
        "name": "Czym różni się nachylenie krzywej grzewczej od jej przesunięcia?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nachylenie (slope) decyduje o stromości wykresu i zmienia temperaturę zasilania proporcjonalnie do spadku temperatury zewnętrznej (reakcja na mróz), natomiast przesunięcie (offset) podnosi lub obniża całą krzywą o stałą wartość stopni w całym zakresie temperatur. Nachylenie reguluje dynamikę przy mrozach, a przesunięcie koryguje temperaturę bazową w ciągu całego sezonu."
        }
      },
      {
        "@type": "Question",
        "name": "Czy ustawiać osobną krzywą grzewczą dla łazienki?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie stosuje się osobnej krzywej grzewczej dla pojedynczego pomieszczenia na jednym rozdzielaczu, lecz projektuje się w łazience gęstszy rozstaw rur (np. VA 7,5 cm zamiast VA 15 cm) lub instaluje dodatkowy grzejnik elektryczny/drabinkowy. Alternatywą jest zastosowanie modułu mieszającego dla wyodrębnionej strefy wysokotemperaturowej, co jednak obniża sprawność skraplania pompy ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Dlaczego podłoga jest zimna, mimo że w domu jest ciepło?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "W dobrze ocieplonym domu pracującym na optymalnej krzywej grzewczej, wysoka temperatura wody zasilającej nie jest wymagana – woda ma często 26–28°C. Ponieważ temperatura ciała człowieka to około 36,6°C, posadzka o temperaturze 24°C będzie w dotyku subiektywnie chłodna, co jest zjawiskiem całkowicie prawidłowym i świadczy o wysokiej efektywności energetycznej obiektu."
        }
      },
      {
        "@type": "Question",
        "name": "Jak zmiana wykończenia podłogi z płytek na panele wpływa na krzywą grzewczą?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Panele podłogowe cechują się wyższym oporem cieplnym (R około 0,05 - 0,10 m2K/W) niż płytki ceramiczne (R około 0,01 m2K/W), co utrudnia przekazywanie ciepła z wylewki do pomieszczenia. Zmiana okładziny na panele wymaga podniesienia temperatury zasilania o około 2–4°C, co oznacza konieczność podbicia przesunięcia krzywej o +2 K do +3 K lub nieznacznego zwiększenia nachylenia."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-parametry-faq",
    "name": "Wskaźniki termiczne i parametry konfiguracyjne krzywej grzewczej",
    "description": "Zestawienie wytycznych dotyczących optymalnego nachylenia, przesunięcia oraz wpływu oporu cieplnego materiałów na temperaturę zasilania systemu grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "nachylenie krzywej grzewczej",
      "przesunięcie krzywej pogodowej",
      "opór cieplny paneli podłogowych",
      "temperatura zasilania podłogówki",
      "sprawność skraplania pompy ciepła"
    ],
    "measurementTechnique": "Parametry określone na podstawie norm izolacyjności budynków (WT2021) oraz wartości oporu cieplnego materiałów wykończeniowych posadzek.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Optymalne nachylenie krzywej (WT2021): 0.3 - 0.4.",
        "Korekta temperatury dla paneli podłogowych: przesunięcie o +2K do +3K."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-faq",
    "name": "Interaktywny Panel FAQ Krzywej Grzewczej",
    "description": "Moduł aplikacyjny wyświetlający kluczowe pytania inwestorów i techniczne odpowiedzi w formie dynamicznego, rozwijanego interfejsu (akordeon).",
    "applicationCategory": "ReferenceApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-faq-container">
    <div class="rk-faq-header">
        <h2>
            <svg width="28" height="28" 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>
            Często zadawane pytania (FAQ)
        </h2>
        <p>Rozwiewamy inżynieryjne wątpliwości dotyczące nastaw automatyki pogodowej.</p>
    </div>

    <div class="rk-faq-wrapper">
        
        <!-- Pytanie 1 -->
        <div class="rk-faq-item">
            <button class="rk-faq-btn" type="button">
                <div class="rk-faq-icon-box">
                    <svg width="22" height="22" 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>
                </div>
                <h3>Jakie nachylenie krzywej grzewczej ustawić dla pompy ciepła i podłogówki?</h3>
                <svg class="rk-faq-chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-content-inner">
                    <p>Dla nowoczesnego, dobrze izolowanego domu jednorodzinnego (standard WT2021) optymalne nachylenie krzywej grzewczej dla <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a> połączonej z ogrzewaniem podłogowym wynosi <span class="rk-data-highlight">od 0,3 do 0,4</span>. W budynkach pasywnych wartość ta może spaść do <span class="rk-data-highlight">0,15–0,25</span>, natomiast w <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-remontowanym-budynku-czy-warto/">starym budownictwie po termomodernizacji</a> oscyluje w granicach <span class="rk-data-highlight">0,5–0,6</span>.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 2 -->
        <div class="rk-faq-item">
            <button class="rk-faq-btn" type="button">
                <div class="rk-faq-icon-box">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
                </div>
                <h3>Czym różni się nachylenie krzywej grzewczej od jej przesunięcia?</h3>
                <svg class="rk-faq-chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-content-inner">
                    <p><strong>Nachylenie (slope)</strong> decyduje o stromości wykresu i zmienia temperaturę zasilania proporcjonalnie do spadku temperatury zewnętrznej (reakcja na mróz), natomiast <strong>przesunięcie (offset)</strong> podnosi lub obniża całą krzywą o stałą wartość stopni w całym zakresie temperatur. Nachylenie reguluje dynamikę przy mrozach, a przesunięcie koryguje temperaturę bazową w ciągu całego sezonu.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 3 -->
        <div class="rk-faq-item">
            <button class="rk-faq-btn" type="button">
                <div class="rk-faq-icon-box">
                    <svg width="22" height="22" 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" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
                </div>
                <h3>Czy ustawiać osobną krzywą grzewczą dla łazienki?</h3>
                <svg class="rk-faq-chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-content-inner">
                    <p>Nie stosuje się osobnej krzywej grzewczej dla pojedynczego pomieszczenia na jednym <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielaczu</a>, lecz projektuje się w łazience gęstszy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a> (np. <span class="rk-data-highlight">VA 7,5 cm</span> zamiast VA 15 cm) lub instaluje dodatkowy grzejnik elektryczny. Alternatywą jest zastosowanie modułu mieszającego dla wyodrębnionej strefy wysokotemperaturowej, co jednak obniża sprawność skraplania pompy ciepła.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 4 -->
        <div class="rk-faq-item">
            <button class="rk-faq-btn" type="button">
                <div class="rk-faq-icon-box">
                    <svg width="22" height="22" 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>
                </div>
                <h3>Dlaczego podłoga jest zimna, mimo że w domu jest ciepło?</h3>
                <svg class="rk-faq-chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-content-inner">
                    <p>W dobrze ocieplonym domu pracującym na optymalnej krzywej grzewczej, wysoka temperatura wody zasilającej nie jest wymagana – woda ma często <span class="rk-data-highlight">26–28°C</span>. Ponieważ temperatura ciała człowieka to około 36,6°C, posadzka o temperaturze 24°C będzie w dotyku subiektywnie chłodna, co jest zjawiskiem całkowicie prawidłowym i świadczy o wysokiej efektywności energetycznej obiektu.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 5 -->
        <div class="rk-faq-item">
            <button class="rk-faq-btn" type="button">
                <div class="rk-faq-icon-box">
                    <svg width="22" height="22" 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>
                </div>
                <h3>Jak zmiana wykończenia podłogi z płytek na panele wpływa na krzywą grzewczą?</h3>
                <svg class="rk-faq-chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-content-inner">
                    <p>Panele podłogowe cechują się wyższym oporem cieplnym (<span class="rk-data-highlight">R około 0,05 - 0,10 m2K/W</span>) niż płytki ceramiczne (<span class="rk-data-highlight">R około 0,01 m2K/W</span>), co utrudnia przekazywanie ciepła z wylewki do pomieszczenia. Zmiana <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">płytek na panele</a> wymaga podniesienia temperatury zasilania o około 2–4°C, co oznacza konieczność podbicia przesunięcia krzywej o +2 K do +3 K lub nieznacznego zwiększenia nachylenia.</p>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var faqBtns = document.querySelectorAll('.rk-faq-btn');
    
    for (var i = 0; i < faqBtns.length; i++) {
        faqBtns[i].addEventListener('click', function() {
            var item = this.parentElement;
            var content = this.nextElementSibling;
            var isActive = item.classList.contains('active');
            
            // Zamknij wszystkie inne otwarte panele dla zachowania czystości interfejsu
            for (var j = 0; j < faqBtns.length; j++) {
                var otherItem = faqBtns[j].parentElement;
                var otherContent = faqBtns[j].nextElementSibling;
                if (otherItem !== item) {
                    otherItem.classList.remove('active');
                    otherContent.style.maxHeight = null;
                }
            }
            
            // Przełącz kliknięty panel
            if (isActive) {
                item.classList.remove('active');
                content.style.maxHeight = null;
            } else {
                item.classList.add('active');
                content.style.maxHeight = content.scrollHeight + "px";
            }
        });
    }
});
</script>



<style>
:root {
    --rk-dl-dark: #0f172a;
    --rk-dl-blue: #0284c7;
    --rk-dl-bg: #f8fafc;
    --rk-dl-border: #e2e8f0;
    --rk-dl-text: #475569;
    --rk-dl-red: #ef4444;
}

.rk-download-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(15, 23, 42, 0.08);
    border: 1px solid var(--rk-dl-border);
    overflow: hidden;
}

/* Układ główny karty */
.rk-dl-grid {
    display: flex;
    flex-wrap: wrap;
}

/* Lewa sekcja - Miniatura */
.rk-dl-visual {
    flex: 1;
    min-width: 300px;
    background: var(--rk-dl-bg);
    padding: 40px;
    border-right: 1px solid var(--rk-dl-border);
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
}

.rk-dl-thumbnail-wrapper {
    position: relative;
    width: 100%;
    max-width: 280px;
    border: 1px solid var(--rk-dl-border);
    border-radius: 12px;
    background: #ffffff;
    padding: 10px;
    box-shadow: 0 10px 25px rgba(0,0,0,0.05);
}

.rk-dl-image {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    cursor: pointer;
}

.rk-dl-badge {
    position: absolute;
    top: -12px;
    right: -12px;
    background: var(--rk-dl-red);
    color: #ffffff;
    font-size: 11px;
    font-weight: 900;
    padding: 6px 12px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 1px;
    box-shadow: 0 4px 10px rgba(239, 68, 68, 0.3);
}

/* Prawa sekcja - Treść i Przyciski */
.rk-dl-content {
    flex: 1.5;
    min-width: 320px;
    padding: 40px 50px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

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

.rk-dl-content h3 {
    font-size: 16px;
    font-weight: 700;
    color: var(--rk-dl-blue);
    margin: 0 0 15px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-dl-desc {
    font-size: 15px;
    color: var(--rk-dl-text);
    line-height: 1.6;
    margin: 0 0 25px 0;
}

.rk-dl-desc a {
    color: var(--rk-dl-blue);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Grupa Przycisków */
.rk-dl-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 15px;
    margin-bottom: 30px;
}

.rk-btn-pdf, .rk-btn-img {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 14px 24px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    text-decoration: none;
    cursor: pointer;
    border: none;
}

.rk-btn-pdf {
    background: var(--rk-dl-dark);
    color: #ffffff;
}

.rk-btn-pdf:hover {
    background: #1e293b;
}

.rk-btn-img {
    background: #e0f2fe;
    color: var(--rk-dl-blue);
    border: 1px solid #bae6fd;
}

.rk-btn-img:hover {
    background: var(--rk-dl-blue);
    color: #ffffff;
    border-color: var(--rk-dl-blue);
}

/* Stopka z Prawami Autorskimi */
.rk-dl-copyright {
    margin-top: auto;
    padding-top: 20px;
    border-top: 1px solid var(--rk-dl-border);
    font-size: 12px;
    color: #94a3b8;
    line-height: 1.5;
}

.rk-dl-copyright strong {
    color: var(--rk-dl-text);
}

/* Lightbox (Pełny ekran dla obrazka) - Błyskawiczne pojawianie */
.rk-lightbox {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(15, 23, 42, 0.95);
    z-index: 99999;
    align-items: center;
    justify-content: center;
    padding: 20px;
}

.rk-lightbox.active {
    display: flex;
}

.rk-lightbox-content {
    position: relative;
    max-width: 90%;
    max-height: 90vh;
}

.rk-lightbox-img {
    max-width: 100%;
    max-height: 90vh;
    border-radius: 8px;
    box-shadow: 0 20px 50px rgba(0,0,0,0.5);
    display: block;
}

.rk-lightbox-close {
    position: absolute;
    top: -20px;
    right: -20px;
    background: var(--rk-dl-red);
    color: #ffffff;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    border: 4px solid #1e293b;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-lightbox-close:hover {
    background: #b91c1c;
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-dl-grid { flex-direction: column; }
    .rk-dl-visual { padding: 30px 20px; border-right: none; border-bottom: 1px solid var(--rk-dl-border); }
    .rk-dl-content { padding: 30px 20px; }
    .rk-dl-actions { flex-direction: column; }
    .rk-btn-pdf, .rk-btn-img { width: 100%; justify-content: center; }
    .rk-lightbox-close { top: -10px; right: -10px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Pobierz darmową infografikę: Krzywa grzewcza w pigułce",
    "description": "Zestawienie parametrów, objawów błędów i metod strojenia krzywej pogodowej w formie czytelnej, autorskiej infografiki do pobrania w formacie PDF.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/08/Infografika-Krzywa-grzewcza-w-ogrzewaniu-podlogowym.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-infografika-pdf",
    "name": "Schemat instalacji i ustawienia pompy ciepła (Infografika)",
    "description": "Zestawienie wizualne prawidłowych parametrów zasilania rozdzielacza ogrzewania podłogowego w oparciu o aktualne normy WT2021.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika ogrzewanie podłogowe",
      "schemat instalacji ogrzewania",
      "ustawienia pompy ciepła tabela",
      "parametry zasilania rozdzielacza",
      "kompleksowa wycena ogrzewania podłogowego"
    ],
    "measurementTechnique": "Przedstawienie skondensowanej wiedzy inżynieryjnej dotyczącej przesunięcia i nachylenia krzywej pogodowej w formie plików WEBP oraz PDF.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Szybka ściągawka ułatwiająca identyfikację problemów z przegrzewaniem lub niedogrzewaniem budynku.",
        "Dokument PDF przeznaczony dla instalatorów oraz inwestorów do wykorzystania bezpośrednio w kotłowni."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-przegladarka",
    "name": "Interaktywna Przeglądarka Infografik HVAC",
    "description": "Moduł umożliwiający błyskawiczne wyświetlenie podglądu schematów hydraulicznych na pełnym ekranie oraz bezpieczne pobranie zautoryzowanego pliku PDF.",
    "applicationCategory": "MultimediaApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-download-container">
    <div class="rk-dl-grid">
        
        <!-- Podgląd Wizualny -->
        <div class="rk-dl-visual">
            <div class="rk-dl-thumbnail-wrapper">
                <div class="rk-dl-badge">Darmowy PDF</div>
                <img decoding="async" 
                    src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/08/Infografika-Krzywa-grzewcza-w-ogrzewaniu-podlogowym.webp" 
                    alt="Miniatura infografiki: Krzywa grzewcza w ogrzewaniu podłogowym" 
                    class="rk-dl-image" 
                    id="rkThumbTrigger"
                />
            </div>
        </div>

        <!-- Treść i Przyciski -->
        <div class="rk-dl-content">
            <h3>Narzędzie dla Inwestora i Instalatora</h3>
            <h2>Pobierz infografikę: Krzywa grzewcza w pigułce</h2>
            
            <p class="rk-dl-desc">
                Wiedza, którą przedstawiłem w tym artykule, to techniczny fundament. Aby ułatwić Ci pracę bezpośrednio w kotłowni, przygotowałem kompleksowy <strong>schemat instalacji ogrzewania</strong> oraz <a href="https://projekt-ogrzewania.pl/kompleksowa-wycena-ogrzewania-podlogowego-wodnego-na-co-przygotowac-budzet/">zestawienie parametrów zasilania rozdzielacza</a> w formie czytelnej infografiki. Zabierz te dane ze sobą, gdy tylko zauważysz, że Twój system wymaga interwencji.
            </p>

            <div class="rk-dl-actions">
                <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/08/Infografika-Krzywa-grzewcza-w-ogrzewaniu-podlogowym.pdf" target="_blank" rel="noopener noreferrer" class="rk-btn-pdf">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="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 plik PDF
                </a>
                
                <button type="button" class="rk-btn-img" id="rkBtnView">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                    Powiększ obraz
                </button>
            </div>

            <!-- Prawa Autorskie -->
            <div class="rk-dl-copyright">
                <strong>© 2026 Projekt-Ogrzewania.pl | Autor: Robert Kucharski.</strong><br>
                Udostępnianie materiału PDF dozwolone wyłącznie z zachowaniem logotypu portalu i bez modyfikacji pliku.
            </div>
        </div>

    </div>
</div>

<!-- Modal / Lightbox (Brak animacji, błyskawiczny popup) -->
<div class="rk-lightbox" id="rkLightboxPopup">
    <div class="rk-lightbox-content">
        <button type="button" class="rk-lightbox-close" id="rkLightboxClose" aria-label="Zamknij podgląd">
            <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="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
        </button>
        <img decoding="async" 
            src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/08/Infografika-Krzywa-grzewcza-w-ogrzewaniu-podlogowym.webp" 
            alt="Powiększona infografika krzywej grzewczej" 
            class="rk-lightbox-img"
        />
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    var lightbox = document.getElementById('rkLightboxPopup');
    var btnView = document.getElementById('rkBtnView');
    var thumbTrigger = document.getElementById('rkThumbTrigger');
    var btnClose = document.getElementById('rkLightboxClose');

    // Funkcja otwierająca (bezpieczna bez operatorów &&)
    function openLightbox() {
        if (lightbox !== null) {
            lightbox.classList.add('active');
            // Zablokowanie scrollowania strony
            document.body.style.overflow = 'hidden';
        }
    }

    // Funkcja zamykająca
    function closeLightbox() {
        if (lightbox !== null) {
            lightbox.classList.remove('active');
            // Odblokowanie scrollowania strony
            document.body.style.overflow = '';
        }
    }

    // Podpięcie zdarzeń
    if (btnView !== null) {
        btnView.addEventListener('click', openLightbox);
    }
    
    if (thumbTrigger !== null) {
        thumbTrigger.addEventListener('click', openLightbox);
    }

    if (btnClose !== null) {
        btnClose.addEventListener('click', closeLightbox);
    }

    // Zamknięcie po kliknięciu w ciemne tło (poza obrazkiem)
    if (lightbox !== null) {
        lightbox.addEventListener('click', function(event) {
            if (event.target === lightbox) {
                closeLightbox();
            }
        });
    }
});
</script>



<style>
:root {
    --rk-dash-dark: #0f172a;
    --rk-dash-blue: #0284c7;
    --rk-dash-blue-hover: #0369a1;
    --rk-dash-light: #f8fafc;
    --rk-dash-green: #059669;
    --rk-dash-red: #dc2626;
    --rk-dash-border: #e2e8f0;
    --rk-dash-tag-bg: #f1f5f9;
    --rk-dash-tag-text: #475569;
}

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

/* Sekcja Nagłówkowa */
.rk-dash-header {
    padding: 40px 50px 20px;
}

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

.rk-dash-header h3 {
    font-size: 20px;
    font-weight: 700;
    color: var(--rk-dash-blue);
    margin: 30px 0 15px 0;
}

.rk-dash-header p {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin-bottom: 15px;
}

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

/* Przełącznik App-Style */
.rk-app-toggle-container {
    background: var(--rk-dash-light);
    padding: 30px 50px;
    border-top: 1px solid var(--rk-dash-border);
    border-bottom: 1px solid var(--rk-dash-border);
}

.rk-toggle-wrapper {
    display: flex;
    background: #e2e8f0;
    border-radius: 999px;
    padding: 6px;
    position: relative;
    max-width: 500px;
    margin: 0 auto 30px auto;
}

.rk-toggle-btn {
    flex: 1;
    padding: 14px 20px;
    border: none;
    background: transparent;
    border-radius: 999px;
    font-size: 15px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    transition: all 0.3s ease;
    z-index: 2;
    position: relative;
    text-align: center;
}

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

.rk-toggle-indicator {
    position: absolute;
    top: 6px;
    bottom: 6px;
    left: 6px;
    width: calc(50% - 6px);
    background: var(--rk-dash-blue);
    border-radius: 999px;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.3);
    z-index: 1;
}

.rk-toggle-wrapper[data-state="bad"] .rk-toggle-indicator {
    transform: translateX(100%);
    background: var(--rk-dash-red);
    box-shadow: 0 4px 10px rgba(220, 38, 38, 0.3);
}

/* Karty Wyników */
.rk-results-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-result-card {
    background: #ffffff;
    border: 2px solid var(--rk-dash-border);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    align-items: flex-start;
    gap: 15px;
    transition: border-color 0.3s ease;
}

.rk-result-icon {
    width: 48px;
    height: 48px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.rk-result-content h4 {
    margin: 0 0 8px 0;
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #64748b;
}

.rk-result-content .rk-value {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-dash-dark);
    margin: 0 0 5px 0;
}

.rk-result-content .rk-desc {
    font-size: 13px;
    color: #64748b;
    margin: 0;
    line-height: 1.4;
}

/* Stan: Dobry (Projekt) */
.state-good .card-cop { border-color: #a7f3d0; }
.state-good .card-cop .rk-result-icon { background: #d1fae5; color: var(--rk-dash-green); }
.state-good .card-bill { border-color: #bae6fd; }
.state-good .card-bill .rk-result-icon { background: #e0f2fe; color: var(--rk-dash-blue); }

/* Stan: Zły (Na oko) */
.state-bad .card-cop { border-color: #fecaca; }
.state-bad .card-cop .rk-result-icon { background: #fee2e2; color: var(--rk-dash-red); }
.state-bad .card-bill { border-color: #fef08a; }
.state-bad .card-bill .rk-result-icon { background: #fef9c3; color: #ca8a04; }

/* Tagi Długi Ogon */
.rk-tags-container {
    padding: 30px 50px;
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    justify-content: center;
}

.rk-mat-tag {
    background: var(--rk-dash-tag-bg);
    color: var(--rk-dash-tag-text);
    padding: 8px 16px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 600;
    border: 1px solid #cbd5e1;
    transition: all 0.2s;
}

.rk-mat-tag:hover {
    background: #e2e8f0;
    color: var(--rk-dash-dark);
}

/* CTA */
.rk-final-cta {
    background: var(--rk-dash-dark);
    padding: 40px 50px;
    text-align: center;
}

.rk-final-cta h3 {
    color: #ffffff;
    font-size: 24px;
    font-weight: 900;
    margin: 0 0 15px 0;
}

.rk-final-cta p {
    color: #94a3b8;
    margin: 0 auto 30px auto;
    font-size: 16px;
    max-width: 600px;
}

.rk-massive-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--rk-dash-blue);
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 20px 45px;
    border-radius: 16px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(2, 132, 199, 0.4);
}

.rk-massive-link:hover {
    background: var(--rk-dash-blue-hover);
}

/* RWD Mobile */
@media (max-width: 768px) {
    .rk-dash-header, .rk-app-toggle-container, .rk-tags-container, .rk-final-cta {
        padding: 30px 20px;
    }
    .rk-results-grid {
        grid-template-columns: 1fr; /* Pionowy układ na mobile */
        gap: 15px;
    }
    .rk-toggle-wrapper {
        flex-direction: column; /* Akordeonowy przełącznik */
        border-radius: 16px;
    }
    .rk-toggle-indicator {
        width: calc(100% - 12px);
        height: calc(50% - 6px);
        bottom: auto;
    }
    .rk-toggle-wrapper[data-state="bad"] .rk-toggle-indicator {
        transform: translateY(100%);
    }
    .rk-massive-link {
        width: 100%;
        padding: 18px 20px;
        font-size: 16px;
    }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/"
    },
    "headline": "Podsumowanie: Optymalizacja Krzywej Grzewczej a Projekt OZC",
    "description": "Zakończenie analizy konfiguracji krzywej grzewczej. Poznaj realny wpływ profesjonalnego projektu obciążenia cieplnego na współczynnik COP pompy ciepła i koszty eksploatacji.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "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-08-02",
    "dateModified": "2026-08-02"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#dataset-cop",
    "name": "Wpływ Projektu OZC na SCOP Pompy Ciepła",
    "description": "Dane pomiarowe i szacunkowe porównujące koszty eksploatacji oraz wydajność systemu grzewczego w zależności od precyzji obliczeń inżynierskich.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "optymalizacja krzywej grzewczej",
      "cop pompy ciepła a podłogówka",
      "projektowe obciążenie cieplne ozc",
      "zrównoważenie hydrauliczne rotametrów",
      "bezwładność jastrychu betonowego"
    ],
    "measurementTechnique": "Porównanie parametrów pracy pompy ciepła z poprawnie dobranym rozstawem rur (na bazie OZC) z instalacją wykonaną intuicyjnie.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "System zoptymalizowany: Wymaga zrównoważenia przepływów i precyzyjnego przesunięcia krzywej.",
        "System bez projektu: Wymusza podniesienie temperatury zasilania, drastycznie obniżając SCOP."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/#webapp-symulator",
    "name": "Symulator Efektywności Krzywej Grzewczej",
    "description": "Interaktywna aplikacja webowa demonstrująca wpływ błędów projektowych na efektywność instalacji płaszczyznowej.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-summary-dashboard">
    <!-- Część tekstowa -->
    <div class="rk-dash-header">
        <h2>Podsumowanie: Inżynieria vs Intuicja</h2>
        <p>
            Optymalnie skonfigurowana krzywa grzewcza w ogrzewaniu podłogowym stanowi warunek konieczny do uzyskania wysokiego współczynnika COP pompy ciepła lub niskiego zużycia paliwa przez kocioł kondensacyjny. Proces jej regulacji wymaga cierpliwości, wyłączenia agresywnego sterowania strefowego na czas kalibracji oraz zrozumienia <strong>bezwładności jastrychu betonowego</strong>.
        </p>

        <h3>Dlaczego projekt to fundament?</h3>
        <p>
            Bez usunięcia błędów projektowych – takich jak brak wyznaczenia <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">bilansu cieplnego budynku</a>, niewłaściwy rozstaw rur czy brak <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">zrównoważenia hydraulicznego na rozdzielaczu</a> – sama regulacja sterownika pogodowego nie rozwiąże problemów z niedogrzaniem lub wysokimi rachunkami. Jeśli planujesz budowę lub modernizację instalacji, dopilnuj wykonania pełnego <a href="https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/">projektu wykonawczego HVAC</a>. To jedyna droga do uzyskania stabilnego komfortu cieplnego przy minimalnych kosztach eksploatacji.
        </p>
    </div>

    <!-- Przełącznik aplikacji -->
    <div class="rk-app-toggle-container">
        <div class="rk-toggle-wrapper" id="rkToggleUI" data-state="good">
            <div class="rk-toggle-indicator"></div>
            <button class="rk-toggle-btn active" id="btn-pro" type="button">Z projektem OZC</button>
            <button class="rk-toggle-btn" id="btn-amateur" type="button">Montaż "na oko"</button>
        </div>

        <div class="rk-results-grid state-good" id="rkResultsGrid">
            <!-- Karta COP -->
            <div class="rk-result-card card-cop">
                <div class="rk-result-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
                </div>
                <div class="rk-result-content">
                    <h4>Wydajność (COP)</h4>
                    <div class="rk-value" id="val-cop">4.6 - 5.0</div>
                    <p class="rk-desc" id="desc-cop">Sprężarka pracuje płynnie. Zasilanie rzędu 28-32°C.</p>
                </div>
            </div>
            
            <!-- Karta Kosztów -->
            <div class="rk-result-card card-bill">
                <div class="rk-result-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="6" width="20" height="12" rx="2"></rect><circle cx="12" cy="12" r="2"></circle><path d="M6 12h.01M18 12h.01"></path></svg>
                </div>
                <div class="rk-result-content">
                    <h4>Rachunki za prąd</h4>
                    <div class="rk-value" id="val-bill">Niskie</div>
                    <p class="rk-desc" id="desc-bill">Zrównoważone pętle oddają pełną moc do pomieszczeń.</p>
                </div>
            </div>
        </div>
    </div>

    <!-- Tagi długiego ogona -->
    <div class="rk-tags-container">
        <span class="rk-mat-tag"># optymalizacja krzywej grzewczej</span>
        <span class="rk-mat-tag"># cop pompy ciepła a podłogówka</span>
        <span class="rk-mat-tag"># ustawienie sterownika pogodowego</span>
        <span class="rk-mat-tag"># bezwładność jastrychu betonowego</span>
        <span class="rk-mat-tag"># projektowe obciążenie cieplne ozc</span>
        <span class="rk-mat-tag"># zrównoważenie hydrauliczne rotametrów</span>
        <span class="rk-mat-tag"># prawidłowy rozstaw rur ogrzewania</span>
        <span class="rk-mat-tag"># koszty eksploatacji ogrzewania</span>
        <span class="rk-mat-tag"># pełny projekt wykonawczy hvac</span>
        <span class="rk-mat-tag"># stabilny komfort cieplny w domu</span>
    </div>

    <!-- Mocne CTA - brak animacji -->
    <div class="rk-final-cta">
        <h3>Nie zgaduj przy budowie domu. Projektuj.</h3>
        <p>Błędy hydrauliczne zamarzają w betonie na zawsze. Zdobądź wiedzę, która uchroni Twój system grzewczy przed błędami instalacyjnymi.</p>
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-massive-link">
            CZYTAJ BAZĘ WIEDZY PREMIUM
        </a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const btnPro = document.getElementById('btn-pro');
    const btnAmateur = document.getElementById('btn-amateur');
    const toggleUI = document.getElementById('rkToggleUI');
    const resultsGrid = document.getElementById('rkResultsGrid');
    
    // Elementy tekstowe do podmiany
    const valCop = document.getElementById('val-cop');
    const descCop = document.getElementById('desc-cop');
    const valBill = document.getElementById('val-bill');
    const descBill = document.getElementById('desc-bill');

    function setGoodState() {
        // UI logic
        btnAmateur.classList.remove('active');
        btnPro.classList.add('active');
        toggleUI.setAttribute('data-state', 'good');
        
        resultsGrid.classList.remove('state-bad');
        resultsGrid.classList.add('state-good');
        
        // Data logic
        valCop.innerText = "4.6 - 5.0";
        descCop.innerText = "Sprężarka pracuje płynnie. Zasilanie rzędu 28-32°C.";
        valBill.innerText = "Zoptymalizowane";
        descBill.innerText = "Zrównoważone pętle oddają pełną moc cieplną do pomieszczeń.";
    }

    function setBadState() {
        // UI logic
        btnPro.classList.remove('active');
        btnAmateur.classList.add('active');
        toggleUI.setAttribute('data-state', 'bad');
        
        resultsGrid.classList.remove('state-good');
        resultsGrid.classList.add('state-bad');
        
        // Data logic
        valCop.innerText = "2.8 - 3.2";
        descCop.innerText = "Taktowanie pompy. Sztuczne podbijanie zasilania do 45°C.";
        valBill.innerText = "+40% Kosztów";
        descBill.innerText = "Pompa ciepła zużywa prąd na nadrabianie strat hydraulicznych.";
    }

    if (btnPro) {
        btnPro.addEventListener('click', setGoodState);
    }
    
    if (btnAmateur) {
        btnAmateur.addEventListener('click', setBadState);
    }
});
</script>



<style>
  .po-pref-container {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    background: #ffffff;
    border: 1px solid #dadce0;
    border-radius: 12px;
    padding: 24px;
    margin: 30px 0;
    box-shadow: 0 2px 6px rgba(0,0,0,0.05);
    display: flex;
    flex-direction: column;
    gap: 20px;
    transition: box-shadow 0.3s ease;
  }
  .po-pref-container:hover {
    box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  }
  .po-pref-header {
    display: flex;
    flex-direction: column;
    gap: 8px;
  }
  .po-pref-container h2 {
    margin: 0;
    font-size: 1.4rem;
    color: #202124;
    font-weight: 600;
  }
  .po-pref-container h3 {
    margin: 0;
    font-size: 1.1rem;
    color: #5f6368;
    font-weight: 400;
  }
  .po-pref-body {
    display: flex;
    align-items: center;
    justify-content: space-between;
    background: #f8f9fa;
    padding: 16px 20px;
    border-radius: 8px;
    border: 1px solid #e8eaed;
  }
  .po-pref-info {
    display: flex;
    align-items: center;
    gap: 16px;
  }
  .po-pref-icon svg {
    width: 40px;
    height: 40px;
  }
  .po-pref-text p {
    margin: 0;
    color: #3c4043;
    font-size: 0.95rem;
    line-height: 1.4;
  }
  .po-pref-text strong {
    color: #1a73e8;
  }
  
  /* Interaktywny przełącznik */
  .po-toggle-wrapper {
    display: flex;
    align-items: center;
    gap: 12px;
  }
  .po-toggle {
    position: relative;
    width: 52px;
    height: 28px;
    background-color: #dadce0;
    border-radius: 34px;
    cursor: pointer;
    transition: background-color 0.3s;
  }
  .po-toggle::after {
    content: "";
    position: absolute;
    top: 2px;
    left: 2px;
    width: 24px;
    height: 24px;
    background-color: white;
    border-radius: 50%;
    transition: transform 0.3s;
    box-shadow: 0 1px 3px rgba(0,0,0,0.3);
  }
  .po-toggle.active {
    background-color: #1a73e8;
  }
  .po-toggle.active::after {
    transform: translateX(24px);
  }
  
  /* Przycisk akcji (ukryty domyślnie, pojawia się po interakcji) */
  .po-action-btn {
    display: none;
    text-decoration: none;
    background: #1a73e8;
    color: #ffffff;
    padding: 12px 24px;
    border-radius: 24px;
    font-weight: 500;
    text-align: center;
    font-size: 1rem;
    transition: background 0.2s;
    margin-top: 10px;
  }
  .po-action-btn:hover {
    background: #1557b0;
    color: #ffffff;
  }
  .po-action-btn.visible {
    display: block;
    animation: fadeIn 0.4s ease;
  }

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

  /* RWD - Mobile (układ pionowy, akordeon, brak przycisków obok siebie) */
  @media (max-width: 768px) {
    .po-pref-body {
      flex-direction: column;
      align-items: flex-start;
      gap: 20px;
    }
    .po-toggle-wrapper {
      width: 100%;
      justify-content: space-between;
      padding-top: 16px;
      border-top: 1px solid #dadce0;
    }
    .po-action-btn {
      width: 100%;
      box-sizing: border-box;
    }
  }
</style>

<div class="po-pref-container">
  <div class="po-pref-header">
    <h2>Wspieraj Projekt-Ogrzewania.pl</h2>
    <h3>Zostań z nami na dłużej w wynikach Google</h3>
  </div>
  
  <div class="po-pref-body">
    <div class="po-pref-info">
      <div class="po-pref-icon">
        <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
          <path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z" fill="#4285F4"></path>
          <path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" fill="#34A853"></path>
          <path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z" fill="#FBBC05"></path>
          <path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" fill="#EA4335"></path>
        </svg>
      </div>
      <div class="po-pref-text">
        <p>Ponad 1000 poradników o ogrzewaniu i budowie domu.<br>
        <strong>Dodaj nas do ulubionych źródeł</strong>, aby łatwiej znajdować nasze rozwiązania techniczne.</p>
      </div>
    </div>
    
    <div class="po-toggle-wrapper">
      <span style="font-size: 0.9rem; color: #5f6368; font-weight: 500;">Aktywuj źródło</span>
      <div class="po-toggle" id="googleSourceToggle" aria-label="Włącz preferowane źródło"></div>
    </div>
  </div>
  
  <a href="https://google.com/preferences/source?q=https://projekt-ogrzewania.pl" target="_blank" rel="noopener noreferrer" class="po-action-btn" id="googleSourceLink">
    Przejdź do Google i potwierdź
  </a>
</div>

<script>
  document.addEventListener('DOMContentLoaded', function() {
    var toggleBtn = document.getElementById('googleSourceToggle');
    var actionLink = document.getElementById('googleSourceLink');
    
    toggleBtn.addEventListener('click', function() {
      if (toggleBtn.classList.contains('active') === false) {
        toggleBtn.classList.add('active');
        actionLink.classList.add('visible');
      } else {
        toggleBtn.classList.remove('active');
        actionLink.classList.remove('visible');
      }
    });
  });
</script>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Article",
      "@id": "https://projekt-ogrzewania.pl/google-preferred-sources#article",
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://projekt-ogrzewania.pl/google-preferred-sources"
      },
      "headline": "Wspieraj Projekt-Ogrzewania.pl w wynikach Google",
      "description": "Interaktywny widget umożliwiający dodanie portalu Projekt-Ogrzewania.pl do ulubionych źródeł w wyszukiwarce Google. Buduj z nami rzetelną bazę wiedzy o HVAC.",
      "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.facebook.com/projektogrzewaniapl/",
          "https://www.linkedin.com/in/robert-kucharski-38069b48/",
          "https://x.com/Projekt_HVAC",
          "https://remont.biz.pl/",
          "https://sobir.pl/"
        ]
      },
      "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-07-09",
      "dateModified": "2026-07-09"
    },
    {
      "@type": "Dataset",
      "@id": "https://projekt-ogrzewania.pl/google-preferred-sources#dataset",
      "name": "Preferowane Źródła Google - Statystyki i Interakcja",
      "description": "Zbiór danych i interaktywnych punktów styku pozwalających na ocenę preferencji czytelników dla treści technicznych HVAC.",
      "license": "https://projekt-ogrzewania.pl/",
      "creator": {
        "@type": "Person",
        "name": "Robert Kucharski"
      },
      "keywords": [
        "ulubione źródła google",
        "preferowane wyniki wyszukiwania",
        "autorytet domeny hvac",
        "zaufane portale budowlane",
        "personalizacja google search"
      ],
      "measurementTechnique": "Zliczanie interakcji z widgetem UI typu toggle oraz przekierowań do interfejsu preferencji Google Search",
      "mainEntity": "Optymalizacja zaangażowania użytkownika poprzez interaktywny widget dodawania domeny do preferencji Google."
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/google-preferred-sources#webapplication",
      "name": "Google Preferences Toggle Widget",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "All",
      "description": "Aplikacja webowa w formie widgetu symulującego przełącznik mobilny, integrująca natywne linkowanie do ustawień preferowanych źródeł Google.",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      }
    }
  ]
}
</script>


<p>Artykuł <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">Krzywa grzewcza w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
