<?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 projekt instalacji grzewczej - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/projekt-instalacji-grzewczej/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/projekt-instalacji-grzewczej/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Wed, 16 Sep 2026 07:06:31 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa projekt instalacji grzewczej - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/projekt-instalacji-grzewczej/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Projekt instalacji grzewczej domu – OZC, zakres i koszt.</title>
		<link>https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 31 Jul 2026 07:17:58 +0000</pubDate>
				<category><![CDATA[Hydraulika]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[OZC]]></category>
		<category><![CDATA[Porady dla inwestorów]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[Projekt instalacji grzewczej]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projekty ogrzewania]]></category>
		<category><![CDATA[bilans cieplny]]></category>
		<category><![CDATA[centralne ogrzewanie]]></category>
		<category><![CDATA[dobór ogrzewania]]></category>
		<category><![CDATA[dobór pompy ciepła]]></category>
		<category><![CDATA[dokumentacja techniczna]]></category>
		<category><![CDATA[hydraulika instalacji]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[obliczenia ozc]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[ozc]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projekt co]]></category>
		<category><![CDATA[projekt domu jednorodzinnego]]></category>
		<category><![CDATA[projekt hvac]]></category>
		<category><![CDATA[projekt instalacji grzewczej]]></category>
		<category><![CDATA[projekt instalacji grzewczej domu jednorodzinnego]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=6872</guid>

					<description><![CDATA[<p>Czy profesjonalny projekt naprawdę jest potrzebny przed wykonaniem ogrzewania w domu? Projekt instalacji grzewczej domu jednorodzinnego to znacznie więcej niż zwykły rysunek techniczny – to komplet obliczeń OZC, analiza hydrauliczna, dobór źródła ciepła oraz dokumentacja, która pozwala uniknąć kosztownych błędów i przewymiarowania instalacji. W tym przewodniku znajdziesz praktyczne przykłady, kalkulatory, interaktywne symulatory oraz inżynierskie wskazówki, dzięki którym zaprojektujesz wydajny, oszczędny i niezawodny system grzewczy.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/">Projekt instalacji grzewczej domu – OZC, zakres i koszt.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<!--
PROJEKT-OGRZEWANIA.PL — PEŁNY KOD DO BLOKU „WŁASNY HTML”
Wklej całość POD natywnym tytułem H1 generowanym przez WordPress.

USTAWIENIA WORDPRESS / YOAST:
H1: Projekt instalacji grzewczej domu – zakres, OZC, hydraulika i koszty
Fraza główna: projekt instalacji grzewczej domu
SEO title: Projekt instalacji grzewczej domu – OZC, zakres i koszt
Meta description: Sprawdź, co powinien zawierać projekt instalacji grzewczej: OZC, dobór podłogówki lub grzejników, hydraulika, źródło ciepła i dokumentacja.
ALT grafiki wyróżniającej: Projekt instalacji grzewczej domu – OZC i hydraulika
Tytuł grafiki: Projekt instalacji grzewczej domu jednorodzinnego
Opis grafiki: Inżynierski projekt instalacji grzewczej obejmujący OZC pomieszczeń, odbiorniki, przepływy, hydraulikę, źródło ciepła i dokumentację wykonawczą.
Slug pozostaje bez zmian:
https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/

Kod zawiera analizator kompletności projektu, generator briefu inwestora,
modułową mapę procesu projektowego i rozbudowane wyjaśnienia techniczne.
W artykule znajdują się dokładnie dwa CTA sprzedażowe.
Linki wewnętrzne otwierają się w tej samej karcie.
Linki do dokumentacji zewnętrznej znajdują się wyłącznie w sekcji źródeł,
otwierają się w nowej karcie i mają rel="nofollow noopener noreferrer".
Profile oraz portale autora pozostają w ustalonym module autorskim.
-->

<style>
  #rk-heatplan-guide {
    --rk-navy: #0b2536;
    --rk-navy-2: #12394d;
    --rk-navy-3: #1b465b;
    --rk-cyan: #29c4d7;
    --rk-cyan-dark: #078fb3;
    --rk-cyan-soft: #def7fa;
    --rk-orange: #ff6846;
    --rk-orange-dark: #e44f31;
    --rk-yellow: #f2b526;
    --rk-green: #2fcda1;
    --rk-green-dark: #168267;
    --rk-red: #d7504a;
    --rk-purple: #6963ce;
    --rk-ink: #10283a;
    --rk-copy: #3c5668;
    --rk-muted: #6b8191;
    --rk-line: #d3e2e8;
    --rk-bg: #f3f8fa;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: Arial, Helvetica, sans-serif;
    line-height: 1.62;
    margin: 0 auto;
    max-width: 1360px;
    overflow-wrap: anywhere;
    width: 100%;
  }

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

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

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

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

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

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

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

  /* Kolejność rozdziałów jest ustalona także po przetworzeniu bloku przez WordPress. */
  #rk-heatplan-guide .rk-heatplan-hero { order: 1; }
  #rk-heatplan-guide .rk-heatplan-shortcuts { order: 2; }
  #rk-heatplan-guide #rk-heatplan-answer { order: 3; }
  #rk-heatplan-guide #rk-heatplan-definitions { order: 4; }
  #rk-heatplan-guide #rk-heatplan-results { order: 5; }
  #rk-heatplan-guide #rk-heatplan-roadmap { order: 6; }
  #rk-heatplan-guide #rk-heatplan-analyzer-section { order: 7; }
  #rk-heatplan-guide #rk-heatplan-data { order: 8; }
  #rk-heatplan-guide #rk-heatplan-ozc { order: 9; }
  #rk-heatplan-guide #rk-heatplan-emitters { order: 10; }
  #rk-heatplan-guide #rk-heatplan-floor { order: 11; }
  #rk-heatplan-guide #rk-heatplan-hydraulics { order: 12; }
  #rk-heatplan-guide #rk-heatplan-source { order: 13; }
  #rk-heatplan-guide #rk-heatplan-controls-section { order: 14; }
  #rk-heatplan-guide #rk-heatplan-documents { order: 15; }
  #rk-heatplan-guide #rk-heatplan-costs { order: 16; }
  #rk-heatplan-guide #rk-heatplan-timing { order: 17; }
  #rk-heatplan-guide #rk-heatplan-offers { order: 18; }
  #rk-heatplan-guide #rk-heatplan-changes { order: 19; }
  #rk-heatplan-guide #rk-heatplan-errors { order: 20; }
  #rk-heatplan-guide #rk-heatplan-final { order: 21; }
  #rk-heatplan-guide #rk-heatplan-sources { order: 22; }
  #rk-heatplan-guide #rk-heatplan-faq { order: 23; }
  #rk-heatplan-guide #rk-heatplan-author { order: 24; }

  #rk-heatplan-guide .rk-heatplan-hero {
    background:
      radial-gradient(circle at 89% 111%, rgba(41, 196, 215, 0.24) 0, rgba(41, 196, 215, 0.24) 17%, transparent 17.2%),
      linear-gradient(120deg, #0b2536 0%, #143e52 61%, #0d6576 100%);
    color: var(--rk-white);
    overflow: hidden;
    padding: 62px 58px 56px;
    position: relative;
  }

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

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

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

  #rk-heatplan-guide .rk-heatplan-hero-title {
    font-size: clamp(2.4rem, 6vw, 5.25rem);
    margin: 0;
    max-width: 1220px;
  }

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

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

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

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

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

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

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

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

  #rk-heatplan-guide .rk-heatplan-shortcuts-label {
    color: var(--rk-ink);
    flex: 1 0 100%;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-bottom: 2px;
    text-transform: uppercase;
  }

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

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

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

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

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

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

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

  #rk-heatplan-guide .rk-heatplan-section-dark .rk-heatplan-eyebrow {
    color: #68e6ef;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  #rk-heatplan-guide .rk-heatplan-note p {
    margin: 0;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  /* Bazowe style modułów interaktywnych */
  #rk-heatplan-guide .rk-heatplan-locator {
    background: #102f42;
    border: 1px solid #315a70;
    border-radius: 24px;
    margin-top: 32px;
    overflow: hidden;
  }

  #rk-heatplan-guide .rk-heatplan-locator-head {
    border-bottom: 1px solid #315a70;
    padding: 29px;
  }

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

  #rk-heatplan-guide .rk-heatplan-locator-head p {
    color: #bad3dc;
    margin: 10px 0 0;
    max-width: 1000px;
  }

  #rk-heatplan-guide .rk-heatplan-tool-grid {
    display: grid;
    gap: 24px;
    grid-template-columns: minmax(0, 0.88fr) minmax(0, 1.12fr);
    padding: 28px;
  }

  #rk-heatplan-guide .rk-heatplan-controls,
  #rk-heatplan-guide .rk-heatplan-output {
    background: #17394b;
    border: 1px solid #376177;
    border-radius: 18px;
    padding: 23px;
  }

  #rk-heatplan-guide .rk-heatplan-controls h4,
  #rk-heatplan-guide .rk-heatplan-output h4 {
    color: #ffffff;
    font-size: 1.1rem;
    line-height: 1.35;
    margin: 0 0 17px;
  }

  #rk-heatplan-guide .rk-heatplan-field {
    display: block;
    margin-top: 16px;
  }

  #rk-heatplan-guide .rk-heatplan-field:first-of-type {
    margin-top: 0;
  }

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

  #rk-heatplan-guide .rk-heatplan-input-wrap {
    position: relative;
  }

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

  #rk-heatplan-guide .rk-heatplan-suggestions {
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    box-shadow: 0 15px 30px rgba(7, 27, 39, 0.23);
    display: none;
    left: 0;
    margin: 6px 0 0;
    max-height: 318px;
    overflow-y: auto;
    padding: 5px;
    position: absolute;
    right: 0;
    top: 100%;
    z-index: 20;
  }

  #rk-heatplan-guide .rk-heatplan-suggestions.is-open {
    display: block;
  }

  #rk-heatplan-guide .rk-heatplan-suggestion {
    background: transparent;
    border: 0;
    border-radius: 8px;
    color: var(--rk-ink);
    cursor: pointer;
    display: block;
    padding: 10px 11px;
    text-align: left;
    width: 100%;
  }

  #rk-heatplan-guide .rk-heatplan-suggestion:hover,
  #rk-heatplan-guide .rk-heatplan-suggestion.is-active {
    background: var(--rk-cyan-soft);
    color: #075f78;
  }

  #rk-heatplan-guide .rk-heatplan-suggestion strong {
    display: block;
    font-size: 0.91rem;
  }

  #rk-heatplan-guide .rk-heatplan-suggestion small {
    color: var(--rk-muted);
    display: block;
    font-size: 0.72rem;
    margin-top: 2px;
  }

  #rk-heatplan-guide .rk-heatplan-no-result {
    color: var(--rk-copy);
    font-size: 0.84rem;
    padding: 12px;
  }

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

  #rk-heatplan-guide .rk-heatplan-tool-help {
    color: #9fbdc8;
    font-size: 0.75rem;
    line-height: 1.5;
    margin: 9px 0 0;
  }

  #rk-heatplan-guide .rk-heatplan-tool-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 19px;
  }

  #rk-heatplan-guide .rk-heatplan-button,
  #rk-heatplan-guide .rk-heatplan-button-secondary {
    border-radius: 11px;
    cursor: pointer;
    font-weight: 900;
    min-height: 48px;
    padding: 11px 17px;
  }

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

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

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

  #rk-heatplan-guide .rk-heatplan-manual {
    border-top: 1px solid #315a70;
    margin-top: 20px;
    padding-top: 19px;
  }

  #rk-heatplan-guide .rk-heatplan-manual summary {
    color: #8debf2;
    cursor: pointer;
    font-size: 0.83rem;
    font-weight: 900;
  }

  #rk-heatplan-guide .rk-heatplan-manual-inner {
    margin-top: 13px;
  }

  #rk-heatplan-guide .rk-heatplan-placeholder {
    align-items: center;
    color: #b9d0d9;
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: 260px;
    text-align: center;
  }

  #rk-heatplan-guide .rk-heatplan-placeholder-mark {
    align-items: center;
    background: #21536a;
    border: 1px solid #467186;
    border-radius: 50%;
    color: #74e8ef;
    display: inline-flex;
    font-size: 1.65rem;
    font-weight: 900;
    height: 70px;
    justify-content: center;
    margin-bottom: 16px;
    width: 70px;
  }

  #rk-heatplan-guide .rk-heatplan-result {
    display: none;
  }

  #rk-heatplan-guide .rk-heatplan-result.is-visible {
    display: block;
  }

  #rk-heatplan-guide .rk-heatplan-result-place {
    color: #ffffff;
    font-size: clamp(1.35rem, 2.7vw, 2rem);
    font-weight: 900;
    line-height: 1.2;
    margin: 0;
  }

  #rk-heatplan-guide .rk-heatplan-result-region {
    color: #aecaD5;
    font-size: 0.83rem;
    margin: 5px 0 0;
  }

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

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

  #rk-heatplan-guide .rk-heatplan-result-tile span {
    color: #9fc0cb;
    display: block;
    font-size: 0.69rem;
    font-weight: 900;
    letter-spacing: 0.06em;
    text-transform: uppercase;
  }

  #rk-heatplan-guide .rk-heatplan-result-tile strong {
    color: #ffffff;
    display: block;
    font-size: 1.32rem;
    line-height: 1.25;
    margin-top: 5px;
  }

  #rk-heatplan-guide .rk-heatplan-result-tile.is-highlight {
    background: rgba(41, 196, 215, 0.14);
    border-color: rgba(105, 231, 242, 0.45);
  }

  #rk-heatplan-guide .rk-heatplan-result-tile.is-highlight strong {
    color: #73e8f1;
  }

  #rk-heatplan-guide .rk-heatplan-result-note {
    background: #fff8e8;
    border-left: 5px solid var(--rk-yellow);
    border-radius: 12px;
    color: #654f18;
    margin-top: 16px;
    padding: 15px 17px;
  }

  #rk-heatplan-guide .rk-heatplan-result-note p {
    margin: 0;
  }

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

  #rk-heatplan-guide .rk-heatplan-scope-card {
    background: #ffffff;
    border-radius: 12px;
    padding: 15px;
  }

  #rk-heatplan-guide .rk-heatplan-scope-card strong {
    display: block;
    font-size: 0.78rem;
    letter-spacing: 0.05em;
    margin-bottom: 6px;
    text-transform: uppercase;
  }

  #rk-heatplan-guide .rk-heatplan-scope-card p {
    color: var(--rk-copy);
    font-size: 0.83rem;
    line-height: 1.55;
    margin: 0;
  }

  #rk-heatplan-guide .rk-heatplan-scope-card.is-use strong {
    color: var(--rk-green-dark);
  }

  #rk-heatplan-guide .rk-heatplan-scope-card.is-limit strong {
    color: #a83d2d;
  }

  #rk-heatplan-guide .rk-heatplan-scenario {
    background: #0d293a;
    border-top: 1px solid #315a70;
    padding: 28px;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-head h3 {
    color: #ffffff;
    font-size: clamp(1.35rem, 2.7vw, 2rem);
    line-height: 1.2;
    margin: 0;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-head p {
    color: #b8d0d9;
    margin: 8px 0 0;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-controls {
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 21px;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-controls label span {
    color: #eaf6f8;
    display: block;
    font-size: 0.75rem;
    font-weight: 800;
    margin-bottom: 7px;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-controls input,
  #rk-heatplan-guide .rk-heatplan-scenario-controls select {
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    color: var(--rk-ink);
    min-height: 48px;
    padding: 10px 12px;
    width: 100%;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-result {
    background: #ffffff;
    border-left: 7px solid var(--rk-cyan);
    border-radius: 15px;
    margin-top: 20px;
    padding: 20px;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-result strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.12rem;
  }

  #rk-heatplan-guide .rk-heatplan-scenario-result p {
    color: var(--rk-copy);
    margin: 7px 0 0;
  }

  #rk-heatplan-guide .rk-heatplan-chart-wrap {
    background: #17394b;
    border: 1px solid #376177;
    border-radius: 18px;
    margin-top: 24px;
    padding: 23px;
  }

  #rk-heatplan-guide .rk-heatplan-chart-title {
    color: #ffffff;
    font-size: 1rem;
    font-weight: 900;
    margin: 0;
  }

  #rk-heatplan-guide .rk-heatplan-chart-subtitle {
    color: #aac6d0;
    font-size: 0.8rem;
    margin: 4px 0 0;
  }

  #rk-heatplan-guide .rk-heatplan-chart {
    align-items: end;
    display: grid;
    gap: 11px;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    margin-top: 24px;
    min-height: 280px;
  }

  #rk-heatplan-guide .rk-heatplan-bar-item {
    align-items: stretch;
    display: flex;
    flex-direction: column;
    height: 100%;
    justify-content: flex-end;
    text-align: center;
  }

  #rk-heatplan-guide .rk-heatplan-bar-value {
    color: #dff8fa;
    font-size: 0.78rem;
    font-weight: 900;
    margin-bottom: 7px;
  }

  #rk-heatplan-guide .rk-heatplan-bar-track {
    align-items: flex-end;
    background: rgba(255, 255, 255, 0.055);
    border: 1px solid rgba(255, 255, 255, 0.11);
    border-radius: 11px 11px 5px 5px;
    display: flex;
    height: 205px;
    overflow: hidden;
  }

  #rk-heatplan-guide .rk-heatplan-bar-fill {
    background: linear-gradient(180deg, #69e7f2 0%, #1199b5 100%);
    border-radius: 9px 9px 3px 3px;
    height: var(--rk-desktop-height, 50%);
    min-height: 24px;
    width: 100%;
  }

  #rk-heatplan-guide .rk-heatplan-bar-item.is-selected .rk-heatplan-bar-fill {
    background: linear-gradient(180deg, #ffad50 0%, #ff6846 100%);
  }

  #rk-heatplan-guide .rk-heatplan-bar-item.is-reference .rk-heatplan-bar-track {
    border-color: #77e8ef;
  }

  #rk-heatplan-guide .rk-heatplan-bar-label {
    color: #ffffff;
    font-size: 0.8rem;
    font-weight: 900;
    line-height: 1.35;
    margin-top: 9px;
  }

  #rk-heatplan-guide .rk-heatplan-bar-label small {
    color: #aecaD5;
    display: block;
    font-size: 0.69rem;
    font-weight: 700;
    margin-top: 2px;
  }

  #rk-heatplan-guide .rk-heatplan-tool-disclaimer {
    color: #90adb9;
    font-size: 0.75rem;
    line-height: 1.55;
    margin: 17px 0 0;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  #rk-heatplan-guide .rk-heatplan-author {
    background: #eef6f8;
    border-top: 1px solid var(--rk-line);
    padding: 64px 58px;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  /* Modułowa mapa procesu projektowego */
  #rk-heatplan-guide .rk-heatplan-process-grid {
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 31px;
  }

  #rk-heatplan-guide .rk-heatplan-process-button {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    color: var(--rk-ink);
    cursor: pointer;
    min-height: 148px;
    padding: 21px;
    text-align: left;
  }

  #rk-heatplan-guide .rk-heatplan-process-button:hover,
  #rk-heatplan-guide .rk-heatplan-process-button[aria-selected="true"] {
    background: var(--rk-navy);
    border-color: var(--rk-navy);
    color: #ffffff;
  }

  #rk-heatplan-guide .rk-heatplan-process-button span {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 9px;
    color: #076c85;
    display: inline-flex;
    font-size: 0.75rem;
    font-weight: 900;
    height: 34px;
    justify-content: center;
    margin-bottom: 14px;
    min-width: 34px;
    padding: 0 9px;
  }

  #rk-heatplan-guide .rk-heatplan-process-button strong {
    display: block;
    font-size: 1rem;
    line-height: 1.3;
  }

  #rk-heatplan-guide .rk-heatplan-process-button small {
    color: var(--rk-muted);
    display: block;
    font-size: 0.78rem;
    line-height: 1.5;
    margin-top: 7px;
  }

  #rk-heatplan-guide .rk-heatplan-process-button:hover small,
  #rk-heatplan-guide .rk-heatplan-process-button[aria-selected="true"] small {
    color: #bed3dc;
  }

  #rk-heatplan-guide .rk-heatplan-process-panel {
    background: var(--rk-navy);
    border-radius: 18px;
    color: #ffffff;
    margin-top: 17px;
    padding: 27px;
  }

  #rk-heatplan-guide .rk-heatplan-process-panel h3 {
    color: #ffffff;
    font-size: 1.45rem;
    line-height: 1.25;
    margin: 0;
  }

  #rk-heatplan-guide .rk-heatplan-process-panel > p {
    color: #bed3dc;
    margin: 9px 0 0;
  }

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

  #rk-heatplan-guide .rk-heatplan-process-fact {
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.14);
    border-radius: 12px;
    padding: 16px;
  }

  #rk-heatplan-guide .rk-heatplan-process-fact strong {
    color: #70e7ef;
    display: block;
    font-size: 0.7rem;
    letter-spacing: 0.07em;
    margin-bottom: 6px;
    text-transform: uppercase;
  }

  #rk-heatplan-guide .rk-heatplan-process-fact span {
    color: #ffffff;
    font-size: 0.86rem;
    line-height: 1.55;
  }

  /* Analizator kompletności projektu */
  #rk-heatplan-guide .rk-heatplan-analyzer {
    background: #102f42;
    border: 1px solid #315a70;
    border-radius: 24px;
    margin-top: 32px;
    overflow: hidden;
  }

  #rk-heatplan-guide .rk-heatplan-analyzer-head {
    border-bottom: 1px solid #315a70;
    padding: 29px;
  }

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

  #rk-heatplan-guide .rk-heatplan-analyzer-head p {
    color: #bad3dc;
    margin: 10px 0 0;
    max-width: 1020px;
  }

  #rk-heatplan-guide .rk-heatplan-mode-tabs {
    display: grid;
    gap: 10px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 22px;
  }

  #rk-heatplan-guide .rk-heatplan-mode-tab {
    background: #173e51;
    border: 1px solid #416b7f;
    border-radius: 12px;
    color: #ffffff;
    cursor: pointer;
    font-weight: 900;
    min-height: 51px;
    padding: 10px 14px;
  }

  #rk-heatplan-guide .rk-heatplan-mode-tab[aria-selected="true"] {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    color: #082b3b;
  }

  #rk-heatplan-guide .rk-heatplan-analyzer-body {
    padding: 28px;
  }

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

  #rk-heatplan-guide .rk-heatplan-context-field span {
    color: #eaf6f8;
    display: block;
    font-size: 0.76rem;
    font-weight: 900;
    margin-bottom: 7px;
  }

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

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

  #rk-heatplan-guide .rk-heatplan-stage-head {
    align-items: flex-start;
    display: flex;
    gap: 13px;
  }

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

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

  #rk-heatplan-guide .rk-heatplan-stage-head p {
    color: #abc8d3;
    font-size: 0.83rem;
    margin: 4px 0 0;
  }

  #rk-heatplan-guide .rk-heatplan-check-grid {
    display: grid;
    gap: 11px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 18px;
  }

  #rk-heatplan-guide .rk-heatplan-check {
    cursor: pointer;
    display: block;
    position: relative;
  }

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

  #rk-heatplan-guide .rk-heatplan-check-inner {
    align-items: flex-start;
    background: #102f42;
    border: 1px solid #41677a;
    border-radius: 12px;
    color: #dcebef;
    display: flex;
    gap: 11px;
    min-height: 77px;
    padding: 14px;
  }

  #rk-heatplan-guide .rk-heatplan-check-mark {
    align-items: center;
    border: 2px solid #7394a3;
    border-radius: 6px;
    color: transparent;
    display: inline-flex;
    flex: 0 0 24px;
    font-size: 0.78rem;
    font-weight: 900;
    height: 24px;
    justify-content: center;
    margin-top: 1px;
  }

  #rk-heatplan-guide .rk-heatplan-check-copy strong {
    color: #ffffff;
    display: block;
    font-size: 0.86rem;
    line-height: 1.35;
  }

  #rk-heatplan-guide .rk-heatplan-check-copy small {
    color: #a9c3cd;
    display: block;
    font-size: 0.73rem;
    line-height: 1.45;
    margin-top: 4px;
  }

  #rk-heatplan-guide .rk-heatplan-check input:checked + .rk-heatplan-check-inner {
    background: rgba(47, 205, 161, 0.11);
    border-color: #42c9a5;
  }

  #rk-heatplan-guide .rk-heatplan-check input:checked + .rk-heatplan-check-inner .rk-heatplan-check-mark {
    background: var(--rk-green);
    border-color: var(--rk-green);
    color: #082f27;
  }

  #rk-heatplan-guide .rk-heatplan-check input:focus-visible + .rk-heatplan-check-inner {
    outline: 3px solid rgba(41, 196, 215, 0.48);
    outline-offset: 2px;
  }

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

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

  #rk-heatplan-guide .rk-heatplan-audit-result.is-ready {
    border-left-color: var(--rk-green);
  }

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

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

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

  #rk-heatplan-guide .rk-heatplan-progress {
    background: #e6eef1;
    border-radius: 999px;
    height: 12px;
    margin-top: 18px;
    overflow: hidden;
  }

  #rk-heatplan-guide .rk-heatplan-progress-fill {
    background: linear-gradient(90deg, var(--rk-cyan-dark), var(--rk-cyan));
    border-radius: inherit;
    height: 100%;
    width: 0;
  }

  #rk-heatplan-guide .rk-heatplan-progress-label {
    color: var(--rk-muted);
    font-size: 0.75rem;
    font-weight: 800;
    margin: 7px 0 0;
  }

  #rk-heatplan-guide .rk-heatplan-audit-columns {
    display: grid;
    gap: 13px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 20px;
  }

  #rk-heatplan-guide .rk-heatplan-audit-column {
    background: #f4f8fa;
    border: 1px solid var(--rk-line);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-heatplan-guide .rk-heatplan-audit-column h4 {
    font-size: 0.78rem;
    letter-spacing: 0.05em;
    margin: 0 0 10px;
    text-transform: uppercase;
  }

  #rk-heatplan-guide .rk-heatplan-audit-column.is-ok h4 { color: var(--rk-green-dark); }
  #rk-heatplan-guide .rk-heatplan-audit-column.is-missing h4 { color: #8b650f; }
  #rk-heatplan-guide .rk-heatplan-audit-column.is-critical h4 { color: #a53d2e; }

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

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

  #rk-heatplan-guide .rk-heatplan-brief {
    background: #edf7f9;
    border: 1px solid #c6e0e6;
    border-radius: 13px;
    margin-top: 17px;
    padding: 17px;
  }

  #rk-heatplan-guide .rk-heatplan-brief h4 {
    color: var(--rk-ink);
    font-size: 0.92rem;
    margin: 0;
  }

  #rk-heatplan-guide .rk-heatplan-brief-output {
    color: var(--rk-copy);
    font-size: 0.82rem;
    line-height: 1.6;
    margin: 10px 0 0;
    white-space: pre-line;
  }

  #rk-heatplan-guide .rk-heatplan-copy-confirmation {
    color: var(--rk-green-dark);
    display: inline-block;
    font-size: 0.77rem;
    font-weight: 900;
    margin-left: 10px;
  }

  #rk-heatplan-guide .rk-heatplan-analyzer-disclaimer {
    color: #8daab6;
    font-size: 0.75rem;
    line-height: 1.55;
    margin: 16px 0 0;
  }

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

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

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

    #rk-heatplan-guide .rk-heatplan-audit-columns,
    #rk-heatplan-guide .rk-heatplan-process-facts {
      grid-template-columns: minmax(0, 1fr);
    }
  }

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

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

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

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

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

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

    #rk-heatplan-guide .rk-heatplan-author-side {
      padding-bottom: 28px;
    }
  }

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

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

    #rk-heatplan-guide .rk-heatplan-grid-2,
    #rk-heatplan-guide .rk-heatplan-grid-3,
    #rk-heatplan-guide .rk-heatplan-grid-4,
    #rk-heatplan-guide .rk-heatplan-source-grid,
    #rk-heatplan-guide .rk-heatplan-author-facts,
    #rk-heatplan-guide .rk-heatplan-two-fields,
    #rk-heatplan-guide .rk-heatplan-result-grid,
    #rk-heatplan-guide .rk-heatplan-result-scope,
    #rk-heatplan-guide .rk-heatplan-scenario-controls {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-heatplan-guide .rk-heatplan-process-grid,
    #rk-heatplan-guide .rk-heatplan-context-grid,
    #rk-heatplan-guide .rk-heatplan-check-grid,
    #rk-heatplan-guide .rk-heatplan-mode-tabs,
    #rk-heatplan-guide .rk-heatplan-audit-columns,
    #rk-heatplan-guide .rk-heatplan-process-facts {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-heatplan-guide .rk-heatplan-locator,
    #rk-heatplan-guide .rk-heatplan-cta {
      border-radius: 17px;
    }

    #rk-heatplan-guide .rk-heatplan-locator-head,
    #rk-heatplan-guide .rk-heatplan-tool-grid,
    #rk-heatplan-guide .rk-heatplan-scenario,
    #rk-heatplan-guide .rk-heatplan-cta {
      padding: 20px;
    }

    #rk-heatplan-guide .rk-heatplan-controls,
    #rk-heatplan-guide .rk-heatplan-output,
    #rk-heatplan-guide .rk-heatplan-chart-wrap {
      padding: 18px;
    }

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

    #rk-heatplan-guide .rk-heatplan-button,
    #rk-heatplan-guide .rk-heatplan-button-secondary,
    #rk-heatplan-guide .rk-heatplan-cta-button {
      text-align: center;
      width: 100%;
    }

    #rk-heatplan-guide .rk-heatplan-analyzer-head,
    #rk-heatplan-guide .rk-heatplan-analyzer-body,
    #rk-heatplan-guide .rk-heatplan-process-panel {
      padding: 20px;
    }

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

    #rk-heatplan-guide .rk-heatplan-chart {
      display: block;
      min-height: 0;
    }

    #rk-heatplan-guide .rk-heatplan-bar-item {
      display: grid;
      gap: 8px;
      grid-template-columns: 66px minmax(0, 1fr) 88px;
      margin-top: 13px;
      text-align: left;
    }

    #rk-heatplan-guide .rk-heatplan-bar-value {
      align-self: center;
      margin: 0;
      order: 3;
      text-align: right;
    }

    #rk-heatplan-guide .rk-heatplan-bar-track {
      align-items: stretch;
      align-self: center;
      height: 25px;
      order: 2;
    }

    #rk-heatplan-guide .rk-heatplan-bar-fill {
      border-radius: 4px;
      height: 100%;
      min-height: 0;
      width: var(--rk-mobile-width, 50%);
    }

    #rk-heatplan-guide .rk-heatplan-bar-label {
      align-self: center;
      margin: 0;
      order: 1;
    }

    #rk-heatplan-guide .rk-heatplan-bar-label small {
      display: none;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    #rk-heatplan-guide .rk-heatplan-hero-title {
      font-size: 2.2rem;
    }

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

    #rk-heatplan-guide .rk-heatplan-bar-item {
      grid-template-columns: 54px minmax(0, 1fr) 74px;
    }
  }

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

<article id="rk-heatplan-guide" aria-labelledby="rk-heatplan-visual-title">
  <div class="rk-heatplan-shell">
    <header class="rk-heatplan-hero">
      <span class="rk-heatplan-kicker">OZC · odbiorniki · hydraulika · źródło ciepła</span>
      <div class="rk-heatplan-hero-title" id="rk-heatplan-visual-title">Projekt instalacji grzewczej domu: <span>od danych budynku do nastaw wykonawczych</span></div>
      <p class="rk-heatplan-hero-lead">Dobry projekt nie kończy się na jednej mocy w kW. Łączy obciążenie każdego pomieszczenia z doborem podłogówki lub grzejników, temperaturami wody, przepływami, oporami, źródłem ciepła, automatyką i dokumentacją potrzebną wykonawcy.</p>
      <div class="rk-heatplan-hero-tags" aria-label="Zakres poradnika">
        <span>OZC pomieszczeń</span>
        <span>podłogówka i grzejniki</span>
        <span>przepływy i opory</span>
        <span>źródło i automatyka</span>
        <span>koszt i zakres projektu</span>
      </div>
      <div class="rk-heatplan-meta">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 30 minut</strong></span>
        <span>Aktualizacja techniczna: <strong>16 września 2026 r.</strong></span>
      </div>
    </header>

    <nav class="rk-heatplan-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-heatplan-shortcuts-label">Na skróty</span>
      <a href="#rk-heatplan-answer">Szybka odpowiedź</a>
      <a href="#rk-heatplan-definitions">Rodzaje projektu</a>
      <a href="#rk-heatplan-results">Cztery wyniki</a>
      <a href="#rk-heatplan-roadmap">Mapa procesu</a>
      <a href="#rk-heatplan-analyzer-section">Analizator projektu</a>
      <a href="#rk-heatplan-data">Dane wejściowe</a>
      <a href="#rk-heatplan-ozc">OZC pomieszczeń</a>
      <a href="#rk-heatplan-emitters">Dobór odbiorników</a>
      <a href="#rk-heatplan-floor">Projekt podłogówki</a>
      <a href="#rk-heatplan-hydraulics">Hydraulika</a>
      <a href="#rk-heatplan-source">Źródło ciepła</a>
      <a href="#rk-heatplan-controls-section">Automatyka</a>
      <a href="#rk-heatplan-documents">Gotowa dokumentacja</a>
      <a href="#rk-heatplan-costs">Koszt projektu</a>
      <a href="#rk-heatplan-timing">Kiedy zamówić</a>
      <a href="#rk-heatplan-offers">Porównanie ofert</a>
      <a href="#rk-heatplan-changes">Zmiany w projekcie</a>
      <a href="#rk-heatplan-errors">Najczęstsze błędy</a>
      <a href="#rk-heatplan-final">Podsumowanie</a>
      <a href="#rk-heatplan-sources">Źródła</a>
      <a href="#rk-heatplan-faq">FAQ</a>
      <a href="#rk-heatplan-author">Autor</a>
    </nav>

    

    <section class="rk-heatplan-section" id="rk-heatplan-answer">
      <span class="rk-heatplan-eyebrow">Odpowiedź w 60 sekund</span>
      <h2 class="rk-heatplan-section-title">Co powinien zawierać projekt instalacji grzewczej domu?</h2>
      <p class="rk-heatplan-lead"><strong>Projekt powinien zamieniać dane konkretnego budynku w jednoznaczne parametry wykonawcze.</strong> Sama moc całego domu, rzut z narysowanymi rurami albo katalog wybranego urządzenia nie są jeszcze kompletnym projektem instalacji.</p>
      <div class="rk-heatplan-answer">
        <strong>Minimalny logiczny ciąg to: dane budynku → obciążenie cieplne pomieszczeń → dobór odbiorników → obliczenia hydrauliczne → dobór źródła i sterowania → dokumentacja wykonawcza.</strong>
        <p>Każdy kolejny etap korzysta z wyniku poprzedniego. Jeżeli brakuje obciążenia konkretnej łazienki, nie da się odpowiedzialnie potwierdzić rozstawu rur. Jeżeli nie znamy przepływów i oporów, nie da się dobrać pompy tylko z powierzchni domu.</p>
      </div>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-icon">W</span><h3>Moc pomieszczeń</h3><p>Projekt pokazuje straty w watach dla każdego pomieszczenia, a nie wyłącznie wskaźnik W/m² przyjęty dla całego domu.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-icon">V̇</span><h3>Hydraulika</h3><p>Określa przepływy, długości, straty ciśnienia, drogę krytyczną, nastawy oraz wymagany punkt pracy pompy.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-icon">PDF</span><h3>Instrukcja wykonawcza</h3><p>Rysunki, zestawienia i schemat muszą pozwalać wykonawcy zbudować układ bez uzupełniania założeń na budowie.</p></article>
      </div>
      <p class="rk-heatplan-copy">Jeżeli chcesz zobaczyć dokument od strony praktycznej, osobny poradnik pokazuje, <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">jak powinien wyglądać profesjonalny projekt ogrzewania podłogowego</a>. Tutaj rozszerzamy temat na cały proces projektowania instalacji grzewczej domu.</p>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-definitions">
      <span class="rk-heatplan-eyebrow">Najpierw ustal zakres dokumentu</span>
      <h2 class="rk-heatplan-section-title">Projekt budowlany, techniczny i wykonawczy — to nie są synonimy</h2>
      <p class="rk-heatplan-lead">Inwestor może mieć dokumentację wystarczającą do formalnego procesu budowlanego, a jednocześnie nie mieć danych potrzebnych ekipie do ułożenia pętli, ustawienia przepływów i uruchomienia instalacji.</p>
      <div class="rk-heatplan-table-wrap">
        <table>
          <thead><tr><th>Rodzaj opracowania</th><th>Główne zadanie</th><th>Typowa zawartość</th><th>Czego nie należy zakładać</th></tr></thead>
          <tbody>
            <tr><td data-label="Rodzaj"><strong>Projekt budowlany</strong></td><td data-label="Zadanie">Wykazanie przyjętych rozwiązań w zakresie wymaganym dla procesu budowlanego.</td><td data-label="Zawartość">Rozwiązania instalacyjne odpowiednie do zakresu i stopnia skomplikowania obiektu.</td><td data-label="Nie zakładaj">Że zawsze zawiera rozstaw każdej pętli, nastawy rotametrów i kompletną hydraulikę wykonawczą.</td></tr>
            <tr><td data-label="Rodzaj"><strong>Projekt techniczny</strong></td><td data-label="Zadanie">Uszczegółowienie rozwiązań technicznych oraz spełnienia wymagań dla budynku.</td><td data-label="Zawartość">Obliczenia, dobór podstawowych rozwiązań, schematy i opis techniczny w zakresie inwestycji.</td><td data-label="Nie zakładaj">Że każda dokumentacja jest rozwinięta do identycznego poziomu wykonawczego.</td></tr>
            <tr><td data-label="Rodzaj"><strong>Projekt wykonawczy instalacji</strong></td><td data-label="Zadanie">Przekazanie ekipie danych potrzebnych do zamówienia, montażu, regulacji i odbioru.</td><td data-label="Zawartość">Trasy, średnice, odbiorniki, pętle, przepływy, opory, nastawy, schemat i zestawienia.</td><td data-label="Nie zakładaj">Że rysunek bez obliczeń potwierdza moc i hydraulikę układu.</td></tr>
            <tr><td data-label="Rodzaj"><strong>OZC</strong></td><td data-label="Zadanie">Określenie projektowego obciążenia cieplnego budynku i pomieszczeń.</td><td data-label="Zawartość">Warunki obliczeń, straty przez przenikanie i wentylację oraz wyniki w W lub kW.</td><td data-label="Nie zakładaj">Że samo OZC wyznacza długości pętli, nastawy i kompletny dobór źródła.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-heatplan-note"><p><strong>Przed podpisaniem umowy poproś o spis elementów przekazywanej dokumentacji.</strong> Nazwa „projekt instalacji” bez opisanego zakresu może oznaczać zarówno kompletne opracowanie, jak i kilka orientacyjnych rysunków.</p></div>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-results">
      <span class="rk-heatplan-eyebrow">Jednostka zdradza przeznaczenie wyniku</span>
      <h2 class="rk-heatplan-section-title">Moc, energia, sprawność i koszt — cztery różne odpowiedzi</h2>
      <p class="rk-heatplan-lead">Najczęstszy błąd polega na zamiennym używaniu kW, kWh/rok, COP lub SCOP i zł/rok. Każda z tych wielkości odpowiada na inne pytanie i wymaga innych danych.</p>
      <div class="rk-heatplan-grid-4">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">W / kW</span><h3>Moc projektowa</h3><p>Ile ciepła trzeba dostarczyć w przyjętych warunkach obliczeniowych. Służy między innymi do wymiarowania odbiorników i oceny źródła.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">kWh/rok</span><h3>Energia roczna</h3><p>Ile energii użytkowej potrzeba w rozpatrywanym okresie. Uwzględnia zmienność warunków, harmonogram i zyski cieplne.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">COP / SCOP</span><h3>Efektywność źródła</h3><p>COP opisuje punkt pracy, a SCOP wynik sezonowy. Zależą od urządzenia, temperatur źródła dolnego i górnego oraz sposobu eksploatacji.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">zł/rok</span><h3>Koszt eksploatacji</h3><p>Wymaga energii kupionej, taryfy, kosztów stałych, serwisu i jawnych cen. Nie wynika z prostego mnożenia mocy przez czas sezonu.</p></article>
      </div>
      <p class="rk-heatplan-copy">Rozróżnienie mocy i energii rozwija poradnik o <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">bilansie cieplnym budynku</a>, a znaczenie wyniku w watach wyjaśnia osobny materiał o <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowym obciążeniu cieplnym OZC</a>.</p>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-roadmap">
      <span class="rk-heatplan-eyebrow">Modułowa mapa zamiast dekoracyjnego schematu</span>
      <h2 class="rk-heatplan-section-title">Od danych budynku do gotowych nastaw instalacji</h2>
      <p class="rk-heatplan-lead">Wybierz etap. Moduł pokaże jego dane wejściowe, wynik oraz błąd, który powstaje, gdy próbuje się go pominąć.</p>
      <div class="rk-heatplan-process-grid" role="tablist" aria-label="Etapy projektu instalacji grzewczej">
        <button class="rk-heatplan-process-button" type="button" role="tab" aria-selected="true" data-rk-process="inputs"><span>01</span><strong>Dane budynku</strong><small>Geometria, przegrody, wentylacja i sposób użytkowania.</small></button>
        <button class="rk-heatplan-process-button" type="button" role="tab" aria-selected="false" data-rk-process="load"><span>02</span><strong>OZC pomieszczeń</strong><small>Projektowe obciążenie w watach z jawnymi założeniami.</small></button>
        <button class="rk-heatplan-process-button" type="button" role="tab" aria-selected="false" data-rk-process="emitters"><span>03</span><strong>Odbiorniki ciepła</strong><small>Podłoga, grzejniki lub układ mieszany dopasowany do strat.</small></button>
        <button class="rk-heatplan-process-button" type="button" role="tab" aria-selected="false" data-rk-process="hydraulics"><span>04</span><strong>Hydraulika</strong><small>Przepływy, opory, średnice i punkt pracy pompy.</small></button>
        <button class="rk-heatplan-process-button" type="button" role="tab" aria-selected="false" data-rk-process="source"><span>05</span><strong>Źródło i sterowanie</strong><small>Moc dostępna, modulacja, krzywa grzewcza i zabezpieczenia.</small></button>
        <button class="rk-heatplan-process-button" type="button" role="tab" aria-selected="false" data-rk-process="docs"><span>06</span><strong>Dokumentacja i odbiór</strong><small>Rysunki, zestawienia, nastawy i procedura uruchomienia.</small></button>
      </div>
      <div class="rk-heatplan-process-panel" role="tabpanel" aria-live="polite">
        <h3 id="rk-heatplan-process-title">Dane budynku</h3>
        <p id="rk-heatplan-process-summary">Projekt zaczyna się od informacji o rzeczywistym budynku, a nie od wyboru rozstawu rur lub mocy urządzenia.</p>
        <div class="rk-heatplan-process-facts">
          <div class="rk-heatplan-process-fact"><strong>Dane wejściowe</strong><span id="rk-heatplan-process-input">Rzuty, przekroje, lokalizacja, warstwy przegród, okna, wentylacja, temperatury pomieszczeń i okładziny.</span></div>
          <div class="rk-heatplan-process-fact"><strong>Wynik etapu</strong><span id="rk-heatplan-process-output">Spójny model budynku z opisanymi strefami cieplnymi i założeniami do obliczeń.</span></div>
          <div class="rk-heatplan-process-fact"><strong>Ryzyko pominięcia</strong><span id="rk-heatplan-process-risk">Wynik może opisywać inny budynek niż ten, który faktycznie powstanie.</span></div>
        </div>
      </div>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-dark" id="rk-heatplan-analyzer-section">
      <span class="rk-heatplan-eyebrow">Narzędzie główne poradnika</span>
      <h2 class="rk-heatplan-section-title">Analizator kompletności projektu instalacji grzewczej</h2>
      <p class="rk-heatplan-lead">Możesz przygotować zakres przyszłego zlecenia albo sprawdzić dokumentację, którą już otrzymałeś. Zaznacz wyłącznie elementy rzeczywiście opisane lub obliczone — nie te, które wykonawca obiecał ustnie.</p>

      <div class="rk-heatplan-analyzer" id="rk-heatplan-analyzer">
        <div class="rk-heatplan-analyzer-head">
          <h3>Sprawdź ciąg od danych do uruchomienia</h3>
          <p>Narzędzie nie wykonuje OZC i nie zatwierdza dokumentacji. Porządkuje zakres, wykrywa brakujące ogniwa oraz tworzy listę pytań do projektanta lub wykonawcy.</p>
          <div class="rk-heatplan-mode-tabs" role="tablist" aria-label="Tryb analizatora">
            <button class="rk-heatplan-mode-tab" type="button" role="tab" aria-selected="true" data-rk-mode="prepare">Przygotowuję zlecenie</button>
            <button class="rk-heatplan-mode-tab" type="button" role="tab" aria-selected="false" data-rk-mode="audit">Sprawdzam projekt lub ofertę</button>
          </div>
        </div>

        <div class="rk-heatplan-analyzer-body">
          <div class="rk-heatplan-context-grid">
            <label class="rk-heatplan-context-field"><span>Etap inwestycji</span><select id="rk-heatplan-stage"><option value="new">Nowy dom — przed instalacjami</option><option value="shell">Stan surowy / instalacje w toku</option><option value="renovation">Modernizacja istniejącego domu</option><option value="source-change">Wymiana samego źródła ciepła</option></select></label>
            <label class="rk-heatplan-context-field"><span>Planowane odbiorniki</span><select id="rk-heatplan-system"><option value="floor">Ogrzewanie podłogowe</option><option value="radiators">Grzejniki</option><option value="mixed">Układ mieszany</option><option value="unknown">Jeszcze nieustalone</option></select></label>
            <label class="rk-heatplan-context-field"><span>Źródło ciepła</span><select id="rk-heatplan-source-select"><option value="heat-pump">Pompa ciepła</option><option value="gas">Kocioł gazowy</option><option value="pellet">Kocioł na pellet / paliwo stałe</option><option value="electric">Źródło elektryczne</option><option value="unknown">Jeszcze nieustalone</option></select></label>
            <label class="rk-heatplan-context-field"><span>Wentylacja</span><select id="rk-heatplan-ventilation"><option value="mechanical">Mechaniczna z odzyskiem ciepła</option><option value="gravity">Grawitacyjna</option><option value="mixed">Hybrydowa / inna</option><option value="unknown">Brak potwierdzonych danych</option></select></label>
          </div>

          <div class="rk-heatplan-audit-stage">
            <div class="rk-heatplan-stage-head"><span class="rk-heatplan-stage-number">1</span><div><h4>Dane wejściowe budynku</h4><p>Zaznacz materiały przekazane projektantowi albo jednoznacznie przywołane w dokumentacji.</p></div></div>
            <div class="rk-heatplan-check-grid">
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="true" data-label="Aktualne rzuty i przekroje z wymiarami"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Aktualne rzuty i przekroje</strong><small>Wymiary, kondygnacje, wysokości i przeznaczenie pomieszczeń.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="true" data-label="Lokalizacja i projektowa temperatura zewnętrzna"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Lokalizacja i warunki klimatyczne</strong><small>Miejscowość, strefa oraz temperatura przyjęta do obliczeń.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="true" data-label="Warstwy przegród i współczynniki U"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Warstwy przegród</strong><small>Ściany, dach, podłoga, stropy oraz potwierdzone parametry materiałów.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="true" data-label="Zestawienie okien, drzwi i przeszkleń"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Okna i drzwi</strong><small>Wymiary, współczynniki U, orientacja oraz duże przeszklenia.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="true" data-label="Rodzaj i strumienie wentylacji"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Wentylacja</strong><small>Rodzaj systemu, strumienie powietrza i dane odzysku ciepła.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="false" data-label="Temperatury projektowe pomieszczeń"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Temperatury pomieszczeń</strong><small>Osobne założenia dla salonu, łazienek, sypialni, garażu i zaplecza.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="false" data-label="Okładziny podłogowe i ich opory cieplne"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Okładziny podłogowe</strong><small>Płytki, winyl, panele lub drewno wraz z podkładem i oporem cieplnym.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="input" data-critical="false" data-label="Stała zabudowa i powierzchnie wyłączone"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Stała zabudowa</strong><small>Kuchnia, szafy, wanny, kominki i inne pola wpływające na powierzchnię czynną.</small></span></span></label>
            </div>
          </div>

          <div class="rk-heatplan-audit-stage">
            <div class="rk-heatplan-stage-head"><span class="rk-heatplan-stage-number">2</span><div><h4>Obliczenia cieplne</h4><p>Jedna liczba dla domu nie zastępuje wyników potrzebnych do doboru instalacji w każdym pomieszczeniu.</p></div></div>
            <div class="rk-heatplan-check-grid">
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="calculation" data-critical="true" data-label="Projektowe obciążenie każdego pomieszczenia w W"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>OZC pomieszczenie po pomieszczeniu</strong><small>Wynik w watach dla każdej strefy ogrzewanej.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="calculation" data-critical="false" data-label="Projektowe obciążenie całego budynku"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Wynik całego budynku</strong><small>Suma określona dla jawnych warunków projektowych.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="calculation" data-critical="false" data-label="Rozdzielenie strat przez przenikanie i wentylację"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Składniki strat</strong><small>Przenikanie, wentylacja, infiltracja oraz przyjęte korekty.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="calculation" data-critical="false" data-label="Uwzględnienie gruntu, stref nieogrzewanych i mostków"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Grunt i połączenia przegród</strong><small>Podłoga na gruncie, strefy sąsiednie oraz mostki nie są traktowane jak zwykła ściana.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="calculation" data-critical="true" data-label="Tabela jawnych założeń obliczeniowych"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Jawne założenia</strong><small>Temperatury, współczynniki, strumienie i wariant budynku można zweryfikować.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="calculation" data-critical="false" data-label="Rozdzielenie mocy projektowej od energii rocznej"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Moc oddzielona od energii</strong><small>W i kW nie są mieszane z kWh/rok ani prognozą kosztów.</small></span></span></label>
            </div>
          </div>

          <div class="rk-heatplan-audit-stage">
            <div class="rk-heatplan-stage-head"><span class="rk-heatplan-stage-number">3</span><div><h4>Dobór odbiorników ciepła</h4><p>Projekt ma wykazać, czy podłoga, grzejniki albo ich połączenie pokryją obciążenie przy przyjętych temperaturach.</p></div></div>
            <div class="rk-heatplan-check-grid">
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="emitter" data-critical="true" data-label="Moc odbiorników porównana z obciążeniem pomieszczeń"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Pokrycie obciążenia</strong><small>Dla każdego pomieszczenia porównano potrzebną i dostępną moc.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="emitter" data-critical="false" data-label="Temperatury zasilania i powrotu"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Parametry wody</strong><small>Temperatura zasilania, powrotu i średnia temperatura czynnika wynikają z doboru.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="emitter" data-critical="false" data-label="Powierzchnie czynne i pola wyłączone"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Powierzchnia czynna</strong><small>Rozstaw nie jest liczony na powierzchni brutto pomieszczenia.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="emitter" data-critical="false" data-label="Ograniczenia temperatury powierzchni i okładzin"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Ograniczenia podłogi</strong><small>Uwzględniono opór wykończenia i dopuszczalną temperaturę powierzchni.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="emitter" data-critical="false" data-label="Rozstawy, strefy brzegowe i trasy pętli"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Rysunek podłogówki</strong><small>Pokazuje rozstawy, trasy, dobiegi, strefy brzegowe i oznaczenia obwodów.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="emitter" data-critical="false" data-label="Dobór grzejników dla rzeczywistych parametrów wody"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Dobór grzejników</strong><small>Jeżeli występują, moc jest skorygowana do projektowych temperatur instalacji.</small></span></span></label>
            </div>
          </div>

          <div class="rk-heatplan-audit-stage">
            <div class="rk-heatplan-stage-head"><span class="rk-heatplan-stage-number">4</span><div><h4>Hydraulika instalacji</h4><p>To etap, którego nie da się zastąpić zasadą „maksymalnie 100 m” ani samą nazwą pompy.</p></div></div>
            <div class="rk-heatplan-check-grid">
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="hydraulic" data-critical="true" data-label="Długości i wymagane przepływy wszystkich obiegów"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Długości i przepływy</strong><small>Każda pętla lub gałąź ma obliczoną długość i wymagany strumień.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="hydraulic" data-critical="true" data-label="Straty ciśnienia i droga krytyczna"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Opory i droga krytyczna</strong><small>Obliczenia obejmują rury, armaturę, rozdzielacze i najbardziej wymagającą drogę.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="hydraulic" data-critical="false" data-label="Nastawy wstępne rozdzielaczy i zaworów"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Nastawy regulacyjne</strong><small>Projekt podaje przepływy lub nastawy potrzebne do równoważenia.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="hydraulic" data-critical="true" data-label="Punkt pracy pompy obiegowej"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Punkt pracy pompy</strong><small>Dobór uwzględnia jednocześnie wymagany przepływ i wysokość podnoszenia.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="hydraulic" data-critical="false" data-label="Średnice przewodów i magistrali"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Średnice przewodów</strong><small>Wynikają z przepływów, strat ciśnienia i przyjętych ograniczeń prędkości.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="hydraulic" data-critical="false" data-label="Schemat hydrauliczny z armaturą i zabezpieczeniami"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Schemat hydrauliczny</strong><small>Pokazuje połączenia, pompy, zawory, zabezpieczenia i kierunki przepływu.</small></span></span></label>
            </div>
          </div>

          <div class="rk-heatplan-audit-stage">
            <div class="rk-heatplan-stage-head"><span class="rk-heatplan-stage-number">5</span><div><h4>Źródło ciepła i automatyka</h4><p>Obciążenie projektowe jest punktem wyjścia, a nie jedyną liczbą potrzebną do wyboru urządzenia.</p></div></div>
            <div class="rk-heatplan-check-grid">
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="source" data-critical="true" data-label="Dobór źródła oparty na obciążeniu i charakterystyce urządzenia"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Moc źródła w warunkach pracy</strong><small>Porównano zapotrzebowanie budynku z mocą dostępną urządzenia.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="source" data-critical="false" data-label="Minimalna modulacja i zachowanie w okresach przejściowych"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Minimalna modulacja</strong><small>Oceniono pracę przy częściowym obciążeniu, nie tylko w mróz projektowy.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="source" data-critical="false" data-label="CWU, źródło szczytowe i punkt biwalentny"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>CWU i źródło szczytowe</strong><small>Opisano sposób przygotowania wody i pokrycia mocy poza podstawowym zakresem urządzenia.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="source" data-critical="false" data-label="Krzywa grzewcza i strategia sterowania"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Krzywa grzewcza</strong><small>Podano ustawienia startowe oraz zależność temperatury wody od warunków zewnętrznych.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="source" data-critical="false" data-label="Logika stref, siłowników i przepływu minimalnego"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Sterowanie strefowe</strong><small>Uwzględniono wpływ zamykania obiegów na przepływ wymagany przez źródło.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="source" data-critical="false" data-label="Zabezpieczenia i pojemność instalacji"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Zabezpieczenia układu</strong><small>Naczynie, zawory, odpowietrzenie i ewentualna separacja wynikają ze schematu.</small></span></span></label>
            </div>
          </div>

          <div class="rk-heatplan-audit-stage">
            <div class="rk-heatplan-stage-head"><span class="rk-heatplan-stage-number">6</span><div><h4>Dokumentacja, odbiór i uruchomienie</h4><p>Projekt zachowuje wartość dopiero wtedy, gdy jego parametry zostaną przeniesione na budowę i sprawdzone.</p></div></div>
            <div class="rk-heatplan-check-grid">
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="document" data-critical="true" data-label="Czytelne rysunki z oznaczeniami obiegów i urządzeń"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Rysunki wykonawcze</strong><small>Skala, legenda, opisy obwodów, lokalizacje urządzeń i powiązanie z tabelami.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="document" data-critical="false" data-label="Zestawienie materiałów i parametrów"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Zestawienia</strong><small>Materiały i parametry są identyfikowalne bez narzucania niepotrzebnego producenta.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="document" data-critical="false" data-label="Procedura próby, płukania i napełnienia"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Próba i przygotowanie instalacji</strong><small>Opisano kontrolę szczelności oraz przygotowanie układu przed uruchomieniem.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="document" data-critical="true" data-label="Tabela przepływów, nastaw i parametrów uruchomieniowych"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Nastawy startowe</strong><small>Osoba uruchamiająca zna przepływy, krzywą i wartości wymagające sprawdzenia.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="document" data-critical="false" data-label="Protokół zmian i dokumentacja powykonawcza"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Zmiany i stan powykonawczy</strong><small>Odstępstwa, trasy i zdjęcia przed zakryciem zostaną zapisane.</small></span></span></label>
              <label class="rk-heatplan-check"><input type="checkbox" data-rk-check="" data-category="document" data-critical="false" data-label="Zakres odpowiedzialności projektanta, dostawcy i wykonawcy"><span class="rk-heatplan-check-inner"><span class="rk-heatplan-check-mark">✓</span><span class="rk-heatplan-check-copy"><strong>Granice odpowiedzialności</strong><small>Wiadomo, kto zatwierdza zmiany, dobiera urządzenia i odpowiada za regulację.</small></span></span></label>
            </div>
          </div>

          <div class="rk-heatplan-analyzer-actions">
            <button class="rk-heatplan-button" id="rk-heatplan-run" type="button">Przeanalizuj zakres</button>
            <button class="rk-heatplan-button-secondary" id="rk-heatplan-copy-brief" type="button">Kopiuj brief i listę braków</button>
            <button class="rk-heatplan-button-secondary" id="rk-heatplan-reset" type="button">Wyczyść odpowiedzi</button>
            <span class="rk-heatplan-copy-confirmation" id="rk-heatplan-copy-confirmation" aria-live="polite"></span>
          </div>

          <div class="rk-heatplan-audit-result" id="rk-heatplan-audit-result" aria-live="polite">
            <p class="rk-heatplan-audit-status" id="rk-heatplan-audit-status">Zaznacz elementy i uruchom analizę</p>
            <p class="rk-heatplan-audit-intro" id="rk-heatplan-audit-intro">Wynik rozdzieli elementy potwierdzone, dane do uzupełnienia i braki krytyczne.</p>
            <div class="rk-heatplan-progress" aria-hidden="true"><div class="rk-heatplan-progress-fill" id="rk-heatplan-progress-fill"></div></div>
            <p class="rk-heatplan-progress-label" id="rk-heatplan-progress-label">Kompletność zakresu: 0 z 0 ocenionych elementów</p>
            <div class="rk-heatplan-audit-columns">
              <div class="rk-heatplan-audit-column is-ok"><h4>Potwierdzone</h4><ul id="rk-heatplan-ok-list"><li>Jeszcze nie przeprowadzono analizy.</li></ul></div>
              <div class="rk-heatplan-audit-column is-missing"><h4>Do uzupełnienia</h4><ul id="rk-heatplan-missing-list"><li>Zaznacz elementy faktycznie dostępne.</li></ul></div>
              <div class="rk-heatplan-audit-column is-critical"><h4>Braki krytyczne</h4><ul id="rk-heatplan-critical-list"><li>Brak oceny nie oznacza akceptacji projektu.</li></ul></div>
            </div>
            <div class="rk-heatplan-brief">
              <h4>Brief generowany z Twoich odpowiedzi</h4>
              <p class="rk-heatplan-brief-output" id="rk-heatplan-brief-output">Po analizie pojawi się tutaj opis inwestycji i lista danych wymagających uzupełnienia.</p>
            </div>
            <p class="rk-heatplan-analyzer-disclaimer">Analizator ocenia obecność elementów, a nie poprawność obliczeń. Nie zastępuje sprawdzenia projektu, uprawnień, dokumentacji urządzeń, warunków budynku ani odbioru instalacji.</p>
          </div>
        </div>
      </div>

      <aside class="rk-heatplan-cta" aria-label="Indywidualny projekt instalacji grzewczej">
        <div class="rk-heatplan-cta-title">Analizator pokazał braki? Projekt musi teraz zamienić dane w parametry wykonawcze</div>
        <p>Lista kontrolna nie obliczy obciążenia każdego pomieszczenia, mocy podłogi, długości pętli, przepływów, oporów ani punktu pracy źródła. Te elementy trzeba połączyć na podstawie rzeczywistych rzutów i parametrów Twojego budynku.</p>
        <a class="rk-heatplan-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Sprawdź zakres indywidualnego projektu instalacji grzewczej</a>
        <small class="rk-heatplan-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </aside>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-data">
      <span class="rk-heatplan-eyebrow">Jakość wyniku zaczyna się przed obliczeniami</span>
      <h2 class="rk-heatplan-section-title">Jakie dane trzeba przekazać projektantowi?</h2>
      <p class="rk-heatplan-lead">Najlepszy program obliczeniowy nie naprawi błędnych danych wejściowych. Dokumentacja powinna odpowiadać wersji domu, która rzeczywiście zostanie wykonana, a każda niepewność powinna być zapisana jako założenie do potwierdzenia.</p>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BRYŁA</span><h3>Rzuty, przekroje i lokalizacja</h3><ul class="rk-heatplan-bullets"><li>wymiary i wysokości pomieszczeń,</li><li>orientacja budynku i miejscowość,</li><li>strefy ogrzewane oraz nieogrzewane,</li><li>lokalizacja pomieszczenia technicznego.</li></ul></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">PRZEGRODY</span><h3>Warstwy i stolarka</h3><ul class="rk-heatplan-bullets"><li>ściany, dach, stropy i podłoga,</li><li>okna, drzwi i duże przeszklenia,</li><li>współczynniki U albo komplet warstw,</li><li>połączenia wpływające na mostki.</li></ul></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">UŻYTKOWANIE</span><h3>Temperatury i wentylacja</h3><ul class="rk-heatplan-bullets"><li>temperatura każdego pomieszczenia,</li><li>rodzaj i strumienie wentylacji,</li><li>odzysk ciepła oraz bilans powietrza,</li><li>pomieszczenia używane okresowo.</li></ul></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">PODŁOGA</span><h3>Wykończenie i zabudowa</h3><ul class="rk-heatplan-bullets"><li>płytki, panele, winyl lub drewno,</li><li>podkład i opór kompletnej warstwy,</li><li>stałe szafy, wyspa, wanna i kominek,</li><li>plan dylatacji i rodzaj jastrychu.</li></ul></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">INSTALACJA</span><h3>Źródło i ograniczenia</h3><ul class="rk-heatplan-bullets"><li>planowane albo istniejące źródło,</li><li>wymagania przepływu i pojemności,</li><li>lokalizacja rozdzielaczy i pionów,</li><li>inne obiegi oraz przygotowanie CWU.</li></ul></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">ZMIANY</span><h3>Jedna aktualna wersja</h3><ul class="rk-heatplan-bullets"><li>numer lub data wersji architektury,</li><li>zmiany okien i izolacji,</li><li>zmiany funkcji pomieszczeń,</li><li>osoba zatwierdzająca odstępstwa.</li></ul></article>
      </div>
      <div class="rk-heatplan-note rk-heatplan-note-bad"><p><strong>Projekt liczony na nieaktualnych rzutach może być wewnętrznie poprawny, ale dotyczyć nieistniejącego już wariantu domu.</strong> Najgroźniejsze są zmiany w przeszkleniach, izolacji, wentylacji, układzie ścian oraz powierzchni dostępnej dla podłogówki.</p></div>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-ozc">
      <span class="rk-heatplan-eyebrow">Fundament doboru instalacji</span>
      <h2 class="rk-heatplan-section-title">OZC całego budynku i obciążenie każdego pomieszczenia</h2>
      <p class="rk-heatplan-lead">Projektowe obciążenie cieplne odpowiada na pytanie, jaką moc trzeba dostarczyć przy określonych warunkach obliczeniowych. Do zaprojektowania odbiorników potrzebne są wyniki lokalne, nie tylko suma dla domu.</p>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">H<sub>T</sub></span><h3>Przenikanie</h3><p>Obejmuje ściany, dach, okna, drzwi, stropy oraz wymianę ciepła z gruntem i strefami sąsiednimi.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">H<sub>V</sub></span><h3>Wentylacja</h3><p>Zależy od wymaganych strumieni powietrza, infiltracji, odzysku ciepła i rzeczywistego bilansu instalacji.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">Φ</span><h3>Wynik w watach</h3><p>Połączenie składników daje obciążenie pomieszczenia i budynku dla opisanych temperatur oraz założeń.</p></article>
      </div>
      <div class="rk-heatplan-formula">strata przegrody ≈ A × U × ΔT — to jeden składnik, a nie kompletne OZC budynku</div>
      <p class="rk-heatplan-copy">Podłogi na gruncie nie należy traktować jak pionowej ściany wystawionej na stałą temperaturę zewnętrzną. Mostki cieplne również nie powinny być zastępowane przypadkowym narzutem procentowym bez opisania metody. Pełny kontekst znajdziesz w artykule <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty cieplne w budynkach</a> oraz w omówieniu <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">PN-EN 12831 w projektowaniu ogrzewania</a>.</p>
      <div class="rk-heatplan-note"><p><strong>W/m² jest wynikiem pomocniczym, nie metodą doboru.</strong> Dwa pomieszczenia w tym samym domu mogą mieć różne obciążenie jednostkowe przez przeszklenia, ściany zewnętrzne, temperaturę wewnętrzną i wentylację.</p></div>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-emitters">
      <span class="rk-heatplan-eyebrow">Moc musi pojawić się tam, gdzie powstaje strata</span>
      <h2 class="rk-heatplan-section-title">Dobór podłogówki, grzejników lub instalacji mieszanej</h2>
      <p class="rk-heatplan-lead">Odbiornik dobiera się do obciążenia konkretnego pomieszczenia i wspólnych parametrów systemu. Sama powierzchnia pomieszczenia nie mówi, ile mocy może oddać podłoga ani jaki grzejnik będzie odpowiedni.</p>
      <div class="rk-heatplan-table-wrap">
        <table>
          <thead><tr><th>Rozwiązanie</th><th>Co trzeba policzyć</th><th>Co ogranicza moc</th><th>Wynik projektu</th></tr></thead>
          <tbody>
            <tr><td data-label="Rozwiązanie"><strong>Ogrzewanie podłogowe</strong></td><td data-label="Obliczenia">Powierzchnia czynna, konstrukcja podłogi, rozstaw, temperatura wody, przepływ i długość pętli.</td><td data-label="Ograniczenia">Okładzina, temperatura powierzchni, zabudowa stała, geometria i hydraulika.</td><td data-label="Wynik">Trasy, rozstawy, pętle, moce, przepływy i nastawy rozdzielacza.</td></tr>
            <tr><td data-label="Rozwiązanie"><strong>Grzejniki</strong></td><td data-label="Obliczenia">Wymagana moc i moc katalogowa skorygowana do rzeczywistych temperatur wody i pomieszczenia.</td><td data-label="Ograniczenia">Dostępna ściana, temperatura zasilania, obudowy, zawory i warunki przepływu.</td><td data-label="Wynik">Typ, wielkość, moc, przepływ, nastawa i sposób podłączenia.</td></tr>
            <tr><td data-label="Rozwiązanie"><strong>Układ mieszany</strong></td><td data-label="Obliczenia">Pokrycie obciążenia przez oba rodzaje odbiorników i wspólna lub rozdzielona temperatura pracy.</td><td data-label="Ograniczenia">Najbardziej wymagający odbiornik, sposób mieszania, regulacja i hydraulika obiegów.</td><td data-label="Wynik">Schemat połączeń, parametry obiegów i logika sterowania bez przypadkowego podnoszenia temperatury.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-heatplan-copy">Niskotemperaturowa instalacja mieszana jest możliwa, jeśli grzejniki zostaną dobrane do tych samych, odpowiednio niskich parametrów. Osobny poradnik wyjaśnia, <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-mozna-podlaczyc-do-grzejnikow/">jak połączyć ogrzewanie podłogowe z grzejnikami</a>.</p>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-floor">
      <span class="rk-heatplan-eyebrow">Rozstaw jest wynikiem, nie punktem startowym</span>
      <h2 class="rk-heatplan-section-title">Co musi zawierać projekt ogrzewania podłogowego?</h2>
      <p class="rk-heatplan-lead">Podłogówka ma dostarczyć wymaganą moc przy ograniczonej temperaturze powierzchni, dostępnej powierzchni czynnej i możliwie korzystnej temperaturze wody. Gęstsze ułożenie rur nie rozwiązuje automatycznie każdego problemu.</p>
      <div class="rk-heatplan-grid-4">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">q</span><h3>Wymagany strumień</h3><p>Obciążenie pomieszczenia jest dzielone przez rzeczywistą powierzchnię zdolną do oddawania ciepła.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">R<sub>λ,B</sub></span><h3>Opór okładziny</h3><p>Liczy się cały zestaw nad jastrychem: wykończenie, podkład i ewentualne warstwy pośrednie.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">T</span><h3>Temperatura powierzchni</h3><p>Musi pozostać w granicach właściwych dla strefy, przeznaczenia pomieszczenia i materiału podłogi.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">L / V̇</span><h3>Pętla i przepływ</h3><p>Rozstaw tworzy metraż, a metraż wraz z przepływem i światłem rury tworzy opór hydrauliczny.</p></article>
      </div>
      <p class="rk-heatplan-copy">Zasady określania mocy systemów płaszczyznowych rozwija materiał o <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a>. Osobno warto sprawdzić, jak <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">okładzina wpływa na wydajność podłogówki</a>, gdzie <a href="https://projekt-ogrzewania.pl/gdzie-nie-ukladac-ogrzewania-podlogowego/">nie układać rur</a> oraz dlaczego samo pytanie o <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw 10 czy 15 cm</a> jest zbyt proste.</p>
      <div class="rk-heatplan-note rk-heatplan-note-good"><p><strong>Dobry rysunek jest połączony z tabelą obliczeniową.</strong> Oznaczenie pętli na rzucie powinno prowadzić do jej długości, obsługiwanej powierzchni, wymaganej mocy, przepływu, oporu i nastawy.</p></div>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-hydraulics">
      <span class="rk-heatplan-eyebrow">Przepływ i opór muszą spotkać się w jednym punkcie</span>
      <h2 class="rk-heatplan-section-title">Przepływy, straty ciśnienia i dobór pompy obiegowej</h2>
      <p class="rk-heatplan-lead">Wymagany przepływ wynika z przenoszonej mocy i projektowej różnicy temperatur. Pompa musi jednocześnie zapewnić ten przepływ oraz pokonać opór najbardziej wymagającej drogi hydraulicznej.</p>
      <div class="rk-heatplan-formula">V̇ [m³/h] ≈ Q [kW] / (1,163 × ΔT [K])</div>
      <p class="rk-heatplan-copy">Wzór porządkuje przepływ dla wody i określonych warunków, ale nie dobiera pompy. Do tego potrzebne są straty liniowe i miejscowe, opór rozdzielaczy, zaworów, wymienników oraz charakterystyka urządzenia. Przy mieszaninie z glikolem trzeba użyć właściwości rzeczywistego medium.</p>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">ΣV̇</span><h3>Przepływ całkowity</h3><p>Powstaje z przepływów równocześnie pracujących obiegów, a nie z pojemności wodnej całej instalacji.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">Δp</span><h3>Droga krytyczna</h3><p>Do wysokości podnoszenia przyjmuje się właściwą drogę o największym wymaganym oporze, nie sumę wszystkich pętli.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">Q–H</span><h3>Punkt pracy</h3><p>Dobór jest sprawdzany na charakterystyce pompy przy przewidywanym sposobie regulacji i wymaganym zakresie pracy.</p></article>
      </div>
      <p class="rk-heatplan-copy">Szczegółowe narzędzie znajdziesz w <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulatorze doboru pompy obiegowej</a>. Projekt powinien również wskazać <a href="https://projekt-ogrzewania.pl/jaka-srednica-rury-zasilajacej-rozdzielacz-w-ukladzie-ogrzewania-podlogowego-kalkulator/">średnicę przewodu zasilającego rozdzielacz</a>, długości pętli oraz wartości potrzebne do ustawienia <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrów</a>.</p>
      <div class="rk-heatplan-note rk-heatplan-note-bad"><p><strong>Oznaczenie „25-60” nie jest wynikiem obliczeń.</strong> Bez wymaganego przepływu i wysokości podnoszenia nie wiadomo, czy dana pompa pracuje w odpowiednim obszarze charakterystyki.</p></div>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-source">
      <span class="rk-heatplan-eyebrow">OZC otwiera dobór, ale go nie kończy</span>
      <h2 class="rk-heatplan-section-title">Jak projekt prowadzi do doboru źródła ciepła?</h2>
      <p class="rk-heatplan-lead">Projektowa moc budynku jest jednym z najważniejszych danych, lecz urządzenie trzeba ocenić w warunkach, w których ma rzeczywiście pracować. Moc z nazwy modelu nie zawsze jest mocą dostępną przy mrozie i wymaganej temperaturze wody.</p>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">1</span><h3>Obciążenie budynku</h3><p>Wynik OZC określa zapotrzebowanie w warunkach projektowych oraz pozwala zbudować uproszczoną krzywą obciążenia.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">2</span><h3>Charakterystyka urządzenia</h3><p>Sprawdza się moc i efektywność przy temperaturze zewnętrznej oraz temperaturze zasilania wymaganej przez odbiorniki.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">3</span><h3>Praca całego systemu</h3><p>Uwzględnia się modulację, CWU, źródło szczytowe, odszranianie, przepływ minimalny i sposób sterowania.</p></article>
      </div>
      <div class="rk-heatplan-table-wrap">
        <table>
          <thead><tr><th>Źródło</th><th>Co sprawdzić poza OZC</th><th>Powiązanie z instalacją</th></tr></thead>
          <tbody>
            <tr><td data-label="Źródło"><strong>Pompa ciepła</strong></td><td data-label="Poza OZC">Moc w punktach pracy, punkt biwalentny, modulacja, odszranianie, CWU i udział grzałki.</td><td data-label="Instalacja">Możliwie niska temperatura zasilania, minimalny przepływ, pojemność wodna i logika stref.</td></tr>
            <tr><td data-label="Źródło"><strong>Kocioł gazowy</strong></td><td data-label="Poza OZC">Minimalna i maksymalna moc, modulacja, wymagania kominowe, CWU i warunki kondensacji.</td><td data-label="Instalacja">Temperatura powrotu, zakres przepływu, regulacja pogodowa i ewentualne rozdzielenie obiegów.</td></tr>
            <tr><td data-label="Źródło"><strong>Kocioł na pellet lub paliwo stałe</strong></td><td data-label="Poza OZC">Zakres mocy, bezwładność, sposób wygaszania, magazynowanie paliwa i wymagane zabezpieczenia.</td><td data-label="Instalacja">Ochrona powrotu, bufor lub inne rozwiązanie wynikające ze schematu i dokumentacji urządzenia.</td></tr>
            <tr><td data-label="Źródło"><strong>Ogrzewanie elektryczne</strong></td><td data-label="Poza OZC">Moc przyłączeniowa, taryfa, sterowanie i podział obciążeń elektrycznych.</td><td data-label="Instalacja">Rodzaj odbiorników, akumulacja budynku i sposób regulacji temperatury.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-heatplan-copy">Zależności dla instalacji niskotemperaturowej rozwija przewodnik <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a>. Samą zasadę doboru i pracy urządzenia porządkuje dział <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła</a>.</p>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-controls-section">
      <span class="rk-heatplan-eyebrow">Projekt nie kończy się na średnicach rur</span>
      <h2 class="rk-heatplan-section-title">Automatyka, krzywa grzewcza i sterowanie strefowe</h2>
      <p class="rk-heatplan-lead">Dobrze policzona instalacja może działać źle, jeżeli źródło dostaje sprzeczne sygnały, wszystkie pętle są okresowo zamykane albo krzywa grzewcza wymusza wyższą temperaturę, niż potrzebują odbiorniki.</p>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">θ<sub>e</sub></span><h3>Sterowanie pogodowe</h3><p>Temperatura wody reaguje na warunki zewnętrzne. Ustawienie startowe wynika z projektu, a korekta z obserwacji budynku.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">MIN</span><h3>Minimalny przepływ</h3><p>Projekt sprawdza, co stanie się po zamknięciu części obiegów oraz jak zachować warunki wymagane przez źródło.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">τ</span><h3>Bezwładność</h3><p>Strategia regulacji uwzględnia masę jastrychu i opóźnienie reakcji, zamiast traktować podłogę jak szybko działający grzejnik.</p></article>
      </div>
      <p class="rk-heatplan-copy">W praktyce warto rozdzielić rolę <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywej grzewczej</a>, <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowania pogodowego</a> i <a href="https://projekt-ogrzewania.pl/sterowanie-strefowe-ogrzewaniem-czy-warto/">sterowania strefowego</a>. Każde z nich rozwiązuje inny problem.</p>
      <div class="rk-heatplan-note"><p><strong>Więcej automatyki nie zawsze oznacza lepszą regulację.</strong> Liczy się spójność z hydrauliką, minimalnym przepływem źródła, charakterem budynku i sposobem użytkowania pomieszczeń.</p></div>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-documents">
      <span class="rk-heatplan-eyebrow">Co inwestor powinien otrzymać na końcu?</span>
      <h2 class="rk-heatplan-section-title">Kompletna dokumentacja wykonawcza instalacji grzewczej</h2>
      <p class="rk-heatplan-lead">Zakres zależy od rodzaju systemu, ale dokument powinien być spójny: oznaczenie na rzucie musi prowadzić do tabeli, a tabela do parametrów potrzebnych podczas montażu i uruchomienia.</p>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">01</span><h3>Założenia i wyniki OZC</h3><p>Warunki obliczeniowe, dane przegród, wentylacja oraz obciążenie każdego pomieszczenia i całego budynku.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">02</span><h3>Rzuty instalacji</h3><p>Trasy, odbiorniki, rozdzielacze, średnice, pętle, rozstawy, strefy i jednoznaczne oznaczenia.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">03</span><h3>Tabela obiegów</h3><p>Długości, moce, przepływy, spadki temperatury, opory i nastawy wymagane do regulacji.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">04</span><h3>Schemat hydrauliczny</h3><p>Źródło, obiegi, pompy, zawory, zabezpieczenia, naczynie, odpowietrzenie i kierunki przepływu.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">05</span><h3>Dobór urządzeń</h3><p>Parametry wymagane przez projekt oraz kryteria weryfikacji równoważnych urządzeń i materiałów.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">06</span><h3>Uruchomienie i odbiór</h3><p>Próba, płukanie, napełnienie, nastawy startowe, dokumentowanie zmian i dane powykonawcze.</p></article>
      </div>
      <p class="rk-heatplan-copy">Wykonanie próby przed zakryciem instalacji omawia poradnik o <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbie szczelności ogrzewania podłogowego</a>. Rysunki powinny również pokazywać podział i lokalizację <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielaczy podłogówki</a>.</p>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-costs">
      <span class="rk-heatplan-eyebrow">Cena wynika z zakresu, nie wyłącznie z metrażu</span>
      <h2 class="rk-heatplan-section-title">Ile kosztuje projekt instalacji grzewczej domu?</h2>
      <p class="rk-heatplan-lead">Jedna „średnia cena rynkowa” niewiele mówi, jeżeli nie wiadomo, czy obejmuje OZC pomieszczeń, rysunki, hydraulikę, dobór źródła, schemat kotłowni, zestawienia i obsługę zmian.</p>
      <div class="rk-heatplan-table-wrap">
        <table>
          <thead><tr><th>Czynnik</th><th>Dlaczego wpływa na pracę</th><th>Co ustalić przed wyceną</th></tr></thead>
          <tbody>
            <tr><td data-label="Czynnik"><strong>Zakres obliczeń</strong></td><td data-label="Wpływ">OZC całego domu to mniej informacji niż bilans pomieszczeń połączony z doborem odbiorników.</td><td data-label="Ustal">Czy cena obejmuje obciążenia pomieszczeń, hydraulikę i dobór źródła.</td></tr>
            <tr><td data-label="Czynnik"><strong>Wielkość i geometria</strong></td><td data-label="Wpływ">Liczba kondygnacji, pomieszczeń, rozdzielaczy i nietypowych stref zwiększa liczbę decyzji.</td><td data-label="Ustal">Powierzchnię, liczbę pomieszczeń i stopień złożoności instalacji.</td></tr>
            <tr><td data-label="Czynnik"><strong>Rodzaj instalacji</strong></td><td data-label="Wpływ">Podłogówka, grzejniki i układ mieszany wymagają innych obliczeń i rysunków.</td><td data-label="Ustal">Odbiorniki, źródło, CWU, chłodzenie i liczbę obiegów.</td></tr>
            <tr><td data-label="Czynnik"><strong>Stan inwestycji</strong></td><td data-label="Wpływ">Modernizacja wymaga inwentaryzacji i oceny elementów, których nie wybiera się od zera.</td><td data-label="Ustal">Co już istnieje, co pozostaje i jakie są dostępne dane techniczne.</td></tr>
            <tr><td data-label="Czynnik"><strong>Dokumentacja końcowa</strong></td><td data-label="Wpływ">Rysunki, tabele, schemat, zestawienia i konsultacje mają różny nakład pracy.</td><td data-label="Ustal">Format, liczbę wariantów, poprawki i wsparcie dla wykonawcy.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-heatplan-copy">Aktualne zasady wyceny omawia osobny materiał <a href="https://projekt-ogrzewania.pl/ile-kosztuje-projekt-ogrzewania-podlogowego/">ile kosztuje projekt ogrzewania podłogowego</a>. Porównuj cenę dopiero po ujednoliceniu zakresu obu ofert.</p>
      <div class="rk-heatplan-note rk-heatplan-note-good"><p><strong>Uczciwa ocena opłacalności nie obiecuje stałej kwoty oszczędności.</strong> Projekt ogranicza ryzyko zbędnego materiału, niedopasowanego urządzenia i kosztownych poprawek, ale rzeczywisty efekt zależy od wariantu początkowego, cen i jakości wykonania.</p></div>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-timing">
      <span class="rk-heatplan-eyebrow">Najwięcej swobody jest przed zamówieniem materiałów</span>
      <h2 class="rk-heatplan-section-title">Kiedy zamówić projekt instalacji grzewczej?</h2>
      <p class="rk-heatplan-lead">Najlepszy moment następuje po ustaleniu architektury, przegród, stolarki i wentylacji, lecz przed przygotowaniem posadzek, wyborem urządzeń i rozpoczęciem instalacji.</p>
      <div class="rk-heatplan-grid-4">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">1</span><h3>Projekt budynku</h3><p>Potwierdź geometrię, funkcje pomieszczeń, okna, izolację, wentylację i planowaną zabudowę.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">2</span><h3>Projekt instalacji</h3><p>Policz obciążenia, odbiorniki, hydraulikę i wymagania źródła, zanim powstaną zamówienia.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">3</span><h3>Koordynacja branż</h3><p>Sprawdź wysokości podłogi, przejścia, dylatacje, zasilanie elektryczne, kominy i kanalizację kondensatu.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">4</span><h3>Zakup i montaż</h3><p>Zamawiaj elementy według zatwierdzonych parametrów i dokumentuj każdą zmianę przed zakryciem.</p></article>
      </div>
      <p class="rk-heatplan-copy">Harmonogram prac rozwija poradnik <a href="https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/">kiedy planować montaż ogrzewania podłogowego w nowym domu</a>. Im później powstaje projekt, tym częściej musi dopasowywać się do przypadkowo kupionych elementów zamiast optymalizować cały system.</p>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-offers">
      <span class="rk-heatplan-eyebrow">Porównuj zawartość, nie nazwę usługi</span>
      <h2 class="rk-heatplan-section-title">Jak porównać dwie oferty na projekt ogrzewania?</h2>
      <p class="rk-heatplan-lead">Dwie oferty mogą nosić tę samą nazwę, a obejmować zupełnie inny zakres. Najpierw sprowadź je do wspólnej listy elementów, terminów i odpowiedzialności.</p>
      <div class="rk-heatplan-table-wrap">
        <table>
          <thead><tr><th>Pytanie do oferty</th><th>Odpowiedź, której szukasz</th><th>Sygnał ostrzegawczy</th></tr></thead>
          <tbody>
            <tr><td data-label="Pytanie"><strong>Czy OZC jest liczone dla pomieszczeń?</strong></td><td data-label="Dobra odpowiedź">Tak, z tabelą warunków wejściowych i wynikami w W dla każdej strefy.</td><td data-label="Ostrzeżenie">Jedna moc z powierzchni domu albo świadectwa energetycznego.</td></tr>
            <tr><td data-label="Pytanie"><strong>Czy projekt zawiera hydraulikę?</strong></td><td data-label="Dobra odpowiedź">Przepływy, opory, drogę krytyczną, nastawy i punkt pracy pompy.</td><td data-label="Ostrzeżenie">Wyłącznie rysunek tras i ogólna nazwa pompy.</td></tr>
            <tr><td data-label="Pytanie"><strong>Czy dobór źródła jest częścią zakresu?</strong></td><td data-label="Dobra odpowiedź">Opis kryteriów, warunków pracy, modulacji, CWU i współpracy z instalacją.</td><td data-label="Ostrzeżenie">Dobór tylko przez zaokrąglenie kW w górę.</td></tr>
            <tr><td data-label="Pytanie"><strong>Jak wyglądają rysunki?</strong></td><td data-label="Dobra odpowiedź">Są powiązane z tabelami, czytelne dla wykonawcy i mają legendę oraz oznaczenia.</td><td data-label="Ostrzeżenie">Przykładowy rzut bez parametrów konkretnych obiegów.</td></tr>
            <tr><td data-label="Pytanie"><strong>Jak obsługiwane są zmiany?</strong></td><td data-label="Dobra odpowiedź">Oferta określa liczbę korekt, zasady aktualizacji i odpowiedzialność za zatwierdzenie.</td><td data-label="Ostrzeżenie">Brak wersjonowania i ustaleń po rozpoczęciu montażu.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-heatplan-note"><p><strong>Poproś o zanonimizowany przykład dokumentacji.</strong> Nie chodzi o przejęcie cudzego projektu, lecz o sprawdzenie czytelności, poziomu szczegółowości i powiązania rysunków z obliczeniami.</p></div>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-changes">
      <span class="rk-heatplan-eyebrow">Równoważny produkt musi być równoważny obliczeniowo</span>
      <h2 class="rk-heatplan-section-title">Co można zmienić na budowie bez utraty logiki projektu?</h2>
      <p class="rk-heatplan-lead">Projekt nie musi blokować każdej zmiany marki, ale powinien określać parametry, które trzeba zachować. Zmiana wpływająca na moc, przepływ albo opór wymaga ponownej kontroli odpowiedniej części obliczeń.</p>
      <div class="rk-heatplan-grid-2">
        <article class="rk-heatplan-card">
          <span class="rk-heatplan-icon">✓</span>
          <h3>Zmiana możliwa po potwierdzeniu równoważności</h3>
          <ul class="rk-heatplan-bullets"><li>rura o zgodnym świetle, klasie i systemie połączeń,</li><li>rozdzielacz o właściwych przepływach i oporach,</li><li>grzejnik zapewniający wymaganą moc przy tych samych parametrach,</li><li>pompa obejmująca wymagany punkt pracy,</li><li>armatura o zgodnej funkcji i charakterystyce.</li></ul>
        </article>
        <article class="rk-heatplan-card">
          <span class="rk-heatplan-icon">!</span>
          <h3>Zmiana wymagająca ponownej weryfikacji</h3>
          <ul class="rk-heatplan-bullets"><li>inne warstwy izolacji, okna albo wentylacja,</li><li>zmiana okładziny i powierzchni czynnej podłogi,</li><li>wydłużenie pętli lub zmiana średnicy wewnętrznej,</li><li>inne temperatury zasilania lub rodzaj źródła,</li><li>dodanie stref i automatyki zamykającej przepływ.</li></ul>
        </article>
      </div>
      <p class="rk-heatplan-copy">Porównanie podejścia obliczeniowego i improwizowanego znajdziesz w artykule <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-glowy-vs-projekt-z-obliczeniami-ile-mozesz-stracic-na-bledach/">projekt podłogówki „z głowy” a projekt z obliczeniami</a>. Zmiana na budowie powinna pozostawić ślad w dokumentacji powykonawczej.</p>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-errors">
      <span class="rk-heatplan-eyebrow">Błędy zaczynają się przed pierwszym metrem rury</span>
      <h2 class="rk-heatplan-section-title">Najczęstsze błędy w projekcie instalacji grzewczej</h2>
      <div class="rk-heatplan-grid-3">
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 1</span><h3>Moc z metrażu</h3><p>Stały wskaźnik W/m² nie zna przegród, przeszkleń, wentylacji ani temperatur poszczególnych pomieszczeń.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 2</span><h3>Jedna liczba dla domu</h3><p>Suma obciążenia nie mówi, czy podłoga w łazience albo salonie pokryje lokalną stratę.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 3</span><h3>Rozstaw wybrany z góry</h3><p>Ułożenie wszędzie co 10 lub 15 cm zastępuje obliczenie regułą i może zwiększyć metraż bez rozwiązania problemu mocy.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 4</span><h3>Limit pętli bez przepływu</h3><p>Sama długość nie opisuje oporu. Potrzebne są także światło rury, przepływ, medium i opory miejscowe.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 5</span><h3>Pompa dobrana po nazwie</h3><p>Model nie jest zweryfikowany, dopóki nie znamy punktu pracy oraz charakterystyki całego obiegu.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 6</span><h3>Źródło z zapasem procentowym</h3><p>Uniwersalny zapas nie zastępuje charakterystyki mocy, modulacji, punktu biwalentnego ani analizy CWU.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 7</span><h3>Brak powierzchni czynnej</h3><p>Projekt liczony na powierzchni brutto ignoruje kuchnię, szafy, wannę, kominek i inne wyłączenia.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 8</span><h3>Brak nastaw</h3><p>Wykonawca ma rysunek, lecz nie otrzymuje przepływów, nastaw rozdzielacza ani krzywej startowej.</p></article>
        <article class="rk-heatplan-card"><span class="rk-heatplan-card-number">BŁĄD 9</span><h3>Nieaktualna architektura</h3><p>Zmiany okien, izolacji, wentylacji i funkcji pomieszczeń nie są przenoszone do modelu obliczeniowego.</p></article>
      </div>
      <p class="rk-heatplan-copy">W praktyce projekt powinien również zapobiegać problemom opisanym w poradniku o <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstszych błędach montażu ogrzewania podłogowego</a> oraz w artykule o <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalnej długości pętli</a>.</p>
    </section>

    <section class="rk-heatplan-section rk-heatplan-final" id="rk-heatplan-final">
      <span class="rk-heatplan-eyebrow">Wniosek dla inwestora</span>
      <h2 class="rk-heatplan-section-title">Projekt ma połączyć budynek, instalację i źródło w jeden działający system</h2>
      <p class="rk-heatplan-lead">Nie kupujesz samego rysunku. Kupujesz zestaw sprawdzalnych decyzji: ile mocy potrzebuje każde pomieszczenie, jak ją dostarczyć, jakie przepływy ustawić, jaki opór pokonać oraz w jakich warunkach ma pracować źródło.</p>
      <div class="rk-heatplan-cta">
        <div class="rk-heatplan-cta-title">Masz rzuty i dane przegród? Przejdź od założeń do policzonej instalacji</div>
        <p>Indywidualny projekt porządkuje rozstawy i trasy rur, podział na pętle, przepływy, opory, nastawy oraz wymagania źródła ciepła. Dzięki temu wykonawca otrzymuje dokumentację dla konkretnego domu, a nie zestaw uniwersalnych reguł.</p>
        <a class="rk-heatplan-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt instalacji grzewczej z obliczeniami</a>
        <small class="rk-heatplan-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-heatplan-section" id="rk-heatplan-sources">
      <span class="rk-heatplan-eyebrow">Podstawa techniczna i prawna</span>
      <h2 class="rk-heatplan-section-title">Źródła oficjalne i zakres odpowiedzialności</h2>
      <p class="rk-heatplan-lead">Poniższe źródła pomagają rozdzielić projektowe obciążenie cieplne, energię budynku, wydajność ogrzewania płaszczyznowego oraz formalny zakres dokumentacji. Dostęp do pełnych tekstów norm może wymagać zakupu.</p>
      <div class="rk-heatplan-source-grid">
        <article class="rk-heatplan-source-card"><a href="https://www.pkn.pl/" target="_blank" rel="nofollow noopener noreferrer">Polski Komitet Normalizacyjny</a><p>Oficjalny portal do wyszukiwania Polskich Norm, sprawdzania ich aktualności i nabywania dokumentów.</p></article>
        <article class="rk-heatplan-source-card"><a href="https://repo.pw.edu.pl/info/article/WUT7c194b7443134803a9d035c593eba8a2/Norma%2BPN-EN%2B12831-1%3A2017-08.%2BKluczowe%2Bzmiany%2Bw%2Bmetodyce%2Bobliczania%2Bobci%C4%85%C5%BCenia%2Bcieplnego%2Bbudynk%C3%B3w%2B" target="_blank" rel="nofollow noopener noreferrer">Politechnika Warszawska — PN-EN 12831-1</a><p>Opracowanie dotyczące zmian w metodyce obliczania projektowego obciążenia cieplnego budynków.</p></article>
        <article class="rk-heatplan-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021</a><p>Oficjalna karta normy dotyczącej określania projektowej mocy systemów ogrzewania i chłodzenia płaszczyznowego.</p></article>
        <article class="rk-heatplan-source-card"><a href="https://www.iso.org/standard/65696.html" target="_blank" rel="nofollow noopener noreferrer">ISO 52016-1:2017</a><p>Oficjalna karta metod obliczania potrzeb energetycznych, temperatur wewnętrznych i obciążeń cieplnych budynków.</p></article>
        <article class="rk-heatplan-source-card"><a href="https://eli.gov.pl/eli/DU/2022/1225/ogl" target="_blank" rel="nofollow noopener noreferrer">Dziennik Ustaw — Warunki Techniczne</a><p>Oficjalny tekst przepisów określających wymagania techniczne dla budynków i ich wyposażenia.</p></article>
        <article class="rk-heatplan-source-card"><a href="https://isap.sejm.gov.pl/isap.nsf/download.xsp/WDU20220001679/O/D20221679.pdf" target="_blank" rel="nofollow noopener noreferrer">Dziennik Ustaw — zakres projektu budowlanego</a><p>Tekst jednolity rozporządzenia w sprawie szczegółowego zakresu i formy projektu budowlanego.</p></article>
        <article class="rk-heatplan-source-card"><a href="https://energy.ec.europa.eu/topics/energy-efficiency/energy-efficient-buildings/energy-performance-buildings-directive_en" target="_blank" rel="nofollow noopener noreferrer">Komisja Europejska — charakterystyka energetyczna budynków</a><p>Oficjalne informacje o europejskich ramach efektywności energetycznej budynków i systemów technicznych.</p></article>
        <article class="rk-heatplan-source-card"><a href="https://www.iso.org/standard/65703.html" target="_blank" rel="nofollow noopener noreferrer">ISO 52010-1:2017</a><p>Oficjalna karta normy dotyczącej przekształcania danych klimatycznych do obliczeń energetycznych budynków.</p></article>
      </div>
      <div class="rk-heatplan-responsibility"><p><strong>Zakres poradnika:</strong> artykuł i analizator pomagają zrozumieć oraz porównać zakres dokumentacji. Nie są projektem budowlanym ani wykonawczym, nie wykonują OZC, nie zatwierdzają konkretnego urządzenia i nie zastępują obliczeń, dokumentacji producenta, uprawnień, odbioru ani oceny rzeczywistych warunków budynku.</p></div>
    </section>

    <section class="rk-heatplan-section rk-heatplan-section-soft" id="rk-heatplan-faq">
      <span class="rk-heatplan-eyebrow">Pytania inwestorów przed zleceniem i montażem</span>
      <h2 class="rk-heatplan-section-title">FAQ — projekt instalacji grzewczej domu</h2>
      <div class="rk-heatplan-faq">
        <details><summary>Czy projekt instalacji grzewczej jest potrzebny w domu jednorodzinnym?</summary><div class="rk-heatplan-faq-answer"><p>Jest potrzebny zawsze wtedy, gdy inwestor chce świadomie dobrać moc odbiorników, przepływy, średnice, źródło i nastawy zamiast pozostawić te decyzje do rozstrzygnięcia na budowie. Zakres formalnej dokumentacji budowlanej oraz szczegółowego projektu wykonawczego należy rozpatrywać osobno.</p></div></details>
        <details><summary>Czy OZC i projekt instalacji grzewczej to ten sam dokument?</summary><div class="rk-heatplan-faq-answer"><p>Nie. OZC wyznacza projektowe obciążenie cieplne budynku i pomieszczeń. Projekt instalacji wykorzystuje te wyniki do doboru odbiorników, temperatur wody, przepływów, hydrauliki, źródła, sterowania i dokumentacji wykonawczej.</p></div></details>
        <details><summary>Czym różni się OZC od świadectwa charakterystyki energetycznej?</summary><div class="rk-heatplan-faq-answer"><p>OZC odpowiada przede wszystkim na pytanie o projektową moc potrzebną w określonych warunkach. Świadectwo opisuje charakterystykę energetyczną według odrębnej metodologii i wskaźników. Wyniku rocznego w kWh nie należy bezpośrednio traktować jako mocy urządzenia w kW.</p></div></details>
        <details><summary>Jakie dane są niezbędne do wykonania projektu?</summary><div class="rk-heatplan-faq-answer"><p>Potrzebne są aktualne rzuty i przekroje, lokalizacja, warstwy przegród, okna i drzwi, wentylacja, temperatury pomieszczeń, rodzaje okładzin, stała zabudowa, planowane źródło oraz informacje o istniejących elementach w przypadku modernizacji.</p></div></details>
        <details><summary>Czy moc źródła można dobrać wyłącznie z powierzchni domu?</summary><div class="rk-heatplan-faq-answer"><p>Nie. Powierzchnia nie opisuje izolacji, przeszkleń, wentylacji, temperatur pomieszczeń ani lokalnych warunków klimatycznych. Dobór zaczyna się od obciążenia cieplnego, a następnie uwzględnia charakterystykę i sposób pracy konkretnego źródła.</p></div></details>
        <details><summary>Czy wynik OZC automatycznie wskazuje moc pompy ciepła?</summary><div class="rk-heatplan-faq-answer"><p>Nie automatycznie. Trzeba porównać krzywą obciążenia budynku z mocą pompy w odpowiednich punktach pracy, sprawdzić punkt biwalentny, minimalną modulację, CWU, odszranianie, źródło szczytowe i wymagany przepływ instalacji.</p></div></details>
        <details><summary>Czy projekt podłogówki może zawierać tylko rozstaw rur?</summary><div class="rk-heatplan-faq-answer"><p>Nie powinien. Rozstaw musi być powiązany z obciążeniem pomieszczenia, powierzchnią czynną, oporem podłogi, temperaturą wody, długością pętli, przepływem, oporem oraz nastawą rozdzielacza.</p></div></details>
        <details><summary>Czy 100 metrów jest bezwzględnym limitem każdej pętli?</summary><div class="rk-heatplan-faq-answer"><p>Nie jest jednym uniwersalnym limitem dla wszystkich warunków. Dopuszczalna długość zależy między innymi od średnicy wewnętrznej, przepływu, medium, oporów miejscowych, dostępnego ciśnienia i założeń regulacji. Około 100 m bywa stosowane jako praktyczny pułap dla określonych domowych układów 16 × 2 mm.</p></div></details>
        <details><summary>Czy pompę obiegową można dobrać tylko z przepływu?</summary><div class="rk-heatplan-faq-answer"><p>Nie. Potrzebny jest równocześnie wymagany przepływ i opór drogi krytycznej. Punkt pracy należy sprawdzić na charakterystyce pompy z uwzględnieniem sposobu regulacji całej instalacji.</p></div></details>
        <details><summary>Czy projekt powinien wskazywać konkretną markę materiałów?</summary><div class="rk-heatplan-faq-answer"><p>Może wskazać rozwiązanie referencyjne, ale kluczowe są wymagane parametry i zgodność systemowa. Jeżeli marka jest zmieniana, trzeba potwierdzić równoważność światła, oporów, mocy, zakresu pracy, połączeń oraz pozostałych cech wpływających na obliczenia.</p></div></details>
        <details><summary>Kiedy najlepiej zamówić projekt ogrzewania?</summary><div class="rk-heatplan-faq-answer"><p>Po ustaleniu aktualnej architektury, przegród, stolarki i wentylacji, ale przed zamówieniem źródła, przygotowaniem warstw podłogi i rozpoczęciem prac instalacyjnych. Pozostawia to czas na koordynację z innymi branżami.</p></div></details>
        <details><summary>Ile kosztuje projekt instalacji grzewczej?</summary><div class="rk-heatplan-faq-answer"><p>Cena zależy od zakresu: wielkości i złożoności domu, liczby pomieszczeń, rodzaju odbiorników, OZC, hydrauliki, doboru źródła, schematu, liczby wariantów i obsługi zmian. Dwie ceny można porównać dopiero po sprawdzeniu, czy obejmują te same elementy.</p></div></details>
        <details><summary>Czy wykonawca może zmienić projekt na budowie?</summary><div class="rk-heatplan-faq-answer"><p>Zmiana jest możliwa, jeżeli zostanie oceniony jej wpływ i potwierdzona równoważność. Zmiany średnic, długości, przepływów, temperatur, odbiorników albo źródła mogą wymagać ponownej weryfikacji obliczeń i powinny trafić do dokumentacji powykonawczej.</p></div></details>
        <details><summary>Jak sprawdzić, czy otrzymany projekt jest kompletny?</summary><div class="rk-heatplan-faq-answer"><p>Sprawdź spójność danych wejściowych, OZC pomieszczeń, doboru odbiorników, hydrauliki, źródła, schematu, tabel nastaw i rysunków. Oznaczenia powinny łączyć się między dokumentami, a każde ważne założenie być możliwe do odtworzenia. Analizator w tym artykule pomaga uporządkować taką kontrolę.</p></div></details>
      </div>
    </section>

    <section class="rk-heatplan-author" id="rk-heatplan-author">
      <span class="rk-heatplan-eyebrow">Opracowanie eksperckie</span>
      <h2 class="rk-heatplan-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-heatplan-author-layout">
        <aside class="rk-heatplan-author-side">
          <div class="rk-heatplan-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-heatplan-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <p class="rk-heatplan-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-heatplan-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-b8b906199/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-heatplan-author-main">
          <div class="rk-heatplan-author-quote">„Moim zdaniem największym błędem projektu robionego z metrażu nie jest jedna niedokładna liczba, lecz brak połączenia obciążenia każdego pomieszczenia z mocą odbiorników, przepływami i nastawami instalacji.”</div>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W praktyce projektowej łączy obciążenie pomieszczeń z rozstawami, długościami pętli, przepływami, oporami i wymaganiami źródła ciepła.</p>
          <p>Treść poradnika została zweryfikowana pod kątem rozdzielenia mocy projektowej od energii rocznej, poprawnej kolejności doboru odbiorników i hydrauliki oraz ograniczeń uproszczonych narzędzi internetowych. Analizator celowo nie udaje OZC i nie zatwierdza urządzeń bez danych konkretnego budynku.</p>
          <p>Autor publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego w serwisie Projekt-Ogrzewania.pl</a>.</p>
          <div class="rk-heatplan-author-facts">
            <div class="rk-heatplan-author-fact"><strong>Praktyka projektowa</strong>OZC pomieszczeń, ogrzewanie podłogowe i hydraulika instalacji</div>
            <div class="rk-heatplan-author-fact"><strong>Metoda pracy</strong>Jawne dane wejściowe, obliczenia, dokumentacja i weryfikacja zmian</div>
            <div class="rk-heatplan-author-fact"><strong>Zakres aktualizacji</strong>Treść, analizator, źródła i FAQ sprawdzone 16 września 2026 r.</div>
          </div>
        </div>
      </div>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "knowsAbout": [
        "projektowanie instalacji grzewczych",
        "projektowe obciążenie cieplne OZC",
        "ogrzewanie podłogowe",
        "hydraulika instalacji grzewczych",
        "dobór źródeł ciepła",
        "równoważenie hydrauliczne"
      ],
      "worksFor": [
        { "@id": "https://projekt-ogrzewania.pl/#organization" },
        { "@id": "https://remont.biz.pl/#organization" },
        { "@id": "https://sobir.pl/#organization" }
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-b8b906199/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/07/Projekt-instalacji-grzewczej-domu-jednorodzinnego-Kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-OZC.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/07/Projekt-instalacji-grzewczej-domu-jednorodzinnego-Kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-OZC.webp",
      "width": 1050,
      "height": 1050,
      "caption": "Projekt instalacji grzewczej domu — OZC, hydraulika i dokumentacja"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/" },
        { "@type": "ListItem", "position": 2, "name": "Poradniki", "item": "https://projekt-ogrzewania.pl/blog/" },
        { "@type": "ListItem", "position": 3, "name": "Projekt instalacji grzewczej domu", "item": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/" }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#webpage",
      "url": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/",
      "name": "Projekt instalacji grzewczej domu – zakres, OZC, hydraulika i koszty",
      "description": "Kompletny przewodnik po projekcie instalacji grzewczej domu: OZC pomieszczeń, dobór odbiorników, hydraulika, źródło ciepła, koszty i dokumentacja.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#breadcrumb" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#primaryimage" },
      "datePublished": "2026-07-31T07:17:58+00:00",
      "dateModified": "2026-09-16T10:00:00+02:00",
      "inLanguage": "pl-PL",
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#article" }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#article",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#webpage" },
      "headline": "Projekt instalacji grzewczej domu – zakres, OZC, hydraulika i koszty",
      "description": "Praktyczny przewodnik pokazujący, jak dane budynku prowadzą przez OZC, dobór odbiorników i hydraulikę do źródła ciepła oraz dokumentacji wykonawczej.",
      "image": { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#primaryimage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-07-31T07:17:58+00:00",
      "dateModified": "2026-09-16T10:00:00+02:00",
      "inLanguage": "pl-PL",
      "about": [
        "projekt instalacji grzewczej domu",
        "projektowe obciążenie cieplne OZC",
        "ogrzewanie podłogowe",
        "obliczenia hydrauliczne",
        "dobór źródła ciepła",
        "dokumentacja wykonawcza"
      ],
      "keywords": "projekt instalacji grzewczej domu, OZC, projekt ogrzewania domu, hydraulika instalacji, projekt podłogówki, koszt projektu ogrzewania",
      "isAccessibleForFree": true,
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#analyzer" },
        { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#deliverables" },
        { "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#faq-schema" }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#analyzer",
      "name": "Analizator kompletności projektu instalacji grzewczej",
      "url": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#rk-heatplan-analyzer-section",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Narzędzie edukacyjne do sprawdzania zakresu danych wejściowych, OZC pomieszczeń, odbiorników, hydrauliki, źródła ciepła, automatyki i dokumentacji wykonawczej."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#howto",
      "name": "Jak powstaje projekt instalacji grzewczej domu",
      "description": "Sześć etapów prowadzących od danych budynku do dokumentacji wykonawczej i uruchomienia instalacji.",
      "totalTime": "P7D",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Zbierz dane budynku", "text": "Przygotuj aktualne rzuty, lokalizację, przegrody, stolarkę, wentylację, temperatury, okładziny i stałą zabudowę." },
        { "@type": "HowToStep", "position": 2, "name": "Oblicz obciążenie pomieszczeń", "text": "Wyznacz projektowe obciążenie cieplne każdego pomieszczenia oraz całego budynku z jawnymi założeniami." },
        { "@type": "HowToStep", "position": 3, "name": "Dobierz odbiorniki", "text": "Sprawdź pokrycie obciążenia przez podłogówkę, grzejniki albo układ mieszany przy przyjętych parametrach wody." },
        { "@type": "HowToStep", "position": 4, "name": "Oblicz hydraulikę", "text": "Wyznacz długości, przepływy, opory, drogę krytyczną, średnice, nastawy i punkt pracy pompy." },
        { "@type": "HowToStep", "position": 5, "name": "Dobierz źródło i sterowanie", "text": "Porównaj obciążenie z charakterystyką źródła, modulacją, CWU, przepływem minimalnym i automatyką." },
        { "@type": "HowToStep", "position": 6, "name": "Przygotuj dokumentację i odbiór", "text": "Połącz rysunki, tabele, schemat, zestawienia, próbę, nastawy startowe i dokumentowanie zmian." }
      ]
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#deliverables",
      "name": "Elementy kompletnego projektu instalacji grzewczej",
      "numberOfItems": 6,
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Założenia i wyniki OZC" },
        { "@type": "ListItem", "position": 2, "name": "Rzuty instalacji" },
        { "@type": "ListItem", "position": 3, "name": "Tabela obiegów i nastaw" },
        { "@type": "ListItem", "position": 4, "name": "Schemat hydrauliczny" },
        { "@type": "ListItem", "position": 5, "name": "Dobór urządzeń i kryteria równoważności" },
        { "@type": "ListItem", "position": 6, "name": "Wytyczne uruchomienia i odbioru" }
      ]
    },
    {
      "@type": "Service",
      "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#service",
      "name": "Indywidualny projekt instalacji ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "serviceType": "Projekt instalacji grzewczej i ogrzewania podłogowego"
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/#faq-schema",
      "mainEntity": [
        { "@type": "Question", "name": "Czy projekt instalacji grzewczej jest potrzebny w domu jednorodzinnym?", "acceptedAnswer": { "@type": "Answer", "text": "Jest potrzebny zawsze wtedy, gdy inwestor chce świadomie dobrać moc odbiorników, przepływy, średnice, źródło i nastawy zamiast pozostawić te decyzje do rozstrzygnięcia na budowie. Zakres formalnej dokumentacji budowlanej oraz szczegółowego projektu wykonawczego należy rozpatrywać osobno." } },
        { "@type": "Question", "name": "Czy OZC i projekt instalacji grzewczej to ten sam dokument?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. OZC wyznacza projektowe obciążenie cieplne budynku i pomieszczeń. Projekt instalacji wykorzystuje te wyniki do doboru odbiorników, temperatur wody, przepływów, hydrauliki, źródła, sterowania i dokumentacji wykonawczej." } },
        { "@type": "Question", "name": "Czym różni się OZC od świadectwa charakterystyki energetycznej?", "acceptedAnswer": { "@type": "Answer", "text": "OZC odpowiada przede wszystkim na pytanie o projektową moc potrzebną w określonych warunkach. Świadectwo opisuje charakterystykę energetyczną według odrębnej metodologii i wskaźników. Wyniku rocznego w kWh nie należy bezpośrednio traktować jako mocy urządzenia w kW." } },
        { "@type": "Question", "name": "Jakie dane są niezbędne do wykonania projektu?", "acceptedAnswer": { "@type": "Answer", "text": "Potrzebne są aktualne rzuty i przekroje, lokalizacja, warstwy przegród, okna i drzwi, wentylacja, temperatury pomieszczeń, rodzaje okładzin, stała zabudowa, planowane źródło oraz informacje o istniejących elementach w przypadku modernizacji." } },
        { "@type": "Question", "name": "Czy moc źródła można dobrać wyłącznie z powierzchni domu?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Powierzchnia nie opisuje izolacji, przeszkleń, wentylacji, temperatur pomieszczeń ani lokalnych warunków klimatycznych. Dobór zaczyna się od obciążenia cieplnego, a następnie uwzględnia charakterystykę i sposób pracy konkretnego źródła." } },
        { "@type": "Question", "name": "Czy wynik OZC automatycznie wskazuje moc pompy ciepła?", "acceptedAnswer": { "@type": "Answer", "text": "Nie automatycznie. Trzeba porównać krzywą obciążenia budynku z mocą pompy w odpowiednich punktach pracy, sprawdzić punkt biwalentny, minimalną modulację, CWU, odszranianie, źródło szczytowe i wymagany przepływ instalacji." } },
        { "@type": "Question", "name": "Czy projekt podłogówki może zawierać tylko rozstaw rur?", "acceptedAnswer": { "@type": "Answer", "text": "Nie powinien. Rozstaw musi być powiązany z obciążeniem pomieszczenia, powierzchnią czynną, oporem podłogi, temperaturą wody, długością pętli, przepływem, oporem oraz nastawą rozdzielacza." } },
        { "@type": "Question", "name": "Czy 100 metrów jest bezwzględnym limitem każdej pętli?", "acceptedAnswer": { "@type": "Answer", "text": "Nie jest jednym uniwersalnym limitem dla wszystkich warunków. Dopuszczalna długość zależy między innymi od średnicy wewnętrznej, przepływu, medium, oporów miejscowych, dostępnego ciśnienia i założeń regulacji. Około 100 m bywa stosowane jako praktyczny pułap dla określonych domowych układów 16 × 2 mm." } },
        { "@type": "Question", "name": "Czy pompę obiegową można dobrać tylko z przepływu?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Potrzebny jest równocześnie wymagany przepływ i opór drogi krytycznej. Punkt pracy należy sprawdzić na charakterystyce pompy z uwzględnieniem sposobu regulacji całej instalacji." } },
        { "@type": "Question", "name": "Czy projekt powinien wskazywać konkretną markę materiałów?", "acceptedAnswer": { "@type": "Answer", "text": "Może wskazać rozwiązanie referencyjne, ale kluczowe są wymagane parametry i zgodność systemowa. Jeżeli marka jest zmieniana, trzeba potwierdzić równoważność cech wpływających na obliczenia." } },
        { "@type": "Question", "name": "Kiedy najlepiej zamówić projekt ogrzewania?", "acceptedAnswer": { "@type": "Answer", "text": "Po ustaleniu aktualnej architektury, przegród, stolarki i wentylacji, ale przed zamówieniem źródła, przygotowaniem warstw podłogi i rozpoczęciem prac instalacyjnych." } },
        { "@type": "Question", "name": "Ile kosztuje projekt instalacji grzewczej?", "acceptedAnswer": { "@type": "Answer", "text": "Cena zależy od wielkości i złożoności domu, liczby pomieszczeń, rodzaju odbiorników, OZC, hydrauliki, doboru źródła, schematu, liczby wariantów i obsługi zmian. Dwie ceny można porównać dopiero po sprawdzeniu zakresu." } },
        { "@type": "Question", "name": "Czy wykonawca może zmienić projekt na budowie?", "acceptedAnswer": { "@type": "Answer", "text": "Zmiana jest możliwa, jeżeli zostanie oceniony jej wpływ i potwierdzona równoważność. Zmiany wpływające na moc, przepływ, opór lub sterowanie mogą wymagać ponownej weryfikacji obliczeń." } },
        { "@type": "Question", "name": "Jak sprawdzić, czy otrzymany projekt jest kompletny?", "acceptedAnswer": { "@type": "Answer", "text": "Sprawdź spójność danych wejściowych, OZC pomieszczeń, doboru odbiorników, hydrauliki, źródła, schematu, tabel nastaw i rysunków. Oznaczenia powinny łączyć się między dokumentami, a założenia być możliwe do odtworzenia." } }
      ]
    }
  ]
}
</script>

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

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

  var processes = {
    inputs: {
      title: "Dane budynku",
      summary: "Projekt zaczyna się od informacji o rzeczywistym budynku, a nie od wyboru rozstawu rur lub mocy urządzenia.",
      input: "Rzuty, przekroje, lokalizacja, warstwy przegród, okna, wentylacja, temperatury pomieszczeń i okładziny.",
      output: "Spójny model budynku z opisanymi strefami cieplnymi i założeniami do obliczeń.",
      risk: "Wynik może opisywać inny budynek niż ten, który faktycznie powstanie."
    },
    load: {
      title: "OZC pomieszczeń",
      summary: "Obciążenie projektowe wyznacza moc potrzebną w warunkach obliczeniowych osobno dla każdego pomieszczenia.",
      input: "Model budynku, temperatury projektowe, przenikanie, wentylacja, grunt, strefy sąsiednie i mostki cieplne.",
      output: "Straty składowe oraz projektowe obciążenie pomieszczeń i całego budynku w W lub kW.",
      risk: "Jedna wartość dla całego domu nie pozwoli dobrać odbiorników ani przepływów w poszczególnych pomieszczeniach."
    },
    emitters: {
      title: "Odbiorniki ciepła",
      summary: "Podłogówka, grzejniki albo układ mieszany muszą pokryć obciążenie przy konkretnych parametrach wody.",
      input: "OZC pomieszczeń, powierzchnie czynne, opór okładzin, dopuszczalne temperatury i planowana aranżacja.",
      output: "Moc odbiorników, rozstawy lub wymiary, temperatury zasilania i powrotu oraz podział na obiegi.",
      risk: "Odbiornik może nie pokryć strat albo wymagać temperatury niekorzystnej dla źródła ciepła."
    },
    hydraulics: {
      title: "Hydraulika instalacji",
      summary: "Dopiero przepływy i opory pokazują, czy wszystkie obiegi można zasilić, wyregulować i poprawnie uruchomić.",
      input: "Moce odbiorników, różnica temperatur, długości tras, średnice, armatura i właściwości medium.",
      output: "Przepływy, straty ciśnienia, droga krytyczna, średnice, nastawy i punkt pracy pompy.",
      risk: "Instalacja może grzać nierówno, hałasować albo wymagać przypadkowego dławienia i przewymiarowanej pompy."
    },
    source: {
      title: "Źródło ciepła i sterowanie",
      summary: "Źródło dobiera się do obciążenia i charakterystyki całej instalacji, a nie wyłącznie do powierzchni domu.",
      input: "Krzywa obciążenia, parametry wody, zapotrzebowanie na CWU, minimalna modulacja, przepływ i zabezpieczenia.",
      output: "Wymagana moc w punktach pracy, strategia biwalencji, krzywa grzewcza, automatyka i schemat połączeń.",
      risk: "Urządzenie może taktować, nie osiągać mocy przy mrozie albo pracować z temperaturą obniżającą sprawność."
    },
    docs: {
      title: "Dokumentacja, uruchomienie i odbiór",
      summary: "Obliczenia muszą zostać przełożone na rysunki, tabele i nastawy możliwe do wykorzystania na budowie.",
      input: "Zatwierdzone obliczenia, dobory urządzeń, trasy, schemat, zasady próby oraz uzgodnione zmiany.",
      output: "Rysunki wykonawcze, zestawienia, tabela nastaw, instrukcja uruchomienia i dokumentacja powykonawcza.",
      risk: "Poprawne obliczenia pozostaną niewykorzystane, jeśli wykonawca nie otrzyma jednoznacznych parametrów."
    }
  };

  var processButtons = guide.querySelectorAll("[data-rk-process]");
  var processTitle = document.getElementById("rk-heatplan-process-title");
  var processSummary = document.getElementById("rk-heatplan-process-summary");
  var processInput = document.getElementById("rk-heatplan-process-input");
  var processOutput = document.getElementById("rk-heatplan-process-output");
  var processRisk = document.getElementById("rk-heatplan-process-risk");

  function showProcess(key) {
    var data = processes[key];
    if (!data) {
      return;
    }
    processTitle.textContent = data.title;
    processSummary.textContent = data.summary;
    processInput.textContent = data.input;
    processOutput.textContent = data.output;
    processRisk.textContent = data.risk;
    processButtons.forEach(function (button) {
      var selected = button.getAttribute("data-rk-process") === key;
      button.setAttribute("aria-selected", selected ? "true" : "false");
    });
  }

  processButtons.forEach(function (button) {
    button.addEventListener("click", function () {
      showProcess(button.getAttribute("data-rk-process"));
    });
  });

  var activeMode = "prepare";
  var modeButtons = guide.querySelectorAll("[data-rk-mode]");
  modeButtons.forEach(function (button) {
    button.addEventListener("click", function () {
      activeMode = button.getAttribute("data-rk-mode");
      modeButtons.forEach(function (item) {
        var selected = item === button;
        item.setAttribute("aria-selected", selected ? "true" : "false");
      });
    });
  });

  function selectedText(id) {
    var field = document.getElementById(id);
    if (!field) {
      return "nie określono";
    }
    if (field.selectedIndex < 0) {
      return "nie określono";
    }
    return field.options[field.selectedIndex].text;
  }

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

  function buildBrief(critical, missing, selected, total) {
    var modeText = "przygotowanie zakresu przyszłego zlecenia";
    if (activeMode === "audit") {
      modeText = "weryfikacja otrzymanego projektu lub oferty";
    }
    var lines = [
      "BRIEF — PROJEKT INSTALACJI GRZEWCZEJ",
      "Tryb: " + modeText + ".",
      "Etap inwestycji: " + selectedText("rk-heatplan-stage") + ".",
      "Odbiorniki: " + selectedText("rk-heatplan-system") + ".",
      "Źródło ciepła: " + selectedText("rk-heatplan-source-select") + ".",
      "Wentylacja: " + selectedText("rk-heatplan-ventilation") + ".",
      "Potwierdzono: " + selected + " z " + total + " elementów."
    ];

    if (critical.length > 0) {
      lines.push("Braki krytyczne: " + critical.join("; ") + ".");
    } else {
      lines.push("Braki krytyczne: nie wskazano na podstawie zaznaczonych odpowiedzi.");
    }
    if (missing.length > 0) {
      lines.push("Do uzupełnienia: " + missing.join("; ") + ".");
    } else {
      lines.push("Do uzupełnienia: brak pozycji na liście kontrolnej.");
    }
    lines.push("Uwaga: lista ocenia obecność elementów, a nie poprawność obliczeń ani zgodność projektu z warunkami budynku.");
    return lines.join("\n");
  }

  function analyzeScope() {
    var checks = guide.querySelectorAll("[data-rk-check]");
    var ok = [];
    var missing = [];
    var critical = [];
    var selected = 0;

    checks.forEach(function (check) {
      var label = check.getAttribute("data-label");
      if (!label) {
        label = "Element bez opisu";
      }
      if (check.checked) {
        selected += 1;
        ok.push(label);
      } else {
        if (check.getAttribute("data-critical") === "true") {
          critical.push(label);
        } else {
          missing.push(label);
        }
      }
    });

    var total = checks.length;
    var percentage = 0;
    if (total > 0) {
      percentage = Math.round((selected / total) * 100);
    }

    var result = document.getElementById("rk-heatplan-audit-result");
    var status = document.getElementById("rk-heatplan-audit-status");
    var intro = document.getElementById("rk-heatplan-audit-intro");
    var progress = document.getElementById("rk-heatplan-progress-fill");
    var progressLabel = document.getElementById("rk-heatplan-progress-label");
    var brief = document.getElementById("rk-heatplan-brief-output");

    result.classList.remove("is-ready");
    result.classList.remove("is-stop");

    if (critical.length > 0) {
      result.classList.add("is-stop");
      status.textContent = "Zakres ma braki krytyczne";
      intro.textContent = "Brakuje co najmniej jednego ogniwa potrzebnego do połączenia danych, obliczeń i parametrów wykonawczych.";
    } else {
      if (missing.length > 0) {
        status.textContent = "Podstawa jest zachowana, ale zakres wymaga uzupełnienia";
        intro.textContent = "Nie wskazano braku krytycznego, jednak część danych lub dokumentów nadal nie została potwierdzona.";
      } else {
        result.classList.add("is-ready");
        status.textContent = "Zakres listy kontrolnej jest kompletny";
        intro.textContent = "Wszystkie pozycje zostały zaznaczone. Następnym krokiem jest merytoryczna kontrola ich poprawności i wzajemnej spójności.";
      }
    }

    progress.style.width = percentage + "%";
    progressLabel.textContent = "Kompletność zakresu: " + selected + " z " + total + " elementów (" + percentage + "%)";
    renderList("rk-heatplan-ok-list", ok, "Nie potwierdzono jeszcze żadnego elementu.");
    renderList("rk-heatplan-missing-list", missing, "Brak dodatkowych pozycji do uzupełnienia.");
    renderList("rk-heatplan-critical-list", critical, "Nie wskazano braku krytycznego.");
    brief.textContent = buildBrief(critical, missing, selected, total);
    return brief.textContent;
  }

  function copyFallback(textValue) {
    var textarea = document.createElement("textarea");
    textarea.value = textValue;
    textarea.setAttribute("readonly", "readonly");
    textarea.style.position = "fixed";
    textarea.style.opacity = "0";
    document.body.appendChild(textarea);
    textarea.select();
    var copied = false;
    try {
      copied = document.execCommand("copy");
    } catch (error) {
      copied = false;
    }
    document.body.removeChild(textarea);
    return copied;
  }

  function showCopyMessage(message) {
    var confirmation = document.getElementById("rk-heatplan-copy-confirmation");
    confirmation.textContent = message;
  }

  function copyBrief() {
    var textValue = analyzeScope();
    if (navigator.clipboard) {
      if (navigator.clipboard.writeText) {
        navigator.clipboard.writeText(textValue).then(function () {
          showCopyMessage("Brief skopiowany.");
        }).catch(function () {
          var copiedAfterError = copyFallback(textValue);
          showCopyMessage(copiedAfterError ? "Brief skopiowany." : "Nie udało się skopiować automatycznie.");
        });
        return;
      }
    }
    var copied = copyFallback(textValue);
    showCopyMessage(copied ? "Brief skopiowany." : "Nie udało się skopiować automatycznie.");
  }

  function resetAnalyzer() {
    var checks = guide.querySelectorAll("[data-rk-check]");
    checks.forEach(function (check) {
      check.checked = false;
    });
    var selects = guide.querySelectorAll(".rk-heatplan-context-grid select");
    selects.forEach(function (field) {
      field.selectedIndex = 0;
    });
    activeMode = "prepare";
    modeButtons.forEach(function (button) {
      var selected = button.getAttribute("data-rk-mode") === "prepare";
      button.setAttribute("aria-selected", selected ? "true" : "false");
    });
    var result = document.getElementById("rk-heatplan-audit-result");
    result.classList.remove("is-ready");
    result.classList.remove("is-stop");
    document.getElementById("rk-heatplan-audit-status").textContent = "Zaznacz elementy i uruchom analizę";
    document.getElementById("rk-heatplan-audit-intro").textContent = "Wynik rozdzieli elementy potwierdzone, dane do uzupełnienia i braki krytyczne.";
    document.getElementById("rk-heatplan-progress-fill").style.width = "0%";
    document.getElementById("rk-heatplan-progress-label").textContent = "Kompletność zakresu: 0 z 40 ocenionych elementów";
    document.getElementById("rk-heatplan-brief-output").textContent = "Po analizie pojawi się tutaj opis inwestycji i lista danych wymagających uzupełnienia.";
    renderList("rk-heatplan-ok-list", [], "Jeszcze nie przeprowadzono analizy.");
    renderList("rk-heatplan-missing-list", [], "Zaznacz elementy faktycznie dostępne.");
    renderList("rk-heatplan-critical-list", [], "Brak oceny nie oznacza akceptacji projektu.");
    showCopyMessage("");
  }

  var runButton = document.getElementById("rk-heatplan-run");
  var copyButton = document.getElementById("rk-heatplan-copy-brief");
  var resetButton = document.getElementById("rk-heatplan-reset");
  if (runButton) {
    runButton.addEventListener("click", analyzeScope);
  }
  if (copyButton) {
    copyButton.addEventListener("click", copyBrief);
  }
  if (resetButton) {
    resetButton.addEventListener("click", resetAnalyzer);
  }

  showProcess("inputs");
  resetAnalyzer();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-instalacji-grzewczej-domu-jednorodzinnego-kompletny-przewodnik-inzynieryjny-koszty-i-obliczenia-ozc/">Projekt instalacji grzewczej domu – OZC, zakres i koszt.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kalkulator doboru pompy obiegowej w ogrzewaniu podłogowym.</title>
		<link>https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/</link>
					<comments>https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 09:13:56 +0000</pubDate>
				<category><![CDATA[Hydraulika]]></category>
		<category><![CDATA[Hydraulika grzewcza]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompy obiegowe]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[Porady techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[dobór pompy]]></category>
		<category><![CDATA[hydraulika instalacji]]></category>
		<category><![CDATA[instalacja podłogówki]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[kalkulator pompy obiegowej]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pompa 25-60]]></category>
		<category><![CDATA[pompa do podłogówki]]></category>
		<category><![CDATA[pompa obiegowa]]></category>
		<category><![CDATA[projekt instalacji grzewczej]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[przepływ instalacji]]></category>
		<category><![CDATA[przepływ w instalacji]]></category>
		<category><![CDATA[wysokość podnoszenia pompy]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3575</guid>

					<description><![CDATA[<p>Dobór odpowiedniej pompy obiegowej ma ogromny wpływ na sprawność i komfort działania instalacji grzewczej. Właśnie dlatego kalkulator doboru pompy obiegowej w ogrzewaniu podłogowym może być niezwykle pomocnym narzędziem dla inwestorów, instalatorów oraz osób planujących budowę domu. Dzięki niemu można w prosty sposób oszacować wymagany przepływ wody oraz wysokość podnoszenia pompy, a następnie dopasować urządzenie do realnych parametrów instalacji. W artykule pokazuję krok po kroku, jak wykonać podstawowe obliczenia, zrozumieć charakterystyki pomp i uniknąć najczęstszych błędów przy projektowaniu podłogówki.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">Kalkulator doboru pompy obiegowej w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #ez-toc-container .ez-toc-list,
  #ez-toc-container .ez-toc-list ul,
  #ez-toc-container .ez-toc-list ol{margin-top:0!important;margin-bottom:0!important}
  #ez-toc-container .ez-toc-list li{margin:0!important;padding:3px 0!important;line-height:1.4!important}
  #ez-toc-container .ez-toc-list ul,
  #ez-toc-container .ez-toc-list ol{padding-left:28px!important}

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

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

<article id="rk-pump-guide">
  <div class="rk-pump-shell">
    <div class="rk-pump-progress-track" aria-hidden="true"><div class="rk-pump-progress" id="rk-pump-progress"></div></div>
    <header class="rk-pump-hero">
      <div class="rk-pump-hero-grid">
        <div>
          <span class="rk-pump-eyebrow"><b></b> Przepływ • opory • punkt pracy</span>
          <div class="rk-pump-hero-title">Pompy nie dobiera się z metrażu. Dobiera się punkt Q/H.</div>
          <p class="rk-pump-hero-lead">Oblicz przepływ całkowity, straty krytycznej drogi i wymaganą wysokość podnoszenia. Następnie sprawdź wynik na charakterystyce rozważanej pompy — bez automatycznego przypisywania 25-40 lub 25-60 do powierzchni domu.</p>
          <div class="rk-pump-meta"><span>Aktualizacja: 30.08.2026</span><span>Model Darcy’ego-Weisbacha</span><span>Dynamiczna krzywa Q/H</span></div>
        </div>
        <aside class="rk-pump-hero-card" aria-label="Najważniejsze zależności doboru pompy obiegowej">
          <small>Wymagany punkt pracy</small>
          <div class="rk-pump-hero-formula">Punkt = (V̇proj, Hproj)</div>
          <p>Maksymalny przepływ i maksymalna wysokość podnoszenia pompy nie występują jednocześnie. Liczy się zdolność urządzenia do osiągnięcia obu wymaganych wartości w tym samym punkcie.</p>
          <div class="rk-pump-hero-values"><div><strong>V̇</strong>przepływ projektowy</div><div><strong>H</strong>wysokość podnoszenia</div><div><strong>Δp</strong>strata krytycznej drogi</div><div><strong>Q/H</strong>sprawdzenie krzywej</div></div>
        </aside>
      </div>
    </header>

    <nav class="rk-pump-nav" aria-label="Spis treści artykułu">
      <span class="rk-pump-nav-title">Spis treści — przejdź do sekcji</span>
      <div class="rk-pump-nav-links">
        <a href="#rk-pump-answer">Szybka odpowiedź</a>
        <a href="#rk-pump-point">Punkt Q/H</a>
        <a href="#rk-pump-flow">Obliczanie przepływu</a>
        <a href="#rk-pump-head">Wysokość podnoszenia</a>
        <a href="#rk-pump-analyzer">Analizator</a>
        <a href="#rk-pump-markings">25-40 czy 25-60</a>
        <a href="#rk-pump-modes">Tryby pracy</a>
        <a href="#rk-pump-source">Pompa w źródle</a>
        <a href="#rk-pump-manifolds">Kilka rozdzielaczy</a>
        <a href="#rk-pump-separation">Sprzęgło i bufor</a>
        <a href="#rk-pump-diameter">Średnica i kawitacja</a>
        <a href="#rk-pump-balance">Rotametry</a>
        <a href="#rk-pump-diagnostics">Diagnostyka</a>
        <a href="#rk-pump-example">Przykład obliczeń</a>
        <a href="#rk-pump-mistakes">Najczęstsze błędy</a>
        <a href="#rk-pump-checklist">Checklista</a>
        <a href="#rk-pump-faq">FAQ</a>
        <a href="#rk-pump-sources">Źródła</a>
      </div>
    </nav>

    <main class="rk-pump-body">
      <section class="rk-pump-section" id="rk-pump-answer">
        <span class="rk-pump-kicker">Najważniejsza odpowiedź</span>
        <h2>Jak dobrać pompę obiegową do ogrzewania podłogowego?</h2>
        <p class="rk-pump-lead">Pompa jest odpowiednia wtedy, gdy przy wymaganym przepływie instalacji zapewnia wysokość podnoszenia potrzebną do pokonania strat krytycznej drogi hydraulicznej. Obie wartości muszą wystąpić jednocześnie na rzeczywistej charakterystyce urządzenia.</p>
        <div class="rk-pump-answer">
          <div class="rk-pump-answer-main">
            <span class="rk-pump-kicker">Prawidłowa kolejność</span>
            <strong class="rk-pump-big">Moc → przepływ → opory → punkt Q/H → krzywa pompy</strong>
            <p>Jeżeli znamy przepływy wszystkich pętli z projektu, sumujemy je. Jeżeli ich nie znamy, przepływ całkowity możemy wstępnie obliczyć z projektowej mocy i różnicy temperatur.</p>
          </div>
          <div class="rk-pump-answer-side">
            <span class="rk-pump-kicker">Czego nie robimy</span>
            <strong class="rk-pump-big">Nie dobieramy pompy z powierzchni domu</strong>
            <p>Metraż, liczba kondygnacji oraz sama liczba pętli nie określają wysokości podnoszenia. Potrzebne są przepływy, średnice, długości i opory elementów.</p>
          </div>
        </div>
        <p>Projektowa moc powinna wynikać z obliczeń cieplnych, a nie z uniwersalnego wskaźnika dla całego domu. Zobacz, czym jest <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a>.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-point">
        <span class="rk-pump-kicker">Dwie współrzędne jednej decyzji</span>
        <h2>Co oznaczają przepływ V̇, wysokość H i punkt pracy pompy?</h2>
        <div class="rk-pump-grid-3">
          <article class="rk-pump-card"><span class="rk-pump-card-number">V̇</span><h3>Przepływ projektowy</h3><p>Ilość medium, którą trzeba przetłoczyć w jednostce czasu, aby przenieść wymaganą moc przy przyjętej różnicy temperatur.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">H</span><h3>Wysokość podnoszenia</h3><p>Odpowiednik różnicy ciśnień potrzebnej do pokonania oporów krytycznej zamkniętej drogi przy przepływie projektowym.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">●</span><h3>Punkt pracy</h3><p>Przecięcie charakterystyki pompy z krzywą instalacji. To w tym miejscu ustalają się rzeczywisty przepływ i różnica ciśnień.</p></article>
        </div>
        <div class="rk-pump-callout"><p><strong>Maksimum nie jest punktem pracy.</strong> Pompa może osiągać maksymalną wysokość przy przepływie bliskim zeru, a maksymalny przepływ przy bardzo małej wysokości. Dlatego dwóch wartości maksymalnych nie wolno łączyć w jeden fikcyjny punkt.</p></div>
        <h3>Dlaczego sama nazwa pompy nie wystarcza?</h3>
        <p>Oznaczenie typoszeregu jest tylko pierwszym filtrem. Dwa urządzenia o podobnym oznaczeniu mogą mieć inne krzywe, tryby regulacji, pobór mocy i dopuszczalny zakres pracy. Ostateczną ocenę przeprowadza się na charakterystyce konkretnego urządzenia.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-flow">
        <span class="rk-pump-kicker">Pierwsza współrzędna punktu pracy</span>
        <h2>Jak obliczyć wymagany przepływ pompy obiegowej?</h2>
        <p class="rk-pump-lead">Dla wody przepływ objętościowy można obliczyć z mocy przekazywanej przez instalację i projektowej różnicy temperatur. Jeżeli projekt zawiera przepływy pętli, dokładniejszą metodą jest ich zsumowanie dla obwodów pracujących jednocześnie.</p>
        <div class="rk-pump-formula-box">
          <div><h3>Przepływ całkowity dla wody</h3><p>Zmniejszenie ΔT zwiększa przepływ potrzebny do przeniesienia tej samej mocy. Różnica temperatur jest założeniem projektowym, a nie stałą przypisaną automatycznie do pompy ciepła lub kotła.</p></div>
          <div class="rk-pump-formula">V̇ = P / (1,163 × ΔT)<small>V̇ [m³/h], P [kW], ΔT [K]</small></div>
        </div>
        <div class="rk-pump-table-wrap">
          <table>
            <thead><tr><th>Moc instalacji</th><th>Przepływ przy ΔT = 5 K</th><th>Przepływ przy ΔT = 7 K</th><th>Różnica</th></tr></thead>
            <tbody>
              <tr><td data-label="Moc instalacji" class="rk-pump-table-em">8 kW</td><td data-label="ΔT = 5 K">1,38 m³/h</td><td data-label="ΔT = 7 K">0,98 m³/h</td><td data-label="Różnica">około 40%</td></tr>
              <tr><td data-label="Moc instalacji" class="rk-pump-table-em">10 kW</td><td data-label="ΔT = 5 K">1,72 m³/h</td><td data-label="ΔT = 7 K">1,23 m³/h</td><td data-label="Różnica">około 40%</td></tr>
              <tr><td data-label="Moc instalacji" class="rk-pump-table-em">12 kW</td><td data-label="ΔT = 5 K">2,06 m³/h</td><td data-label="ΔT = 7 K">1,47 m³/h</td><td data-label="Różnica">około 40%</td></tr>
            </tbody>
          </table>
        </div>
        <h3>Przepływ całkowity a przepływ jednej pętli</h3>
        <p>Na magistrali pomiędzy źródłem a rozdzielaczem występuje suma przepływów czynnych pętli. W pojedynczej pętli występuje wyłącznie przepływ przypisany do tego obwodu. Nie wolno liczyć straty rury 16 × 2 mm przy przepływie całego domu.</p>
        <h4>Czy średnia z liczby pętli wystarczy?</h4>
        <p>Podzielenie przepływu całkowitego przez liczbę pętli daje jedynie wartość średnią. Rzeczywiste przepływy zależą od mocy poszczególnych pomieszczeń oraz przyjętego ΔT. Pętla krytyczna nie musi mieć ani największego przepływu, ani największej długości — decyduje jej całkowita strata ciśnienia.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-head">
        <span class="rk-pump-kicker">Druga współrzędna punktu pracy</span>
        <h2>Jak obliczyć wysokość podnoszenia pompy?</h2>
        <p class="rk-pump-lead">Wysokość podnoszenia wynika z sumy strat ciśnienia na krytycznej zamkniętej drodze. Obejmuje ona nie tylko pętlę, ale również odcinki wspólne oraz wszystkie elementy znajdujące się w obiegu obsługiwanym przez daną pompę.</p>
        <div class="rk-pump-route" aria-label="Elementy krytycznej drogi hydraulicznej">
          <div><strong>Źródło</strong>wymiennik, króćce</div>
          <div><strong>Zasilanie</strong>magistrala i armatura</div>
          <div><strong>Rozdzielacz</strong>rotametr i zawory</div>
          <div><strong>Pętla</strong>rura przy jej przepływie</div>
          <div><strong>Powrót belki</strong>zawór i wkładka</div>
          <div><strong>Magistrala</strong>wspólny powrót</div>
          <div><strong>Pompa</strong>zamknięcie drogi</div>
        </div>
        <div class="rk-pump-formula-box">
          <div><h3>Przeliczenie straty ciśnienia</h3><p>Dla wody 9,81 kPa odpowiada w przybliżeniu jednemu metrowi słupa wody. Do wyniku można dodać niewielką, jawną rezerwę projektową, ale nie zastępuje ona brakujących danych.</p></div>
          <div class="rk-pump-formula">H ≈ Δpkryt / 9,81<small>H [m H₂O], Δpkryt [kPa]</small></div>
        </div>
        <h3>Krytyczna droga nie zawsze oznacza najdłuższą pętlę</h3>
        <p>Długa pętla o małym przepływie może mieć mniejszy opór niż krótszy obwód o większym przepływie. Do tego dochodzą różne długości dobiegów, nastawy zaworów i opory magistral. Wszystkie pętle trzeba porównać przy ich projektowych przepływach. Zobacz również, <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">ile metrów podłogówki może mieć jedna pętla</a>.</p>
        <h3>Czy pompa musi podnosić wodę na piętro?</h3>
        <p>W prawidłowo napełnionej instalacji zamkniętej słup wody po stronie zasilania jest równoważony przez słup po stronie powrotu. Pompa nie pracuje jak pompa studzienna — pokonuje głównie opory przepływu. Wysokość budynku nadal wpływa na ciśnienie napełnienia i dobór naczynia przeponowego, ale nie dodaje się jej wprost do wymaganego H pompy obiegowej.</p>
        <div class="rk-pump-callout is-warm"><p><strong>Nie dodawaj wszystkich pętli szeregowo.</strong> Pętle na rozdzielaczu pracują równolegle. Do wysokości podnoszenia przyjmujemy opór jednej krytycznej drogi, natomiast do przepływu pompy sumę przepływów czynnych obwodów.</p></div>
      </section>

      <section class="rk-pump-section" id="rk-pump-analyzer">
        <span class="rk-pump-kicker">Jedno narzędzie zamiast kilku uproszczonych symulatorów</span>
        <h2>Interaktywny analizator punktu pracy pompy obiegowej</h2>
        <p class="rk-pump-lead">Narzędzie oddzielnie liczy przepływ całkowity w magistrali oraz przepływ krytycznej pętli. Następnie sumuje straty rury, odcinków wspólnych i elementów dodatkowych, tworzy krzywą instalacji oraz porównuje wymagany punkt z wprowadzoną charakterystyką pompy.</p>

        <div class="rk-pump-tool" data-rk-pump-tool>
          <div class="rk-pump-tool-head">
            <span class="rk-pump-eyebrow"><b></b> Model edukacyjny dla wody około 30°C</span>
            <h3>Wyznacz punkt Q/H i sprawdź krzywą pompy</h3>
            <p>W trybie szybkim przepływ wynika z mocy i ΔT. W trybie eksperckim możesz wpisać znany przepływ z projektu. Straty rur są liczone równaniem Darcy’ego-Weisbacha.</p>
          </div>

          <div class="rk-pump-tool-body">
            <div class="rk-pump-calc">
              <h3>Dane instalacji</h3>
              <p>Wprowadź całkowite długości rur obejmujące zasilanie i powrót. Opory urządzeń oraz armatury wpisz jako sumę z ich dokumentacji.</p>
              <div class="rk-pump-fields">
                <div class="rk-pump-field is-wide">
                  <label for="rk-pump-input-mode">Sposób określenia przepływu całkowitego</label>
                  <select id="rk-pump-input-mode">
                    <option value="power" selected>Z mocy i różnicy temperatur</option>
                    <option value="flow">Znam przepływ projektowy</option>
                  </select>
                </div>

                <div class="rk-pump-subhead">Przepływ całkowity instalacji</div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-power">Projektowa moc instalacji [kW]</label>
                  <input id="rk-pump-input-power" type="number" min="0.1" max="200" step="0.1" value="10" inputmode="decimal">
                </div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-dt">Projektowa różnica temperatur ΔT [K]</label>
                  <input id="rk-pump-input-dt" type="number" min="1" max="40" step="0.5" value="6" inputmode="decimal">
                </div>
                <div class="rk-pump-field is-wide">
                  <label for="rk-pump-input-flow">Znany przepływ projektowy [m³/h]</label>
                  <input id="rk-pump-input-flow" type="number" min="0.01" max="100" step="0.01" value="1.43" inputmode="decimal" disabled>
                </div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-loops">Liczba jednocześnie czynnych pętli</label>
                  <input id="rk-pump-input-loops" type="number" min="1" max="100" step="1" value="10" inputmode="numeric">
                </div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-loop-flow">Przepływ krytycznej pętli [l/min]</label>
                  <input id="rk-pump-input-loop-flow" type="number" min="0.05" max="20" step="0.05" value="2.50" inputmode="decimal">
                  <small>Wpisz przepływ tej pętli, której pełną drogę sprawdzasz — nie przepływ całego rozdzielacza.</small>
                </div>

                <div class="rk-pump-subhead">Krytyczna pętla</div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-loop-length">Całkowita długość pętli [m]</label>
                  <input id="rk-pump-input-loop-length" type="number" min="1" max="500" step="1" value="90" inputmode="decimal">
                </div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-loop-id">Średnica wewnętrzna rury [mm]</label>
                  <input id="rk-pump-input-loop-id" type="number" min="4" max="100" step="0.1" value="12" inputmode="decimal">
                  <small>Dla rury 16 × 2 mm średnica geometryczna wynosi około 12 mm.</small>
                </div>

                <div class="rk-pump-subhead">Wspólna magistrala zasilająca i powrotna</div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-main-length">Łączna długość zasilania i powrotu [m]</label>
                  <input id="rk-pump-input-main-length" type="number" min="0" max="1000" step="1" value="30" inputmode="decimal">
                </div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-main-id">Średnica wewnętrzna magistrali [mm]</label>
                  <input id="rk-pump-input-main-id" type="number" min="6" max="300" step="0.1" value="26" inputmode="decimal">
                </div>

                <div class="rk-pump-subhead">Elementy dodatkowe i rezerwa</div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-extra-loss">Suma dodatkowych oporów [kPa]</label>
                  <input id="rk-pump-input-extra-loss" type="number" min="0" max="500" step="0.1" value="12" inputmode="decimal">
                  <small>Rozdzielacz, zawory, wymiennik, filtr i pozostałe elementy należące do drogi tej pompy.</small>
                </div>
                <div class="rk-pump-field">
                  <label for="rk-pump-input-margin">Jawna rezerwa obliczeniowa [%]</label>
                  <input id="rk-pump-input-margin" type="number" min="0" max="50" step="1" value="10" inputmode="decimal">
                  <small>Rezerwa nie zastępuje nieznanych oporów ani brakującej charakterystyki urządzenia.</small>
                </div>

                <div class="rk-pump-subhead">Sprawdzenie rozważanej charakterystyki</div>
                <div class="rk-pump-field is-wide">
                  <label for="rk-pump-input-curve-mode">Czy chcesz wprowadzić cztery punkty z wykresu pompy?</label>
                  <select id="rk-pump-input-curve-mode">
                    <option value="yes" selected>Tak — porównaj krzywą</option>
                    <option value="no">Nie — pokaż tylko wymagany punkt</option>
                  </select>
                  <small>Wartości domyślne są wyłącznie przykładem. Zastąp je punktami odczytanymi z dokumentacji rozważanego urządzenia i wybranego trybu.</small>
                </div>
                <div class="rk-pump-curve-fields" id="rk-pump-curve-fields">
                  <div class="rk-pump-curve-point"><strong>PUNKT 1</strong><label for="rk-pump-curve-q0">Q [m³/h]</label><input id="rk-pump-curve-q0" type="number" min="0" max="100" step="0.01" value="0" inputmode="decimal"><label for="rk-pump-curve-h0">H [m]</label><input id="rk-pump-curve-h0" type="number" min="0" max="50" step="0.01" value="6.00" inputmode="decimal"></div>
                  <div class="rk-pump-curve-point"><strong>PUNKT 2</strong><label for="rk-pump-curve-q1">Q [m³/h]</label><input id="rk-pump-curve-q1" type="number" min="0" max="100" step="0.01" value="1.00" inputmode="decimal"><label for="rk-pump-curve-h1">H [m]</label><input id="rk-pump-curve-h1" type="number" min="0" max="50" step="0.01" value="5.40" inputmode="decimal"></div>
                  <div class="rk-pump-curve-point"><strong>PUNKT 3</strong><label for="rk-pump-curve-q2">Q [m³/h]</label><input id="rk-pump-curve-q2" type="number" min="0" max="100" step="0.01" value="2.00" inputmode="decimal"><label for="rk-pump-curve-h2">H [m]</label><input id="rk-pump-curve-h2" type="number" min="0" max="50" step="0.01" value="4.20" inputmode="decimal"></div>
                  <div class="rk-pump-curve-point"><strong>PUNKT 4</strong><label for="rk-pump-curve-q3">Q [m³/h]</label><input id="rk-pump-curve-q3" type="number" min="0" max="100" step="0.01" value="3.00" inputmode="decimal"><label for="rk-pump-curve-h3">H [m]</label><input id="rk-pump-curve-h3" type="number" min="0" max="50" step="0.01" value="2.00" inputmode="decimal"></div>
                </div>
              </div>
              <div class="rk-pump-actions">
                <button class="rk-pump-calculate" id="rk-pump-calculate" type="button">Oblicz punkt pracy</button>
                <button class="rk-pump-reset" id="rk-pump-reset" type="button">Przywróć przykład</button>
              </div>
            </div>

            <div class="rk-pump-right-column">
            <div class="rk-pump-visual">
              <h3>Krzywa instalacji i charakterystyka pompy</h3>
              <p>Niebieska krzywa przechodzi przez obliczony punkt projektowy. Pomarańczowa linia łączy punkty wpisane z dokumentacji urządzenia. Żółty punkt pokazuje ich orientacyjne przecięcie.</p>
              <svg class="rk-pump-chart" viewBox="0 0 720 430" role="img" aria-labelledby="rk-pump-chart-title rk-pump-chart-desc">
                <title id="rk-pump-chart-title">Wykres punktu pracy pompy obiegowej</title>
                <desc id="rk-pump-chart-desc">Porównanie krzywej oporów instalacji z charakterystyką rozważanej pompy.</desc>
                <line class="rk-pump-grid-line" x1="70" y1="360" x2="660" y2="360"></line><line class="rk-pump-grid-line" x1="70" y1="294" x2="660" y2="294"></line><line class="rk-pump-grid-line" x1="70" y1="228" x2="660" y2="228"></line><line class="rk-pump-grid-line" x1="70" y1="162" x2="660" y2="162"></line><line class="rk-pump-grid-line" x1="70" y1="96" x2="660" y2="96"></line><line class="rk-pump-grid-line" x1="70" y1="30" x2="660" y2="30"></line>
                <line class="rk-pump-grid-line" x1="70" y1="30" x2="70" y2="360"></line><line class="rk-pump-grid-line" x1="188" y1="30" x2="188" y2="360"></line><line class="rk-pump-grid-line" x1="306" y1="30" x2="306" y2="360"></line><line class="rk-pump-grid-line" x1="424" y1="30" x2="424" y2="360"></line><line class="rk-pump-grid-line" x1="542" y1="30" x2="542" y2="360"></line><line class="rk-pump-grid-line" x1="660" y1="30" x2="660" y2="360"></line>
                <line class="rk-pump-axis" x1="70" y1="360" x2="660" y2="360"></line><line class="rk-pump-axis" x1="70" y1="30" x2="70" y2="360"></line>
                <text id="rk-pump-x0" x="70" y="382" text-anchor="middle">0</text><text id="rk-pump-x1" x="188" y="382" text-anchor="middle">0,7</text><text id="rk-pump-x2" x="306" y="382" text-anchor="middle">1,4</text><text id="rk-pump-x3" x="424" y="382" text-anchor="middle">2,1</text><text id="rk-pump-x4" x="542" y="382" text-anchor="middle">2,8</text><text id="rk-pump-x5" x="660" y="382" text-anchor="middle">3,5</text>
                <text id="rk-pump-y0" x="58" y="365" text-anchor="end">0</text><text id="rk-pump-y1" x="58" y="299" text-anchor="end">1,4</text><text id="rk-pump-y2" x="58" y="233" text-anchor="end">2,8</text><text id="rk-pump-y3" x="58" y="167" text-anchor="end">4,2</text><text id="rk-pump-y4" x="58" y="101" text-anchor="end">5,6</text><text id="rk-pump-y5" x="58" y="35" text-anchor="end">7,0</text>
                <text class="rk-pump-axis-title" x="365" y="414" text-anchor="middle">Przepływ V̇ [m³/h]</text><text class="rk-pump-axis-title" x="18" y="195" text-anchor="middle" transform="rotate(-90 18 195)">Wysokość H [m]</text>
                <polyline class="rk-pump-system-line" id="rk-pump-system-line" points="70,360 188,345 306,300 424,225 542,120 660,30"></polyline>
                <polyline class="rk-pump-device-line" id="rk-pump-device-line" points="70,77 239,106 407,162 576,266"></polyline>
                <circle class="rk-pump-design-dot" id="rk-pump-design-dot" cx="311" cy="157" r="8"></circle>
                <circle class="rk-pump-intersection-dot" id="rk-pump-intersection-dot" cx="337" cy="175" r="7"></circle>
              </svg>
              <div class="rk-pump-legend"><span><i></i>krzywa instalacji</span><span><i></i>wprowadzona krzywa pompy</span><span><i></i>przecięcie krzywych</span></div>
              <div class="rk-pump-loss-bars" aria-label="Udział strat ciśnienia">
                <div class="rk-pump-bar-row"><span>Krytyczna pętla</span><span class="rk-pump-bar-track"><span class="rk-pump-bar is-loop" id="rk-pump-bar-loop"></span></span><strong id="rk-pump-bar-loop-value">18,7 kPa</strong></div>
                <div class="rk-pump-bar-row"><span>Magistrala</span><span class="rk-pump-bar-track"><span class="rk-pump-bar is-main" id="rk-pump-bar-main"></span></span><strong id="rk-pump-bar-main-value">8,0 kPa</strong></div>
                <div class="rk-pump-bar-row"><span>Dodatkowe</span><span class="rk-pump-bar-track"><span class="rk-pump-bar is-extra" id="rk-pump-bar-extra"></span></span><strong id="rk-pump-bar-extra-value">12,0 kPa</strong></div>
              </div>
            </div>

          <div class="rk-pump-results" aria-live="polite">
            <h3>Wynik dla wprowadzonych danych</h3>
            <div class="rk-pump-result-grid">
              <div class="rk-pump-result-card is-main"><small>Przepływ całkowity instalacji</small><div class="rk-pump-result-number" id="rk-pump-result-flow">1,43 m³/h</div></div>
              <div class="rk-pump-result-card is-main"><small>Wymagana wysokość z rezerwą</small><div class="rk-pump-result-number" id="rk-pump-result-head">4,34 m</div></div>
              <div class="rk-pump-result-card"><small>Przepływ całkowity w l/min</small><div class="rk-pump-result-number" id="rk-pump-result-flow-litres">23,88 l/min</div></div>
              <div class="rk-pump-result-card"><small>Średni przepływ czynnej pętli</small><div class="rk-pump-result-number" id="rk-pump-result-average-loop">2,39 l/min</div></div>
              <div class="rk-pump-result-card"><small>Prędkość w krytycznej pętli</small><div class="rk-pump-result-number" id="rk-pump-result-loop-velocity">0,37 m/s</div></div>
              <div class="rk-pump-result-card"><small>Prędkość w magistrali</small><div class="rk-pump-result-number" id="rk-pump-result-main-velocity">0,75 m/s</div></div>
              <div class="rk-pump-result-card"><small>Strata krytycznej pętli</small><div class="rk-pump-result-number" id="rk-pump-result-loop-loss">18,7 kPa</div></div>
              <div class="rk-pump-result-card"><small>Strata wspólnej magistrali</small><div class="rk-pump-result-number" id="rk-pump-result-main-loss">8,0 kPa</div></div>
              <div class="rk-pump-result-card"><small>Suma przed rezerwą</small><div class="rk-pump-result-number" id="rk-pump-result-total-loss">38,7 kPa</div></div>
              <div class="rk-pump-result-card"><small>Punkt wymagany Q/H</small><div class="rk-pump-result-number" id="rk-pump-result-point">1,43 / 4,34</div></div>
              <div class="rk-pump-result-card"><small>H pompy przy wymaganym Q</small><div class="rk-pump-result-number" id="rk-pump-result-device-head">4,88 m</div></div>
              <div class="rk-pump-result-card"><small>Przecięcie krzywych</small><div class="rk-pump-result-number" id="rk-pump-result-intersection">1,51 / 4,79</div></div>
            </div>
            <div class="rk-pump-status" id="rk-pump-status"><strong>Wstępna zgodność:</strong> przykładowa krzywa osiąga wymagany punkt. Zastąp dane domyślne wartościami z dokumentacji konkretnego urządzenia i sprawdź właściwy tryb lub bieg.</div>
            <p class="rk-pump-tool-note">Model przyjmuje wodę o właściwościach zbliżonych do temperatury 30°C, rurę hydraulicznie gładką oraz zależność strat od przepływu właściwą dla obliczanego punktu. Nie uwzględnia glikolu, rzeczywistych współczynników oporów kształtek ani strat urządzeń, których nie wpisano w polu dodatkowym. Wprowadzona charakterystyka jest interpolowana liniowo pomiędzy czterema punktami.</p>
          </div>
          </div>
          </div>
        </div>

        <aside class="rk-pump-inline-cta rk-pump-sales-cta" aria-label="Projekt z obliczonym punktem pracy pompy">
          <h3>Kalkulator wyznaczył wymagany punkt Q/H. Nie zna jednak rzeczywistego przebiegu instalacji, oporu wymiennika źródła, zaworu mieszającego, rozdzielacza, armatury ani krzywej wybranej pompy, jeżeli dane te nie zostały wprowadzone.</h3>
          <p>W projekcie odcinki wspólne liczymy przy przepływie sumarycznym, a krytyczną pętlę przy jej własnym przepływie. Dopiero suma tych oporów tworzy punkt nanoszony na charakterystykę pompy.</p>
          <a class="rk-pump-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt z obliczonym punktem pracy pompy</a>
          <span class="rk-pump-disclosure">Wynik analizatora jest materiałem edukacyjnym i nie zastępuje dokumentacji wykonawczej.</span>
        </aside>
      </section>

      <section class="rk-pump-section" id="rk-pump-markings">
        <span class="rk-pump-kicker">Oznaczenie to filtr, nie wynik obliczeń</span>
        <h2>Pompa 25-40 czy 25-60 — co naprawdę oznaczają symbole?</h2>
        <p class="rk-pump-lead">W typowych oznaczeniach pierwsza liczba odnosi się do wielkości przyłącza, a druga do maksymalnej wysokości podnoszenia danego typoszeregu. Dokładny sposób oznaczania zawsze trzeba potwierdzić w dokumentacji urządzenia.</p>
        <div class="rk-pump-table-wrap">
          <table>
            <thead><tr><th>Oznaczenie</th><th>Co można z niego wstępnie odczytać</th><th>Czego nie można z niego wywnioskować</th></tr></thead>
            <tbody>
              <tr><td data-label="Oznaczenie" class="rk-pump-table-em">25-40</td><td data-label="Wstępny odczyt">Typoszereg z przyłączem około DN25 i maksymalnym H około 4 m</td><td data-label="Czego nie wiadomo">Czy osiąga wymagane H przy projektowym przepływie</td></tr>
              <tr><td data-label="Oznaczenie" class="rk-pump-table-em">25-60</td><td data-label="Wstępny odczyt">Typoszereg z przyłączem około DN25 i maksymalnym H około 6 m</td><td data-label="Czego nie wiadomo">Jaki ma pobór mocy i punkt przy danym trybie</td></tr>
              <tr><td data-label="Oznaczenie" class="rk-pump-table-em">25-80</td><td data-label="Wstępny odczyt">Typoszereg z przyłączem około DN25 i maksymalnym H około 8 m</td><td data-label="Czego nie wiadomo">Czy większy zakres jest w instalacji potrzebny lub korzystny</td></tr>
            </tbody>
          </table>
        </div>
        <h3>Dlaczego 25-60 nie oznacza 6 m przy każdym przepływie?</h3>
        <p>Wraz ze wzrostem przepływu dostępna wysokość na charakterystyce pompy zazwyczaj maleje. Maksymalne H pojawia się przy przepływie bliskim zeru. Z tego powodu pompa z napisem 25-60 może nie osiągnąć punktu 2,5 m³/h i 5,5 m, mimo że obie liczby osobno mieszczą się w jej wartościach maksymalnych.</p>
        <h3>Czy większa pompa zawsze jest bezpieczniejsza?</h3>
        <p>Nie. Zbyt duża różnica ciśnień może zwiększać hałas i konieczność dławienia zaworów. Pompa elektroniczna może ograniczyć obroty, ale jej zakres regulacji również ma granice. Urządzenie dobieramy tak, aby wymagany punkt znajdował się w użytecznym zakresie charakterystyki, z kontrolowaną rezerwą.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-modes">
        <span class="rk-pump-kicker">Regulacja zależy od topologii</span>
        <h2>Stałe czy proporcjonalne ciśnienie — jaki tryb pracy pompy wybrać?</h2>
        <p class="rk-pump-lead">Nie istnieje jeden tryb właściwy dla każdej podłogówki. Decyzja zależy od tego, czy przepływ jest stały, jak zachowują się siłowniki, które zawory zmieniają opór i czego wymaga źródło ciepła.</p>
        <div class="rk-pump-grid-3">
          <article class="rk-pump-card"><span class="rk-pump-card-number">Δp-c</span><h3>Stałe ciśnienie różnicowe</h3><p>Pompa stara się utrzymać podobną różnicę ciśnień przy zmieniającym się przepływie. Bywa użyteczne przy rozdzielaczach i zamykanych pętlach, ale nastawa nadal wymaga kontroli.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">Δp-v</span><h3>Ciśnienie proporcjonalne</h3><p>Wraz ze spadkiem zapotrzebowania pompa obniża różnicę ciśnień. Może pasować do sieci, w których zamykanie zaworów istotnie redukuje wymaganą wysokość.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">n</span><h3>Stała prędkość</h3><p>Może być właściwa w obiegu o stabilnym przepływie lub wtedy, gdy wymaga jej konkretne urządzenie i automatyka. Nie jest automatycznie trybem błędnym.</p></article>
        </div>
        <h3>Co zmieniają siłowniki na rozdzielaczu?</h3>
        <p>Zamykanie <a href="https://projekt-ogrzewania.pl/silowniki-termoelektryczne-na-rozdzielaczach/">siłowników termoelektrycznych</a> zmienia krzywą instalacji i liczbę czynnych pętli. Automatyka powinna ograniczać różnicę ciśnień oraz zapewnić minimalny przepływ wymagany przez źródło. Nie wolno zakładać, że dowolny tryb automatyczny sam naprawi błędny schemat.</p>
        <h4>Jak dobrać nastawę po uruchomieniu?</h4>
        <p>Zaczynamy od punktu projektowego, ustawiamy przepływy pętli, a następnie obserwujemy zachowanie przy pełnym i częściowym odbiorze. Zbyt wysoka nastawa może powodować szumy, a zbyt niska brak wymaganych wskazań rotametrów na krytycznej pętli.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-source">
        <span class="rk-pump-kicker">Dostępne ciśnienie zamiast metrażu</span>
        <h2>Czy pompa wbudowana w pompę ciepła lub kocioł wystarczy?</h2>
        <p class="rk-pump-lead">Może wystarczyć dla całej instalacji, ale nie da się tego ocenić na podstawie mocy źródła, powierzchni domu ani informacji „pompa 6 m”. Trzeba znać dostępne ciśnienie dyspozycyjne przy wymaganym przepływie.</p>
        <ul class="rk-pump-checklist">
          <li>Odczytaj przepływ wymagany przez źródło w projektowym punkcie pracy.</li>
          <li>Sprawdź charakterystykę pompy dla wybranego trybu oraz biegu.</li>
          <li>Ustal, czy wykres obejmuje już opór wewnętrznego wymiennika i armatury urządzenia.</li>
          <li>Porównaj dostępne ciśnienie z oporem całej krytycznej drogi instalacji.</li>
          <li>Sprawdź minimalny przepływ przy zamykaniu stref oraz tryb odszraniania pompy ciepła.</li>
          <li>Zweryfikuj minimalną aktywną objętość wody i sposób sterowania pompą.</li>
        </ul>
        <h3>Co oznacza ciśnienie dyspozycyjne?</h3>
        <p>To część wysokości podnoszenia pozostająca do wykorzystania przez instalację po uwzględnieniu oporów znajdujących się wewnątrz urządzenia. Jeżeli dokumentacja pokazuje wyłącznie pełną charakterystykę pompy bez oporów wymiennika, trzeba je uwzględnić osobno.</p>
        <p>Zagadnienia współpracy całej instalacji ze źródłem rozwijamy również w działach <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła</a> oraz <a href="https://projekt-ogrzewania.pl/kociol-gazowy/">kocioł gazowy</a>.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-manifolds">
        <span class="rk-pump-kicker">Kilka szafek nie oznacza kilku pomp</span>
        <h2>Jedna pompa, dwa rozdzielacze i dwie kondygnacje</h2>
        <p class="rk-pump-lead">Jedna pompa może obsługiwać kilka rozdzielaczy, jeżeli zapewnia sumaryczny przepływ oraz pokrywa opór najbardziej niekorzystnej drogi. Liczba kondygnacji nie tworzy automatycznie potrzeby osobnej pompy na każde piętro.</p>
        <div class="rk-pump-grid-2">
          <article class="rk-pump-card"><span class="rk-pump-card-number">ΣV̇</span><h3>Wspólny przepływ</h3><p>Na odcinku od pompy do rozgałęzienia płynie suma przepływów obu rozdzielaczy. Po rozgałęzieniu każdy przewód przenosi przepływ własnej części instalacji.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">max Δp</span><h3>Najtrudniejsza droga</h3><p>Wysokość podnoszenia wyznacza obieg o największej sumie oporów od pompy przez magistralę, rozdzielacz i pętlę aż do powrotu.</p></article>
        </div>
        <h3>Kiedy mogą być potrzebne osobne pompy?</h3>
        <p>Osobne obiegi pompowe mogą być uzasadnione przy różnych temperaturach, niezależnych grupach mieszających, dużych różnicach oporów, szczególnej logice strefowej albo hydraulicznym rozdzieleniu obiegu źródła i instalacji. Decyzja wynika ze schematu, a nie z liczby szafek.</p>
        <p>Budowę i wyposażenie belki opisuje poradnik <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacz do ogrzewania podłogowego</a>.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-separation">
        <span class="rk-pump-kicker">Granice obiegu obsługiwanego przez pompę</span>
        <h2>Dobór pompy przy sprzęgle hydraulicznym, buforze i mieszaniu</h2>
        <p class="rk-pump-lead">Sprzęgło lub bufor czterorurowy dzielą instalację na obieg pierwotny i wtórny. Każda pompa ma wtedy własny przepływ oraz własną krytyczną drogę, których nie sumuje się tak, jakby urządzenia pracowały szeregowo.</p>
        <div class="rk-pump-table-wrap">
          <table>
            <thead><tr><th>Układ</th><th>Co obsługuje pompa</th><th>Co należy wliczyć do oporów</th></tr></thead>
            <tbody>
              <tr><td data-label="Układ" class="rk-pump-table-em">Bezpośredni</td><td data-label="Zakres pompy">Źródło i odbiorniki w jednej drodze</td><td data-label="Wliczane opory">Źródło, magistrale, armatura, rozdzielacz i pętla</td></tr>
              <tr><td data-label="Układ" class="rk-pump-table-em">Za sprzęgłem</td><td data-label="Zakres pompy">Wyłącznie wtórna część instalacji</td><td data-label="Wliczane opory">Od sprzęgła przez odbiorniki i z powrotem do sprzęgła</td></tr>
              <tr><td data-label="Układ" class="rk-pump-table-em">Grupa mieszająca</td><td data-label="Zakres pompy">Obieg za zaworem mieszającym</td><td data-label="Wliczane opory">Zawór, rozdzielacz, pętla i przewody tej grupy</td></tr>
              <tr><td data-label="Układ" class="rk-pump-table-em">Bufor szeregowy</td><td data-label="Zakres pompy">Zależy od miejsca wpięcia</td><td data-label="Wliczane opory">Elementy rzeczywiście leżące w zamkniętej drodze pompy</td></tr>
            </tbody>
          </table>
        </div>
        <p>Różnicę pomiędzy tymi rozwiązaniami wyjaśniają osobne opracowania: <a href="https://projekt-ogrzewania.pl/sprzeglo-hydrauliczne-w-instalacji-ogrzewania-podlogowego/">sprzęgło hydrauliczne w ogrzewaniu podłogowym</a> oraz <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła</a>.</p>
        <div class="rk-pump-callout is-yellow"><p><strong>Sprzęgło nie wymusza osobnej pompy dla każdego rozdzielacza.</strong> Jedna pompa wtórna może obsłużyć kilka szafek, jeżeli wynik Q/H i sposób regulacji to potwierdzają.</p></div>
      </section>

      <section class="rk-pump-section" id="rk-pump-diameter">
        <span class="rk-pump-kicker">Prędkość zmienia opór, ale nie jest kawitacją</span>
        <h2>Średnica rury, prędkość przepływu i ryzyko kawitacji</h2>
        <p class="rk-pump-lead">Zmniejszenie średnicy wewnętrznej zwiększa prędkość oraz straty ciśnienia. Może prowadzić do hałasu i braku wymaganego przepływu, ale sama wysoka prędkość w magistrali nie jest jeszcze dowodem kawitacji pompy.</p>
        <div class="rk-pump-formula-box">
          <div><h3>Prędkość w rzeczywistym przekroju</h3><p>Do wzoru wstawiamy przepływ w m³/s oraz średnicę wewnętrzną, nie handlową średnicę zewnętrzną rury. Dwie rury o tym samym wymiarze zewnętrznym mogą mieć inne światło.</p></div>
          <div class="rk-pump-formula">v = 4V̇ / (πd²)<small>v [m/s], V̇ [m³/s], d [m]</small></div>
        </div>
        <h3>Dlaczego mała średnica szybko zwiększa straty?</h3>
        <p>Prędkość rośnie odwrotnie proporcjonalnie do pola przekroju. Większa prędkość zwiększa składnik dynamiczny równania strat, dlatego niewielka redukcja światła może mocno podnieść wymagane H. Dedykowany kalkulator pozwala osobno sprawdzić <a href="https://projekt-ogrzewania.pl/jaka-srednica-rury-zasilajacej-rozdzielacz-w-ukladzie-ogrzewania-podlogowego-kalkulator/">średnicę rury zasilającej rozdzielacz</a>.</p>
        <h3>Kiedy powstaje kawitacja?</h3>
        <p>Kawitacja jest związana ze spadkiem lokalnego ciśnienia do poziomu, przy którym ciecz zaczyna tworzyć pęcherze pary. Znaczenie mają ciśnienie na wlocie pompy, temperatura medium, opory przed pompą i dostępny NPSH. Prędkość w odległej magistrali może pośrednio zwiększać straty, ale nie stanowi samodzielnego kryterium kawitacji.</p>
        <h4>Co sprawdzić przed pompą?</h4>
        <p>Ciśnienie napełnienia, drożność filtra, ustawienie zaworów, odpowietrzenie, temperaturę, średnicę króćców i opory odcinka ssawnego. Hałas pompy nie musi oznaczać kawitacji — może wynikać także z powietrza, zanieczyszczeń, pracy poza zakresem albo przenoszenia drgań.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-balance">
        <span class="rk-pump-kicker">Pompa tworzy warunki, zawory rozdzielają przepływ</span>
        <h2>Pompa obiegowa, rotametry i równoważenie pętli</h2>
        <p class="rk-pump-lead">Pompa zapewnia różnicę ciśnień dla całej sieci, ale nie ustawia automatycznie właściwego przepływu w każdej pętli. Rozdział pomiędzy obwody zależy od ich oporów oraz nastaw zaworów na rozdzielaczu.</p>
        <div class="rk-pump-grid-3">
          <article class="rk-pump-card"><span class="rk-pump-card-number">1</span><h3>Ustaw punkt pompy</h3><p>Wybierz tryb i poziom, które pozwalają uzyskać przepływ całkowity bez niepotrzebnego nadmiaru różnicy ciśnień.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">2</span><h3>Wyreguluj pętle</h3><p>Każdy rotametr ustaw na wartość wynikającą z mocy przypisanej do obwodu i projektowego ΔT.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">3</span><h3>Sprawdź stan częściowy</h3><p>Zamknij wybrane strefy i sprawdź, czy pozostałe pętle nie otrzymują nadmiernego przepływu lub różnicy ciśnień.</p></article>
        </div>
        <h3>Dlaczego wszystkie rotametry nie powinny pokazywać tego samego?</h3>
        <p>Pętle obsługują pomieszczenia o różnym obciążeniu i mogą mieć różne projektowe przepływy. Identyczna nastawa wszystkich wskaźników jest uzasadniona tylko wtedy, gdy wynika z obliczeń, a nie dlatego, że wygląda estetycznie.</p>
        <h3>Dlaczego rotametry nie reagują na zmianę pompy?</h3>
        <p>Przyczyn może być wiele: zamknięte zawory, nieprawidłowy kierunek przepływu, zapowietrzenie, zablokowany filtr, zamknięte siłowniki, zbyt mała dostępna różnica ciśnień, błędna regulacja albo zabrudzony wskaźnik. Sama wymiana pompy na większą nie jest prawidłową diagnozą. Zobacz poradnik <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">jak odczytać i ustawić rotametr</a>.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-diagnostics">
        <span class="rk-pump-kicker">Objaw nie wskazuje jednej przyczyny</span>
        <h2>Objawy zbyt małej i zbyt dużej pompy obiegowej</h2>
        <p class="rk-pump-lead">Wiele objawów może wynikać zarówno z doboru pompy, jak i z zapowietrzenia, brudnego filtra, błędnych nastaw, za małych średnic albo zamkniętej armatury. Diagnostyka powinna opierać się na pomiarach przepływu i różnicy ciśnień.</p>
        <div class="rk-pump-table-wrap">
          <table>
            <thead><tr><th>Objaw</th><th>Możliwa przyczyna hydrauliczna</th><th>Co sprawdzić najpierw</th></tr></thead>
            <tbody>
              <tr><td data-label="Objaw" class="rk-pump-table-em">Brak przepływu w skrajnych pętlach</td><td data-label="Możliwa przyczyna">Za małe H, niezrównoważenie, powietrze lub blokada</td><td data-label="Pierwsza kontrola">Zawory, odpowietrzenie, filtr, punkt Q/H i nastawy</td></tr>
              <tr><td data-label="Objaw" class="rk-pump-table-em">Świst na rozdzielaczu</td><td data-label="Możliwa przyczyna">Nadmierna różnica ciśnień albo dławienie</td><td data-label="Pierwsza kontrola">Tryb pompy, otwarcie zaworów i przepływy pętli</td></tr>
              <tr><td data-label="Objaw" class="rk-pump-table-em">Duża różnica zasilanie–powrót</td><td data-label="Możliwa przyczyna">Za mały przepływ lub zbyt duży odbiór względem nastawy</td><td data-label="Pierwsza kontrola">Moc, ΔT, przepływ sumaryczny i temperatury</td></tr>
              <tr><td data-label="Objaw" class="rk-pump-table-em">Buczenie pompy</td><td data-label="Możliwa przyczyna">Powietrze, zanieczyszczenia, niekorzystny punkt lub drgania</td><td data-label="Pierwsza kontrola">Ciśnienie, odpowietrzenie, filtr i montaż</td></tr>
              <tr><td data-label="Objaw" class="rk-pump-table-em">Wysoki pobór mocy</td><td data-label="Możliwa przyczyna">Wysoka nastawa, duży przepływ albo wysokie opory</td><td data-label="Pierwsza kontrola">Rzeczywisty punkt pracy zamiast arbitralnego limitu W</td></tr>
              <tr><td data-label="Objaw" class="rk-pump-table-em">Częste alarmy przepływu źródła</td><td data-label="Możliwa przyczyna">Zamykanie stref, blokada lub niewłaściwa hydraulika</td><td data-label="Pierwsza kontrola">Minimalny przepływ i logika pracy siłowników</td></tr>
            </tbody>
          </table>
        </div>
        <h3>Separator magnetyczny i jakość wody</h3>
        <p>Ochrona pompy przed magnetytem, osadami i powietrzem powinna wynikać ze składu instalacji oraz wymagań urządzeń. Nie każde sprzęgło pełni funkcję separatora, a inhibitor nie jest dodatkiem uniwersalnym dla wszystkich materiałów. Potrzebne są prawidłowe płukanie, przygotowanie wody i urządzenia dobrane do realnego zagrożenia. Więcej informacji zawiera poradnik o <a href="https://projekt-ogrzewania.pl/separator-zanieczyszczen-i-powietrza-w-ogrzewaniu-podlogowym-dobor-schemat-montazu-spadek-cisnienia-i-normy/">separatorze powietrza i zanieczyszczeń</a>.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-example">
        <span class="rk-pump-kicker">Przejrzyste założenia zamiast fikcyjnej awarii</span>
        <h2>Przykład pełnego obliczenia punktu pracy pompy</h2>
        <p class="rk-pump-lead">Rozważmy instalację o mocy 10 kW i projektowym ΔT równym 6 K. Dziesięć pętli pracuje jednocześnie, a analizowana krytyczna pętla ma przepływ 2,5 l/min i długość 90 m przy średnicy wewnętrznej 12 mm.</p>
        <div class="rk-pump-steps">
          <article class="rk-pump-step"><h3>Przepływ całkowity</h3><p>10 / (1,163 × 6) = około 1,43 m³/h, czyli 23,9 l/min w odcinkach wspólnych.</p></article>
          <article class="rk-pump-step"><h3>Przepływ pętli</h3><p>Do obliczenia rury 16 × 2 przyjmujemy jej własne 2,5 l/min, a nie 23,9 l/min całej instalacji.</p></article>
          <article class="rk-pump-step"><h3>Strata pętli</h3><p>Model dla wody około 30°C daje w tym przykładzie około 18,7 kPa na 90 m rury.</p></article>
          <article class="rk-pump-step"><h3>Strata magistrali</h3><p>Przy 1,43 m³/h, 30 m łącznej długości i średnicy wewnętrznej 26 mm otrzymujemy około 8,0 kPa.</p></article>
          <article class="rk-pump-step"><h3>Elementy dodatkowe</h3><p>Do przykładu wpisujemy 12 kPa na rozdzielacz, zawory i elementy należące do sprawdzanej drogi.</p></article>
          <article class="rk-pump-step"><h3>Wymagane H</h3><p>Suma około 38,7 kPa daje 3,94 m. Po jawnej rezerwie 10% punkt wynosi około 1,43 m³/h przy 4,34 m.</p></article>
        </div>
        <div class="rk-pump-callout is-green"><p><strong>To nadal nie jest nazwa pompy.</strong> Wynik 1,43 m³/h i 4,34 m należy nanieść na charakterystykę konkretnego urządzenia. Dopiero krzywa pokaże, czy dany tryb pracy zapewnia wymagany punkt.</p></div>
        <h3>Co zmieni zastosowanie glikolu?</h3>
        <p>Glikol zmienia gęstość, lepkość oraz zdolność przenoszenia ciepła, dlatego zarówno przepływ, jak i straty ciśnienia wymagają korekty dla konkretnego stężenia i temperatury. Kalkulator świadomie nie udaje pełnego modelu mieszaniny — dla glikolu trzeba użyć właściwości deklarowanych dla zastosowanego czynnika.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-mistakes">
        <span class="rk-pump-kicker">Błędy, których nie naprawi większy silnik</span>
        <h2>Najczęstsze błędy przy doborze pompy do podłogówki</h2>
        <div class="rk-pump-grid-4">
          <article class="rk-pump-card"><span class="rk-pump-card-number">01</span><h3>Dobór z metrażu</h3><p>Powierzchnia nie opisuje średnic, długości, armatury ani krytycznego obiegu.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">02</span><h3>Łączenie wartości maksymalnych</h3><p>Maksymalne Q i maksymalne H nie tworzą jednego dostępnego punktu pracy.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">03</span><h3>Liczenie tylko pętli</h3><p>Pomija opory magistrali, źródła, rozdzielacza, filtrów i zaworów.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">04</span><h3>Sumowanie pętli szeregowo</h3><p>Pętle są równoległe; sumujemy ich przepływy, nie wszystkie straty ciśnienia.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">05</span><h3>Dodawanie wysokości piętra</h3><p>W zamkniętym obiegu nie dodajemy kondygnacji wprost do H pompy.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">06</span><h3>Stałe 15–20 kPa armatury</h3><p>Opór elementów zmienia się z przepływem i konstrukcją; potrzebne są dane lub pomiar.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">07</span><h3>Uniwersalny tryb regulacji</h3><p>Stałe ciśnienie nie jest automatycznie właściwe dla każdego schematu i źródła.</p></article>
          <article class="rk-pump-card"><span class="rk-pump-card-number">08</span><h3>Brak uruchomienia</h3><p>Nawet poprawny dobór wymaga płukania, odpowietrzenia, równoważenia i kontroli stanów częściowych.</p></article>
        </div>
        <h3>Dlaczego nie dodajemy „współczynnika starzenia rur”?</h3>
        <p>Rezerwę należy opisać jawnie i uzasadnić. Zamiast nieokreślonego współczynnika uwzględniamy rzeczywiste opory filtrów, zaworów, zabrudzenia przewidywane przez projekt oraz rozsądną rezerwę procentową. Ukryty zapas utrudnia późniejszą weryfikację.</p>
      </section>

      <section class="rk-pump-section" id="rk-pump-checklist">
        <span class="rk-pump-kicker">Procedura przed zakupem i uruchomieniem</span>
        <h2>Checklista doboru pompy obiegowej krok po kroku</h2>
        <p class="rk-pump-lead">Dobór powinien być możliwy do odtworzenia przez inną osobę. Każda przyjęta wartość musi mieć źródło: obliczenie, dokumentację urządzenia albo pomiar.</p>
        <div class="rk-pump-steps">
          <article class="rk-pump-step"><h3>Ustal moc i ΔT</h3><p>Przyjmij projektową moc obsługiwanego obiegu oraz różnicę temperatur właściwą dla tego układu.</p></article>
          <article class="rk-pump-step"><h3>Wyznacz przepływy</h3><p>Oblicz przepływ całkowity i przypisz osobne wartości wszystkim pętlom lub grupom odbiorników.</p></article>
          <article class="rk-pump-step"><h3>Rozrysuj drogę pompy</h3><p>Zaznacz każdy element od tłoczenia przez obieg aż do powrotu na króciec ssawny.</p></article>
          <article class="rk-pump-step"><h3>Policz krytyczny obieg</h3><p>Porównaj wszystkie możliwe drogi przy właściwych przepływach i wybierz największą sumę strat.</p></article>
          <article class="rk-pump-step"><h3>Wyznacz punkt Q/H</h3><p>Przelicz sumę kPa na metry podnoszenia i dodaj tylko jawną, uzasadnioną rezerwę.</p></article>
          <article class="rk-pump-step"><h3>Sprawdź krzywą</h3><p>Zweryfikuj wymagany punkt na charakterystyce rozważanego urządzenia i wybranego trybu.</p></article>
          <article class="rk-pump-step"><h3>Uruchom i wyreguluj</h3><p>Wypłucz oraz odpowietrz instalację, ustaw rotametry i sprawdź pełny oraz częściowy odbiór.</p></article>
          <article class="rk-pump-step"><h3>Zapisz nastawy</h3><p>Udokumentuj przepływy, tryb pompy, ustawienie, temperatury oraz wyniki kontroli odbiorowej.</p></article>
        </div>
        <div class="rk-pump-callout"><p><strong>Przy kilku pompach wykonaj checklistę osobno dla każdej z nich.</strong> Pompa obiegu źródła, pompa za sprzęgłem i pompa grupy mieszającej mają różne drogi, przepływy i wymagane wysokości podnoszenia.</p></div>
      </section>

      <section class="rk-pump-section" id="rk-pump-faq">
        <span class="rk-pump-kicker">Najczęstsze pytania inwestorów i instalatorów</span>
        <h2>FAQ — dobór pompy obiegowej do ogrzewania podłogowego</h2>
        <div class="rk-pump-faq">
          <details><summary>Jaka pompa obiegowa do 100 m² podłogówki?</summary><div class="rk-pump-faq-answer"><p>Nie można dobrać jej wyłącznie z powierzchni. Trzeba znać przepływ wynikający z mocy i ΔT oraz opór krytycznej drogi obejmującej magistralę, rozdzielacz, pętlę, armaturę i ewentualnie źródło.</p></div></details>
          <details><summary>Pompa 25-40 czy 25-60 do ogrzewania podłogowego?</summary><div class="rk-pump-faq-answer"><p>Wybór zależy od wymaganego punktu Q/H i rzeczywistych krzywych obu urządzeń. Jeśli instalacja potrzebuje 1,5 m³/h przy 4,3 m, trzeba sprawdzić, która pompa osiąga jednocześnie te wartości w odpowiednim trybie.</p></div></details>
          <details><summary>Co oznacza symbol 25-60 na pompie?</summary><div class="rk-pump-faq-answer"><p>W typowym oznaczeniu 25 odnosi się do wielkości przyłącza, a 60 do maksymalnej wysokości podnoszenia około 6 m. Nie oznacza to jednak 6 m dostępnych przy każdym przepływie.</p></div></details>
          <details><summary>Jak obliczyć przepływ pompy do podłogówki?</summary><div class="rk-pump-faq-answer"><p>Dla wody można użyć wzoru V̇ = P / (1,163 × ΔT), gdzie P jest mocą w kW, a ΔT różnicą temperatur w K. Jeśli projekt podaje przepływy pętli, należy zsumować wartości obwodów pracujących jednocześnie.</p></div></details>
          <details><summary>Jak obliczyć wysokość podnoszenia pompy?</summary><div class="rk-pump-faq-answer"><p>Sumuje się straty ciśnienia na krytycznej zamkniętej drodze przy przepływie projektowym. Dla wody wynik w kPa można orientacyjnie podzielić przez 9,81, aby otrzymać metry słupa wody.</p></div></details>
          <details><summary>Czy wysokość domu zwiększa wysokość podnoszenia?</summary><div class="rk-pump-faq-answer"><p>Nie dodaje się jej wprost w prawidłowo napełnionej instalacji zamkniętej, ponieważ słupy zasilania i powrotu się równoważą. Wysokość ma znaczenie dla ciśnienia napełnienia i naczynia przeponowego.</p></div></details>
          <details><summary>Czy najdłuższa pętla zawsze jest krytyczna?</summary><div class="rk-pump-faq-answer"><p>Nie. Strata zależy również od przepływu, średnicy, dobiegów, armatury i rozdzielacza. Każdą drogę należy policzyć przy jej projektowym przepływie.</p></div></details>
          <details><summary>Czy pompa wbudowana w pompę ciepła wystarczy?</summary><div class="rk-pump-faq-answer"><p>Może wystarczyć, jeżeli przy wymaganym przepływie pozostawia ciśnienie dyspozycyjne większe od oporu krytycznej drogi instalacji oraz spełnia wymagania minimalnego przepływu źródła.</p></div></details>
          <details><summary>Czy potrzebna jest osobna pompa na każdy rozdzielacz?</summary><div class="rk-pump-faq-answer"><p>Nie automatycznie. Jedna pompa może obsłużyć kilka rozdzielaczy, jeśli zapewnia przepływ sumaryczny oraz pokrywa opór najbardziej niekorzystnego obiegu.</p></div></details>
          <details><summary>Jaki tryb pompy do podłogówki: stały czy proporcjonalny?</summary><div class="rk-pump-faq-answer"><p>Zależy to od topologii, zaworów, automatyki strefowej i wymagań źródła. Stałe ciśnienie bywa użyteczne przy zamykanych pętlach, ale nie jest jedynym poprawnym trybem dla każdej instalacji.</p></div></details>
          <details><summary>Dlaczego rotametry nie pokazują wymaganego przepływu?</summary><div class="rk-pump-faq-answer"><p>Przyczyną może być zbyt mała różnica ciśnień, zapowietrzenie, filtr, zamknięte zawory, siłowniki, błędny kierunek przepływu, zabrudzenie rotametrów albo niewłaściwe równoważenie. Najpierw potrzebna jest diagnostyka, nie większa pompa.</p></div></details>
          <details><summary>Czy większa pompa obiegowa zużywa zawsze więcej prądu?</summary><div class="rk-pump-faq-answer"><p>Pobór zależy od punktu i sposobu regulacji. Pompa elektroniczna może ograniczać obroty, ale przewymiarowanie może przesunąć pracę poza korzystny zakres oraz powodować zbędną różnicę ciśnień.</p></div></details>
          <details><summary>Czy wysoka prędkość w rurze oznacza kawitację?</summary><div class="rk-pump-faq-answer"><p>Nie automatycznie. Wysoka prędkość zwiększa straty i może powodować hałas. Kawitacja zależy od lokalnego ciśnienia, temperatury medium oraz warunków NPSH na wlocie pompy.</p></div></details>
          <details><summary>Czy kalkulator uwzględnia glikol?</summary><div class="rk-pump-faq-answer"><p>Nie. Model przyjmuje właściwości wody około 30°C. Dla glikolu należy zastosować gęstość, lepkość i pojemność cieplną właściwe dla konkretnego rodzaju, stężenia oraz temperatury mieszaniny.</p></div></details>
        </div>
      </section>

      <section class="rk-pump-section" id="rk-pump-sources">
        <span class="rk-pump-kicker">Neutralne źródła techniczne</span>
        <h2>Źródła i podstawa techniczna opracowania</h2>
        <div class="rk-pump-sources">
          <strong>Materiały wykorzystane do weryfikacji metodyki:</strong>
          <ul>
            <li><a href="https://betterbuildingssolutioncenter.energy.gov/better-plants/pumps" target="_blank" rel="noopener nofollow">U.S. Department of Energy — poprawa pracy systemów pompowych i analiza krzywych</a>.</li>
            <li><a href="https://qsel.columbia.edu/assets/uploads/blog/2016/publications/hydronic-system.pdf" target="_blank" rel="noopener nofollow">Columbia University — punkt pracy oraz zachowanie układów hydronicznych</a>.</li>
            <li><a href="https://facilities.upenn.edu/sites/default/files/pdfs/232000_-_hvac_pumps.pdf" target="_blank" rel="noopener nofollow">University of Pennsylvania — krzywe pomp, punkt pracy i warunki NPSH układów otwartych</a>.</li>
            <li><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="noopener nofollow">ISO 11855-3:2021 — projektowanie i wymiarowanie wodnych systemów powierzchniowych</a>.</li>
            <li><a href="https://eur-lex.europa.eu/eli/reg/2009/641/oj/eng" target="_blank" rel="noopener nofollow">EUR-Lex — rozporządzenie dotyczące wymagań ekoprojektu dla bezdławnicowych pomp obiegowych</a>.</li>
            <li><a href="https://www.din.de/de/meta/suche/62730%21search?query=DIN+1988" target="_blank" rel="noopener nofollow">DIN — zakres serii DIN 1988 dotyczący instalacji wody pitnej</a>.</li>
          </ul>
          <p>Charakterystykę, dopuszczalne medium, zakres temperatur, wymagany minimalny przepływ i sposób regulacji trzeba zawsze potwierdzić w dokumentacji konkretnego urządzenia. Artykuł nie rekomenduje producenta ani modelu.</p>
          <div class="rk-pump-update">Weryfikacja i aktualizacja techniczna: 30 sierpnia 2026 r.</div>
        </div>
      </section>

      <section class="rk-pump-author" aria-labelledby="rk-pump-author-title">
        <input type="radio" name="rk-pump-author-tabs" id="rk-pump-author-about" checked>
        <input type="radio" name="rk-pump-author-tabs" id="rk-pump-author-exp">
        <input type="radio" name="rk-pump-author-tabs" id="rk-pump-author-sites">
        <div class="rk-pump-author-head">
          <div><span class="rk-pump-eyebrow"><b></b> Autor opracowania</span><h2 id="rk-pump-author-title">Robert Kucharski</h2><p>Projektant instalacji ogrzewania podłogowego</p></div>
          <span class="rk-pump-author-mark">PROJEKT-OGRZEWANIA.PL</span>
        </div>
        <div class="rk-pump-author-layout">
          <aside class="rk-pump-author-side">
            <div class="rk-pump-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — autor Projekt-Ogrzewania.pl" width="300" height="300" loading="lazy" decoding="async"></div>
            <a class="rk-pump-author-name" href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a>
            <div class="rk-pump-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
            <div class="rk-pump-author-social-label">Znajdź autora</div>
            <div class="rk-pump-author-social">
              <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener nofollow me" aria-label="Robert Kucharski na LinkedIn"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4.98 3.5A2.5 2.5 0 1 1 5 8.5a2.5 2.5 0 0 1-.02-5zM3 9h4v12H3zM9 9h3.83v1.64h.06c.53-1.01 1.84-2.08 3.78-2.08C20.71 8.56 21 11.22 21 14.68V21h-4v-5.61c0-1.34-.03-3.06-1.87-3.06-1.87 0-2.16 1.46-2.16 2.96V21H9z"></path></svg></a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="noopener nofollow me" aria-label="Projekt Ogrzewania na Facebooku"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M13.5 22v-9h3l.45-3.5H13.5V7.26c0-1.01.28-1.7 1.74-1.7H17.1V2.43c-.32-.04-1.43-.13-2.72-.13-2.69 0-4.53 1.64-4.53 4.66V9.5H6.8V13h3.05v9z"></path></svg></a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="noopener nofollow me" aria-label="Projekt Ogrzewania w serwisie X"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 2H22l-6.77 7.74L23.2 22h-6.24l-4.89-6.39L6.48 22H3.36l7.26-8.3L2.98 2h6.4l4.42 5.84L18.9 2zm-1.09 17.84h1.72L8.44 4.05H6.6z"></path></svg></a>
            </div>
          </aside>
          <div class="rk-pump-author-main">
            <blockquote class="rk-pump-author-quote"><p>Pompa nie ma „przepchnąć wszystkiego”. Ma osiągnąć obliczony przepływ przy obliczonej różnicy ciśnień, pracując w zakresie, w którym instalację da się cicho i stabilnie wyregulować.</p></blockquote>
            <div class="rk-pump-author-tabs" role="tablist" aria-label="Informacje o autorze">
              <label class="rk-pump-author-tab" for="rk-pump-author-about">O autorze</label>
              <label class="rk-pump-author-tab" for="rk-pump-author-exp">Doświadczenie</label>
              <label class="rk-pump-author-tab" for="rk-pump-author-sites">Portale</label>
            </div>
            <div class="rk-pump-author-panel rk-pump-author-panel-about"><p>Robert Kucharski tworzy projekty wodnego ogrzewania podłogowego oraz techniczne opracowania dotyczące strat ciepła, temperatur, przepływów, oporów instalacji i automatyki. W poradnikach wyraźnie oddziela wstępne oszacowanie od parametrów wymagających dokumentacji wykonawczej.</p></div>
            <div class="rk-pump-author-panel rk-pump-author-panel-exp"><p>Zakres pracy obejmuje rozmieszczenie pętli na rzucie, długości obwodów, przepływy, nastawy rozdzielaczy, dobór średnic i pomp oraz analizę współpracy podłogówki ze źródłem ciepła. Punkt pracy każdej pompy jest powiązany z konkretną drogą hydrauliczną.</p></div>
            <div class="rk-pump-author-panel rk-pump-author-panel-sites"><p>Autor rozwija serwisy poświęcone projektowaniu, budowie, remontom i świadomym decyzjom technicznym.</p><div class="rk-pump-site-links"><a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a><a href="https://remont.biz.pl/" target="_blank" rel="noopener nofollow">Remont.biz.pl</a><a href="https://sobir.pl/" target="_blank" rel="noopener nofollow">Sobir.pl</a></div></div>
          </div>
        </div>
      </section>

      <section class="rk-pump-final-cta rk-pump-sales-cta" aria-labelledby="rk-pump-final-cta-title">
        <span class="rk-pump-eyebrow"><b></b> Projekt zamiast doboru z metrażu</span>
        <h2 id="rk-pump-final-cta-title">Otrzymaj projekt z obliczonymi przepływami, oporami i nastawami</h2>
        <p>Każda pętla otrzyma własny przepływ, rozdzielacz nastawy, a pompa wymagany punkt Q/H. Jeżeli układ potrzebuje sprzęgła, bufora, dodatkowej pompy lub grupy mieszającej, rozwiązanie zostanie pokazane w spójnym schemacie.</p>
        <a class="rk-pump-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt ogrzewania podłogowego</a>
      </section>
    </main>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#article",
      "url": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/",
      "headline": "Dobór pompy obiegowej do ogrzewania podłogowego – przepływ, wysokość podnoszenia i kalkulator",
      "description": "Techniczny poradnik i interaktywny analizator przepływu, wysokości podnoszenia oraz punktu pracy pompy obiegowej w instalacji ogrzewania podłogowego.",
      "inLanguage": "pl-PL",
      "dateModified": "2026-08-30",
      "author": {"@id": "https://projekt-ogrzewania.pl/author/admin3399/#person"},
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "mainEntityOfPage": {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#webpage"},
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"},
      "about": [
        "dobór pompy obiegowej do ogrzewania podłogowego",
        "przepływ pompy obiegowej",
        "wysokość podnoszenia pompy",
        "punkt pracy pompy",
        "krzywa instalacji"
      ],
      "mentions": [
        {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#application"},
        {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#howto"},
        {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#faq"}
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#webpage",
      "url": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/",
      "name": "Dobór pompy obiegowej do ogrzewania podłogowego – kalkulator Q/H",
      "description": "Oblicz przepływ i wysokość podnoszenia pompy do podłogówki oraz porównaj punkt wymagany z charakterystyką urządzenia.",
      "inLanguage": "pl-PL",
      "dateModified": "2026-08-30",
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"},
      "breadcrumb": {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#breadcrumb"},
      "mainEntity": [
        {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#article"},
        {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#application"},
        {"@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#faq"}
      ]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Projekt-Ogrzewania.pl",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Blog",
          "item": "https://projekt-ogrzewania.pl/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Dobór pompy obiegowej do ogrzewania podłogowego",
          "item": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/"
        }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#application",
      "name": "Interaktywny analizator punktu pracy pompy obiegowej",
      "url": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#rk-pump-analyzer",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Narzędzie oblicza przepływ całkowity, straty krytycznej drogi, wymaganą wysokość podnoszenia i porównuje punkt Q/H z czteropunktową charakterystyką pompy.",
      "featureList": [
        "przepływ z mocy i różnicy temperatur",
        "tryb znanego przepływu projektowego",
        "strata krytycznej pętli i magistrali",
        "wykres krzywej instalacji",
        "porównanie z charakterystyką pompy",
        "orientacyjne przecięcie krzywych"
      ],
      "creator": {"@id": "https://projekt-ogrzewania.pl/author/admin3399/#person"}
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#howto",
      "name": "Jak dobrać pompę obiegową do ogrzewania podłogowego",
      "description": "Procedura od ustalenia mocy i przepływów po sprawdzenie punktu Q/H, uruchomienie oraz zapis nastaw.",
      "inLanguage": "pl-PL",
      "totalTime": "PT45M",
      "step": [
        {"@type": "HowToStep", "position": 1, "name": "Ustal moc i różnicę temperatur", "text": "Przyjmij projektową moc obsługiwanego obiegu oraz różnicę temperatur właściwą dla instalacji."},
        {"@type": "HowToStep", "position": 2, "name": "Wyznacz przepływy", "text": "Oblicz przepływ całkowity i przypisz osobne wartości pętlom lub grupom odbiorników."},
        {"@type": "HowToStep", "position": 3, "name": "Rozrysuj drogę pompy", "text": "Zaznacz każdy element od tłoczenia przez obieg aż do powrotu na króciec ssawny."},
        {"@type": "HowToStep", "position": 4, "name": "Policz krytyczny obieg", "text": "Porównaj możliwe drogi przy właściwych przepływach i wybierz największą sumę strat."},
        {"@type": "HowToStep", "position": 5, "name": "Wyznacz punkt Q/H", "text": "Przelicz sumę strat w kPa na metry podnoszenia i dodaj tylko jawną, uzasadnioną rezerwę."},
        {"@type": "HowToStep", "position": 6, "name": "Sprawdź krzywą pompy", "text": "Zweryfikuj wymagany punkt na charakterystyce rozważanego urządzenia i wybranego trybu."},
        {"@type": "HowToStep", "position": 7, "name": "Uruchom i wyreguluj", "text": "Wypłucz i odpowietrz instalację, ustaw rotametry oraz sprawdź pełny i częściowy odbiór."},
        {"@type": "HowToStep", "position": 8, "name": "Zapisz nastawy", "text": "Udokumentuj przepływy, tryb pompy, ustawienie, temperatury i wyniki kontroli."}
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/#faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Jaka pompa obiegowa do 100 m² podłogówki?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie można dobrać jej wyłącznie z powierzchni. Trzeba znać przepływ wynikający z mocy i różnicy temperatur oraz opór krytycznej drogi obejmującej magistralę, rozdzielacz, pętlę, armaturę i ewentualnie źródło."}
        },
        {
          "@type": "Question",
          "name": "Pompa 25-40 czy 25-60 do ogrzewania podłogowego?",
          "acceptedAnswer": {"@type": "Answer", "text": "Wybór zależy od wymaganego punktu Q/H i rzeczywistych krzywych obu urządzeń. Trzeba sprawdzić, która pompa osiąga jednocześnie wymagany przepływ i wysokość w odpowiednim trybie."}
        },
        {
          "@type": "Question",
          "name": "Co oznacza symbol 25-60 na pompie?",
          "acceptedAnswer": {"@type": "Answer", "text": "W typowym oznaczeniu 25 odnosi się do wielkości przyłącza, a 60 do maksymalnej wysokości podnoszenia około 6 m. Nie oznacza to 6 m dostępnych przy każdym przepływie."}
        },
        {
          "@type": "Question",
          "name": "Jak obliczyć przepływ pompy do podłogówki?",
          "acceptedAnswer": {"@type": "Answer", "text": "Dla wody można użyć zależności V̇ = P / (1,163 × ΔT), gdzie P jest mocą w kW, a ΔT różnicą temperatur w K. Jeśli projekt podaje przepływy pętli, należy zsumować wartości obwodów pracujących jednocześnie."}
        },
        {
          "@type": "Question",
          "name": "Jak obliczyć wysokość podnoszenia pompy?",
          "acceptedAnswer": {"@type": "Answer", "text": "Sumuje się straty ciśnienia na krytycznej zamkniętej drodze przy przepływie projektowym. Dla wody wynik w kPa można orientacyjnie podzielić przez 9,81, aby otrzymać metry słupa wody."}
        },
        {
          "@type": "Question",
          "name": "Czy wysokość domu zwiększa wysokość podnoszenia?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie dodaje się jej wprost w prawidłowo napełnionej instalacji zamkniętej, ponieważ słupy zasilania i powrotu się równoważą. Wysokość ma znaczenie dla ciśnienia napełnienia i naczynia przeponowego."}
        },
        {
          "@type": "Question",
          "name": "Czy najdłuższa pętla zawsze jest krytyczna?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie. Strata zależy również od przepływu, średnicy, dobiegów, armatury i rozdzielacza. Każdą drogę należy policzyć przy jej projektowym przepływie."}
        },
        {
          "@type": "Question",
          "name": "Czy pompa wbudowana w pompę ciepła wystarczy?",
          "acceptedAnswer": {"@type": "Answer", "text": "Może wystarczyć, jeżeli przy wymaganym przepływie pozostawia ciśnienie dyspozycyjne większe od oporu krytycznej drogi instalacji oraz spełnia wymagania minimalnego przepływu źródła."}
        },
        {
          "@type": "Question",
          "name": "Czy potrzebna jest osobna pompa na każdy rozdzielacz?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie automatycznie. Jedna pompa może obsłużyć kilka rozdzielaczy, jeśli zapewnia przepływ sumaryczny oraz pokrywa opór najbardziej niekorzystnego obiegu."}
        },
        {
          "@type": "Question",
          "name": "Jaki tryb pompy do podłogówki: stały czy proporcjonalny?",
          "acceptedAnswer": {"@type": "Answer", "text": "Zależy to od topologii, zaworów, automatyki strefowej i wymagań źródła. Stałe ciśnienie bywa użyteczne przy zamykanych pętlach, ale nie jest jedynym poprawnym trybem dla każdej instalacji."}
        },
        {
          "@type": "Question",
          "name": "Dlaczego rotametry nie pokazują wymaganego przepływu?",
          "acceptedAnswer": {"@type": "Answer", "text": "Przyczyną może być zbyt mała różnica ciśnień, zapowietrzenie, filtr, zamknięte zawory, siłowniki, błędny kierunek przepływu, zabrudzenie rotametrów albo niewłaściwe równoważenie. Najpierw potrzebna jest diagnostyka, nie większa pompa."}
        },
        {
          "@type": "Question",
          "name": "Czy większa pompa obiegowa zużywa zawsze więcej prądu?",
          "acceptedAnswer": {"@type": "Answer", "text": "Pobór zależy od punktu i sposobu regulacji. Pompa elektroniczna może ograniczać obroty, ale przewymiarowanie może przesunąć pracę poza korzystny zakres oraz powodować zbędną różnicę ciśnień."}
        },
        {
          "@type": "Question",
          "name": "Czy wysoka prędkość w rurze oznacza kawitację?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie automatycznie. Wysoka prędkość zwiększa straty i może powodować hałas. Kawitacja zależy od lokalnego ciśnienia, temperatury medium oraz warunków NPSH na wlocie pompy."}
        },
        {
          "@type": "Question",
          "name": "Czy kalkulator uwzględnia glikol?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie. Model przyjmuje właściwości wody około 30°C. Dla glikolu należy zastosować gęstość, lepkość i pojemność cieplną właściwe dla konkretnego rodzaju, stężenia oraz temperatury mieszaniny."}
        }
      ]
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/author/admin3399/#person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/author/admin3399/#person"}
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/author/admin3399/#person"}
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/author/admin3399/#person"}
    },
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt-Ogrzewania.pl",
      "inLanguage": "pl-PL",
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"}
    }
  ]
}
</script>

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

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

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

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

  function formatNumber(value,digits){
    if(!isFinite(value)){return "—";}
    return value.toLocaleString("pl-PL",{
      minimumFractionDigits:digits,
      maximumFractionDigits:digits
    });
  }

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

  function setStatus(kind,label,message){
    var status=byId("rk-pump-status");
    if(!status){return;}
    status.className="rk-pump-status";
    if(kind==="warning"){status.className+=" is-warning";}
    if(kind==="alert"){status.className+=" is-alert";}
    while(status.firstChild){status.removeChild(status.firstChild);}
    var strong=document.createElement("strong");
    strong.textContent=label;
    status.appendChild(strong);
    status.appendChild(document.createTextNode(" "+message));
  }

  function frictionLoss(lengthMetres,diameterMillimetres,flowCubicMetresSecond){
    var density=995.7;
    var viscosity=0.000798;
    var roughness=0.0000015;
    var diameter=diameterMillimetres/1000;
    var area=Math.PI*diameter*diameter/4;
    var velocity=flowCubicMetresSecond/area;
    var reynolds=density*velocity*diameter/viscosity;
    var frictionFactor=0;

    if(reynolds>0){
      if(reynolds<2300){
        frictionFactor=64/reynolds;
      }else{
        frictionFactor=0.25/Math.pow(Math.log10(roughness/(3.7*diameter)+5.74/Math.pow(reynolds,0.9)),2);
      }
    }

    var pascals=frictionFactor*(lengthMetres/diameter)*(density*velocity*velocity/2);
    return {
      velocity:velocity,
      reynolds:reynolds,
      frictionFactor:frictionFactor,
      kpa:pascals/1000
    };
  }

  function readCurve(){
    var points=[];
    var i;
    for(i=0;i<4;i+=1){
      points.push({
        q:numberFrom("rk-pump-curve-q"+i),
        h:numberFrom("rk-pump-curve-h"+i)
      });
    }
    return points;
  }

  function curveIsValid(points){
    var i;
    for(i=0;i<points.length;i+=1){
      if(!isFinite(points[i].q)){return false;}
      if(!isFinite(points[i].h)){return false;}
      if(points[i].q<0){return false;}
      if(points[i].h<0){return false;}
      if(i>0){
        if(points[i].q<=points[i-1].q){return false;}
        if(points[i].h>points[i-1].h){return false;}
      }
    }
    return true;
  }

  function pumpHeadAt(flow,points){
    if(flow<points[0].q){return null;}
    if(flow>points[points.length-1].q){return null;}
    var i;
    for(i=1;i<points.length;i+=1){
      if(flow<=points[i].q){
        var span=points[i].q-points[i-1].q;
        var share=(flow-points[i-1].q)/span;
        return points[i-1].h+share*(points[i].h-points[i-1].h);
      }
    }
    return points[points.length-1].h;
  }

  function systemHeadAt(flow,designFlow,designHead){
    if(designFlow<=0){return 0;}
    return designHead*Math.pow(flow/designFlow,2);
  }

  function findIntersection(points,designFlow,designHead){
    var lower=points[0].q;
    if(lower<0){lower=0;}
    var upper=points[points.length-1].q;
    if(upper<=lower){return null;}

    var previousQ=lower;
    var previousPump=pumpHeadAt(previousQ,points);
    var previousDifference=previousPump-systemHeadAt(previousQ,designFlow,designHead);
    var steps=800;
    var i;

    if(previousDifference===0){
      return {q:previousQ,h:previousPump};
    }

    for(i=1;i<=steps;i+=1){
      var currentQ=lower+(upper-lower)*i/steps;
      var currentPump=pumpHeadAt(currentQ,points);
      var currentDifference=currentPump-systemHeadAt(currentQ,designFlow,designHead);

      if(currentDifference===0){
        return {q:currentQ,h:currentPump};
      }

      if(previousDifference*currentDifference<0){
        var weight=Math.abs(previousDifference)/(Math.abs(previousDifference)+Math.abs(currentDifference));
        var crossingQ=previousQ+(currentQ-previousQ)*weight;
        return {
          q:crossingQ,
          h:systemHeadAt(crossingQ,designFlow,designHead)
        };
      }

      previousQ=currentQ;
      previousDifference=currentDifference;
    }
    return null;
  }

  function niceMaximum(value){
    if(!isFinite(value)){return 1;}
    if(value<=0){return 1;}
    if(value<=10){return Math.ceil(value*2)/2;}
    return Math.ceil(value/5)*5;
  }

  function renderChart(designFlow,designHead,points,showCurve,intersection){
    var chartLeft=70;
    var chartRight=660;
    var chartTop=30;
    var chartBottom=360;
    var curveMaximumFlow=0;
    var curveMaximumHead=0;
    var i;

    if(showCurve){
      curveMaximumFlow=points[points.length-1].q;
      for(i=0;i<points.length;i+=1){
        if(points[i].h>curveMaximumHead){curveMaximumHead=points[i].h;}
      }
    }

    var xMaximum=niceMaximum(Math.max(designFlow*1.55,curveMaximumFlow*1.12,0.5));
    var yMaximum=niceMaximum(Math.max(designHead*1.35,curveMaximumHead*1.15,1));

    function xPosition(flow){
      return chartLeft+(chartRight-chartLeft)*flow/xMaximum;
    }

    function yPosition(head){
      return chartBottom-(chartBottom-chartTop)*head/yMaximum;
    }

    for(i=0;i<=5;i+=1){
      setText("rk-pump-x"+i,formatNumber(xMaximum*i/5,1));
      setText("rk-pump-y"+i,formatNumber(yMaximum*i/5,1));
    }

    var systemLimit=xMaximum;
    if(designHead>0){
      var limitFromHeight=designFlow*Math.sqrt(yMaximum/designHead);
      if(limitFromHeight<systemLimit){systemLimit=limitFromHeight;}
    }

    var systemPoints=[];
    var samples=60;
    for(i=0;i<=samples;i+=1){
      var systemFlow=systemLimit*i/samples;
      var systemHead=systemHeadAt(systemFlow,designFlow,designHead);
      systemPoints.push(formatNumber(xPosition(systemFlow),2).replace(",",".")+","+formatNumber(yPosition(systemHead),2).replace(",","."));
    }
    byId("rk-pump-system-line").setAttribute("points",systemPoints.join(" "));

    var designDot=byId("rk-pump-design-dot");
    designDot.setAttribute("cx",String(xPosition(designFlow)));
    designDot.setAttribute("cy",String(yPosition(designHead)));

    var deviceLine=byId("rk-pump-device-line");
    var intersectionDot=byId("rk-pump-intersection-dot");

    if(showCurve){
      var devicePoints=[];
      for(i=0;i<points.length;i+=1){
        devicePoints.push(formatNumber(xPosition(points[i].q),2).replace(",",".")+","+formatNumber(yPosition(points[i].h),2).replace(",","."));
      }
      deviceLine.setAttribute("points",devicePoints.join(" "));
      deviceLine.style.opacity="1";

      if(intersection){
        intersectionDot.setAttribute("cx",String(xPosition(intersection.q)));
        intersectionDot.setAttribute("cy",String(yPosition(intersection.h)));
        intersectionDot.style.opacity="1";
      }else{
        intersectionDot.style.opacity="0";
      }
    }else{
      deviceLine.style.opacity="0";
      intersectionDot.style.opacity="0";
    }
  }

  function setLossBar(id,valueId,value,total){
    var percentage=0;
    if(total>0){percentage=value/total*100;}
    if(percentage<0){percentage=0;}
    if(percentage>100){percentage=100;}
    var bar=byId(id);
    if(bar){bar.style.width=percentage+"%";}
    setText(valueId,formatNumber(value,1)+" kPa");
  }

  function syncModes(){
    var calculationMode=byId("rk-pump-input-mode").value;
    var powerDisabled=calculationMode!=="power";
    byId("rk-pump-input-power").disabled=powerDisabled;
    byId("rk-pump-input-dt").disabled=powerDisabled;
    byId("rk-pump-input-flow").disabled=!powerDisabled;

    var curveEnabled=byId("rk-pump-input-curve-mode").value==="yes";
    var curveInputs=byId("rk-pump-curve-fields").querySelectorAll("input");
    var i;
    for(i=0;i<curveInputs.length;i+=1){
      curveInputs[i].disabled=!curveEnabled;
    }
  }

  function calculate(){
    var calculationMode=byId("rk-pump-input-mode").value;
    var curveEnabled=byId("rk-pump-input-curve-mode").value==="yes";
    var power=numberFrom("rk-pump-input-power");
    var temperatureDifference=numberFrom("rk-pump-input-dt");
    var totalFlow=numberFrom("rk-pump-input-flow");
    var loopCount=numberFrom("rk-pump-input-loops");
    var criticalLoopFlowLitres=numberFrom("rk-pump-input-loop-flow");
    var loopLength=numberFrom("rk-pump-input-loop-length");
    var loopDiameter=numberFrom("rk-pump-input-loop-id");
    var mainLength=numberFrom("rk-pump-input-main-length");
    var mainDiameter=numberFrom("rk-pump-input-main-id");
    var extraLoss=numberFrom("rk-pump-input-extra-loss");
    var margin=numberFrom("rk-pump-input-margin");

    if(calculationMode==="power"){
      if(!isFinite(power)){
        setStatus("alert","Brak wyniku:","wprowadź poprawną projektową moc instalacji.");
        return;
      }
      if(!isFinite(temperatureDifference)){
        setStatus("alert","Brak wyniku:","wprowadź poprawną projektową różnicę temperatur.");
        return;
      }
      if(power<=0){
        setStatus("alert","Brak wyniku:","projektowa moc musi być większa od zera.");
        return;
      }
      if(temperatureDifference<=0){
        setStatus("alert","Brak wyniku:","różnica temperatur musi być większa od zera.");
        return;
      }
      totalFlow=power/(1.163*temperatureDifference);
      byId("rk-pump-input-flow").value=totalFlow.toFixed(3);
    }

    var basicValues=[totalFlow,loopCount,criticalLoopFlowLitres,loopLength,loopDiameter,mainLength,mainDiameter,extraLoss,margin];
    var i;
    for(i=0;i<basicValues.length;i+=1){
      if(!isFinite(basicValues[i])){
        setStatus("alert","Brak wyniku:","uzupełnij wszystkie pola liczbowymi wartościami.");
        return;
      }
    }

    if(totalFlow<=0){
      setStatus("alert","Brak wyniku:","przepływ całkowity musi być większy od zera.");
      return;
    }
    if(loopCount<1){
      setStatus("alert","Brak wyniku:","liczba czynnych pętli musi wynosić co najmniej jeden.");
      return;
    }
    if(criticalLoopFlowLitres<=0){
      setStatus("alert","Brak wyniku:","przepływ krytycznej pętli musi być większy od zera.");
      return;
    }
    if(loopLength<=0){
      setStatus("alert","Brak wyniku:","długość krytycznej pętli musi być większa od zera.");
      return;
    }
    if(loopDiameter<=0){
      setStatus("alert","Brak wyniku:","średnica wewnętrzna pętli musi być większa od zera.");
      return;
    }
    if(mainLength<0){
      setStatus("alert","Brak wyniku:","długość magistrali nie może być ujemna.");
      return;
    }
    if(mainDiameter<=0){
      setStatus("alert","Brak wyniku:","średnica wewnętrzna magistrali musi być większa od zera.");
      return;
    }
    if(extraLoss<0){
      setStatus("alert","Brak wyniku:","dodatkowe opory nie mogą być ujemne.");
      return;
    }
    if(margin<0){
      setStatus("alert","Brak wyniku:","rezerwa nie może być ujemna.");
      return;
    }

    var totalFlowLitres=totalFlow*1000/60;
    if(criticalLoopFlowLitres>totalFlowLitres){
      setStatus("alert","Niespójne dane:","przepływ jednej pętli nie może być większy od przepływu całej instalacji.");
      return;
    }

    var loopFlowCubicMetresSecond=criticalLoopFlowLitres/60000;
    var mainFlowCubicMetresSecond=totalFlow/3600;
    var loopResult=frictionLoss(loopLength,loopDiameter,loopFlowCubicMetresSecond);
    var mainResult=frictionLoss(mainLength,mainDiameter,mainFlowCubicMetresSecond);
    var totalLoss=loopResult.kpa+mainResult.kpa+extraLoss;
    var requiredHead=totalLoss/9.81*(1+margin/100);
    var averageLoopFlow=totalFlowLitres/loopCount;

    setText("rk-pump-result-flow",formatNumber(totalFlow,2)+" m³/h");
    setText("rk-pump-result-head",formatNumber(requiredHead,2)+" m");
    setText("rk-pump-result-flow-litres",formatNumber(totalFlowLitres,2)+" l/min");
    setText("rk-pump-result-average-loop",formatNumber(averageLoopFlow,2)+" l/min");
    setText("rk-pump-result-loop-velocity",formatNumber(loopResult.velocity,2)+" m/s");
    setText("rk-pump-result-main-velocity",formatNumber(mainResult.velocity,2)+" m/s");
    setText("rk-pump-result-loop-loss",formatNumber(loopResult.kpa,1)+" kPa");
    setText("rk-pump-result-main-loss",formatNumber(mainResult.kpa,1)+" kPa");
    setText("rk-pump-result-total-loss",formatNumber(totalLoss,1)+" kPa");
    setText("rk-pump-result-point",formatNumber(totalFlow,2)+" / "+formatNumber(requiredHead,2));

    setLossBar("rk-pump-bar-loop","rk-pump-bar-loop-value",loopResult.kpa,totalLoss);
    setLossBar("rk-pump-bar-main","rk-pump-bar-main-value",mainResult.kpa,totalLoss);
    setLossBar("rk-pump-bar-extra","rk-pump-bar-extra-value",extraLoss,totalLoss);

    var points=readCurve();
    var validCurve=true;
    var intersection=null;
    var availableHead=null;

    if(curveEnabled){
      validCurve=curveIsValid(points);
      if(validCurve){
        availableHead=pumpHeadAt(totalFlow,points);
        intersection=findIntersection(points,totalFlow,requiredHead);
      }
    }

    if(curveEnabled){
      if(validCurve){
        if(availableHead===null){
          setText("rk-pump-result-device-head","poza zakresem Q");
        }else{
          setText("rk-pump-result-device-head",formatNumber(availableHead,2)+" m");
        }
        if(intersection){
          setText("rk-pump-result-intersection",formatNumber(intersection.q,2)+" / "+formatNumber(intersection.h,2));
        }else{
          setText("rk-pump-result-intersection","brak w zakresie");
        }
      }else{
        setText("rk-pump-result-device-head","nieprawidłowa krzywa");
        setText("rk-pump-result-intersection","—");
      }
    }else{
      setText("rk-pump-result-device-head","nie sprawdzano");
      setText("rk-pump-result-intersection","nie sprawdzano");
    }

    var showCurve=false;
    if(curveEnabled){showCurve=validCurve;}
    renderChart(totalFlow,requiredHead,points,showCurve,intersection);

    var velocityNote="";
    if(loopResult.velocity>0.6){
      velocityNote+=" Prędkość w krytycznej pętli jest wysoka dla typowej instalacji mieszkaniowej; sprawdź hałas i opory.";
    }
    if(mainResult.velocity>1){
      velocityNote+=" Prędkość w magistrali wymaga sprawdzenia pod kątem hałasu i strat ciśnienia.";
    }

    if(!curveEnabled){
      setStatus("normal","Wymagany punkt:","obliczono Q i H instalacji. Aby ocenić urządzenie, włącz porównanie i wpisz punkty z jego rzeczywistej charakterystyki."+velocityNote);
      return;
    }

    if(!validCurve){
      setStatus("alert","Nieprawidłowa charakterystyka:","wartości Q muszą rosnąć, a H nie może rosnąć pomiędzy kolejnymi punktami. Wpisz cztery punkty z jednego biegu lub trybu pompy.");
      return;
    }

    if(availableHead===null){
      setStatus("alert","Punkt poza zakresem:","wymagany przepływ nie mieści się pomiędzy skrajnymi wartościami Q wprowadzonej charakterystyki. Uzupełnij szerszy zakres danych lub sprawdź inne ustawienie pompy."+velocityNote);
      return;
    }

    if(availableHead<requiredHead*0.95){
      setStatus("alert","Niewystarczająca charakterystyka:","przy wymaganym przepływie wprowadzona krzywa daje za małą wysokość podnoszenia. Rozważ inne ustawienie lub urządzenie dopiero po sprawdzeniu wszystkich oporów."+velocityNote);
      return;
    }

    if(availableHead<requiredHead*1.08){
      setStatus("warning","Wynik graniczny:","krzywa przechodzi bardzo blisko wymaganego punktu. Potwierdź dokładny wykres producenta, tolerancje, opory urządzeń i stan częściowego odbioru."+velocityNote);
      return;
    }

    setStatus("normal","Wstępna zgodność:","wprowadzona charakterystyka osiąga wymagany punkt Q/H. Ostateczny dobór wymaga potwierdzenia właściwego trybu, sprawności, minimalnego przepływu źródła i pracy po regulacji."+velocityNote);
  }

  var inputIds=[
    "rk-pump-input-mode",
    "rk-pump-input-power",
    "rk-pump-input-dt",
    "rk-pump-input-flow",
    "rk-pump-input-loops",
    "rk-pump-input-loop-flow",
    "rk-pump-input-loop-length",
    "rk-pump-input-loop-id",
    "rk-pump-input-main-length",
    "rk-pump-input-main-id",
    "rk-pump-input-extra-loss",
    "rk-pump-input-margin",
    "rk-pump-input-curve-mode",
    "rk-pump-curve-q0",
    "rk-pump-curve-h0",
    "rk-pump-curve-q1",
    "rk-pump-curve-h1",
    "rk-pump-curve-q2",
    "rk-pump-curve-h2",
    "rk-pump-curve-q3",
    "rk-pump-curve-h3"
  ];
  var initialValues={};
  var i;
  for(i=0;i<inputIds.length;i+=1){
    initialValues[inputIds[i]]=byId(inputIds[i]).value;
  }

  function resetCalculator(){
    var index;
    for(index=0;index<inputIds.length;index+=1){
      byId(inputIds[index]).value=initialValues[inputIds[index]];
    }
    syncModes();
    calculate();
  }

  var interactiveFields=root.querySelectorAll("input, select");
  for(i=0;i<interactiveFields.length;i+=1){
    interactiveFields[i].addEventListener("change",function(){
      syncModes();
      calculate();
    });
    interactiveFields[i].addEventListener("input",function(){
      calculate();
    });
  }

  byId("rk-pump-calculate").addEventListener("click",calculate);
  byId("rk-pump-reset").addEventListener("click",resetCalculator);

  function updateProgress(){
    var progress=byId("rk-pump-progress");
    if(!progress){return;}
    var rectangle=root.getBoundingClientRect();
    var start=window.pageYOffset+rectangle.top;
    var length=root.offsetHeight-window.innerHeight;
    var travelled=window.pageYOffset-start;
    var percentage=0;
    if(length>0){percentage=travelled/length*100;}
    if(percentage<0){percentage=0;}
    if(percentage>100){percentage=100;}
    progress.style.width=percentage+"%";
  }

  window.addEventListener("scroll",updateProgress,{passive:true});
  window.addEventListener("resize",updateProgress);

  syncModes();
  calculate();
  updateProgress();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">Kalkulator doboru pompy obiegowej w ogrzewaniu podłogowym.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Projektowe Obciążenie Cieplne (OZC).</title>
		<link>https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 15 Feb 2026 12:02:50 +0000</pubDate>
				<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[OZC]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[efektywność pompy ciepła]]></category>
		<category><![CDATA[instalacja co projekt]]></category>
		<category><![CDATA[normy pn en 12831]]></category>
		<category><![CDATA[obliczenia ozc]]></category>
		<category><![CDATA[ogrzewanie podłogowe parametry]]></category>
		<category><![CDATA[ogrzewanie podłogowe projekt]]></category>
		<category><![CDATA[ozc]]></category>
		<category><![CDATA[pompa ciepła projekt]]></category>
		<category><![CDATA[projekt instalacji grzewczej]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[projektowe obciążenie cieplne]]></category>
		<category><![CDATA[rozstaw rur podłogówki]]></category>
		<category><![CDATA[straty ciepła]]></category>
		<category><![CDATA[strumień ciepła podłogówka]]></category>
		<category><![CDATA[zapotrzebowanie na ciepło]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3460</guid>

					<description><![CDATA[<p>Wiele instalacji grzewczych powstaje na podstawie przybliżeń, a nie rzeczywistych danych, co prowadzi do wysokich rachunków i problemów z komfortem cieplnym. Tymczasem Projektowe Obciążenie Cieplne (OZC) to kluczowy element, który pozwala precyzyjnie określić, ile energii potrzebuje Twój dom, aby utrzymać komfort nawet podczas największych mrozów. Od tej wartości zależy dobór rozstawu rur, temperatura zasilania oraz efektywność pompy ciepła. W tym artykule pokazujemy krok po kroku, jak OZC wpływa na projekt ogrzewania podłogowego i dlaczego jego prawidłowe obliczenie decyduje o trwałości, oszczędności i niezawodności całego systemu.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">Projektowe Obciążenie Cieplne (OZC).</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #0f172a;
    --rk-intro-blue: #0284c7;
    --rk-intro-blue-light: #e0f2fe;
    --rk-intro-green: #059669;
    --rk-intro-green-bg: #ecfdf5;
    --rk-intro-red: #dc2626;
    --rk-intro-red-bg: #fef2f2;
    --rk-intro-gold: #d97706;
    --rk-intro-gold-bg: #fffbeb;
    --rk-intro-gray: #64748b;
    --rk-intro-border: #cbd5e1;
    --rk-intro-bg: #ffffff;
}

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

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

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

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

.rk-intro-title span { color: #38bdf8; }

/* Typografia Wstępu */
.rk-intro-lead {
    font-size: 17px;
    line-height: 1.8;
    color: #e2e8f0;
    margin: 0;
    font-weight: 400;
}

.rk-intro-lead strong {
    color: #ffffff;
    font-weight: 800;
    background: rgba(2, 132, 199, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

.rk-intro-link {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: all 0.3s;
}

.rk-intro-link:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Symulator Interaktywny */
.rk-intro-interactive {
    padding: 45px 50px;
    background: #f8fafc;
}

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

/* Przełącznik */
.rk-switcher-box {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-app-toggle {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 550px;
}

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

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

.rk-toggle-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-intro-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-toggle[data-mode="pro"] .rk-toggle-glider {
    transform: translateX(100%);
    background: var(--rk-intro-green);
}

/* Dashboard Wyników */
.rk-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 2px solid var(--rk-intro-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 180px 1fr;
    gap: 40px;
    align-items: center;
    transition: all 0.4s ease;
}

.rk-dashboard.mode-amateur {
    border-color: var(--rk-intro-red-bg);
    box-shadow: 0 15px 35px -10px rgba(220, 38, 38, 0.12);
}

.rk-dashboard.mode-pro {
    border-color: var(--rk-intro-green-bg);
    box-shadow: 0 15px 35px -10px rgba(5, 150, 105, 0.12);
}

/* SVG Animacje */
.rk-svg-stage {
    width: 100%;
    max-width: 180px;
    margin: 0 auto;
    background: var(--rk-intro-dark);
    border-radius: 16px;
    padding: 20px;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    position: relative;
    overflow: hidden;
}

.rk-svg-stage svg {
    width: 100%;
    height: auto;
    display: block;
}

/* Animacje wspólne i specyficzne */
.anim-house { transition: fill 0.5s; }
.anim-thermometer-fill { transform-origin: bottom; transition: transform 1s cubic-bezier(0.4, 0, 0.2, 1), fill 0.5s; }
.anim-coin { opacity: 0; transition: opacity 0.3s, transform 0.5s; }

.mode-amateur .anim-house { fill: #334155; }
.mode-amateur .anim-thermometer-fill { transform: scaleY(0.3); fill: var(--rk-intro-blue); }
.mode-amateur .anim-coin { animation: coinDrop 1.5s infinite linear; }
.mode-amateur .anim-coin:nth-child(2) { animation-delay: 0.5s; }
.mode-amateur .anim-coin:nth-child(3) { animation-delay: 1s; }

.mode-pro .anim-house { fill: #1e293b; stroke: var(--rk-intro-green); stroke-width: 2; animation: shieldPulse 2s infinite alternate; }
.mode-pro .anim-thermometer-fill { transform: scaleY(0.85); fill: var(--rk-intro-green); }
.mode-pro .anim-coin { opacity: 1; transform: translateY(0); fill: var(--rk-intro-gold); }

@keyframes coinDrop {
    0% { opacity: 0; transform: translateY(-20px); fill: #ef4444; }
    20% { opacity: 1; }
    80% { opacity: 1; }
    100% { opacity: 0; transform: translateY(30px); fill: #ef4444; }
}

@keyframes shieldPulse {
    0% { filter: drop-shadow(0 0 0 rgba(5, 150, 105, 0)); }
    100% { filter: drop-shadow(0 0 10px rgba(5, 150, 105, 0.4)); }
}

/* Kafelki z danymi */
.rk-data-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-tile {
    background: #f1f5f9;
    padding: 20px;
    border-radius: 16px;
    border-left: 4px solid transparent;
    transition: all 0.3s ease;
}

.mode-amateur .rk-tile { border-left-color: var(--rk-intro-red); background: var(--rk-intro-red-bg); }
.mode-pro .rk-tile { border-left-color: var(--rk-intro-green); background: var(--rk-intro-green-bg); }

.rk-tile-label {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 6px;
}

.rk-tile-value {
    display: block;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-intro-dark);
}

.rk-tile-sub {
    display: block;
    font-size: 13px;
    color: #94a3b8;
    margin-top: 4px;
    font-weight: 500;
}

@media (max-width: 768px) {
    .rk-intro-header, .rk-intro-interactive { padding: 35px 25px; }
    .rk-intro-title { font-size: 26px; }
    .rk-dashboard { grid-template-columns: 1fr; text-align: center; padding: 25px; gap: 25px; }
    .rk-svg-stage { max-width: 140px; margin-bottom: 10px; }
    .rk-data-grid { grid-template-columns: 1fr; gap: 12px; }
    .rk-toggle-btn { padding: 12px 10px; font-size: 13px; flex-direction: column; gap: 4px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Projektowe Obciążenie Cieplne (OZC) – Fundament Inwestycji",
    "description": "Czym jest Projektowe Obciążenie Cieplne (OZC) wg normy PN-EN 12831? Zobacz, dlaczego ten parametr decyduje o kosztach pompy ciepła i bezawaryjności podłogówki.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-wstep",
    "name": "Porównanie metod doboru mocy grzewczej budynku",
    "description": "Zestawienie ryzyk i kosztów związanych z doborem instalacji grzewczej szacunkowo ('na oko') w kontraście do rzetelnych inżynierskich obliczeń normatywnych OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne ozc",
      "norma PN-EN 12831",
      "moc pompy ciepła",
      "rozstaw rur podłogówki",
      "koszty eksploatacji budynku"
    ],
    "measurementTechnique": "Analiza wpływu precyzyjnych obliczeń strat ciepła na redukcję przewymiarowania źródła ciepła oraz optymalizację kosztów operacyjnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dobór na oko (szacunkowy): Zwiększa koszty inwestycyjne przez zakup zbyt dużej pompy ciepła oraz podnosi rachunki za prąd z powodu taktowania.",
        "Obliczenia OZC (PN-EN 12831): Optymalizują moc urządzenia, gwarantując najniższe koszty i komfort nawet podczas skrajnych mrozów."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-wstep",
    "name": "Symulator Wpływu OZC na Inwestycję",
    "description": "Interaktywny widżet demonstracyjny obrazujący konsekwencje finansowe i techniczne pominięcia obliczeń Projektowego Obciążenia Cieplnego (OZC) podczas budowy.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-intro-container" id="rk-ozc-intro-app">
    <!-- Wstęp Merytoryczny -->
    <div class="rk-intro-header">
        <div class="rk-intro-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
            Fundament Instalacji
        </div>
        <h2 class="rk-intro-title">Projektowe Obciążenie Cieplne <span>(OZC)</span></h2>
        <p class="rk-intro-lead">
            To kluczowy parametr inżynieryjny definiowany przez <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" class="rk-intro-link">normę PN-EN 12831</a>, określający maksymalną ilość energii cieplnej, jaką należy dostarczyć do budynku w ciągu sekundy (wyrażaną w watach lub kilowatach), aby utrzymać zadaną temperaturę wewnętrzną podczas skrajnie niskich temperatur zewnętrznych.
            <br><br>
            Prawidłowo obliczone <strong>OZC stanowi absolutny fundament projektowania</strong> systemów grzewczych. To ono decyduje o mocy <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-intro-link">pompy ciepła</a>, dokładnym <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-intro-link">rozstawie rur ogrzewania podłogowego</a> oraz rzeczywistych kosztach eksploatacji budynku przez dziesięciolecia.
        </p>
    </div>

    <!-- Symulator Interaktywny -->
    <div class="rk-intro-interactive">
        <h3 class="rk-intro-section-title">Dlaczego ignorowanie OZC to najdroższy błąd inwestora?</h3>
        
        <div class="rk-switcher-box">
            <div class="rk-app-toggle" id="introSwitchContainer" data-mode="amateur">
                <div class="rk-toggle-glider" id="introGlider"></div>
                <button class="rk-toggle-btn active" data-target="amateur">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    Dobór &#8222;Na oko&#8221;
                </button>
                <button class="rk-toggle-btn" data-target="pro">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    Projekt OZC (PN-EN)
                </button>
            </div>
        </div>

        <div class="rk-dashboard mode-amateur" id="introDashboard">
            <div class="rk-svg-stage">
                <!-- SVG: Dom + Termometr + Pieniądze -->
                <svg viewBox="0 0 100 100">
                    <!-- Dom -->
                    <path class="anim-house" d="M 10 50 L 50 15 L 90 50 L 90 90 L 10 90 Z" fill="#334155" />
                    <rect x="40" y="60" width="20" height="30" fill="#0f172a" />
                    <!-- Termometr -->
                    <rect x="20" y="30" width="8" height="40" rx="4" fill="#1e293b" />
                    <circle cx="24" cy="70" r="8" fill="#1e293b" />
                    <rect class="anim-thermometer-fill" x="22" y="32" width="4" height="38" rx="2" />
                    <circle cx="24" cy="70" r="5" class="anim-thermometer-fill" />
                    <!-- Pieniądze / Utrata -->
                    <circle class="anim-coin" cx="75" cy="40" r="4" />
                    <circle class="anim-coin" cx="80" cy="55" r="4" />
                    <circle class="anim-coin" cx="70" cy="70" r="4" />
                </svg>
            </div>
            
            <div class="rk-data-grid">
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl1">Koszty inwestycyjne</span>
                    <span class="rk-tile-value" id="dynVal1">Drastycznie zawyżone</span>
                    <span class="rk-tile-sub" id="dynSub1">Przewymiarowana pompa ciepła</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl2">Ryzyko w czasie mrozów</span>
                    <span class="rk-tile-value" id="dynVal2">Niedogrzanie budynku</span>
                    <span class="rk-tile-sub" id="dynSub2">Zbyt rzadki rozstaw rur</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl3">Zużycie prądu</span>
                    <span class="rk-tile-value" id="dynVal3">Wysokie (Taktowanie)</span>
                    <span class="rk-tile-sub" id="dynSub3">Sprężarka pracuje skokowo</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl4">Bezpieczeństwo</span>
                    <span class="rk-tile-value" id="dynVal4">Loteria wykonawcza</span>
                    <span class="rk-tile-sub" id="dynSub4">Brak twardych danych</span>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w strukturze błędu)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-ozc-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener edukacyjny oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Przełącznik)
    const switchContainer = document.getElementById('introSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-toggle-btn');
    const dashboard = document.getElementById('introDashboard');
    
    // Elementy DOM do podmiany tekstu
    const v1 = document.getElementById('dynVal1'); const s1 = document.getElementById('dynSub1');
    const v2 = document.getElementById('dynVal2'); const s2 = document.getElementById('dynSub2');
    const v3 = document.getElementById('dynVal3'); const s3 = document.getElementById('dynSub3');
    const v4 = document.getElementById('dynVal4'); const s4 = document.getElementById('dynSub4');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Animacja przełącznika
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const targetMode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', targetMode);

            // Aktualizacja treści i klas kontenera SVG/Dashboardu
            if (targetMode === 'pro') {
                dashboard.className = 'rk-dashboard mode-pro';
                
                v1.textContent = "Zoptymalizowane"; v1.style.color = "var(--rk-intro-green)";
                s1.textContent = "Idealnie dobrana moc PC";
                
                v2.textContent = "Pełny komfort cieplny"; v2.style.color = "var(--rk-intro-green)";
                s2.textContent = "Rozstaw obliczony matematycznie";
                
                v3.textContent = "Minimalne (Wysokie COP)"; v3.style.color = "var(--rk-intro-green)";
                s3.textContent = "Stabilna praca inwertera";
                
                v4.textContent = "100% Gwarancji"; v4.style.color = "var(--rk-intro-green)";
                s4.textContent = "Instalacja oparta na fizyce";

            } else {
                dashboard.className = 'rk-dashboard mode-amateur';
                
                v1.textContent = "Drastycznie zawyżone"; v1.style.color = "var(--rk-intro-dark)";
                s1.textContent = "Przewymiarowana pompa ciepła";
                
                v2.textContent = "Niedogrzanie budynku"; v2.style.color = "var(--rk-intro-dark)";
                s2.textContent = "Zbyt rzadki rozstaw rur";
                
                v3.textContent = "Wysokie (Taktowanie)"; v3.style.color = "var(--rk-intro-dark)";
                s3.textContent = "Sprężarka pracuje skokowo";
                
                v4.textContent = "Loteria wykonawcza"; v4.style.color = "var(--rk-intro-dark)";
                s4.textContent = "Brak twardych danych";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-tsim-dark: #0f172a;
    --rk-tsim-panel: #1e293b;
    --rk-tsim-blue: #0284c7;
    --rk-tsim-blue-light: #38bdf8;
    --rk-tsim-frost: #bae6fd;
    --rk-tsim-red: #ef4444;
    --rk-tsim-orange: #f97316;
    --rk-tsim-green: #10b981;
    --rk-tsim-bg: #ffffff;
    --rk-tsim-border: #e2e8f0;
}

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

/* Sekcja Nagłówkowa */
.rk-tsim-header {
    background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
    padding: 45px 50px 35px;
    color: #f8fafc;
    position: relative;
    border-bottom: 4px solid var(--rk-tsim-blue);
}

.rk-tsim-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(56, 189, 248, 0.15);
    color: var(--rk-tsim-blue-light);
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.3);
}

.rk-tsim-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-tsim-header h2 span { color: var(--rk-tsim-red); }

.rk-tsim-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-tsim-lead strong {
    color: #ffffff;
    background: rgba(2, 132, 199, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

/* Interaktywny Obszar z Suwakiem */
.rk-tsim-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

/* Wybór systemu (Radio Tabs) */
.rk-tsim-tabs {
    display: flex;
    background: #e2e8f0;
    border-radius: 12px;
    padding: 6px;
    margin-bottom: 30px;
    position: relative;
}

.rk-tsim-tab {
    flex: 1;
    text-align: center;
    padding: 14px 10px;
    font-size: 14px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.3s;
    z-index: 2;
}

.rk-tsim-tab.active {
    color: #ffffff;
}

.rk-tsim-tab-glider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    width: calc(50% - 6px);
    background: var(--rk-tsim-red);
    border-radius: 8px;
    transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1), background 0.4s;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
    z-index: 1;
}

.rk-tsim-tabs[data-active="pro"] .rk-tsim-tab-glider {
    transform: translateX(100%);
    background: var(--rk-tsim-green);
}

/* Panel Kontrolny - Suwak Mrozu */
.rk-tsim-control-box {
    background: #ffffff;
    border: 1px solid var(--rk-tsim-border);
    border-radius: 20px;
    padding: 30px;
    margin-bottom: 30px;
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.03);
    text-align: center;
}

.rk-tsim-temp-display {
    font-size: 42px;
    font-weight: 900;
    color: var(--rk-tsim-dark);
    font-variant-numeric: tabular-nums;
    margin-bottom: 15px;
    transition: color 0.3s;
}

.rk-tsim-slider-wrapper {
    position: relative;
    padding: 20px 0;
}

input[type=range].rk-tsim-slider {
    -webkit-appearance: none;
    width: 100%;
    background: transparent;
    cursor: pointer;
}

input[type=range].rk-tsim-slider:focus { outline: none; }

/* Track */
input[type=range].rk-tsim-slider::-webkit-slider-runnable-track {
    width: 100%;
    height: 12px;
    background: linear-gradient(to right, #0284c7 0%, #38bdf8 30%, #e2e8f0 50%, #f97316 100%);
    border-radius: 99px;
    border: 1px solid #cbd5e1;
}

/* Thumb */
input[type=range].rk-tsim-slider::-webkit-slider-thumb {
    height: 32px;
    width: 32px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-tsim-dark);
    -webkit-appearance: none;
    margin-top: -11px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.2);
    transition: transform 0.1s;
}
input[type=range].rk-tsim-slider::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Dashboard z wynikami */
.rk-tsim-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    align-items: stretch;
}

.rk-tsim-svg-panel {
    background: var(--rk-tsim-panel);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.rk-tsim-svg { width: 100%; max-width: 150px; height: auto; }

/* Animacje SVG zależne od suwaka i trybu */
.anim-floor { transition: fill 0.5s; }
.anim-snow { opacity: 0; transition: opacity 0.5s; }
.anim-pump { transition: transform 0.3s, fill 0.3s; }
.anim-error { opacity: 0; transform: scale(0); transition: all 0.3s; }

/* Dynamika nadawana przez JS klasami */
.env-cold .anim-snow { opacity: 1; animation: fallSnow 2s linear infinite; }
@keyframes fallSnow { 0% { transform: translateY(-10px); } 100% { transform: translateY(20px); opacity: 0; } }

.sys-fail .anim-floor { fill: #64748b !important; }
.sys-fail .anim-pump { fill: var(--rk-tsim-red); animation: shakePump 0.15s infinite; }
.sys-fail .anim-error { opacity: 1; transform: scale(1); }

.sys-ok .anim-floor { fill: var(--rk-tsim-orange); }
.sys-ok .anim-pump { fill: var(--rk-tsim-green); animation: pulsePump 2s infinite alternate; }

@keyframes shakePump { 0% { transform: translateX(-2px); } 100% { transform: translateX(2px); } }
@keyframes pulsePump { 0% { filter: drop-shadow(0 0 2px #10b981); } 100% { filter: drop-shadow(0 0 10px #10b981); } }

/* Parametry textowe */
.rk-tsim-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tsim-stat-box {
    background: #ffffff;
    border: 1px solid var(--rk-tsim-border);
    padding: 20px;
    border-radius: 14px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    transition: all 0.3s;
}

.rk-stat-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 8px;
}

.rk-stat-value {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-tsim-dark);
}

.val-danger { color: var(--rk-tsim-red) !important; }
.val-success { color: var(--rk-tsim-green) !important; }
.val-cold { color: var(--rk-tsim-blue) !important; }

@media (max-width: 768px) {
    .rk-tsim-header, .rk-tsim-interactive { padding: 30px 20px; }
    .rk-tsim-title { font-size: 24px; }
    .rk-tsim-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-tsim-stats { grid-template-columns: 1fr; }
    .rk-tsim-svg-panel { padding: 40px 20px; }
    .rk-tsim-temp-display { font-size: 36px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Koszty metody \"na oko\" w nowoczesnym budownictwie",
    "description": "Budowa domu jednorodzinnego lub modernizacja starego obiektu to proces pełen kosztownych pułapek. Zobacz, jak brak OZC niszczy pompę ciepła i domowy budżet.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-mrozy",
    "name": "Parametry Pracy Pomp Ciepła podczas Ekstremalnych Mrozów",
    "description": "Zestawienie spadku temperatury wewnętrznej i ryzyka taktowania sprężarki w funkcji temperatury zewnętrznej dla układów przewymiarowanych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "taktowanie pompy ciepła awaria",
      "przewymiarowana pompa ciepła mrozy",
      "niedogrzane pomieszczenia ogrzewanie podłogowe",
      "ucieczka watów straty ciepła",
      "przelicznik 50 W/m2 błędy"
    ],
    "measurementTechnique": "Symulacja wydajności instalacji przy spadku temperatury zewnętrznej od +10°C do -22°C.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Metoda 'na oko': Przy -15°C i poniżej ujawniają się mostki termiczne, podłoga nie przekazuje ciepła, temperatura wewnątrz spada do 16°C.",
        "Projekt OZC: Precyzyjny dobór pętli kompensuje miejscowe straty ciepła, utrzymując stałe 20°C bez nadwyrężania kompresora."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-mrozy",
    "name": "Symulator Ekstremalnych Mrozów",
    "description": "Narzędzie interaktywne pozwalające użytkownikowi symulować spadek temperatury zewnętrznej i obserwować zjawisko taktowania pompy ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 Range Input and JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tsim-container" id="rk-tsim-app">
    
    <div class="rk-tsim-header">
        <div class="rk-tsim-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Krytyczny Błąd Inwestycyjny
        </div>
        <h2>Koszty metody &#8222;na oko&#8221; <span>a zima stulecia</span></h2>
        <p class="rk-tsim-lead">
            Budowa domu jednorodzinnego lub modernizacja starego obiektu to proces pełen kosztownych pułapek, w którym intuicja i potoczne metody „na oko” (np. przelicznik <strong>50 W/m²</strong>) nieuchronnie prowadzą do katastrofy finansowej i technologicznej.
            <br><br>
            Inwestorzy masowo zmagają się z problemem niedogrzanych pomieszczeń w okresie strefowych mrozów sięgających <strong>-22°C</strong>, bądź stają przed faktem drastycznego przewymiarowania pomp ciepła. Urządzenia te, wchodząc w tzw. taktowanie (zbyt częste cykle pracy sprężarki), ulegają awarii po zaledwie 3–4 latach eksploatacji, generując przy tym gigantyczne rachunki za energię elektryczną. Brak precyzyjnej wiedzy o tym, ile watów energii ucieka przez konkretną ścianę, strop, okno czy system wentylacji, paraliżuje jakikolwiek proces decyzyjny i skazuje instalację płaszczyznową na losową i nieefektywną pracę.
        </p>
    </div>

    <div class="rk-tsim-interactive">
        
        <div class="rk-tsim-tabs" id="tsimTabs" data-active="amateur">
            <div class="rk-tsim-tab-glider" id="tsimGlider"></div>
            <div class="rk-tsim-tab active" data-type="amateur">Przelicznik &#8222;Na oko&#8221;</div>
            <div class="rk-tsim-tab" data-type="pro">Precyzyjne OZC</div>
        </div>

        <div class="rk-tsim-control-box">
            <h3 style="margin:0 0 10px 0; font-size:14px; color:#64748b; text-transform:uppercase; letter-spacing:1px;">Temperatura Zewnętrzna</h3>
            <div class="rk-tsim-temp-display" id="tsimTempDisplay">0°C</div>
            <div class="rk-tsim-slider-wrapper">
                <input type="range" min="-22" max="10" value="0" class="rk-tsim-slider" id="tsimSlider">
            </div>
            <p style="margin:10px 0 0 0; font-size:13px; color:#94a3b8;">Przesuń suwak w lewo, aby symulować mróz.</p>
        </div>

        <div class="rk-tsim-dashboard">
            
            <div class="rk-tsim-svg-panel" id="tsimSvgPanel">
                <svg class="rk-tsim-svg" viewBox="0 0 100 100">
                    <circle class="anim-snow" cx="20" cy="10" r="1.5" fill="#ffffff" />
                    <circle class="anim-snow" cx="50" cy="5" r="2" fill="#ffffff" style="animation-delay: 0.5s;" />
                    <circle class="anim-snow" cx="80" cy="15" r="1.5" fill="#ffffff" style="animation-delay: 1s;" />
                    
                    <path d="M 10 50 L 50 15 L 90 50 L 90 90 L 10 90 Z" fill="#334155" stroke="#475569" stroke-width="2"/>
                    <path class="anim-floor" d="M 15 80 L 85 80 L 85 85 L 15 85 Z" fill="#f97316" />
                    
                    <rect class="anim-pump" x="65" y="65" width="25" height="25" rx="3" fill="#10b981" />
                    <circle cx="77.5" cy="77.5" r="7" fill="#1e293b" opacity="0.5"/>
                    
                    <path class="anim-error" d="M 65 55 L 75 40 L 85 55 Z" fill="#ef4444" />
                    <text class="anim-error" x="73" y="52" fill="#ffffff" font-size="10" font-weight="bold">!</text>
                </svg>
            </div>

            <div class="rk-tsim-stats">
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Temperatura wewnątrz</span>
                    <span class="rk-stat-value" id="valInsideTemp">20°C (Komfort)</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Stan Sprężarki (Pompa)</span>
                    <span class="rk-stat-value" id="valCompressor">Stabilna praca</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Koszty energii</span>
                    <span class="rk-stat-value" id="valEnergy">W normie</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Wydajność ogrzewania</span>
                    <span class="rk-stat-value" id="valStatus">Poprawna</span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w strukturze błędu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-tsim-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy DOM
    const slider = document.getElementById('tsimSlider');
    const tempDisplay = document.getElementById('tsimTempDisplay');
    const tabs = document.querySelectorAll('.rk-tsim-tab');
    const tabsContainer = document.getElementById('tsimTabs');
    const svgPanel = document.getElementById('tsimSvgPanel');
    
    // Pola tekstowe
    const valInsideTemp = document.getElementById('valInsideTemp');
    const valCompressor = document.getElementById('valCompressor');
    const valEnergy = document.getElementById('valEnergy');
    const valStatus = document.getElementById('valStatus');

    let currentMode = 'amateur';

    // 3. Obsługa zakładek (Tryb Systemu)
    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            tabs.forEach(t => t.classList.remove('active'));
            tab.classList.add('active');
            currentMode = tab.getAttribute('data-type');
            tabsContainer.setAttribute('data-active', currentMode);
            updateSimulation();
        });
    });

    // 4. Obsługa Suwaka
    slider.addEventListener('input', updateSimulation);

    // 5. Silnik Symulacji
    function updateSimulation() {
        const outTemp = parseInt(slider.value);
        
        // Zmiana sposobu budowania stringów, aby uniknąć błędów parsera z backtickami w niektórych edytorach
        tempDisplay.textContent = outTemp > 0 ? "+" + outTemp + "°C" : outTemp + "°C";
        
        if (outTemp <= -10) {
            tempDisplay.style.color = 'var(--rk-tsim-blue)';
            svgPanel.classList.add('env-cold');
        } else {
            tempDisplay.style.color = 'var(--rk-tsim-dark)';
            svgPanel.classList.remove('env-cold');
        }

        // Reset klas SVG
        svgPanel.classList.remove('sys-ok', 'sys-fail');

        if (currentMode === 'pro') {
            // TRYB: Projekt OZC
            svgPanel.classList.add('sys-ok');
            
            valInsideTemp.textContent = '20°C (Stała)';
            valInsideTemp.className = 'rk-stat-value val-success';
            
            valCompressor.textContent = 'Ciągła, inwerterowa';
            valCompressor.className = 'rk-stat-value val-success';
            
            valEnergy.textContent = 'Zoptymalizowane';
            valEnergy.className = 'rk-stat-value';

            if (outTemp <= -15) {
                valStatus.textContent = 'Kompensacja strat idealna';
            } else {
                valStatus.textContent = 'Wysokie COP pompy';
            }
            valStatus.className = 'rk-stat-value val-success';

        } else {
            // TRYB: Amator "Na Oko"
            if (outTemp > 0) {
                // Ciepło - urządzenie przewymiarowane taktuje, ale grzeje
                svgPanel.classList.add('sys-fail');
                valInsideTemp.textContent = '22°C (Przegrzewanie)';
                valInsideTemp.className = 'rk-stat-value val-danger';
                
                valCompressor.textContent = 'Częste taktowanie!';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = '+30% (Rozruchy)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Bezwładność układu';
                valStatus.className = 'rk-stat-value';
                
            } else if (outTemp > -10) {
                // Lekki mróz - zaczynają się problemy
                svgPanel.classList.add('sys-fail');
                valInsideTemp.textContent = '19°C (Niestabilna)';
                valInsideTemp.className = 'rk-stat-value';
                
                valCompressor.textContent = 'Agresywne taktowanie';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = '+40% (Wysoki prąd)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Zaburzone przepływy';
                valStatus.className = 'rk-stat-value val-danger';

            } else {
                // Silny mróz - katastrofa, podłoga nie daje rady, pompa wchodzi w tryb awaryjny lub grzałki
                svgPanel.classList.add('sys-fail');
                const dropTemp = 19 + Math.floor(outTemp / 5); // Spadek temp
                
                // Zwykła konkatenacja unikająca backticków
                valInsideTemp.textContent = dropTemp + "°C (Niedogrzanie)";
                valInsideTemp.className = 'rk-stat-value val-cold';
                
                valCompressor.textContent = 'Ryzyko uszkodzenia!';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = 'Ogromne (Praca grzałek)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Brak mocy przekazu';
                valStatus.className = 'rk-stat-value val-danger';
            }
        }
    }

    // Inicjalizacja startowa
    updateSimulation();
});
</script>



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



<style>
:root {
    --rk-core-dark: #0f172a;
    --rk-core-brand: #0284c7;
    --rk-core-accent: #0ea5e9;
    --rk-core-bg: #ffffff;
    --rk-core-panel: #f8fafc;
    --rk-core-border: #cbd5e1;
    --rk-core-text: #334155;
    --rk-core-green: #059669;
    --rk-core-green-bg: #ecfdf5;
    --rk-core-amber: #d97706;
    --rk-core-amber-bg: #fffbeb;
}

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

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

.rk-core-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.2);
}

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

.rk-core-header h2 span { color: #38bdf8; }

.rk-core-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-core-lead strong {
    color: #ffffff;
    font-weight: 800;
}

.rk-core-lead a {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: color 0.3s;
}

.rk-core-lead a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Inżynierski Panel Kontrolny (Dashboard) */
.rk-core-dashboard {
    padding: 40px 50px;
    background: var(--rk-core-panel);
}

/* Nawigacja po komponentach OZC (3 twarde filary) */
.rk-core-nav {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-bottom: 35px;
}

.rk-core-nav-btn {
    background: #ffffff;
    border: 2px solid var(--rk-core-border);
    padding: 16px 20px;
    border-radius: 14px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.03);
}

.rk-core-nav-btn:hover {
    background: #f1f5f9;
    border-color: #94a3b8;
    transform: translateY(-2px);
}

.rk-core-nav-btn.active {
    border-color: var(--rk-core-brand);
    background: var(--rk-core-brand);
}

.rk-nav-icon {
    width: 24px;
    height: 24px;
    color: var(--rk-core-brand);
    transition: color 0.3s;
}

.rk-core-nav-btn.active .rk-nav-icon {
    color: #ffffff;
}

.rk-nav-title {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-core-dark);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: color 0.3s;
}

.rk-core-nav-btn.active .rk-nav-title {
    color: #ffffff;
}

/* Główna Karta Prezentacji Danych */
.rk-core-display-card {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-core-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 40px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
}

/* Kontener Wizualizacji Sztywnych Układów SVG */
.rk-core-svg-stage {
    background: var(--rk-core-dark);
    border-radius: 16px;
    padding: 25px;
    height: 220px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
    position: relative;
    overflow: hidden;
}

.rk-dashboard-svg {
    width: 100%;
    height: 100%;
    display: block;
}

/* Ukrywanie/Pokazywanie warstw SVG za pomocą CSS */
.svg-layer { opacity: 0; transition: opacity 0.4s ease-in-out; }
.rk-core-container[data-view="fabric"] .layer-fabric { opacity: 1; }
.rk-core-container[data-view="ventilation"] .layer-ventilation { opacity: 1; }
.rk-core-container[data-view="bivalent"] .layer-bivalent { opacity: 1; }

/* Animacje wektorowe kontrolowane stanem rodzica */
.anim-flow-lines { stroke-dasharray: 8 16; stroke-dashoffset: 0; }
.rk-core-container[data-view="ventilation"] .anim-flow-lines { animation: airFlow 2s linear infinite; }

.anim-balance-beam { transform-origin: 50px 55px; transition: transform 0.6s ease-in-out; }
.rk-core-container[data-view="bivalent"] .anim-balance-beam { transform: rotate(-8deg); }

@keyframes airFlow { to { stroke-dashoffset: -24; } }

/* Treść merytoryczna wewnątrz karty */
.rk-core-info-block h3 {
    margin: 0 0 12px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-core-dark);
}

.rk-core-info-block p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.65;
    color: #475569;
}

/* Siatka parametrów pod tekstem */
.rk-core-metrics-panel {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-core-metric-box {
    background: #f1f5f9;
    padding: 15px;
    border-radius: 12px;
    border-left: 4px solid var(--rk-core-brand);
}

.rk-metric-label {
    display: block;
    font-size: 11px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 4px;
}

.rk-metric-value {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-core-dark);
}

@media (max-width: 768px) {
    .rk-core-header, .rk-core-dashboard { padding: 35px 25px; }
    .rk-core-header h2 { font-size: 24px; }
    .rk-core-nav { grid-template-columns: 1fr; gap: 10px; }
    .rk-core-display-card { grid-template-columns: 1fr; gap: 25px; padding: 25px; }
    .rk-core-svg-stage { height: 180px; max-width: 240px; margin: 0 auto; width: 100%; }
    .rk-core-metrics-panel { grid-template-columns: 1fr; gap: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-definicja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Czym dokładnie jest Projektowe Obciążenie Cieplne (OZC) budynku?",
    "description": "Zrozumienie wartości OZC (kW) wg normy PN-EN 12831-1. Dowiedz się, jak bilans przegród, wentylacji oraz wyznaczenie punktu biwalentnego eliminuje zgadywanie.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-definicja",
    "name": "Struktura składowych bilansu energetycznego budynku szczytowego",
    "description": "Zestawienie twardych danych inżynierskich określających udziały strat przez przenikanie oraz wentylację w warunkach normatywnych WT 2021.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne budynku",
      "norma PN-EN 12831-1",
      "punkt biwalentny pompy ciepła",
      "standard energetyczny WT 2021",
      "koszt obliczeń OZC"
    ],
    "measurementTechnique": "Kalkulacja strat szczytowych na podstawie fizyki budowli i oporów cieplnych przegród budowlanych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Przenikanie ciepła: Straty energii przez ściany, okna i strop przy skrajnej temperaturze projektowej.",
        "Wentylacja: Zapotrzebowanie na dogrzanie powietrza zewnętrznego z uwzględnieniem sprawności rekuperatora.",
        "Punkt biwalentny: Temperatura graniczna, przy której źródło ciepła wymaga aktywacji wspomagania elektrycznego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-definicja",
    "name": "Interaktywny Analizator Składowych OZC",
    "description": "Inżynierski interfejs do wizualizacji struktury strat ciepła przez przegrody budowlane, procesy wentylacyjne oraz do wyznaczania punktu biwalentnego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG capable browser",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-core-container" id="rk-ozc-def-app" data-view="fabric">
    
    <div class="rk-core-header">
        <div class="rk-core-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" y1="22" x2="4" y2="15"></line></svg>
            Analiza Inżynierska
        </div>
        <h2>Czym dokładnie jest Projektowe Obciążenie Cieplne (OZC) budynku?</h2>
        <p class="rk-core-lead">
            <strong>Projektowe Obciążenie Cieplne (OZC)</strong> to obliczeniowa wartość strat energii wyrażona w kilowatach [kW], wyznaczana dla skrajnych warunków zimowych danej strefy klimatycznej zgodnie z normą <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">PN-EN 12831-1</a>. Wartość ta określa zapotrzebowanie na moc szczytową źródła ciepła i jest sumą strat przez przegrody oraz wentylację. Stanowi ona podstawę do doboru urządzeń grzewczych, eliminując błędy szacunkowe, które generują niepotrzebne koszty inwestycyjne.
        </p>
    </div>

    <div class="rk-core-dashboard">
        
        <div class="rk-core-nav">
            <button class="rk-core-nav-btn active" data-target="fabric">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" fill="none"/><line x1="9" y1="3" x2="9" y2="21"/><line x1="15" y1="3" x2="15" y2="21"/></svg>
                <span class="rk-nav-title">1. Przenikanie</span>
            </button>
            <button class="rk-core-nav-btn" data-target="ventilation">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m12.41 11.41A2 2 0 1 1 13 16h9m-1.59-7.41A2 2 0 1 0 19 12h3"/></svg>
                <span class="rk-nav-title">2. Wentylacja</span>
            </button>
            <button class="rk-core-nav-btn" data-target="bivalent">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="19" y1="5" x2="5" y2="19"/><circle cx="6.5" cy="6.5" r="2.5"/><circle cx="17.5" cy="17.5" r="2.5"/></svg>
                <span class="rk-nav-title">3. Punkt Biwalentny</span>
            </button>
        </div>

        <div class="rk-core-display-card">
            
            <div class="rk-core-svg-stage">
                <svg class="rk-dashboard-svg" viewBox="0 0 100 100">
                    
                    <g class="svg-layer layer-fabric">
                        <rect x="15" y="20" width="20" height="60" fill="#475569" />
                        <rect x="35" y="20" width="15" height="60" fill="#0284c7" opacity="0.6" />
                        <rect x="50" y="20" width="5" height="60" fill="#cbd5e1" />
                        <path d="M 10 50 L 65 50" fill="none" stroke="#ef4444" stroke-width="3" stroke-dasharray="4 4" />
                        <polyline points="60 45 65 50 60 55" fill="none" stroke="#ef4444" stroke-width="3" />
                        <text x="60" y="35" fill="#ffffff" font-size="8" font-family="sans-serif">WT 2021</text>
                    </g>
                    
                    <g class="svg-layer layer-ventilation">
                        <rect x="30" y="30" width="40" height="40" rx="6" fill="#1e293b" stroke="#64748b" stroke-width="2"/>
                        <path class="anim-flow-lines" d="M 10 40 L 90 40" fill="none" stroke="#38bdf8" stroke-width="3" />
                        <path class="anim-flow-lines" d="M 90 60 L 10 60" fill="none" stroke="#f97316" stroke-width="3" />
                    </g>
                    
                    <g class="svg-layer layer-bivalent">
                        <path d="M 20 85 L 80 85 M 50 85 L 50 55" fill="none" stroke="#64748b" stroke-width="3" />
                        <g class="anim-balance-beam">
                            <line x1="20" y1="55" x2="80" y2="55" stroke="#ffffff" stroke-width="4" stroke-linecap="round" />
                            <rect x="22" y="35" width="16" height="18" fill="#10b981" rx="2" />
                            <rect x="62" y="38" width="16" height="15" fill="#ef4444" rx="2" />
                        </g>
                    </g>
                    
                </svg>
            </div>

            <div class="rk-core-info-block">
                <h3 id="coreDisplayTitle">Straty ciepła przez przegrody</h3>
                <p id="coreDisplayDesc">
                    W praktyce inżynierskiej dokument OZC eliminuje zgadywanie. Budynki wznoszone w standardzie WT 2021 charakteryzują się wysoką szczelnością oraz niskimi współczynnikami przenikania ciepła przegród, co sprawia, że ich realne zapotrzebowanie na energię drastycznie różni się od obiektów budowanych jeszcze dekadę temu.
                </p>
                
                <div class="rk-core-metrics-panel">
                    <div class="rk-core-metric-box">
                        <span class="rk-metric-label" id="coreLabel1">Koszt opracowania OZC</span>
                        <span class="rk-metric-value" id="coreValue1">450 &ndash; 900 PLN</span>
                    </div>
                    <div class="rk-core-metric-box">
                        <span class="rk-metric-label" id="coreLabel2">Oszczędność inwestycyjna</span>
                        <span class="rk-metric-value" id="coreValue2">Do kilkunastu tysięcy PLN</span>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez użycia tagów H2/H3 w strukturze alertu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-ozc-def-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:18px; text-transform:uppercase; margin-bottom:10px;">Błąd Licencji</div><div style="font-size:14px; color:#cbd5e1;">Opracowanie struktury oraz mechanika JSON-LD są własnością serwisu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy sterujące i baza danych
    const container = document.getElementById('rk-ozc-def-app');
    const navBtns = container.querySelectorAll('.rk-core-nav-btn');
    
    const titleDOM = document.getElementById('coreDisplayTitle');
    const descDOM = document.getElementById('coreDisplayDesc');
    const lbl1DOM = document.getElementById('coreLabel1');
    const val1DOM = document.getElementById('coreValue1');
    const lbl2DOM = document.getElementById('coreLabel2');
    const val2DOM = document.getElementById('coreValue2');

    // Czyste bazy tekstowe (bez backticków dla uniknięcia błędów parsowania w WP)
    const contentData = {
        fabric: {
            title: "Przenikanie przez przegrody (WT 2021)",
            desc: "W praktyce inżynierskiej dokument OZC eliminuje zgadywanie. Budynki wznoszone w standardzie WT 2021 charakteryzują się wysoką szczelnością oraz niskimi współczynnikami przenikania ciepła przegród strukturalnych, co sprawia, że ich realne zapotrzebowanie na energię drastycznie różni się od starych obiektów.",
            lbl1: "Koszt opracowania OZC",
            val1: "450 - 900 PLN",
            lbl2: "Oszczędność inwestycyjna",
            val2: "Zabezpieczenie przed przewymiarowaniem"
        },
        ventilation: {
            title: "Projektowe straty wentylacyjne",
            desc: "OZC precyzyjnie sumuje straty energii potrzebnej do ogrzania powietrza zewnętrznego. Uwzględnienie w obliczeniach inżynierskich systemu z odzyskiem ciepła pozwala na obniżenie strat wentylacyjnych o ponad 80%, drastycznie wpływając na ostateczny wynik zapotrzebowania budynku.",
            lbl1: "Wymóg normatywny",
            val1: "PN-EN 12831-1",
            lbl2: "Wpływ na rekuperację",
            val2: "Redukcja szczytowych strat wentylacji"
        },
        bivalent: {
            title: "Wyznaczenie punktu biwalentnego",
            desc: "Projektowe Obciążenie Cieplne pozwala precyzyjnie określić tzw. punkt biwalentny dla pompy ciepła – czyli temperaturę zewnętrzną (np. -7°C), przy której sprężarka wymaga wsparcia przez grzałki elektryczne. Chroni to inwestora przed zakupem drogiego źródła o zawyżonej mocy nominalnej.",
            lbl1: "Przykładowy punkt",
            val1: "-7°C (Granica grzałek)",
            lbl2: "Efekt hydrauliczny",
            val2: "Stabilna praca bez taktowania"
        }
    };

    // 3. Obsługa zdarzeń kliknięcia
    navBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            navBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const view = this.getAttribute('data-target');
            container.setAttribute('data-view', view);

            // Podmiana danych merytorycznych
            titleDOM.textContent = contentData[view].title;
            descDOM.textContent = contentData[view].desc;
            lbl1DOM.textContent = contentData[view].lbl1;
            val1DOM.textContent = contentData[view].val1;
            lbl2DOM.textContent = contentData[view].lbl2;
            val2DOM.textContent = contentData[view].val2;
        });
    });
});
</script>



<style>
:root {
    --rk-norm-dark: #0f172a;
    --rk-norm-brand: #4338ca; /* Eleganckie indygo dla prawa i norm */
    --rk-norm-brand-light: #e0e7ff;
    --rk-norm-accent: #0ea5e9;
    --rk-norm-green: #10b981;
    --rk-norm-green-light: #ecfdf5;
    --rk-norm-red: #ef4444;
    --rk-norm-bg: #ffffff;
    --rk-norm-panel: #f8fafc;
    --rk-norm-border: #cbd5e1;
    --rk-norm-text: #334155;
    --rk-norm-muted: #64748b;
}

.rk-norm-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-norm-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(67, 56, 202, 0.15);
    border: 1px solid rgba(67, 56, 202, 0.2);
    overflow: hidden;
}

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

.rk-norm-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(67, 56, 202, 0.4);
    color: #a5b4fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(165, 180, 252, 0.2);
}

.rk-norm-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-norm-title span { color: #818cf8; }

.rk-norm-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-norm-lead strong {
    color: #ffffff;
    background: rgba(67, 56, 202, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

.rk-link-norm {
    color: #a5b4fc;
    text-decoration: none;
    border-bottom: 1px dashed #a5b4fc;
    transition: all 0.3s;
}

.rk-link-norm:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Przestrzeń interaktywna */
.rk-norm-interactive {
    padding: 45px 50px;
    background: var(--rk-norm-panel);
}

/* System Zakładek (Pill Menu) */
.rk-norm-tabs {
    display: flex;
    background: #e2e8f0;
    border-radius: 16px;
    padding: 6px;
    margin-bottom: 35px;
    position: relative;
    box-shadow: inset 0 2px 5px rgba(0,0,0,0.05);
}

.rk-norm-tab {
    flex: 1;
    text-align: center;
    padding: 14px 10px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-norm-muted);
    cursor: pointer;
    border-radius: 12px;
    transition: all 0.3s ease;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.rk-norm-tab.active { color: #ffffff; }

.rk-norm-tab-glider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    width: calc(33.333% - 4px);
    background: var(--rk-norm-brand);
    border-radius: 12px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
    box-shadow: 0 4px 10px -2px rgba(67, 56, 202, 0.3);
    z-index: 1;
}

.rk-norm-tabs[data-active="zones"] .rk-norm-tab-glider { transform: translateX(0%); background: var(--rk-norm-accent); }
.rk-norm-tabs[data-active="temps"] .rk-norm-tab-glider { transform: translateX(100%); background: #f59e0b; }
.rk-norm-tabs[data-active="law"] .rk-norm-tab-glider { transform: translateX(200%); background: var(--rk-norm-brand); }

/* Główny Dashboard Prezentacji */
.rk-norm-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-norm-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 35px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
    transition: border-color 0.4s;
}

.rk-norm-dashboard[data-state="zones"] { border-color: rgba(14, 165, 233, 0.3); }
.rk-norm-dashboard[data-state="temps"] { border-color: rgba(245, 158, 11, 0.3); }
.rk-norm-dashboard[data-state="law"] { border-color: rgba(67, 56, 202, 0.3); }

/* Kontener SVG */
.rk-norm-svg-box {
    background: var(--rk-norm-dark);
    border-radius: 16px;
    padding: 20px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    position: relative;
    overflow: hidden;
}

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s, transform 0.4s; transform: scale(0.95); width: 100%; height: 100%; }
.rk-norm-dashboard[data-state="zones"] .layer-zones { opacity: 1; transform: scale(1); }
.rk-norm-dashboard[data-state="temps"] .layer-temps { opacity: 1; transform: scale(1); }
.rk-norm-dashboard[data-state="law"] .layer-law { opacity: 1; transform: scale(1); }

/* Animacje specyficzne dla warstw */
.anim-thermo-drop { transform-origin: bottom; animation: dropTemp 2.5s infinite alternate ease-in-out; }
.anim-snowflake { animation: spinSnow 4s infinite linear; transform-origin: 50px 30px; }
.anim-heat-wave { stroke-dasharray: 8 8; animation: riseHeat 1.5s infinite linear; }
.anim-shield-pulse { animation: pulseShieldNorm 2s infinite alternate; }

@keyframes dropTemp { 0% { transform: scaleY(1); fill: #38bdf8; } 100% { transform: scaleY(0.4); fill: #1e3a8a; } }
@keyframes spinSnow { to { transform: rotate(360deg); } }
@keyframes riseHeat { to { stroke-dashoffset: -16; } }
@keyframes pulseShieldNorm { 0% { filter: drop-shadow(0 0 0 rgba(99, 102, 241, 0)); } 100% { filter: drop-shadow(0 0 12px rgba(99, 102, 241, 0.6)); } }

/* Treść Panelu */
.rk-norm-content h3 {
    margin: 0 0 12px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-norm-dark);
}

.rk-norm-content p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

/* Kafelki z danymi */
.rk-norm-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-norm-tile {
    background: var(--rk-norm-panel);
    padding: 15px;
    border-radius: 12px;
    border-left: 4px solid transparent;
    transition: all 0.3s;
}

.rk-norm-dashboard[data-state="zones"] .rk-norm-tile { border-left-color: var(--rk-norm-accent); }
.rk-norm-dashboard[data-state="temps"] .rk-norm-tile { border-left-color: #f59e0b; }
.rk-norm-dashboard[data-state="law"] .rk-norm-tile { border-left-color: var(--rk-norm-brand); }

.rk-tile-lbl { display: block; font-size: 11px; text-transform: uppercase; font-weight: 800; color: var(--rk-norm-muted); margin-bottom: 4px; }
.rk-tile-val { display: block; font-size: 16px; font-weight: 900; color: var(--rk-norm-dark); }

@media (max-width: 768px) {
    .rk-norm-header, .rk-norm-interactive { padding: 35px 20px; }
    .rk-norm-title { font-size: 24px; }
    .rk-norm-tabs { flex-direction: column; }
    .rk-norm-tab-glider { width: 100%; height: calc(33.333% - 4px); top: 6px; left: 6px; }
    .rk-norm-tabs[data-active="zones"] .rk-norm-tab-glider { transform: translateY(0%); }
    .rk-norm-tabs[data-active="temps"] .rk-norm-tab-glider { transform: translateY(100%); }
    .rk-norm-tabs[data-active="law"] .rk-norm-tab-glider { transform: translateY(200%); }
    
    .rk-norm-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 25px; text-align: center; }
    .rk-norm-svg-box { max-width: 200px; margin: 0 auto; height: 160px; }
    .rk-norm-tiles { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#article-prawo",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/"
    },
    "headline": "Jakie normy i przepisy prawne regulują obliczenia OZC w Polsce?",
    "description": "Zrozum regulacje prawne OZC: norma PN-EN 12831-1:2017-08, 5 stref klimatycznych Polski, temperatury wewnętrzne oraz wymogi dotacji Czyste Powietrze.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#dataset-prawo",
    "name": "Zestawienie parametrów normatywnych wg PN-EN 12831-1:2017-08",
    "description": "Wykaz obligatoryjnych temperatur wewnętrznych oraz zewnętrznych stref klimatycznych wymaganych do sporządzenia legalnego bilansu cieplnego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "norma PN-EN 12831-1:2017-08",
      "obliczenia zapotrzebowania na moc cieplną",
      "5 stref klimatycznych Polska temperatura",
      "charakterystyka energetyczna budynku",
      "dotacje czyste powietrze wymogi OZC"
    ],
    "measurementTechnique": "Kalkulacja zgodności projektu instalacji z § 134 ust. 1 Rozporządzenia MI oraz wytycznymi programów proekologicznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Temperatury Zewnętrzne: Podział Polski na 5 stref od -16°C (I) do -24°C (V).",
        "Temperatury Wewnętrzne: Wymagane projektowe 20°C dla pokojów i 24°C dla łazienek.",
        "Zgodność prawna: Warunek konieczny odbioru budynku i uzyskania dotacji (Moje Ciepło)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#webapp-prawo",
    "name": "Eksplorator Norm i Stref Klimatycznych OZC",
    "description": "Aplikacja interaktywna pozwalająca inwestorom zrozumieć wymogi prawne, strefy klimatyczne i ich wpływ na odbiór instalacji oraz dotacje.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 and JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-norm-container" id="rk-norm-app">
    
    <div class="rk-norm-header">
        <div class="rk-norm-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            Prawo i Wymogi Budowlane
        </div>
        <h2 class="rk-norm-title">Jakie normy i przepisy prawne regulują obliczenia <span>OZC w Polsce</span>?</h2>
        <p class="rk-norm-lead">
            Obowiązek wykonywania <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/" class="rk-link-norm">obliczeń zapotrzebowania na moc cieplną</a> reguluje <strong>§ 134 ust. 1 Rozporządzenia Ministra Infrastruktury</strong> w sprawie warunków technicznych, jakim powinny odpowiadać budynki. Każdy legalnie budowany lub modernizowany obiekt musi posiadać rzetelną <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" class="rk-link-norm">charakterystykę energetyczną</a> opartą na tych ściśle określonych wyliczeniach.
        </p>
    </div>

    <div class="rk-norm-interactive">
        
        <div class="rk-norm-tabs" id="normTabs" data-active="zones">
            <div class="rk-norm-tab-glider" id="normGlider"></div>
            <div class="rk-norm-tab active" data-target="zones">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                Strefy Klimatyczne
            </div>
            <div class="rk-norm-tab" data-target="temps">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path></svg>
                Temp. Wewnętrzne
            </div>
            <div class="rk-norm-tab" data-target="law">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
                Prawo &#038; Dotacje
            </div>
        </div>

        <div class="rk-norm-dashboard" id="normDashboard" data-state="zones">
            
            <div class="rk-norm-svg-box">
                <svg class="rk-svg-layer layer-zones" viewBox="0 0 100 100">
                    <rect x="40" y="10" width="20" height="60" rx="10" fill="#1e293b" stroke="#38bdf8" stroke-width="2"/>
                    <circle cx="50" cy="80" r="15" fill="#1e293b" stroke="#38bdf8" stroke-width="2"/>
                    <rect class="anim-thermo-drop" x="44" y="15" width="12" height="60" rx="6" fill="#38bdf8"/>
                    <circle cx="50" cy="80" r="10" fill="#38bdf8"/>
                    <g class="anim-snowflake" stroke="#ffffff" stroke-width="2" stroke-linecap="round">
                        <line x1="50" y1="20" x2="50" y2="40"/> <line x1="40" y1="30" x2="60" y2="30"/>
                        <line x1="43" y1="23" x2="57" y2="37"/> <line x1="43" y1="37" x2="57" y2="23"/>
                    </g>
                </svg>

                <svg class="rk-svg-layer layer-temps" viewBox="0 0 100 100">
                    <path d="M 15 50 L 50 20 L 85 50 L 85 85 L 15 85 Z" fill="#1e293b" stroke="#f59e0b" stroke-width="2"/>
                    <rect x="25" y="55" width="20" height="30" fill="#334155"/>
                    <text x="35" y="75" fill="#f59e0b" font-size="12" font-weight="bold" text-anchor="middle">20°C</text>
                    <rect x="55" y="55" width="20" height="30" fill="#334155"/>
                    <text x="65" y="75" fill="#ef4444" font-size="12" font-weight="bold" text-anchor="middle">24°C</text>
                    <path class="anim-heat-wave" d="M 60 45 Q 65 35 60 25" fill="none" stroke="#ef4444" stroke-width="2"/>
                </svg>

                <svg class="rk-svg-layer layer-law" viewBox="0 0 100 100">
                    <path class="anim-shield-pulse" d="M 50 15 L 20 25 L 20 55 C 20 75 45 90 50 95 C 55 90 80 75 80 55 L 80 25 Z" fill="#1e293b" stroke="#4338ca" stroke-width="3"/>
                    <polyline points="35 55 45 65 65 40" fill="none" stroke="#10b981" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
                </svg>
            </div>

            <div class="rk-norm-content">
                <h3 id="dynNormTitle">Temperatury Obliczeniowe</h3>
                <p id="dynNormDesc">
                    Norma precyzuje podział Polski na 5 stref klimatycznych, dla których przypisane są obliczeniowe temperatury zewnętrzne. Od <strong>-16°C</strong> w łagodniejszej strefie I (nadmorskiej) aż do <strong>-24°C</strong> w skrajnej strefie V (górskiej).
                </p>
                <div class="rk-norm-tiles">
                    <div class="rk-norm-tile">
                        <span class="rk-tile-lbl" id="dynNormLbl1">Strefa I (Nadmorska)</span>
                        <span class="rk-tile-val" id="dynNormVal1">-16°C</span>
                    </div>
                    <div class="rk-norm-tile">
                        <span class="rk-tile-lbl" id="dynNormLbl2">Strefa V (Górska)</span>
                        <span class="rk-tile-val" id="dynNormVal2">-24°C</span>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Brak H2/H3 w strukturze błędu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-norm-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy DOM
    const tabsContainer = document.getElementById('normTabs');
    const tabs = document.querySelectorAll('.rk-norm-tab');
    const dashboard = document.getElementById('normDashboard');
    
    // Pola tekstowe do podmiany
    const dynTitle = document.getElementById('dynNormTitle');
    const dynDesc = document.getElementById('dynNormDesc');
    const lbl1 = document.getElementById('dynNormLbl1');
    const val1 = document.getElementById('dynNormVal1');
    const lbl2 = document.getElementById('dynNormLbl2');
    const val2 = document.getElementById('dynNormVal2');

    // Baza danych treści (bezpieczna od backticków)
    const dataContent = {
        zones: {
            title: "5 Stref Klimatycznych",
            desc: "Norma precyzuje podział Polski na 5 stref klimatycznych, dla których przypisane są rygorystyczne obliczeniowe temperatury zewnętrzne. Od -16°C w strefie I (nadmorskiej) do -24°C w strefie V (górskiej).",
            lbl1: "Strefa I (Najcieplejsza)",
            val1: "-16°C",
            lbl2: "Strefa V (Najzimniejsza)",
            val2: "-24°C"
        },
        temps: {
            title: "Temperatury Wewnętrzne",
            desc: "Przepisy ściśle określają wymagane temperatury wewnętrzne dla konkretnych typów pomieszczeń. Wymusza to na projektancie zastosowanie gęstszego rozstawu rur w łazienkach, aby sprostać wyższym wymogom cieplnym.",
            lbl1: "Pokoje, Salon, Kuchnia",
            val1: "20°C",
            lbl2: "Łazienki",
            val2: "24°C"
        },
        law: {
            title: "Odbiór i Dotacje",
            desc: "Oficjalną podstawą prawną jest norma PN-EN 12831-1:2017-08, która narzuca rygorystyczną metodologię. Projektowanie systemów grzewczych bez jej uwzględnienia uniemożliwia uzyskanie odbioru budowlanego oraz pozyskanie dotacji.",
            lbl1: "Obowiązująca Norma",
            val1: "PN-EN 12831-1",
            lbl2: "Programy wsparcia",
            val2: "Czyste Powietrze / Moje Ciepło"
        }
    };

    // 3. Obsługa kliknięć
    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            tabs.forEach(t => t.classList.remove('active'));
            this.classList.add('active');

            const target = this.getAttribute('data-target');
            
            // Animacja pigułki
            tabsContainer.setAttribute('data-active', target);
            // Zmiana stanu dashboardu (kolory + SVG)
            dashboard.setAttribute('data-state', target);

            // Podmiana tekstów
            dynTitle.textContent = dataContent[target].title;
            // Dodanie linków w opisie jeśli to zakładka dotacji (dla SEO)
            if(target === 'law') {
                dynDesc.innerHTML = 'Oficjalną podstawą prawną jest <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/" style="color:var(--rk-norm-brand); font-weight:700;">norma PN-EN 12831-1:2017-08</a>, która narzuca rygorystyczną metodologię. Projektowanie bez jej uwzględnienia uniemożliwia uzyskanie odbioru oraz pozyskanie środków z programów takich jak <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-a-dotacje-czyste-powietrze-i-moje-cieplo-2026/" style="color:var(--rk-norm-brand); font-weight:700;">Czyste Powietrze czy Moje Ciepło</a>.';
            } else {
                dynDesc.textContent = dataContent[target].desc;
            }
            
            lbl1.textContent = dataContent[target].lbl1;
            val1.textContent = dataContent[target].val1;
            lbl2.textContent = dataContent[target].lbl2;
            val2.textContent = dataContent[target].val2;
        });
    });
});
</script>



<style>
:root {
    --rk-tr-dark: #0f172a;
    --rk-tr-brand: #c2410c; /* Ciepły pomarańcz/cegła nawiązujący do przenikania ciepła */
    --rk-tr-brand-light: #ffedd5;
    --rk-tr-accent: #f97316;
    --rk-tr-blue: #0284c7;
    --rk-tr-blue-light: #e0f2fe;
    --rk-tr-bg: #ffffff;
    --rk-tr-panel: #f8fafc;
    --rk-tr-border: #e2e8f0;
    --rk-tr-text: #334155;
    --rk-tr-muted: #64748b;
}

.rk-tr-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-tr-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(194, 65, 12, 0.15);
    border: 1px solid rgba(194, 65, 12, 0.3);
    overflow: hidden;
}

/* Nagłówek i Wstęp Teorii */
.rk-tr-header {
    background: linear-gradient(135deg, var(--rk-tr-dark) 0%, #2a1508 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-tr-brand);
    display: block; /* Wymuszenie bloku, naprawia błędy z globalnym flexem */
}

.rk-tr-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(249, 115, 22, 0.2);
    color: #fdba74;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(249, 115, 22, 0.3);
}

.rk-tr-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-tr-title span { color: var(--rk-tr-accent); }

.rk-tr-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

/* Blok ze Wzorem - Naprawiony układ, zapobiega zgniataniu w pionie */
.rk-tr-equation-box {
    background: rgba(0, 0, 0, 0.4);
    border: 1px solid rgba(249, 115, 22, 0.4);
    border-radius: 16px;
    padding: 25px;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.5);
    width: 100%;
    box-sizing: border-box;
    overflow-x: auto; /* Pozwala na przewijanie na bardzo wąskich ekranach */
}

.rk-tr-equation {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 22px;
    color: #fdba74;
    letter-spacing: 1px;
    margin: 0 0 20px 0;
    text-align: center;
    line-height: 1.6;
    word-break: keep-all; /* Blokuje łamanie słów w dziwnych miejscach */
}

.rk-tr-equation-chunk {
    display: inline-block;
    white-space: nowrap;
}

.rk-tr-equation-legend {
    font-size: 13px;
    color: #94a3b8;
    line-height: 1.6;
    text-align: left;
    margin: 0;
    display: grid;
    /* Automatycznie dopasowuje kolumny, nie zgniata do pionu */
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 12px;
}

.rk-tr-equation-legend div {
    background: rgba(255, 255, 255, 0.05);
    padding: 8px 12px;
    border-radius: 8px;
    border-left: 3px solid rgba(249, 115, 22, 0.5);
}

.rk-tr-equation-legend strong { color: #e2e8f0; font-family: 'Cambria Math', 'Times New Roman', serif; font-size: 14px; }

/* Sekcja Interaktywna - Kalkulator */
.rk-tr-interactive {
    padding: 45px 50px;
    background: var(--rk-tr-panel);
}

.rk-tr-section-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-tr-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

/* Kontrolki - Wybór Standardu */
.rk-tr-controls {
    display: flex;
    gap: 15px;
    margin-bottom: 35px;
}

.rk-tr-btn {
    flex: 1;
    background: #ffffff;
    border: 2px solid var(--rk-tr-border);
    border-radius: 14px;
    padding: 16px;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

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

.rk-tr-btn.active {
    border-color: var(--rk-tr-brand);
    background: var(--rk-tr-brand-light);
    box-shadow: 0 10px 20px -5px rgba(194, 65, 12, 0.15);
}

.rk-tr-btn-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-tr-text);
}

.rk-tr-btn.active .rk-tr-btn-title { color: var(--rk-tr-brand); }
.rk-tr-btn-sub { font-size: 12px; color: var(--rk-tr-muted); font-weight: 600; }

/* Wyświetlacz Wyników Grid */
.rk-tr-dashboard {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-tr-border);
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
}

/* SVG Wizualizacja Przegrody */
.rk-tr-svg-box {
    background: var(--rk-tr-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.6);
}

.rk-tr-svg { width: 100%; height: auto; max-width: 180px; }

/* Animacje SVG zależne od stanu */
.anim-arrow { stroke-dasharray: 15; stroke-dashoffset: 0; transition: stroke 0.4s; }
.anim-wall-fill { transition: fill 0.4s; }

.state-old .anim-arrow { stroke: #ef4444; stroke-width: 4; animation: heatEscape 0.6s linear infinite; }
.state-old .anim-wall-fill { fill: #64748b; }

.state-wt2021 .anim-arrow { stroke: #f97316; stroke-width: 2.5; animation: heatEscape 1.5s linear infinite; }
.state-wt2021 .anim-wall-fill { fill: #0284c7; }

.state-passive .anim-arrow { stroke: #fbbf24; stroke-width: 1.5; animation: heatEscape 3s linear infinite; }
.state-passive .anim-wall-fill { fill: #10b981; }

@keyframes heatEscape { to { stroke-dashoffset: -30; } }

/* Panele Wynikowe */
.rk-tr-results-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tr-res-tile {
    background: #f8fafc;
    border: 1px solid var(--rk-tr-border);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
}

.rk-tr-res-tile.tile-total {
    grid-column: 1 / -1;
    background: var(--rk-tr-dark);
    border-color: var(--rk-tr-dark);
}

.rk-tr-res-label { font-size: 12px; text-transform: uppercase; font-weight: 800; color: var(--rk-tr-muted); margin-bottom: 4px; }
.rk-tr-res-tile.tile-total .rk-tr-res-label { color: #94a3b8; }

.rk-tr-res-value { font-size: 20px; font-weight: 900; color: var(--rk-tr-dark); font-variant-numeric: tabular-nums; }
.rk-tr-res-tile.tile-total .rk-tr-res-value { color: var(--rk-tr-accent); font-size: 28px; }

.rk-tr-res-formula { font-size: 11px; color: #94a3b8; margin-top: 6px; font-family: monospace; }
.rk-tr-res-tile.tile-total .rk-tr-res-formula { color: #cbd5e1; }

.rk-tr-insight-box {
    margin-top: 25px;
    padding: 18px 20px;
    background: var(--rk-tr-blue-light);
    border-left: 4px solid var(--rk-tr-blue);
    border-radius: 8px;
    font-size: 14px;
    line-height: 1.6;
    color: #0c4a6e;
    font-weight: 500;
}

@media (max-width: 768px) {
    .rk-tr-header, .rk-tr-interactive { padding: 35px 20px; }
    .rk-tr-title { font-size: 24px; }
    .rk-tr-controls { flex-direction: column; gap: 10px; }
    .rk-tr-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 20px; }
    .rk-tr-svg-box { height: 160px; max-width: 220px; margin: 0 auto; width: 100%; }
    .rk-tr-results-grid { grid-template-columns: 1fr; }
    .rk-tr-equation { font-size: 18px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-przenikanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak krok po kroku oblicza się straty ciepła przez przenikanie?",
    "description": "Zobacz inżynierski wzór na straty przez przenikanie (ΦT) wg normy PN-EN 12831. Obliczamy OZC dla ściany, okna i mostków cieplnych krok po kroku.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-przenikanie",
    "name": "Analiza strat ciepła przez przegrody budowlane (Przenikanie)",
    "description": "Interaktywne zestawienie wpływu współczynnika przenikania ciepła U przegród (ściana, okno, mostki termiczne) na całkowite straty ciepła pomieszczenia.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczanie strat ciepła przez przenikanie",
      "współczynnik przenikania ciepła U",
      "mostki termiczne OZC",
      "kalkulator strat ciepła budynek",
      "norma PN-EN 12831 wzór"
    ],
    "measurementTechnique": "Analiza porównawcza strumieni strat ciepła przez komponenty ściany zewn. wg normy PN-EN 12831 w 3 standardach budowlanych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wzór uwzględnia sumę iloczynów pola powierzchni netto, współczynnika U oraz różnicy temperatur projektowych.",
        "Dla standardu WT 2021 okno i liniowy mostek termiczny wokół ramy generują aż 60,6% strat ciepła przegrody."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-przenikanie",
    "name": "Kalkulator Przenikania Ciepła Przegrody",
    "description": "Narzędzie inżynierskie pozwalające prześledzić krok po kroku obliczenia OZC dla ściany zewnętrznej z oknem, zależnie od standardu izolacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tr-container" id="rk-tr-calc-app">
    
    <div class="rk-tr-header">
        <div class="rk-tr-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Metodologia Normy PN-EN 12831
        </div>
        <h2 class="rk-tr-title">Jak krok po kroku oblicza się <span>straty przez przenikanie?</span></h2>
        <p class="rk-tr-lead">
            Straty ciepła przez przenikanie (&Phi;<sub>T,i</sub>) oblicza się poprzez przemnożenie pola powierzchni przegrody <strong>A [m²]</strong> przez jej współczynnik przenikania ciepła <strong>U [W/(m²·K)]</strong> oraz projektową różnicę temperatur <strong>&Delta;T [K]</strong>. Formuła ta musi bezwzględnie uwzględniać liniowe mostki termiczne <strong>&Psi;</strong> wyrażone w W/(m·K). Ostateczny wynik podaje się z dokładnością do 1 W.
        </p>
        
        <div class="rk-tr-equation-box">
            <div class="rk-tr-equation">
                <span class="rk-tr-equation-chunk">&Phi;<sub>T,i</sub> = &Sigma; (A<sub>k</sub> &times; U<sub>k</sub> &times; f<sub>x,k</sub>)</span> &times; <span class="rk-tr-equation-chunk">(&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)</span> &nbsp;+&nbsp; <span class="rk-tr-equation-chunk">&Sigma; (&Psi;<sub>l</sub> &times; L<sub>l</sub> &times; f<sub>x,l</sub>)</span> &times; <span class="rk-tr-equation-chunk">(&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)</span>
            </div>
            <div class="rk-tr-equation-legend">
                <div><strong>f<sub>x</sub></strong> &#8211; współcz. redukcji temp. (przestrz. nieogrzewane)</div>
                <div><strong>&theta;<sub>int,i</sub></strong> &#8211; temperatura wewnętrzna projektowa</div>
                <div><strong>L</strong> &#8211; długość liniowego mostka termicznego [m]</div>
                <div><strong>&theta;<sub>e</sub></strong> &#8211; temperatura zewnętrzna obliczeniowa</div>
            </div>
        </div>
    </div>

    <div class="rk-tr-interactive">
        <h3 class="rk-tr-section-title">Symulator: Wpływ izolacji na straty ściany z oknem (III strefa, &Delta;T = 40K)</h3>
        
        <div class="rk-tr-controls">
            <button class="rk-tr-btn" data-standard="old">
                <span class="rk-tr-btn-title">Stary Dom</span>
                <span class="rk-tr-btn-sub">Brak izolacji</span>
            </button>
            <button class="rk-tr-btn active" data-standard="wt2021">
                <span class="rk-tr-btn-title">WT 2021</span>
                <span class="rk-tr-btn-sub">Przykład normatywny</span>
            </button>
            <button class="rk-tr-btn" data-standard="passive">
                <span class="rk-tr-btn-title">Dom Pasywny</span>
                <span class="rk-tr-btn-sub">Certyfikowane detale</span>
            </button>
        </div>

        <div class="rk-tr-dashboard">
            <div class="rk-tr-svg-box state-wt2021" id="trSvgBox">
                <svg class="rk-tr-svg" viewBox="0 0 100 100">
                    <rect class="anim-wall-fill" x="20" y="10" width="30" height="80" rx="2" />
                    <rect x="15" y="35" width="40" height="30" fill="#bae6fd" stroke="#0f172a" stroke-width="4" rx="2" />
                    <line x1="15" y1="50" x2="55" y2="50" stroke="#0f172a" stroke-width="2" />
                    
                    <text x="75" y="20" fill="#94a3b8" font-size="10" font-weight="bold">WEWN. (20°C)</text>
                    <text x="5" y="95" fill="#94a3b8" font-size="10" font-weight="bold" transform="rotate(-90 5 95)">ZEWN. (-20°C)</text>
                    
                    <path class="anim-arrow" d="M 70 25 L 10 25" fill="none" stroke-linecap="round" />
                    <path class="anim-arrow" d="M 70 50 L 10 50" fill="none" stroke-linecap="round" />
                    <path class="anim-arrow" d="M 70 75 L 10 75" fill="none" stroke-linecap="round" />
                </svg>
            </div>

            <div>
                <div class="rk-tr-results-grid">
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">1. Ściana netto (13,20 m²)</span>
                        <span class="rk-tr-res-value" id="valWall">79,2 W</span>
                        <span class="rk-tr-res-formula" id="formWall">13,2 &times; 0,15 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">2. Okno 3-szybowe (3,00 m²)</span>
                        <span class="rk-tr-res-value" id="valWin">108,0 W</span>
                        <span class="rk-tr-res-formula" id="formWin">3,00 &times; 0,90 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">3. Mostek Liniowy (7,0 m)</span>
                        <span class="rk-tr-res-value" id="valBridge">14,0 W</span>
                        <span class="rk-tr-res-formula" id="formBridge">7,00 &times; 0,05 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile tile-total">
                        <span class="rk-tr-res-label">Suma strat dla przegrody (&Phi;<sub>T</sub>)</span>
                        <span class="rk-tr-res-value" id="valTotal">201,2 W</span>
                        <span class="rk-tr-res-formula" id="formTotal">79,2 + 108,0 + 14,0 W</span>
                    </div>
                </div>

                <div class="rk-tr-insight-box" id="trInsightText">
                    Wynik pokazuje, że dla ściany o pow. 16,2 m² projektant musi zabezpieczyć <strong>201,2 W</strong> mocy grzewczej. Aż <strong>60,6%</strong> ciepła ucieka przez stolarkę okienną i jej montaż, mimo że okno zajmuje tylko 18,5% powierzchni.
                </div>
            </div>
        </div>
        
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-tr-calc-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji skryptu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja należy do Projekt-Ogrzewania.pl</div></div>';
        return;
    }

    // Elementy DOM
    const btns = document.querySelectorAll('.rk-tr-btn');
    const svgBox = document.getElementById('trSvgBox');
    
    const valWall = document.getElementById('valWall'); const formWall = document.getElementById('formWall');
    const valWin = document.getElementById('valWin'); const formWin = document.getElementById('formWin');
    const valBridge = document.getElementById('valBridge'); const formBridge = document.getElementById('formBridge');
    const valTotal = document.getElementById('valTotal'); const formTotal = document.getElementById('formTotal');
    const insightText = document.getElementById('trInsightText');

    // Baza danych dla 3 wariantów standardu izolacji
    const simData = {
        old: {
            uWall: "1,20", wWall: "633,6 W",
            uWin: "2,80", wWin: "336,0 W",
            uBridge: "0,15", wBridge: "42,0 W",
            total: "1011,6 W",
            formT: "633,6 + 336,0 + 42,0 W",
            insight: "W starym budownictwie przez taką samą ścianę ucieka ponad <strong>1 kW</strong> energii (pięciokrotnie więcej!). Sama pusta ściana bez izolacji odpowiada tu za potężne 62% strat. Wymaga to wysokotemperaturowych grzejników."
        },
        wt2021: {
            uWall: "0,15", wWall: "79,2 W",
            uWin: "0,90", wWin: "108,0 W",
            uBridge: "0,05", wBridge: "14,0 W",
            total: "201,2 W",
            formT: "79,2 + 108,0 + 14,0 W",
            insight: "Wynik pokazuje, że dla ściany o pow. 16,2 m² projektant musi zabezpieczyć <strong>201,2 W</strong> mocy grzewczej. Aż <strong>60,6%</strong> ciepła ucieka przez okno i jego montaż, mimo że zajmuje ono tylko 18,5% powierzchni."
        },
        passive: {
            uWall: "0,10", wWall: "52,8 W",
            uWin: "0,70", wWin: "84,0 W",
            uBridge: "0,01", wBridge: "2,8 W",
            total: "139,6 W",
            formT: "52,8 + 84,0 + 2,8 W",
            insight: "Dzięki ekstremalnej izolacji i tzw. ciepłemu montażowi okna w warstwie ocieplenia (&Psi; bliskie zeru), straty spadają do minimum (<strong>139,6 W</strong>). Ogrzewanie podłogowe może tu pracować na zasilaniu rzędu zaledwie 26°C."
        }
    };

    // Logika przycisków i aktualizacja interfejsu
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const std = this.getAttribute('data-standard');
            const data = simData[std];

            // Zmiana klasy dla animacji SVG (w CSS zmiana koloru ściany i strzałek ciepła)
            svgBox.className = "rk-tr-svg-box state-" + std;

            // Podmiana zawartości paneli liczbowych
            valWall.textContent = data.wWall; formWall.innerHTML = "13,2 &times; " + data.uWall + " &times; 40K";
            valWin.textContent = data.wWin; formWin.innerHTML = "3,00 &times; " + data.uWin + " &times; 40K";
            valBridge.textContent = data.wBridge; formBridge.innerHTML = "7,00 &times; " + data.uBridge + " &times; 40K";
            
            valTotal.textContent = data.total; formTotal.textContent = data.formT;
            insightText.innerHTML = data.insight;
        });
    });
});
</script>



<style>
:root {
    --rk-vent-dark: #0f172a;
    --rk-vent-brand: #0284c7;
    --rk-vent-brand-light: #e0f2fe;
    --rk-vent-accent: #0ea5e9;
    --rk-vent-red: #ef4444;
    --rk-vent-red-bg: #fef2f2;
    --rk-vent-green: #10b981;
    --rk-vent-green-bg: #ecfdf5;
    --rk-vent-bg: #ffffff;
    --rk-vent-panel: #f8fafc;
    --rk-vent-border: #cbd5e1;
    --rk-vent-text: #334155;
    --rk-vent-muted: #64748b;
}

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

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

.rk-vent-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(14, 165, 233, 0.3);
}

.rk-vent-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-vent-title span { color: #38bdf8; }

.rk-vent-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

.rk-link-vent {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: all 0.3s;
}

.rk-link-vent:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Box ze wzorem */
.rk-eq-box {
    background: rgba(0, 0, 0, 0.3);
    border: 1px solid rgba(56, 189, 248, 0.3);
    border-radius: 16px;
    padding: 20px;
    text-align: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
}

.rk-eq {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 22px;
    color: #bae6fd;
    letter-spacing: 1px;
    margin: 0 0 10px 0;
}

.rk-eq-desc {
    font-size: 13px;
    color: #94a3b8;
    margin: 0;
}

.rk-eq-desc strong { color: #e2e8f0; }

/* Interaktywny Panel */
.rk-vent-interactive {
    padding: 40px 50px;
    background: var(--rk-vent-panel);
}

.rk-vent-section-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-vent-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

/* Przełącznik Systemów */
.rk-vent-switcher {
    display: flex;
    justify-content: center;
    margin-bottom: 35px;
}

.rk-app-toggle {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 600px;
}

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

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

.rk-toggle-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-vent-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-toggle[data-mode="rek"] .rk-toggle-glider {
    transform: translateX(100%);
    background: var(--rk-vent-green);
}

/* Dashboard Wyników */
.rk-vent-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-vent-border);
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
    transition: all 0.4s ease;
}

.rk-vent-dashboard.mode-grav { border-color: rgba(239, 68, 68, 0.3); }
.rk-vent-dashboard.mode-rek { border-color: rgba(16, 185, 129, 0.3); }

/* Kontener SVG */
.rk-vent-svg-stage {
    background: var(--rk-vent-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.6);
    position: relative;
    overflow: hidden;
}

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s; width: 100%; height: 100%; }
.rk-vent-dashboard.mode-grav .layer-grav { opacity: 1; position: relative; }
.rk-vent-dashboard.mode-rek .layer-rek { opacity: 1; position: relative; }

/* Animacje SVG */
.anim-air-in { stroke-dasharray: 6 6; animation: flowIn 1s linear infinite; }
.anim-air-out { stroke-dasharray: 6 6; animation: flowOut 0.8s linear infinite; }
.anim-air-rek { stroke-dasharray: 6 6; animation: flowIn 2s linear infinite; }
.anim-heat-exch { animation: pulseCore 2s infinite alternate; }

@keyframes flowIn { from { stroke-dashoffset: 24; } to { stroke-dashoffset: 0; } }
@keyframes flowOut { from { stroke-dashoffset: 0; } to { stroke-dashoffset: 24; } }
@keyframes pulseCore { 0% { fill: #3b82f6; } 100% { fill: #ef4444; } }

/* Siatka Wyników */
.rk-vent-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-vent-tile {
    background: #f1f5f9;
    padding: 18px 20px;
    border-radius: 14px;
    border-left: 4px solid transparent;
    transition: all 0.3s;
    display: flex;
    flex-direction: column;
}

.rk-vent-dashboard.mode-grav .rk-vent-tile { border-left-color: var(--rk-vent-red); background: var(--rk-vent-red-bg); }
.rk-vent-dashboard.mode-rek .rk-vent-tile { border-left-color: var(--rk-vent-green); background: var(--rk-vent-green-bg); }

.rk-vent-tile.tile-full {
    grid-column: 1 / -1;
    background: var(--rk-vent-dark);
    border-color: var(--rk-vent-dark);
}

.rk-tile-lbl { font-size: 11px; text-transform: uppercase; font-weight: 800; color: var(--rk-vent-muted); margin-bottom: 4px; }
.rk-vent-tile.tile-full .rk-tile-lbl { color: #94a3b8; }

.rk-tile-val { font-size: 18px; font-weight: 900; color: var(--rk-vent-dark); transition: color 0.3s; }
.rk-vent-tile.tile-full .rk-tile-val { font-size: 26px; color: var(--rk-vent-accent); }

.rk-tile-sub { font-size: 12px; color: #94a3b8; margin-top: 6px; font-family: monospace; }

@media (max-width: 768px) {
    .rk-vent-header, .rk-vent-interactive { padding: 35px 20px; }
    .rk-vent-title { font-size: 24px; }
    .rk-app-toggle { flex-direction: column; background: transparent; box-shadow: none; gap: 10px; }
    .rk-toggle-glider { display: none; }
    .rk-toggle-btn { background: #e2e8f0; color: #64748b; }
    .rk-toggle-btn.active[data-target="grav"] { background: var(--rk-vent-red); color: #fff; }
    .rk-toggle-btn.active[data-target="rek"] { background: var(--rk-vent-green); color: #fff; }
    .rk-vent-dashboard { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-vent-svg-stage { max-width: 200px; margin: 0 auto; height: 160px; }
    .rk-vent-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-wentylacja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak rodzaj wentylacji wpływa na projektowe straty wentylacyjne?",
    "description": "Zestawienie strat ciepła dla wentylacji grawitacyjnej i rekuperacji. Obliczanie OZC na przykładzie domu 400m3 wg normy PN-EN 12831.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-wentylacja",
    "name": "Porównanie strat wentylacyjnych: Grawitacja vs Rekuperacja",
    "description": "Obliczenia inżynierskie różnicy w zapotrzebowaniu na moc grzewczą w zależności od wybranego systemu wymiany powietrza dla budynku o kubaturze 400 m³.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "straty wentylacyjne wzór",
      "rekuperacja a pompa ciepła",
      "obliczenia OZC wentylacja",
      "wentylacja grawitacyjna straty ciepła",
      "norma PN-B-03430"
    ],
    "measurementTechnique": "Aplikacja wzoru fizycznego ΦV = V * 0,34 * ΔT w zestawieniu ze sprawnością temperaturową wymiennika rekuperatora (η = 85%).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wentylacja Grawitacyjna: Krotność n=0,5 h-1 przy -18°C generuje potężną stratę 2584 W.",
        "Rekuperacja: Odzysk ciepła z η=85% i kontrolowany strumień redukuje stratę do zaledwie 491 W, oszczędzając 2 kW mocy źródła ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-wentylacja",
    "name": "Kalkulator Strat Wentylacyjnych OZC",
    "description": "Interaktywny symulator pozwalający porównać obciążenie cieplne budynku z wentylacją naturalną i mechaniczną z odzyskiem ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-vent-container" id="rk-ozc-vent-app">
    
    <div class="rk-vent-header">
        <div class="rk-vent-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m12.41 11.41A2 2 0 1 1 13 16h9m-1.59-7.41A2 2 0 1 0 19 12h3"></path></svg>
            Dynamika Powietrza
        </div>
        <h2 class="rk-vent-title">Jak rodzaj wentylacji wpływa na <span>projektowe straty wentylacyjne?</span></h2>
        <p class="rk-vent-lead">
            Rodzaj wentylacji decyduje o wielkości strumienia powietrza i stratach wentylacyjnych (Φ<sub>V,i</sub>). System grawitacyjny generuje ucieczkę ciepła na poziomie nawet 40–50% całkowitego bilansu budynku. Zastosowanie <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-link-vent">rekuperacji</a> o udokumentowanej sprawności temperaturowej 85% zmniejsza te straty o ponad 80%.
        </p>
        
        <div class="rk-eq-box">
            <div class="rk-eq">
                Φ<sub>V,i</sub> = V<sub>i</sub> &times; 0,34 &times; (&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)
            </div>
            <p class="rk-eq-desc">
                Gdzie <strong>V<sub>i</sub></strong> to projektowy strumień objętości powietrza [m³/h], a <strong>0,34 Wh/(m³·K)</strong> to stała cieplna powietrza.
            </p>
        </div>
    </div>

    <div class="rk-vent-interactive">
        <h3 class="rk-vent-section-title">Studium przypadku: Dom 400 m³ (II Strefa klimatyczna, &Delta;T = 38 K)</h3>

        <div class="rk-vent-switcher">
            <div class="rk-app-toggle" id="ventSwitchContainer" data-mode="grav">
                <div class="rk-toggle-glider" id="ventGlider"></div>
                <button class="rk-toggle-btn active" data-target="grav">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    Wariant A: Grawitacja
                </button>
                <button class="rk-toggle-btn" data-target="rek">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
                    Wariant B: Rekuperacja
                </button>
            </div>
        </div>

        <div class="rk-vent-dashboard mode-grav" id="ventDashboard">
            
            <div class="rk-vent-svg-stage">
                <svg class="rk-svg-layer layer-grav" viewBox="0 0 100 100">
                    <path d="M 10 50 L 50 20 L 90 50 L 90 90 L 10 90 Z" fill="#1e293b" stroke="#334155" stroke-width="2"/>
                    <rect x="65" y="10" width="10" height="25" fill="#334155" />
                    <path class="anim-air-in" d="M 0 60 L 25 60" fill="none" stroke="#38bdf8" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-air-in" d="M 100 70 L 75 70" fill="none" stroke="#38bdf8" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-air-out" d="M 70 30 L 70 -5" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>
                </svg>
                <svg class="rk-svg-layer layer-rek" viewBox="0 0 100 100">
                    <path d="M 10 50 L 50 20 L 90 50 L 90 90 L 10 90 Z" fill="#1e293b" stroke="#334155" stroke-width="2"/>
                    <rect class="anim-heat-exch" x="40" y="35" width="20" height="15" rx="2" />
                    <path class="anim-air-rek" d="M 10 40 L 40 40" fill="none" stroke="#38bdf8" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 50 65 L 50 50" fill="none" stroke="#ef4444" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 60 40 L 90 40" fill="none" stroke="#f97316" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 50 35 L 50 10" fill="none" stroke="#64748b" stroke-width="2"/>
                </svg>
            </div>

            <div class="rk-vent-grid">
                <div class="rk-vent-tile">
                    <span class="rk-tile-lbl">Strumień Powietrza (V)</span>
                    <span class="rk-tile-val" id="ventValFlow">200 m³/h</span>
                    <span class="rk-tile-sub" id="ventSubFlow">n = 0,5 h<sup>-1</sup> (Infiltracja)</span>
                </div>
                <div class="rk-vent-tile">
                    <span class="rk-tile-lbl">Temp. Nawiewu po wymianie</span>
                    <span class="rk-tile-val" id="ventValTemp">-18°C</span>
                    <span class="rk-tile-sub" id="ventSubTemp">Brak odzysku ciepła</span>
                </div>
                <div class="rk-vent-tile tile-full">
                    <span class="rk-tile-lbl">Projektowa Strata Wentylacyjna (ΦV)</span>
                    <span class="rk-tile-val" id="ventValTotal">2584 W</span>
                    <span class="rk-tile-sub" id="ventSubTotal">200 × 0,34 × 38K</span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-ozc-vent-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // Elementy DOM
    const switchContainer = document.getElementById('ventSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-toggle-btn');
    const dashboard = document.getElementById('ventDashboard');
    
    // Pola tekstowe - Użyto unikalnych prefiksów "vent" w ID
    const valFlow = document.getElementById('ventValFlow'); 
    const subFlow = document.getElementById('ventSubFlow');
    const valTemp = document.getElementById('ventValTemp'); 
    const subTemp = document.getElementById('ventSubTemp');
    const valTotal = document.getElementById('ventValTotal'); 
    const subTotal = document.getElementById('ventSubTotal');

    const ventData = {
        grav: {
            flow: "200 m³/h", sFlow: "n = 0,5 h-1 (Infiltracja mrozu)",
            temp: "-18°C", sTemp: "Mroźne powietrze wpada do domu",
            total: "2584 W", sTotal: "200 × 0,34 × 38K"
        },
        rek: {
            flow: "120 m³/h", sFlow: "Kontrolowany wymóg higieniczny",
            temp: "+14,3°C", sTemp: "Powietrze dogrzane w wymienniku (η = 85%)",
            total: "490,96 W", sTotal: "Zysk: 2093 W (Zawiera nieszczelności)"
        }
    };

    // Logika przycisków
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const mode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', mode);
            dashboard.className = "rk-vent-dashboard mode-" + mode;

            // Podmiana danych bez błędów krzyżowych
            const d = ventData[mode];
            valFlow.innerHTML = d.flow; subFlow.innerHTML = d.sFlow;
            valTemp.innerHTML = d.temp; subTemp.innerHTML = d.sTemp;
            valTotal.innerHTML = d.total; subTotal.innerHTML = d.sTotal;
        });
    });
});
</script>



<style>
:root {
    --rk-res-dark: #0f172a;
    --rk-res-brand: #ea580c; /* Ciepły pomarańcz dla fizyki przewodzenia ciepła */
    --rk-res-brand-light: #ffedd5;
    --rk-res-accent: #f97316;
    --rk-res-green: #10b981;
    --rk-res-green-bg: #ecfdf5;
    --rk-res-red: #ef4444;
    --rk-res-red-bg: #fef2f2;
    --rk-res-bg: #ffffff;
    --rk-res-panel: #f8fafc;
    --rk-res-border: #cbd5e1;
    --rk-res-text: #334155;
    --rk-res-muted: #64748b;
}

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

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

.rk-res-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(234, 88, 12, 0.25);
    color: #ffedd5;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(234, 88, 12, 0.4);
}

.rk-res-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-res-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-res-lead strong {
    color: #ffffff;
    font-weight: 800;
}

.rk-res-lead a {
    color: #ffedd5;
    text-decoration: none;
    border-bottom: 1px dashed #ffedd5;
    transition: color 0.3s;
}

.rk-res-lead a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Interaktywny Panel Wyboru */
.rk-res-interactive {
    padding: 40px 50px;
    background: var(--rk-res-panel);
}

/* Selektor kafelków (Materiały wykończeniowe) */
.rk-res-selector-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 10px;
    margin-bottom: 35px;
}

.rk-res-select-btn {
    background: #ffffff;
    border: 2px solid var(--rk-res-border);
    padding: 15px 10px;
    border-radius: 14px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-res-select-btn:hover {
    background: #f1f5f9;
    border-color: #94a3b8;
    transform: translateY(-2px);
}

.rk-res-select-btn.active {
    border-color: var(--rk-res-brand);
    background: var(--rk-res-brand-light);
}

.rk-btn-txt {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-res-text);
}

.rk-res-select-btn.active .rk-btn-txt {
    color: var(--rk-res-brand);
}

/* Główny Dashboard Prezentacji */
.rk-res-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-res-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 220px 1fr;
    gap: 40px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
}

/* Kontener Wizualizacji SVG */
.rk-res-svg-stage {
    background: var(--rk-res-dark);
    border-radius: 16px;
    padding: 20px;
    height: 220px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
    position: relative;
}

.rk-res-svg {
    width: 100%;
    height: auto;
    display: block;
}

/* Dynamiczne modyfikacje SVG przez klasy narzucane z JS */
.anim-cop-needle { transform-origin: 50px 80px; transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); }
.anim-barrier-layer { transition: height 0.4s ease, fill 0.4s ease; transform-origin: bottom; }

/* Tarcza wydajności COP */
.rk-res-svg-stage[data-material="gres"] .anim-cop-needle { transform: rotate(50deg); }
.rk-res-svg-stage[data-material="pvc"] .anim-cop-needle { transform: rotate(35deg); }
.rk-res-svg-stage[data-material="panele"] .anim-cop-needle { transform: rotate(0deg); }
.rk-res-svg-stage[data-material="deska"] .anim-cop-needle { transform: rotate(-30deg); }
.rk-res-svg-stage[data-material="dywan"] .anim-cop-needle { transform: rotate(-55deg); }

/* Wysokość warstwy oporu cieplnego */
.rk-res-svg-stage[data-material="gres"] .anim-barrier-layer { height: 2px; fill: var(--rk-res-green); }
.rk-res-svg-stage[data-material="pvc"] .anim-barrier-layer { height: 6px; fill: #6ee7b7; }
.rk-res-svg-stage[data-material="panele"] .anim-barrier-layer { height: 14px; fill: #fcd34d; }
.rk-res-svg-stage[data-material="deska"] .anim-barrier-layer { height: 22px; fill: var(--rk-res-accent); }
.rk-res-svg-stage[data-material="dywan"] .anim-barrier-layer { height: 32px; fill: var(--rk-res-red); }

/* Siatka parametrów technicznych */
.rk-res-tiles-panel {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-res-tile {
    background: #f1f5f9;
    padding: 15px 20px;
    border-radius: 12px;
    border-left: 4px solid var(--rk-res-brand);
    transition: all 0.3s;
}

.rk-res-tile.tile-full {
    grid-column: 1 / -1;
    background: var(--rk-res-dark);
    border-left-color: var(--rk-res-accent);
}

.rk-res-tile.norm-alert {
    border-left-color: var(--rk-res-red);
    background: var(--rk-res-red-bg);
}

.rk-tile-lbl {
    display: block;
    font-size: 11px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--rk-res-muted);
    margin-bottom: 4px;
}

.rk-res-tile.tile-full .rk-tile-lbl { color: #94a3b8; }

.rk-tile-val {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-res-dark);
}

.rk-res-tile.tile-full .rk-tile-val { color: #ffffff; font-size: 18px; }
.rk-res-tile.norm-alert .rk-tile-val { color: var(--rk-res-red); }

.rk-tile-sub {
    display: block;
    font-size: 12px;
    color: #64748b;
    margin-top: 4px;
    font-weight: 500;
}
.rk-res-tile.tile-full .rk-tile-sub { color: #cbd5e1; }

@media (max-width: 768px) {
    .rk-res-header, .rk-res-interactive { padding: 35px 25px; }
    .rk-res-header h2 { font-size: 24px; }
    .rk-res-selector-grid { grid-template-columns: 1fr; gap: 10px; }
    .rk-res-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 25px; }
    .rk-res-svg-stage { height: 180px; max-width: 240px; margin: 0 auto; width: 100%; }
    .rk-res-tiles-panel { grid-template-columns: 1fr; gap: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#article-okladziny",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/"
    },
    "headline": "Jak opór cieplny materiałów wykończeniowych zmienia parametry instalacji?",
    "description": "Analiza wpływu oporu cieplnego okładziny wierzchniej (R) na gęstość strumienia ogrzewania podłogowego i współczynnik COP pompy ciepła wg normy PN-EN 1264.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#dataset-okladziny",
    "name": "Zestawienie oporów cieplnych i wydajności typowych materiałów podłogowych",
    "description": "Twarde dane inżynierskie porównujące opory termiczne, gęstość strumienia cieplnego q oraz niezbędną temperaturę zasilania dla 5 rodzajów wykończenia podłogi.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "opór cieplny okładziny podłogowej",
      "norma PN-EN 1264 ogrzewanie",
      "temperatura zasilania podłogówki pompy ciepła",
      "deska warstwowa na ogrzewaniu podłogowym",
      "spadek efektywności COP pompy"
    ],
    "measurementTechnique": "Kalkulacja hydrauliczna i termiczna przenikania energii przez warstwy jastrychu i wykończenia wierzchniego dla stałej straty pomieszczenia 50 W/m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Gres/płytki: Grubość 10mm, opór R=0,015 m2K/W, idealne parametry zasilania 32°C.",
        "Deska warstwowa klejona: Grubość 14mm, wysoki opór R=0,120 m2K/W, podnosi zasilanie do 43°C.",
        "Gruby dywan z podkładem: Przekracza normatywny limit 0,150 m2K/W, generując spadek sprawności źródła grzewczego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#webapp-okladziny",
    "name": "Interaktywny Analizator Opóru Termicznego Podłogi",
    "description": "Narzędzie symulacyjne demonstrujące w czasie rzeczywistym przełożenie fizycznego oporu okładziny wierzchniej na temperaturę zasilania i sprawność pompy ciepła (COP).",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and modern web browser with SVG rendering capability",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-res-container" id="rk-floor-res-app">
    
    <div class="rk-res-header">
        <div class="rk-res-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            Fizyka Przewodzenia Ciepła
        </div>
        <h2>Jak opór cieplny materiałów wykończeniowych zmienia parametry instalacji?</h2>
        <p class="rk-res-lead">
            Opór cieplny okładziny podłogowej (<strong>R<sub>&lambda;,B</sub></strong>) ogranicza strumień energii, a norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a> kategorycznie zabrania przekraczania wartości <strong>0,15 m²·K/W</strong> dla warstw wierzchnich. Wyższy opór cieplny materiału działa niczym izolator, wymuszając podniesienie temperatury zasilania instalacji o <strong>5–12°C</strong>. To bezpośrednio obniża sprawność <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pomp ciepła</a> (spadek COP o ok. 2,5% na każdy stopień w górę). Każdy rodzaj wykończenia musi być precyzyjnie dobrany już na etapie <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">obliczeń projektowych ogrzewania podłogowego</a>.
        </p>
    </div>

    <div class="rk-res-interactive">
        <h3 class="rk-res-section-title">Aplikacja Inżynierska: Porównanie parametrów wykończenia dla straty 50 W/m²</h3>
        
        <div class="rk-res-selector-grid">
            <button class="rk-res-select-btn active" data-mat="gres">
                <span class="rk-btn-txt">Płytki / Gres</span>
            </button>
            <button class="rk-res-select-btn" data-mat="pvc">
                <span class="rk-btn-txt">PVC / LVT</span>
            </button>
            <button class="rk-res-select-btn" data-mat="panele">
                <span class="rk-btn-txt">Panele</span>
            </button>
            <button class="rk-res-select-btn" data-mat="deska">
                <span class="rk-btn-txt">Deska Dąb</span>
            </button>
            <button class="rk-res-select-btn" data-mat="dywan">
                <span class="rk-btn-txt">Gruby Dywan</span>
            </button>
        </div>

        <div class="rk-res-dashboard">
            
            <div class="rk-res-svg-stage" id="resSvgStage" data-material="gres">
                <svg class="rk-res-svg" viewBox="0 0 100 110">
                    <path d="M 15 45 A 35 35 0 0 1 85 45" fill="none" stroke="#334155" stroke-width="6" stroke-linecap="round"/>
                    <path d="M 15 45 A 35 35 0 0 1 50 10" fill="none" stroke="#ef4444" stroke-width="6" stroke-linecap="round"/>
                    <path d="M 50 10 A 35 35 0 0 1 85 45" fill="none" stroke="#10b981" stroke-width="6" stroke-linecap="round"/>
                    <text x="50" y="28" fill="#94a3b8" font-size="7" font-weight="bold" text-anchor="middle">COP POMPY</text>
                    
                    <g class="anim-cop-needle">
                        <line x1="50" y1="45" x2="50" y2="15" stroke="#ffffff" stroke-width="2.5" stroke-linecap="round"/>
                        <circle cx="50" cy="45" r="4" fill="#cbd5e1"/>
                    </g>
                    
                    <rect x="10" y="90" width="80" height="15" fill="#475569" rx="2" />
                    <circle cx="30" cy="97" r="4" fill="#ef4444"/>
                    <circle cx="50" cy="97" r="4" fill="#ef4444"/>
                    <circle cx="70" cy="97" r="4" fill="#ef4444"/>
                    
                    <rect class="anim-barrier-layer" x="10" y="88" width="80" height="2" rx="1"/>
                    <text x="50" y="78" fill="#ffffff" font-size="6" text-anchor="middle" letter-spacing="0.5">BARIERA TERMICZNA</text>
                </svg>
            </div>

            <div class="rk-res-tiles-panel" id="resTilesPanel">
                <div class="rk-res-tile">
                    <span class="rk-tile-lbl">Grubość Materiału</span>
                    <span class="rk-tile-val" id="resValThickness">10 mm</span>
                </div>
                <div class="rk-res-tile" id="resTileLimit">
                    <span class="rk-tile-lbl">Opór cieplny R<sub>&lambda;,B</sub></span>
                    <span class="rk-tile-val" id="resValR">0,015 m²·K/W</span>
                </div>
                <div class="rk-res-tile">
                    <span class="rk-tile-lbl">Max Gęstość Strumienia (q)</span>
                    <span class="rk-tile-val" id="resValQ">95 W/m² (przy t<sub>zas</sub>=35°C)</span>
                </div>
                <div class="rk-res-tile tile-full">
                    <span class="rk-tile-lbl">Wymagana Temp. Zasilania (dla straty 50 W/m²)</span>
                    <span class="rk-tile-val" id="resValZas">32°C (Idealna sprawność układu)</span>
                    <span class="rk-tile-sub" id="resValSub">Zużycie energii elektrycznej w normie projektowej.</span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi - brak tagów H2/H3 w strukturze blokady)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-floor-res-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd ochrony autorskiej</div><div style="font-size:13px; color:#cbd5e1;">Zestawienia Dataset oraz aplikacja symulatora okładzin wierzchnich stanowią integralną własność Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy sterujące i dashboard
    const btns = document.querySelectorAll('.rk-res-select-btn');
    const svgStage = document.getElementById('resSvgStage');
    const tileLimit = document.getElementById('resTileLimit');
    
    // Pola tekstowe kafelków
    const resThickness = document.getElementById('resValThickness');
    const resR = document.getElementById('resValR');
    const resQ = document.getElementById('resValQ');
    const resZas = document.getElementById('resValZas');
    const resSub = document.getElementById('resValSub');

    // Baza danych parametrów technicznych (czyste sznury znaków bez backticków)
    const materialDb = {
        gres: {
            mode: "gres", thickness: "10 mm", rVal: "0,015 m²·K/W",
            qVal: "95 W/m² (Dedykowana podłogówce)",
            zas: "32°C (Idealna sprawność układu)",
            sub: "Doskonała przewodność cieplna ceramiki. Pompa ciepła pracuje z najwyższym możliwym COP.",
            isOver: false
        },
        pvc: {
            mode: "pvc", thickness: "2,5 mm", rVal: "0,030 m²·K/W",
            qVal: "82 W/m² (Wysoka wydajność)",
            zas: "34°C (Stabilne parametry operacyjne)",
            sub: "Niski opór własny cienkich okładzin LVT klejonych do jastrychu. Bardzo dobry materiał.",
            isOver: false
        },
        panele: {
            mode: "panele", thickness: "8 mm", rVal: "0,070 m²·K/W",
            qVal: "60 W/m² (Średni opór materiałowy)",
            zas: "38°C (Wymaga korekty krzywej grzewczej)",
            sub: "Konieczność zastosowania dedykowanego, cienkiego podkładu kwarcowego maty perforowanej.",
            isOver: false
        },
        deska: {
            mode: "deska", thickness: "14 mm", rVal: "0,120 m²·K/W",
            qVal: "42 L/m² (Niska zdolność emisyjna)",
            zas: "43°C (Wzrost zużycia prądu o ok. 27.5%)",
            sub: "Drewno działa jak barierowy izolator. Wymusza podniesienie temperatury wody o 11 K w stosunku do gresu.",
            isOver: false
        },
        dywan: {
            mode: "dywan", thickness: "12 mm", rVal: "0,160 m²·K/W",
            qVal: "28 W/m² (Układ skrajnie dławiony)",
            zas: "47°C (Przekroczenie progu ekonomicznego)",
            sub: "PRZEKROCZONA NORMA PN-EN 1264 (>0,15 m²·K/W). Pompa ciepła traci efektywność i drastycznie rosną rachunki.",
            isOver: true
        }
    };

    // 3. Logika obsługi kliknięć kafelków selektora
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const matKey = this.getAttribute('data-mat');
            const data = materialDb[matKey];

            // Aktualizacja stanu SVG
            svgStage.setAttribute('data-material', data.mode);

            // Podmiana danych liczbowych i opisów
            resThickness.textContent = data.thickness;
            resR.textContent = data.rVal;
            resQ.textContent = data.qVal;
            resZas.textContent = data.zas;
            resSub.textContent = data.sub;

            // Obsługa alertu przekroczenia normy PN-EN 1264
            if (data.isOver) {
                tileLimit.className = "rk-res-tile norm-alert";
                resR.style.color = "var(--rk-res-red)";
            } else {
                tileLimit.className = "rk-res-tile";
                resR.style.color = "var(--rk-res-dark)";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-algo-dark: #0f172a;
    --rk-algo-brand: #8b5cf6; /* Inżynieryjny fiolet/indygo */
    --rk-algo-brand-light: #ede9fe;
    --rk-algo-accent: #f59e0b; /* Bursztyn dla akcentów ciepła */
    --rk-algo-blue: #0ea5e9;
    --rk-algo-bg: #ffffff;
    --rk-algo-panel: #f8fafc;
    --rk-algo-border: #e2e8f0;
    --rk-algo-text: #334155;
    --rk-algo-muted: #64748b;
    --rk-algo-green: #10b981;
}

.rk-algo-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-algo-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(139, 92, 246, 0.15);
    border: 1px solid rgba(139, 92, 246, 0.3);
    overflow: hidden;
}

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

.rk-algo-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.25);
    color: #ddd6fe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(139, 92, 246, 0.4);
}

.rk-algo-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-algo-title span { color: #c4b5fd; }

.rk-algo-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-algo-lead strong {
    color: #ffffff;
    font-weight: 800;
}

/* Sekcja Interaktywna - Blueprint */
.rk-algo-interactive {
    padding: 40px 50px;
    background: var(--rk-algo-panel);
}

/* Nawigacja Krokowa (Step-by-step) */
.rk-algo-steps-nav {
    display: flex;
    justify-content: space-between;
    margin-bottom: 35px;
    position: relative;
}

.rk-algo-steps-nav::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 2px;
    background: var(--rk-algo-border);
    z-index: 1;
    transform: translateY(-50%);
}

.rk-step-btn {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: #ffffff;
    border: 2px solid var(--rk-algo-border);
    color: var(--rk-algo-muted);
    font-weight: 900;
    font-size: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    position: relative;
    z-index: 2;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}

.rk-step-btn:hover {
    border-color: var(--rk-algo-brand);
    color: var(--rk-algo-brand);
    transform: scale(1.1);
}

.rk-step-btn.active {
    background: var(--rk-algo-brand);
    border-color: var(--rk-algo-brand);
    color: #ffffff;
    box-shadow: 0 0 15px rgba(139, 92, 246, 0.4);
    transform: scale(1.15);
}

/* Dashboard Zawartości */
.rk-algo-dashboard {
    display: grid;
    grid-template-columns: 280px 1fr;
    gap: 35px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-algo-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
}

/* Obszar SVG (Styl Blueprint / Schemat) */
.rk-algo-svg-stage {
    background: #1e293b;
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    border: 2px solid #334155;
    background-image: 
        linear-gradient(rgba(255,255,255,0.05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,0.05) 1px, transparent 1px);
    background-size: 20px 20px;
}

.rk-algo-svg { width: 100%; height: auto; max-width: 220px; }

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s ease, transform 0.4s ease; transform: scale(0.95); width: 100%; height: 100%; }
.rk-svg-layer.active { opacity: 1; transform: scale(1); position: relative; }

/* Animacje SVG dla poszczególnych kroków */
/* Krok 1: Geometria */
.anim-measure { stroke-dasharray: 100; stroke-dashoffset: 100; animation: drawLine 1.5s forwards ease-out; }
/* Krok 2: U-value */
.anim-u-layer { opacity: 0; animation: fadeInDown 0.5s forwards; }
/* Krok 3: Straty bazowe */
.anim-heat-base { stroke-dasharray: 8 8; animation: heatFlowBase 1.5s linear infinite; }
/* Krok 4: Mostki */
.anim-bridge { animation: pulseBridge 1.5s infinite alternate; }
/* Krok 5: Wentylacja */
.anim-fan-spin { transform-origin: 50px 50px; animation: spinFan 2s linear infinite; }
.anim-air-flow { stroke-dasharray: 5 10; animation: heatFlowBase 1s linear infinite; }
/* Krok 6: Suma */
.anim-sum-glow { animation: pulseSum 2s infinite alternate; }

@keyframes drawLine { to { stroke-dashoffset: 0; } }
@keyframes fadeInDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes heatFlowBase { to { stroke-dashoffset: -16; } }
@keyframes pulseBridge { 0% { fill: #ef4444; filter: drop-shadow(0 0 2px #ef4444); } 100% { fill: #fca5a5; filter: drop-shadow(0 0 10px #ef4444); } }
@keyframes spinFan { to { transform: rotate(360deg); } }
@keyframes pulseSum { 0% { fill: #c4b5fd; filter: drop-shadow(0 0 5px #8b5cf6); } 100% { fill: #ffffff; filter: drop-shadow(0 0 20px #8b5cf6); } }

/* Treść Panelu */
.rk-algo-content {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-algo-step-badge {
    font-size: 11px;
    font-weight: 800;
    color: var(--rk-algo-brand);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
}

.rk-algo-content h3 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-algo-dark);
}

.rk-algo-content p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

/* Sekcja Wzoru (HTML Math zamiast LaTeX) */
.rk-algo-formula-box {
    background: var(--rk-algo-dark);
    border-radius: 12px;
    padding: 15px 20px;
    margin-top: auto;
    border-left: 4px solid var(--rk-algo-brand);
}

.rk-formula-math {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 20px;
    color: #ddd6fe;
    letter-spacing: 1px;
    margin: 0 0 8px 0;
    text-align: center;
}

.rk-formula-desc {
    font-size: 12px;
    color: #94a3b8;
    text-align: center;
    margin: 0;
}
.rk-formula-desc strong { color: #cbd5e1; }

@media (max-width: 768px) {
    .rk-algo-header, .rk-algo-interactive { padding: 35px 20px; }
    .rk-algo-title { font-size: 24px; }
    .rk-algo-dashboard { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-algo-svg-stage { height: 200px; max-width: 100%; margin-bottom: 10px; }
    .rk-step-btn { width: 36px; height: 36px; font-size: 14px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak wygląda uproszczony algorytm kalkulatora OZC?",
    "description": "Poznaj 6 kroków sekwencyjnego obliczania oporów przegród, strat bazowych, mostków termicznych i wentylacji wg normy PN-EN 12831.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-algorytm",
    "name": "Algorytm obliczeniowy OZC - Zestawienie Wzorów",
    "description": "Zbiór uproszczonych formuł fizycznych używanych do wyznaczania projektowego obciążenia cieplnego budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator OZC algorytm",
      "straty bazowe przez przenikanie wzór",
      "poprawka na mostki termiczne",
      "obliczenie strat wentylacyjnych wzór",
      "współczynnik przenikania ciepła U"
    ],
    "measurementTechnique": "Sekwencyjna metoda obliczeniowa zgodna z normą PN-EN 12831 integrująca straty przenikania i wentylacji (ΦHL = ΦT,corr + ΦV,total).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1-2: Geometria (A, ΔT) i opór cieplny (U).",
        "Krok 3-4: Straty bazowe (ΦT,base) i korekta na mostki cieplne (+15%).",
        "Krok 5-6: Straty wentylacyjne (ΦV,total) uwzględniające rekuperację oraz suma końcowa mocy grzewczej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-algorytm",
    "name": "Interaktywny Algorytm OZC",
    "description": "Narzędzie demonstracyjne przeprowadzające użytkownika przez 6 kluczowych kroków inżynieryjnych obliczeń strat ciepła budynku.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-algo-container" id="rk-algo-app">
    
    <div class="rk-algo-header">
        <div class="rk-algo-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Inżynieria w pigułce
        </div>
        <h2 class="rk-algo-title">Jak wygląda <span>uproszczony algorytm</span> kalkulatora OZC?</h2>
        <p class="rk-algo-lead">
            Uproszczony algorytm obliczeniowy OZC opiera się na sekwencyjnym wyznaczaniu oporów przegród, strat bazowych oraz dodawaniu poprawek na mostki termiczne i wentylację zgodnie z rygorystyczną metodologią <strong>PN-EN 12831</strong>. Poniżej przedstawiamy 6 kluczowych kroków prowadzących do wyznaczenia ostatecznej mocy źródła ciepła.
        </p>
    </div>

    <div class="rk-algo-interactive">
        
        <div class="rk-algo-steps-nav" id="algoSteps">
            <div class="rk-step-btn active" data-step="1">1</div>
            <div class="rk-step-btn" data-step="2">2</div>
            <div class="rk-step-btn" data-step="3">3</div>
            <div class="rk-step-btn" data-step="4">4</div>
            <div class="rk-step-btn" data-step="5">5</div>
            <div class="rk-step-btn" data-step="6">6</div>
        </div>

        <div class="rk-algo-dashboard">
            
            <div class="rk-algo-svg-stage">
                
                <svg class="rk-svg-layer active" id="svg-step-1" viewBox="0 0 100 100">
                    <rect x="20" y="30" width="60" height="50" fill="none" stroke="#64748b" stroke-width="2"/>
                    <polygon points="20,30 50,10 80,30" fill="none" stroke="#64748b" stroke-width="2"/>
                    <line class="anim-measure" x1="10" y1="30" x2="10" y2="80" stroke="#38bdf8" stroke-width="2" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
                    <line class="anim-measure" x1="20" y1="90" x2="80" y2="90" stroke="#38bdf8" stroke-width="2" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
                    <text x="50" y="55" fill="#38bdf8" font-size="12" font-weight="bold" text-anchor="middle">ΔT</text>
                    <defs>
                        <marker id="arrow" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="4" markerHeight="4" orient="auto-start-reverse">
                            <path d="M 0 0 L 10 5 L 0 10 z" fill="#38bdf8" />
                        </marker>
                    </defs>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-2" viewBox="0 0 100 100">
                    <rect class="anim-u-layer" x="30" y="10" width="10" height="80" fill="#334155" />
                    <rect class="anim-u-layer" x="40" y="10" width="20" height="80" fill="#475569" style="animation-delay: 0.2s" />
                    <rect class="anim-u-layer" x="60" y="10" width="10" height="80" fill="#64748b" style="animation-delay: 0.4s" />
                    <text x="50" y="55" fill="#f59e0b" font-size="14" font-weight="bold" text-anchor="middle" style="animation-delay: 0.6s">U</text>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-3" viewBox="0 0 100 100">
                    <rect x="40" y="10" width="20" height="80" fill="#334155" />
                    <path class="anim-heat-base" d="M 80 30 L 20 30" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>
                    <path class="anim-heat-base" d="M 80 50 L 20 50" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round" style="animation-delay: 0.3s"/>
                    <path class="anim-heat-base" d="M 80 70 L 20 70" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round" style="animation-delay: 0.6s"/>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-4" viewBox="0 0 100 100">
                    <rect x="20" y="20" width="60" height="60" fill="none" stroke="#475569" stroke-width="6"/>
                    <rect x="35" y="35" width="30" height="30" fill="none" stroke="#64748b" stroke-width="4"/>
                    <circle class="anim-bridge" cx="35" cy="35" r="5" />
                    <circle class="anim-bridge" cx="65" cy="35" r="5" style="animation-delay: 0.2s" />
                    <circle class="anim-bridge" cx="35" cy="65" r="5" style="animation-delay: 0.4s" />
                    <circle class="anim-bridge" cx="65" cy="65" r="5" style="animation-delay: 0.6s" />
                </svg>

                <svg class="rk-svg-layer" id="svg-step-5" viewBox="0 0 100 100">
                    <circle cx="50" cy="50" r="30" fill="none" stroke="#475569" stroke-width="4"/>
                    <g class="anim-fan-spin">
                        <path d="M 50 50 L 50 25 A 25 25 0 0 1 75 50 Z" fill="#0ea5e9" opacity="0.8"/>
                        <path d="M 50 50 L 50 75 A 25 25 0 0 1 25 50 Z" fill="#0ea5e9" opacity="0.8"/>
                    </g>
                    <path class="anim-air-flow" d="M 10 50 L 30 50" fill="none" stroke="#38bdf8" stroke-width="3"/>
                    <path class="anim-air-flow" d="M 90 50 L 70 50" fill="none" stroke="#ef4444" stroke-width="3"/>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-6" viewBox="0 0 100 100">
                    <circle cx="50" cy="50" r="40" fill="none" stroke="#475569" stroke-width="2" stroke-dasharray="4 4"/>
                    <text class="anim-sum-glow" x="50" y="58" font-family="serif" font-size="28" font-weight="bold" text-anchor="middle">&Phi;</text>
                </svg>
            </div>

            <div class="rk-algo-content">
                <span class="rk-algo-step-badge" id="algoStepBadge">KROK 1 Z 6</span>
                <h3 id="algoTitle">Zdefiniowanie geometrii</h3>
                <p id="algoDesc">
                    Oblicz pola powierzchni wszystkich przegród zewnętrznych (A) z podziałem na kierunki świata oraz ustal projektową różnicę temperatur (ΔT) na podstawie strefy klimatycznej.
                </p>
                
                <div class="rk-algo-formula-box">
                    <div class="rk-formula-math" id="algoFormulaMath">&Delta;T = (&theta;<sub>int</sub> &minus; &theta;<sub>e</sub>)</div>
                    <p class="rk-formula-desc" id="algoFormulaDesc"><strong>&Delta;T</strong> &#8211; różnica temperatur zewn. i wewn.</p>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-algo-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // Elementy DOM
    const stepBtns = document.querySelectorAll('.rk-step-btn');
    const badge = document.getElementById('algoStepBadge');
    const title = document.getElementById('algoTitle');
    const desc = document.getElementById('algoDesc');
    const fMath = document.getElementById('algoFormulaMath');
    const fDesc = document.getElementById('algoFormulaDesc');

    // Baza danych algorytmu (Używamy zwykłego HTML dla matematyki)
    const algoData = {
        "1": {
            title: "Zdefiniowanie geometrii",
            desc: "Oblicz pola powierzchni wszystkich przegród zewnętrznych (A) z podziałem na kierunki świata oraz ustal projektową różnicę temperatur na podstawie lokalnej strefy klimatycznej.",
            math: "&Delta;T = (&theta;<sub>int</sub> &minus; &theta;<sub>e</sub>)",
            fdesc: "<strong>&Delta;T</strong> - różnica temperatur"
        },
        "2": {
            title: "Wyznaczenie współczynników U",
            desc: "Dla każdej przegrody oblicz opór cieplny warstw materiałowych R (dzieląc grubość przez przewodność), a następnie wyznacz ostateczny współczynnik przenikania ciepła U.",
            math: "U = 1 / (&Sigma;R + R<sub>si</sub> + R<sub>se</sub>)",
            fdesc: "<strong>U</strong> - współczynnik przenikania ciepła [W/(m&sup2;&middot;K)]"
        },
        "3": {
            title: "Kalkulacja strat bazowych",
            desc: "Pomnóż pole powierzchni danej przegrody przez jej współczynnik U oraz wyznaczoną wcześniej różnicę temperatur. Daje to czystą stratę przenikania bez błędów montażowych.",
            math: "&Phi;<sub>T,base</sub> = A &times; U &times; &Delta;T",
            fdesc: "<strong>&Phi;<sub>T,base</sub></strong> - bazowa strata przez przenikanie"
        },
        "4": {
            title: "Poprawka na mostki termiczne",
            desc: "Skoryguj straty bazowe o dodatek na mostki liniowe (miejsca słabszej izolacji m.in. przy oknach i nadprożach). Standardowo przyjmuje się dodatek +15% dla budownictwa tradycyjnego.",
            math: "&Phi;<sub>T,corr</sub> = &Phi;<sub>T,base</sub> &times; 1,15",
            fdesc: "<strong>1,15</strong> - uproszczony globalny dodatek na mostki"
        },
        "5": {
            title: "Obliczenie strat wentylacyjnych",
            desc: "Wyznacz strumień powietrza V [m³/h] zależnie od systemu. Oblicz stratę uwzględniając ciepło właściwe powietrza oraz sprawność odzysku ciepła (rekuperacji).",
            math: "&Phi;<sub>V,total</sub> = V &times; 0,34 &times; &Delta;T &times; (1 &minus; &eta;)",
            fdesc: "<strong>&eta;</strong> - sprawność odzysku ciepła (rekuperacji)"
        },
        "6": {
            title: "Sumowanie końcowe",
            desc: "Dodaj skorygowane straty przez przenikanie do obliczonych strat wentylacyjnych. Otrzymany wynik to całkowita szczytowa moc projektowa budynku, determinująca dobór pompy ciepła.",
            math: "&Phi;<sub>HL</sub> = &Phi;<sub>T,corr</sub> + &Phi;<sub>V,total</sub>",
            fdesc: "<strong>&Phi;<sub>HL</sub></strong> - Projektowe Obciążenie Cieplne (OZC)"
        }
    };

    // Logika kroków
    stepBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const step = this.getAttribute('data-step');
            
            // Przyciski
            stepBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // SVG Warstwy
            document.querySelectorAll('.rk-svg-layer').forEach(layer => layer.classList.remove('active'));
            document.getElementById('svg-step-' + step).classList.add('active');

            // Teksty
            const data = algoData[step];
            badge.textContent = "KROK " + step + " Z 6";
            title.textContent = data.title;
            desc.textContent = data.desc;
            fMath.innerHTML = data.math;
            fDesc.innerHTML = data.fdesc;
        });
    });
});
</script>



<style>
:root {
    --rk-sim-dark: #0f172a;
    --rk-sim-brand: #8b5cf6; /* Inżynieryjny fiolet */
    --rk-sim-brand-light: #ede9fe;
    --rk-sim-accent: #f59e0b; /* Bursztyn/Ciepło */
    --rk-sim-blue: #0ea5e9;
    --rk-sim-bg: #ffffff;
    --rk-sim-panel: #f8fafc;
    --rk-sim-border: #e2e8f0;
    --rk-sim-text: #334155;
    --rk-sim-muted: #64748b;
    --rk-sim-green: #10b981;
    --rk-sim-red: #ef4444;
}

.rk-sim-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-sim-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(139, 92, 246, 0.15);
    border: 1px solid rgba(139, 92, 246, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-sim-header {
    background: linear-gradient(135deg, var(--rk-sim-dark) 0%, #2e1065 100%);
    padding: 40px 50px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-sim-brand);
    text-align: center;
}

.rk-sim-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.25);
    color: #ddd6fe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(139, 92, 246, 0.4);
}

.rk-sim-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 15px 0;
    color: #ffffff;
}

.rk-sim-title span { color: #c4b5fd; }

.rk-sim-lead {
    font-size: 16px;
    line-height: 1.6;
    color: #cbd5e1;
    margin: 0 auto;
    max-width: 800px;
}

/* Główny układ interfejsu */
.rk-sim-interactive {
    padding: 40px 50px;
    background: var(--rk-sim-panel);
}

/* Postęp w symulatorze */
.rk-sim-progress-bar {
    display: flex;
    justify-content: space-between;
    margin-bottom: 30px;
    position: relative;
    padding: 0 10px;
}

.rk-sim-progress-bar::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 20px;
    right: 20px;
    height: 4px;
    background: var(--rk-sim-border);
    z-index: 1;
    transform: translateY(-50%);
    border-radius: 2px;
}

.rk-sim-progress-fill {
    position: absolute;
    top: 50%;
    left: 20px;
    height: 4px;
    background: var(--rk-sim-brand);
    z-index: 1;
    transform: translateY(-50%);
    border-radius: 2px;
    transition: width 0.4s ease;
    width: 0%;
}

.rk-step-node {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-sim-border);
    color: transparent;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    z-index: 2;
    transition: all 0.4s ease;
}

.rk-step-node.completed { background: var(--rk-sim-brand); }
.rk-step-node.active { background: var(--rk-sim-brand); box-shadow: 0 0 0 6px var(--rk-sim-brand-light); }

/* Dashboard Symulatora */
.rk-sim-dashboard {
    display: grid;
    grid-template-columns: 1fr 300px;
    gap: 30px;
}

/* Sekcja formularzy (Lewa) */
.rk-sim-controls {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-sim-border);
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.02);
}

.rk-step-view { display: none; animation: fadeIn 0.4s ease; }
.rk-step-view.active { display: block; }

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

.rk-step-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-sim-dark);
    margin: 0 0 10px 0;
}

.rk-step-desc {
    font-size: 14px;
    color: var(--rk-sim-muted);
    line-height: 1.6;
    margin: 0 0 25px 0;
}

/* Elementy formularza */
.rk-form-group { margin-bottom: 25px; }

.rk-form-label {
    display: block;
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-sim-text);
    margin-bottom: 8px;
    text-transform: uppercase;
}

.rk-range-wrap {
    display: flex;
    align-items: center;
    gap: 15px;
}

.rk-range-input {
    flex: 1;
    -webkit-appearance: none;
    height: 8px;
    background: #e2e8f0;
    border-radius: 4px;
    outline: none;
}

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

.rk-val-display {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-sim-brand);
    min-width: 60px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* Radio Buttons dla standardów (Wymuszono układ pionowy) */
.rk-radio-group { 
    display: flex; 
    flex-direction: column; 
    gap: 10px; 
}

.rk-radio-btn {
    width: 100%;
    padding: 15px 20px;
    text-align: left;
    background: var(--rk-sim-panel);
    border: 2px solid var(--rk-sim-border);
    border-radius: 10px;
    cursor: pointer;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-sim-muted);
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.rk-radio-btn span {
    font-size: 12px;
    font-weight: 400;
}

.rk-radio-btn.selected {
    background: var(--rk-sim-brand-light);
    border-color: var(--rk-sim-brand);
    color: var(--rk-sim-brand);
}

/* Przyciski Nawigacji Wewnętrznej */
.rk-nav-actions {
    display: flex;
    flex-direction: row; /* Zawsze poziomo */
    justify-content: space-between;
    align-items: center;
    gap: 15px; /* Odstęp między przyciskami */
    margin-top: 30px;
    padding-top: 20px;
    border-top: 1px solid var(--rk-sim-border);
}

.rk-action-btn {
    padding: 14px 24px; /* Grubsze buttony */
    border-radius: 10px;
    font-size: 15px;
    font-weight: 800;
    cursor: pointer;
    transition: all 0.2s;
    border: none;
    flex: 1; /* Równy podział szerokości na mobile */
    text-align: center;
}

.rk-btn-prev { background: #e2e8f0; color: #64748b; flex: 0.5; /* Mniejszy guzik "Wróć" */ }
.rk-btn-prev:hover { background: #cbd5e1; }
.rk-btn-prev:disabled { opacity: 0; pointer-events: none; }

.rk-btn-next { background: var(--rk-sim-brand); color: #ffffff; box-shadow: 0 4px 10px rgba(139, 92, 246, 0.3); }
.rk-btn-next:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(139, 92, 246, 0.4); }

/* Sekcja Wyników (Prawa) */
.rk-sim-results-panel {
    background: var(--rk-sim-dark);
    border-radius: 20px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
}

.rk-res-header-txt {
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #94a3b8;
    margin-bottom: 20px;
    letter-spacing: 1px;
}

/* Wiersze podsumowania */
.rk-calc-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 0;
    border-bottom: 1px dashed rgba(255,255,255,0.1);
    font-size: 14px;
}

.rk-calc-row:last-of-type { border-bottom: none; }

.rk-row-lbl { color: #cbd5e1; }
.rk-row-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }
.rk-val-hl { color: var(--rk-sim-accent); }

/* Końcowy Wynik OZC */
.rk-final-result-box {
    margin-top: auto;
    background: rgba(139, 92, 246, 0.2);
    border: 1px solid rgba(139, 92, 246, 0.4);
    border-radius: 14px;
    padding: 20px;
    text-align: center;
}

.rk-final-lbl { font-size: 11px; font-weight: 800; color: #ddd6fe; text-transform: uppercase; margin-bottom: 5px; display: block; }
.rk-final-val { font-size: 32px; font-weight: 900; color: #ffffff; line-height: 1; margin-bottom: 5px; transition: color 0.3s;}
.rk-final-formula { font-size: 11px; color: #a78bfa; font-family: monospace; }

/* SVG Dynamiczny Wykres */
.rk-live-chart {
    height: 100px;
    margin-bottom: 20px;
    width: 100%;
}
.chart-bar { transition: height 0.4s ease, y 0.4s ease; }

@media (max-width: 768px) {
    .rk-sim-header, .rk-sim-interactive { padding: 30px 20px; }
    .rk-sim-title { font-size: 24px; }
    .rk-sim-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-radio-group { flex-direction: column; }
    .rk-step-view { min-height: auto; }
    .rk-action-btn { font-size: 13px; padding: 12px 16px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak wygląda uproszczony algorytm kalkulatora OZC?",
    "description": "Poznaj 4 kroki sekwencyjnego obliczania oporów przegród, strat bazowych, mostków termicznych i wentylacji wg normy PN-EN 12831.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-algorytm",
    "name": "Algorytm obliczeniowy OZC - Zestawienie Wzorów",
    "description": "Zbiór uproszczonych formuł fizycznych używanych do wyznaczania projektowego obciążenia cieplnego budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator OZC algorytm",
      "straty bazowe przez przenikanie wzór",
      "poprawka na mostki termiczne",
      "obliczenie strat wentylacyjnych wzór",
      "współczynnik przenikania ciepła U"
    ],
    "measurementTechnique": "Sekwencyjna metoda obliczeniowa zgodna z normą PN-EN 12831 integrująca straty przenikania i wentylacji (ΦHL = ΦT,corr + ΦV,total).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Geometria ściany (A) i różnica temperatur (ΔT).",
        "Krok 2: Ustalenie oporu cieplnego (U) przegrody.",
        "Krok 3: Obliczenie bazowej straty przenikania z uwzględnieniem mostków termicznych.",
        "Krok 4: Dodanie strat wentylacyjnych (ΦV,total) uwzględniających rekuperację oraz suma końcowa mocy grzewczej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-algorytm",
    "name": "Kalkulator Edukacyjny OZC",
    "description": "Interaktywny symulator pozwalający na żywo przeliczać straty ciepła przykładowej ściany w zależności od parametrów izolacji i wentylacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-sim-container" id="rk-sim-app">
    
    <div class="rk-sim-header">
        <div class="rk-sim-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Inżynieria na żywo
        </div>
        <h2 class="rk-sim-title">Zrozum fizykę: <span>Uproszczony Kalkulator OZC</span></h2>
        <p class="rk-sim-lead">
            Algorytm obliczeniowy normy <strong>PN-EN 12831</strong> polega na żmudnym, sekwencyjnym wyznaczaniu oporów przegród, strat bazowych, mostków i wentylacji. Abyś zrozumiał skalę ucieczki ciepła ze swojego domu, stworzyliśmy uproszczony symulator. Sprawdź, jak jedna zmiana izolacji wpływa na wynik końcowy dla przykładowego pomieszczenia.
        </p>
    </div>

    <div class="rk-sim-interactive">
        
        <div class="rk-sim-progress-bar">
            <div class="rk-sim-progress-fill" id="simProgressLine"></div>
            <div class="rk-step-node active" id="node-1">1</div>
            <div class="rk-step-node" id="node-2">2</div>
            <div class="rk-step-node" id="node-3">3</div>
            <div class="rk-step-node" id="node-4">4</div>
        </div>

        <div class="rk-sim-dashboard">
            
            <div class="rk-sim-controls">
                
                <div class="rk-step-view active" id="view-1">
                    <h3 class="rk-step-title">Krok 1: Geometria i Klimat</h3>
                    <p class="rk-step-desc">Ustal pole powierzchni analizowanej ściany zewnętrznej oraz projektową różnicę temperatur na zewnątrz (Zima).</p>
                    
                    <div class="rk-form-group">
                        <label class="rk-form-label">Powierzchnia ściany (A)</label>
                        <div class="rk-range-wrap">
                            <input type="range" id="inpArea" class="rk-range-input" min="10" max="40" value="16" step="1">
                            <div class="rk-val-display"><span id="valAreaOut">16</span> m²</div>
                        </div>
                    </div>
                    
                    <div class="rk-form-group">
                        <label class="rk-form-label">Temperatura Zewnętrzna (θe)</label>
                        <div class="rk-range-wrap">
                            <input type="range" id="inpTemp" class="rk-range-input" min="-24" max="-16" value="-20" step="2">
                            <div class="rk-val-display"><span id="valTempOut">-20</span> °C</div>
                        </div>
                        <div style="font-size:11px; color:#94a3b8; margin-top:5px;">Wewn. stała: +20°C (ΔT = <span id="valDeltaOut">40</span>K)</div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-2">
                    <h3 class="rk-step-title">Krok 2: Izolacja (Współczynnik U)</h3>
                    <p class="rk-step-desc">Określ standard izolacji ściany. Zgodnie z prawem, mniejsze U oznacza lepsze zatrzymywanie ciepła.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn" data-u="1.20">
                            <strong>Stary dom</strong>
                            <span>Brak izolacji</span>
                        </div>
                        <div class="rk-radio-btn selected" data-u="0.15">
                            <strong>WT 2021</strong>
                            <span>Standard prawny</span>
                        </div>
                        <div class="rk-radio-btn" data-u="0.10">
                            <strong>Pasywny</strong>
                            <span>Izolacja premium</span>
                        </div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-3">
                    <h3 class="rk-step-title">Krok 3: Mostki termiczne</h3>
                    <p class="rk-step-desc">Pusta ściana to fikcja. Dodaj procentową poprawkę na okna, nadproża i błędy montażowe.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn selected" data-bridge="1.0">
                            <strong>0%</strong>
                            <span>Warunki laboratoryjne</span>
                        </div>
                        <div class="rk-radio-btn" data-bridge="1.15">
                            <strong>+15%</strong>
                            <span>Standard budowlany</span>
                        </div>
                        <div class="rk-radio-btn" data-bridge="1.30">
                            <strong>+30%</strong>
                            <span>Duże przeszklenia</span>
                        </div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-4">
                    <h3 class="rk-step-title">Krok 4: System Wentylacji</h3>
                    <p class="rk-step-desc">Zimne powietrze z zewnątrz wpadające do pokoju trzeba dogrzać. Wybierz rodzaj wentylacji.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn selected" data-vent="gravity">
                            <strong>Grawitacyjna (Naturalna)</strong>
                            <span>Zimne powietrze zasysane w 100% z zewnątrz.</span>
                        </div>
                        <div class="rk-radio-btn" data-vent="reku">
                            <strong>Rekuperacja (Odzysk 85%)</strong>
                            <span>Powietrze dogrzane w wymienniku ciepła.</span>
                        </div>
                    </div>
                </div>

                <div class="rk-nav-actions">
                    <button class="rk-action-btn rk-btn-prev" id="btnPrev" disabled>Wróć</button>
                    <button class="rk-action-btn rk-btn-next" id="btnNext">Przejdź dalej</button>
                </div>
            </div>

            <div class="rk-sim-results-panel">
                <div class="rk-res-header-txt">Bieżący Bilans Pomieszczenia</div>
                
                <svg class="rk-live-chart" viewBox="0 0 100 100" preserveAspectRatio="none">
                    <rect x="10" y="80" width="30" height="20" fill="#f59e0b" class="chart-bar" id="barTrans"/>
                    <rect x="60" y="80" width="30" height="20" fill="#0ea5e9" class="chart-bar" id="barVent"/>
                </svg>

                <div class="rk-calc-row">
                    <span class="rk-row-lbl">1. Przenikanie ściany:</span>
                    <span class="rk-row-val"><span id="outWall">96</span> W</span>
                </div>
                <div class="rk-calc-row">
                    <span class="rk-row-lbl">2. Poprawka (Mostki):</span>
                    <span class="rk-row-val" style="color:#ef4444;">+<span id="outBridge">0</span> W</span>
                </div>
                <div class="rk-calc-row">
                    <span class="rk-row-lbl">3. Strata wentylacyjna:</span>
                    <span class="rk-row-val" style="color:#38bdf8;">+<span id="outVent">408</span> W</span>
                </div>

                <div class="rk-final-result-box">
                    <span class="rk-final-lbl">Szacunkowe OZC (Moc grzewcza)</span>
                    <div class="rk-final-val"><span id="outTotal">504</span> W</div>
                    <div class="rk-final-formula">ΦHL = ΦT,corr + ΦV,total</div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-sim-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy Nawigacji
    let currentStep = 1;
    const totalSteps = 4;
    const btnNext = document.getElementById('btnNext');
    const btnPrev = document.getElementById('btnPrev');
    const progLine = document.getElementById('simProgressLine');

    // 3. Stan Kalkulatora
    let state = {
        area: 16,
        tempOut: -20,
        tempIn: 20,
        uValue: 0.15,
        bridgeFactor: 1.0,
        ventType: 'gravity'
    };

    // 4. Elementy Formularza
    const inpArea = document.getElementById('inpArea');
    const valAreaOut = document.getElementById('valAreaOut');
    const inpTemp = document.getElementById('inpTemp');
    const valTempOut = document.getElementById('valTempOut');
    const valDeltaOut = document.getElementById('valDeltaOut');

    const radUValues = document.querySelectorAll('#view-2 .rk-radio-btn');
    const radBridges = document.querySelectorAll('#view-3 .rk-radio-btn');
    const radVents = document.querySelectorAll('#view-4 .rk-radio-btn');

    // 5. Elementy Wyjściowe (Wyniki)
    const outWall = document.getElementById('outWall');
    const outBridge = document.getElementById('outBridge');
    const outVent = document.getElementById('outVent');
    const outTotal = document.getElementById('outTotal');
    const barTrans = document.getElementById('barTrans');
    const barVent = document.getElementById('barVent');

    // --- FUNKCJE OBLICZENIOWE ---
    function calculateOZC() {
        const deltaT = state.tempIn - state.tempOut;
        
        // 1. Przenikanie bazy (A * U * dT)
        const phiBase = state.area * state.uValue * deltaT;
        
        // 2. Przenikanie z mostkami
        const phiCorr = phiBase * state.bridgeFactor;
        const bridgeDiff = phiCorr - phiBase;

        // 3. Wentylacja (Uproszczenie dla pokoju: Kubatura ok 40m3. Strumień V=20m3/h)
        const vol = state.area * 2.5; // Kubatura
        let vAir = vol * 0.5; // Krotność wymiany
        let ventLoss = 0;

        if (state.ventType === 'gravity') {
            ventLoss = vAir * 0.34 * deltaT;
        } else {
            // Rekuperacja 85% sprawności
            ventLoss = vAir * 0.34 * deltaT * 0.15;
        }

        // 4. Suma Całkowita
        const totalLoss = phiCorr + ventLoss;

        // Aktualizacja interfejsu z animacją liczb
        animateValue(outWall, Math.round(phiBase));
        animateValue(outBridge, Math.round(bridgeDiff));
        animateValue(outVent, Math.round(ventLoss));
        animateValue(outTotal, Math.round(totalLoss));

        // Aktualizacja słupków SVG (Wizualizacja proporcji)
        // Zakładamy max wartość ok 2000W dla starych domów, by słupki nie wychodziły poza SVG
        const scale = 100 / 2000; 
        let hTrans = Math.min(Math.round(phiCorr * scale), 100);
        let hVent = Math.min(Math.round(ventLoss * scale), 100);
        
        // Zapewnienie minimalnej widoczności słupka
        hTrans = Math.max(hTrans, 2);
        hVent = Math.max(hVent, 2);

        barTrans.setAttribute('height', hTrans);
        barTrans.setAttribute('y', 100 - hTrans);
        barVent.setAttribute('height', hVent);
        barVent.setAttribute('y', 100 - hVent);
        
        // Kolorowanie finału
        const finalValBox = document.querySelector('.rk-final-val');
        if(totalLoss > 1000) { finalValBox.style.color = '#ef4444'; } 
        else if (totalLoss < 300) { finalValBox.style.color = '#10b981'; }
        else { finalValBox.style.color = '#ffffff'; }
    }

    function animateValue(obj, end) {
        // Prosta podmiana dla płynności na mobile, bez ciężkich setInterval
        obj.textContent = end;
    }

    // --- BINDING EVENTÓW ---

    // Krok 1: Suwaki
    inpArea.addEventListener('input', (e) => {
        state.area = parseInt(e.target.value);
        valAreaOut.textContent = state.area;
        calculateOZC();
    });

    inpTemp.addEventListener('input', (e) => {
        state.tempOut = parseInt(e.target.value);
        valTempOut.textContent = state.tempOut;
        valDeltaOut.textContent = state.tempIn - state.tempOut;
        calculateOZC();
    });

    // Funkcja pomocnicza dla Radio Buttonów
    function setupRadioGroup(nodes, stateKey, attrName) {
        nodes.forEach(btn => {
            btn.addEventListener('click', function() {
                nodes.forEach(b => b.classList.remove('selected'));
                this.classList.add('selected');
                const val = this.getAttribute(attrName);
                // Konwersja na float jeśli to liczba, zostaw string jeśli wentylacja
                state[stateKey] = isNaN(parseFloat(val)) ? val : parseFloat(val);
                calculateOZC();
            });
        });
    }

    // Krok 2, 3, 4: Radia
    setupRadioGroup(radUValues, 'uValue', 'data-u');
    setupRadioGroup(radBridges, 'bridgeFactor', 'data-bridge');
    setupRadioGroup(radVents, 'ventType', 'data-vent');


    // --- NAWIGACJA KROKOWA ---
    function updateNav() {
        // Przyciski 
        btnPrev.disabled = currentStep === 1;
        
        if (currentStep === totalSteps) {
            btnNext.textContent = 'Zakończ';
            if(btnNext.classList.contains('finalized')) return;
            
            // Po zamknięciu domknięcia procesu -> przekierowanie na zakup
            btnNext.onclick = function() { window.location.href = 'https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/'; }
            
            btnNext.classList.add('finalized');
        } else {
            btnNext.textContent = 'Przejdź dalej';
            btnNext.onclick = null; // Czyszczenie
            btnNext.classList.remove('finalized');
        }

        // Pasek postępu
        const progress = ((currentStep - 1) / (totalSteps - 1)) * 100;
        progLine.style.width = progress + '%';

        // Kropeczki
        document.querySelectorAll('.rk-step-node').forEach((node, index) => {
            node.classList.remove('active', 'completed');
            if (index + 1 === currentStep) node.classList.add('active');
            if (index + 1 < currentStep) node.classList.add('completed');
        });

        // Widoki (Panele)
        document.querySelectorAll('.rk-step-view').forEach(view => {
            view.classList.remove('active');
        });
        document.getElementById('view-' + currentStep).classList.add('active');
    }

    btnNext.addEventListener('click', () => {
        if (currentStep < totalSteps) {
            currentStep++;
            updateNav();
        }
    });

    btnPrev.addEventListener('click', () => {
        if (currentStep > 1) {
            currentStep--;
            updateNav();
        }
    });

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



<style>
:root {
    --rk-hyd-dark: #0f172a;
    --rk-hyd-brand: #0284c7; /* Inżynieryjny niebieski hydrauliczny */
    --rk-hyd-brand-light: #e0f2fe;
    --rk-hyd-accent: #f59e0b;
    --rk-hyd-screen: #0b1120;
    --rk-hyd-bg: #ffffff;
    --rk-hyd-panel: #f8fafc;
    --rk-hyd-border: #e2e8f0;
    --rk-hyd-text: #334155;
    --rk-hyd-muted: #64748b;
    --rk-hyd-green: #10b981;
    --rk-hyd-red: #ef4444;
}

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

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

.rk-hyd-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.25);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(2, 132, 199, 0.4);
}

.rk-hyd-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-hyd-title span { color: #38bdf8; }

.rk-hyd-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

.rk-hyd-lead strong { color: #ffffff; font-weight: 800; }

.rk-link-hyd {
    color: #38bdf8;
    text-decoration: none;
    border-bottom: 1px dashed #38bdf8;
    transition: all 0.3s;
}
.rk-link-hyd:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Box ze wzorem termodynamicznym */
.rk-hyd-eq-box {
    background: rgba(0, 0, 0, 0.3);
    border: 1px solid rgba(56, 189, 248, 0.3);
    border-radius: 16px;
    padding: 22px;
    text-align: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
}

.rk-hyd-eq {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 24px;
    color: #bae6fd;
    letter-spacing: 1px;
    margin: 0 0 10px 0;
}

.rk-hyd-eq-desc {
    font-size: 13px;
    color: #94a3b8;
    margin: 0;
}
.rk-hyd-eq-desc strong { color: #e2e8f0; }

/* Obszar Interaktywny */
.rk-hyd-interactive {
    padding: 40px 50px;
    background: var(--rk-hyd-panel);
}

/* Główny Dashboard */
.rk-hyd-dashboard {
    display: grid;
    grid-template-columns: 1fr 320px;
    gap: 30px;
}

/* Lewy Panel Kontrolek (Wszystko dostępne od razu) */
.rk-hyd-controls {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-hyd-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-hyd-panel-title {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-hyd-dark);
    margin: 0 0 25px 0;
    border-bottom: 2px solid var(--rk-hyd-panel);
    padding-bottom: 10px;
}

/* Grupy Formularzy */
.rk-hyd-group { margin-bottom: 30px; }
.rk-hyd-label { display: block; font-size: 12px; font-weight: 800; color: var(--rk-hyd-dark); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }

.rk-hyd-range-box { display: flex; align-items: center; gap: 15px; }
.rk-hyd-slider { flex: 1; -webkit-appearance: none; height: 8px; background: #e2e8f0; border-radius: 4px; outline: none; }
.rk-hyd-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 24px; height: 24px; border-radius: 50%; background: var(--rk-hyd-brand); cursor: pointer; border: 3px solid #ffffff; box-shadow: 0 2px 6px rgba(0,0,0,0.15); }

.rk-hyd-val-display { font-size: 18px; font-weight: 900; color: var(--rk-hyd-brand); min-width: 75px; text-align: right; font-variant-numeric: tabular-nums; }

/* Przyciski Opcji (Radio kafelki pionowe) */
.rk-hyd-radio-stack { display: flex; flex-direction: column; gap: 10px; }
.rk-hyd-radio-tile { width: 100%; padding: 14px 18px; text-align: left; background: var(--rk-hyd-panel); border: 2px solid var(--rk-hyd-border); border-radius: 12px; cursor: pointer; transition: all 0.2s; display: flex; flex-direction: column; gap: 4px; }
.rk-hyd-radio-tile strong { font-size: 14px; color: var(--rk-hyd-dark); }
.rk-hyd-radio-tile span { font-size: 12px; color: var(--rk-hyd-muted); font-weight: 400; }
.rk-hyd-radio-tile.selected { background: var(--rk-hyd-brand-light); border-color: var(--rk-hyd-brand); }

/* Prawy Panel Diagnostyczny (Rotametr) */
.rk-hyd-results-panel {
    background: var(--rk-hyd-dark);
    border-radius: 20px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    border: 2px solid #1e293b;
}

.rk-hyd-res-title { font-size: 11px; text-transform: uppercase; font-weight: 800; color: #94a3b8; margin-bottom: 20px; letter-spacing: 1px; text-align: center; }

/* Wizualizacja Rotametru SVG */
.rk-rotameter-stage {
    background: var(--rk-hyd-screen);
    border-radius: 14px;
    padding: 15px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.6);
    border: 1px solid #1e293b;
    margin-bottom: 20px;
}

.rk-rotameter-svg { width: 100%; height: 100%; max-width: 120px; }
.anim-float { transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
.anim-water { transition: height 0.4s ease, y 0.4s ease; fill: #0ea5e9; fill-opacity: 0.3; }

/* Parametry kafelkowe */
.rk-hyd-rows { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; }
.rk-hyd-row { display: flex; justify-content: space-between; align-items: center; font-size: 13.5px; padding-bottom: 8px; border-bottom: 1px dashed rgba(255,255,255,0.08); }
.rk-hyd-row:last-child { border-bottom: none; }
.rk-hyd-lbl { color: #cbd5e1; }
.rk-hyd-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }

/* Końcowa Skrzynka Wynikowa */
.rk-hyd-final-box {
    background: rgba(2, 132, 199, 0.15);
    border: 1px solid rgba(2, 132, 199, 0.3);
    border-radius: 12px;
    padding: 15px;
    text-align: center;
}
.rk-final-lbl { font-size: 11px; font-weight: 800; color: #38bdf8; text-transform: uppercase; margin-bottom: 4px; display: block; }
.rk-final-val { font-size: 30px; font-weight: 900; color: #ffffff; font-variant-numeric: tabular-nums; line-height: 1.1; }
.rk-final-unit { font-size: 16px; font-weight: 700; color: #38bdf8; }

@media (max-width: 768px) {
    .rk-hyd-header, .rk-hyd-interactive { padding: 30px 20px; }
    .rk-hyd-title { font-size: 22px; }
    .rk-hyd-dashboard { grid-template-columns: 1fr; gap: 25px; }
    .rk-hyd-controls { padding: 20px; }
    .rk-rotameter-stage { height: 150px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-przeplyw",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak obliczyć wymagany przepływ wody w pętli podłogowej na podstawie OZC?",
    "description": "Zobacz termodynamiczny wzór na przepływ masowy wody (Vmin) w pętlach ogrzewania podłogowego zgodnie z normą PN-EN 1264 na bazie OZC.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-przeplyw",
    "name": "Algorytm Równoważenia Hydraulicznego pętli pex/pert 16x2",
    "description": "Zestawienie obliczeniowe wymaganych przepływów czynnika grzewczego na rotametrach rozdzielacza w korelacji z obciążeniem OZC pomieszczeń.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wymagany przepływ wody podłogówka",
      "rotametr wskaznik przepływu nastawy",
      "równoważenie hydrauliczne rozdzielacza",
      "wzór na przepływ pętli podłogowej",
      "norma PN-EN 1264 hydraulika"
    ],
    "measurementTechnique": "Przeliczanie strumienia objętościowego czynnika na litry na minutę (l/min) przy ciepłu właściwym wody 4182 J/(kg K).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Formuła inżynierska redukuje stałe fizyczne do stabilnego dzielnika 69,7 pomnożonego przez spadek temperatury delta T.",
        "Sypialnia (Przykład 3): Obciążenie OZC 750W przy strefowej pracy pompy ciepła z delta T = 5K generuje precyzyjną nastawę 2,15 l/min."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-przeplyw",
    "name": "Symulator Nastaw Rotametrów Rozdzielacza",
    "description": "Interaktywny symulator wizualizujący unoszenie pływaka w rurce rotametru w oparciu o wprowadzane wartości obciążeń OZC pokoju.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Canvas/SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-hyd-container" id="rk-hyd-app">
    
    <div class="rk-hyd-header">
        <div class="rk-hyd-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21.5 12H16c-.55 0-1-.45-1-1V9c0-1.1-.9-2-2-2h-2c-1.1 0-2 .9-2 2v2c0 .55-.45 1-1 1H2.5"></path></svg>
            Balans Hydrauliczny Układu
        </div>
        <h2 class="rk-hyd-title">Jak obliczyć wymagany przepływ wody w pętli podłogowej na podstawie <span>OZC?</span></h2>
        <p class="rk-hyd-lead">
            Wymagany przepływ wody (<strong>V<sub>min</sub></strong>) w pętli podłogowej wylicza się ze stosunku obciążenia cieplnego pokoju do iloczynu ciepła właściwego wody i spadku temperatury &Delta;T, co określa norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a>. Prawidłowa wartość przepływu gwarantuje zrównoważenie hydrauliczne układu rozdzielacza, eliminując strefy niedogrzane.
        </p>
        
        <div class="rk-hyd-eq-box">
            <div class="rk-hyd-eq">
                V<sub>min</sub> = &Phi;<sub>HL,i</sub> / (69,7 &times; &Delta;T)
            </div>
            <p class="rk-hyd-eq-desc">
                Gdzie <strong>&Phi;<sub>HL,i</sub></strong> to moc projektowa z OZC [W], a <strong>&Delta;T</strong> to różnica temperatur zasilania i powrotu [K].
            </p>
        </div>
    </div>

    <div class="rk-hyd-interactive">
        <div class="rk-hyd-dashboard">
            
            <div class="rk-hyd-controls">
                <div class="rk-hyd-panel-title">Parametry wejściowe z OZC</div>
                
                <div class="rk-hyd-group">
                    <label class="rk-hyd-label">Obciążenie cieplne pokoju (&Phi;<sub>HL,i</sub>)</label>
                    <div class="rk-hyd-range-box">
                        <input type="range" id="hydInpPower" class="rk-hyd-slider" min="200" max="1500" value="750" step="50">
                        <div class="rk-hyd-val-display"><span id="hydValPowerOut">750</span> W</div>
                    </div>
                </div>

                <div class="rk-hyd-group">
                    <label class="rk-hyd-label">Projektowa różnica temperatur (&Delta;T)</label>
                    <div class="rk-hyd-radio-stack">
                        <div class="rk-hyd-radio-tile" data-dt="3">
                            <strong>&Delta;T = 3 K (Wysoki przepływ)</strong>
                            <span>Dedykowane do łazienek w celu utrzymania wysokiej temperatury podłogi.</span>
                        </div>
                        <div class="rk-hyd-radio-tile selected" data-dt="5">
                            <strong>&Delta;T = 5 K (Standard Pompy Ciepła)</strong>
                            <span>Układ nisko-parametrowy 35/30°C gwarantujący najwyższy współczynnik COP.</span>
                        </div>
                        <div class="rk-hyd-radio-tile" data-dt="8">
                            <strong>&Delta;T = 8 K (Standard Kotłów)</strong>
                            <span>Rzadszy przepływ masowy czynnika, typowy dla układów z kotłami gazowymi.</span>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-hyd-results-panel">
                <div class="rk-hyd-res-title">Nastawa Rotametru Rozdzielacza</div>
                
                <div class="rk-rotameter-stage">
                    <svg class="rk-rotameter-svg" viewBox="0 0 100 100">
                        <rect x="42" y="10" width="16" height="80" fill="none" stroke="#64748b" stroke-width="2" rx="2"/>
                        <rect class="anim-water" x="43" y="50" width="14" height="40" />
                        
                        <line x1="38" y1="20" x2="44" y2="20" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="22" fill="#64748b" font-size="6" font-weight="bold">5</text>
                        <line x1="38" y1="35" x2="44" y2="35" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="37" fill="#64748b" font-size="6" font-weight="bold">4</text>
                        <line x1="38" y1="50" x2="44" y2="50" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="52" fill="#64748b" font-size="6" font-weight="bold">3</text>
                        <line x1="38" y1="65" x2="44" y2="65" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="67" fill="#64748b" font-size="6" font-weight="bold">2</text>
                        <line x1="38" y1="80" x2="44" y2="80" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="82" fill="#64748b" font-size="6" font-weight="bold">1</text>
                        
                        <g class="anim-float" id="hydRotameterFloat" transform="translate(0, 40)">
                            <polygon points="44,20 56,20 53,25 47,25" fill="#ef4444"/>
                            <rect x="47" y="25" width="6" height="3" fill="#ef4444"/>
                        </g>
                        <line x1="50" y1="10" x2="50" y2="90" stroke="#fbbf24" stroke-width="1" opacity="0.4"/>
                    </svg>
                </div>

                <div class="rk-hyd-rows">
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Moc obiegu (&Phi;):</span>
                        <span class="rk-hyd-val"><span id="lblHydPower">750</span> W</span>
                    </div>
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Projektowe &Delta;T:</span>
                        <span class="rk-hyd-val"><span id="lblHydDT">5</span> K</span>
                    </div>
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Stała inżynierska:</span>
                        <span class="rk-hyd-val">69,7</span>
                    </div>
                </div>

                <div class="rk-hyd-final-box">
                    <span class="rk-final-lbl">Wymagany przepływ (Vmin)</span>
                    <div class="rk-final-val"><span id="lblHydTotal">2.15</span> <span class="rk-final-unit">l/min</span></div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków w kodzie błędu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-hyd-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji skryptu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja rotametryczna oraz struktury danych Dataset są własnością intelektualną Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Stan wejściowy kalkulatora
    let state = {
        power: 750,
        dT: 5
    };

    // 3. Elementy DOM
    const inpPower = document.getElementById('hydInpPower');
    const valPowerOut = document.getElementById('hydValPowerOut');
    const radTiles = document.querySelectorAll('.rk-hyd-radio-tile');

    // Pola wyjściowe wyników (Unikalne prefiksy hyd)
    const lblHydPower = document.getElementById('lblHydPower');
    const lblHydDT = document.getElementById('lblHydDT');
    const lblHydTotal = document.getElementById('lblHydTotal');
    const hydRotameterFloat = document.getElementById('hydRotameterFloat');

    // 4. Silnik obliczeń termodynamicznych przepływu masowego
    function updateFlowKalk() {
        const vMin = state.power / (69.7 * state.dT);
        
        lblHydPower.textContent = state.power;
        lblHydDT.textContent = state.dT;
        lblHydTotal.textContent = vMin.toFixed(2);

        // Skalowanie pozycji czerwonego pływaka rotometru (zakres 0 - 5 l/min)
        let pixelY = 65 - ((vMin - 1) * 15);
        if (pixelY < 0) pixelY = 0;
        if (pixelY > 65) pixelY = 65;

        hydRotameterFloat.setAttribute('transform', 'translate(0, ' + pixelY + ')');
    }

    // 5. Obsługa zdarzeń
    inpPower.addEventListener('input', function(e) {
        state.power = parseInt(e.target.value);
        valPowerOut.textContent = state.power;
        updateFlowKalk();
    });

    radTiles.forEach(tile => {
        tile.addEventListener('click', function() {
            radTiles.forEach(t => t.classList.remove('selected'));
            this.classList.add('selected');
            state.dT = parseInt(this.getAttribute('data-dt'));
            updateFlowKalk();
        });
    });

    // Uruchomienie obliczeń startowych
    updateFlowKalk();
});
</script>



<style>
:root {
    --rk-sum-dark: #0f172a;
    --rk-sum-panel: #1e293b;
    --rk-sum-primary: #10b981; /* Emerald/Green for success/summary */
    --rk-sum-primary-light: #d1fae5;
    --rk-sum-accent: #3b82f6; /* Blue for water */
    --rk-sum-warning: #f59e0b;
    --rk-sum-bg: #f8fafc;
    --rk-sum-border: #cbd5e1;
    --rk-sum-text: #334155;
    --rk-sum-text-dim: #64748b;
}

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

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

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

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

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

.rk-header-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 10px;
    border: 1px solid rgba(110, 231, 183, 0.3);
}

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

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

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

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

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

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

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

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

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

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

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

/* Panel Detali (Prawy) */
.rk-rule-details {
    padding: 40px;
    position: relative;
}

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

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

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

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

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

.rk-sum-link {
    color: var(--rk-sum-accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dotted var(--rk-sum-accent);
    transition: 0.3s;
}
.rk-sum-link:hover { border-bottom-style: solid; color: #1d4ed8; }

.rk-detail-svg {
    width: 100%;
    height: 160px;
    background: var(--rk-sum-dark);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.5);
}

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

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

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

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

.rk-calc-input-area {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

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

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

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

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

.rk-result-box.highlight { border-color: var(--rk-sum-primary); background: rgba(16, 185, 129, 0.1); }

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

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

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

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

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

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

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

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

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

/* Animacje SVG */
.anim-check-draw { stroke-dasharray: 100; stroke-dashoffset: 100; animation: drawCheck 1.5s forwards ease-out; }
@keyframes drawCheck { to { stroke-dashoffset: 0; } }

.anim-pulse-ring { animation: pulseRing 2s infinite; transform-origin: center; }
@keyframes pulseRing { 0% { transform: scale(0.8); opacity: 1; } 100% { transform: scale(1.5); opacity: 0; } }

.anim-water-wave { animation: waveWater 3s linear infinite; }
@keyframes waveWater { 0% { transform: translateX(0); } 100% { transform: translateX(-20px); } }

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-summary-final",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Inżynierskie podsumowanie: Rola OZC w systemie grzewczym",
    "description": "Kompaktowe zestawienie reguł projektowych łączących wyniki OZC z geometrią pętli i zrównoważeniem hydraulicznym rozdzielacza.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-summary",
    "name": "Wskaźniki OZC dla domów jednorodzinnych (WT 2021)",
    "description": "Szacunkowe dane przeliczeniowe łączące metraż budynku w standardzie WT 2021 z mocą pompy ciepła i ilością obiegów grzewczych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podsumowanie instalacji ozc",
      "szybki estymator ozc",
      "zapotrzebowanie na moc cieplną",
      "dobór pompy ciepła na podstawie ozc",
      "ilość pętli ogrzewania podłogowego"
    ],
    "measurementTechnique": "Szacowanie oparte na średnim wskaźniku 40 W/m2 dla budynków spełniających normę WT 2021 oraz optymalnej wielkości obwodu podłogówki.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Średnie zapotrzebowanie (WT 2021): ~40 W/m2",
        "Szacunkowa moc urządzenia: OZC + bufor na straty i CWU",
        "Średnia powierzchnia na 1 obieg grzewczy: ~15 m2 (przy rozstawie 15 cm)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-summary",
    "name": "Szybki Estymator OZC (WT 2021)",
    "description": "Moduł podsumowujący. Przelicza powierzchnię domu wybudowanego w standardzie WT 2021 na orientacyjne obciążenie cieplne, moc pompy i ilość pętli.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Forms",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-summary-container" id="rk-summary-app">
    
    <div class="rk-summary-header">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-expert-avatar" loading="lazy">
        <div class="rk-header-content">
            <div class="rk-header-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                Wnioski Eksperta
            </div>
            <h2>Inżynierskie podsumowanie: OZC to serce instalacji</h2>
            <p>Zebrałem dla Ciebie 3 najważniejsze reguły projektowe łączące OZC z wykonawstwem podłogówki. Brak precyzyjnych obliczeń na etapie projektu to gwarancja problemów i strat finansowych.</p>
        </div>
    </div>

    <div class="rk-summary-body">
        
        <div class="rk-rules-list">
            <button class="rk-rule-btn active" data-panel="det-1">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg></div>
                <div class="rk-rule-text">
                    <h3>Koniec ze &#8222;zgadywaniem&#8221;</h3>
                    <p>OZC to jedyny matematyczny dowód</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="det-2">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div>
                <div class="rk-rule-text">
                    <h3>Ochrona kapitału (Pompa)</h3>
                    <p>Zabezpieczenie przed przewymiarowaniem</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="det-3">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg></div>
                <div class="rk-rule-text">
                    <h3>Parametry układu</h3>
                    <p>Rozstaw rur i równoważenie l/min</p>
                </div>
            </button>
        </div>

        <div class="rk-rule-details">
            
            <div class="rk-detail-panel active" id="det-1">
                <h4>OZC to fundament projektu</h4>
                <p>Każde pomieszczenie gubi ciepło w innym tempie. Zgadywanie mocy cieplnej &#8222;na oko&#8221; (np. mnożąc m² przez losową wartość) prowadzi do katastrofy w rachunkach. Rzetelne <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-sum-link">obliczenia OZC</a> to twardy matematyczny fundament, na którym opiera się cały późniejszy dobór urządzeń.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <path d="M 50 80 L 50 40 L 100 15 L 150 40 L 150 80 Z" fill="none" stroke="#334155" stroke-width="3" stroke-linejoin="round"/>
                        <path d="M 100 35 L 120 45 L 120 65 Q 100 85 100 85 Q 80 65 80 45 Z" fill="#10b981" opacity="0.2" stroke="#10b981" stroke-width="2"/>
                        <path class="anim-check-draw" d="M 90 55 L 98 63 L 112 47" fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="det-2">
                <h4>Stop przewymiarowaniu pomp</h4>
                <p>Zbyt duża pompa ciepła, dobrana przez instalatora &#8222;dla bezpieczeństwa&#8221; bez OZC, będzie <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-sum-link">taktować</a>. Zjawisko to niszczy sprężarkę i podwaja zużycie prądu. OZC upewnia nas, że pompa zostanie dobrana idealnie do obciążenia budynku w punkcie biwalencyjnym.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="75" y="25" width="50" height="50" fill="#1e293b" stroke="#38bdf8" stroke-width="3" rx="4"/>
                        <circle class="anim-pulse-ring" cx="100" cy="50" r="15" fill="none" stroke="#10b981" stroke-width="2"/>
                        <circle cx="100" cy="50" r="15" fill="none" stroke="#38bdf8" stroke-width="2"/>
                        <path d="M 100 40 L 100 60 M 90 50 L 110 50 M 93 43 L 107 57 M 93 57 L 107 43" stroke="#ffffff" stroke-width="2" stroke-linecap="round"/>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="det-3">
                <h4>Hydraulika bez tajemnic</h4>
                <p>Mając OZC poszczególnych pokoi, projektant wie, gdzie zagęścić rozstaw rur do 10 cm, a gdzie pozostawić 15 cm. Ponadto, wynik OZC (Waty) pozwala przeliczyć <a href="https://projekt-ogrzewania.pl/regulacja-ogrzewania-podlogowego-przeplywy-w-petlach/" class="rk-sum-link">przepływ w l/min</a> dla każdego rotametru na rozdzielaczu. To gwarancja zrównoważenia układu.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="85" y="20" width="30" height="60" fill="none" stroke="#cbd5e1" stroke-width="3" rx="4"/>
                        <path class="anim-water-wave" d="M 85 40 Q 92 35 100 40 T 115 40 T 130 40 L 130 80 L 85 80 Z" fill="#3b82f6" opacity="0.8"/>
                        <polygon points="90,45 110,45 105,55 95,55" fill="#ef4444"/>
                        <text x="140" y="52" fill="#10b981" font-size="12" font-weight="bold">V = 1.8 l/min</text>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-quick-calc">
        <div class="rk-calc-header">
            <h4>
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--rk-sum-primary)" stroke-width="2.5"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="8" y1="6" x2="16" y2="6"></line><line x1="16" y1="14" x2="16.01" y2="14"></line><line x1="12" y1="14" x2="12.01" y2="14"></line><line x1="8" y1="14" x2="8.01" y2="14"></line><line x1="16" y1="18" x2="16.01" y2="18"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="8" y1="18" x2="8.01" y2="18"></line></svg>
                Szybki Estymator OZC (Dla standardu WT 2021)
            </h4>
            <span style="font-size:12px; color:#64748b;">(Wartości orientacyjne)</span>
        </div>

        <div class="rk-calc-grid">
            
            <div class="rk-calc-input-area">
                <div class="rk-calc-label">
                    Powierzchnia ogrzewana domu:
                    <span id="sumAreaOut">150 m²</span>
                </div>
                <input type="range" class="rk-sum-range" id="sumAreaSlider" min="80" max="300" step="10" value="150">
                <p style="font-size: 11px; color:#64748b; margin:0;">*Zakładane zapotrzebowanie ok. 40 W/m² (nowe budownictwo).</p>
            </div>

            <div class="rk-calc-results">
                <div class="rk-result-box">
                    <span class="rk-res-val" id="resOzc">6.0 <span style="font-size:14px;color:#64748b;">kW</span></span>
                    <span class="rk-res-lab">Szacunkowe OZC</span>
                </div>
                <div class="rk-result-box highlight">
                    <span class="rk-res-val" id="resPump">7.0 <span style="font-size:14px;color:var(--rk-sum-primary);">kW</span></span>
                    <span class="rk-res-lab">Sugerowana Pompa Ciepła</span>
                </div>
                <div class="rk-result-box">
                    <span class="rk-res-val" id="resLoops">10 <span style="font-size:14px;color:#64748b;">szt.</span></span>
                    <span class="rk-res-lab">Szacowana liczba obiegów</span>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-summary-author">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski - CEO i Projektant HVAC" class="rk-author-photo-small" loading="lazy">
        <div class="rk-author-info">
            <h4>Robert Kucharski</h4>
            <p>CEO i twórca portalu Projekt-Ogrzewania.pl. Główny projektant i audytor instalacji HVAC. Wszystkie publikowane tu treści opieram na wieloletnim, praktycznym doświadczeniu zdobytym bezpośrednio na placach budowy. Moją misją jest dostarczanie twardej, inżynierskiej wiedzy, która chroni inwestorów przed błędami i przewymiarowanymi instalacjami.</p>
            <div class="rk-author-links">
                <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener noreferrer">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
                    LinkedIn
                </a>
                <a href="https://www.facebook.com/robert.kucharski.budowa.bez.sciemy" target="_blank" rel="noopener noreferrer">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.469h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.469h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>
                    Facebook
                </a>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (DOMAIN LOCK)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-summary-app').innerHTML = `
            <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border:1px solid #ef4444; border-radius:24px; font-weight:800;">
                BŁĄD LICENCJI: Kod podsumowania jest własnością projekt-ogrzewania.pl
            </div>`;
        return;
    }

    // 2. Logika Zakładek (Złote Zasady)
    const btns = document.querySelectorAll('.rk-rule-btn');
    const panels = document.querySelectorAll('.rk-detail-panel');

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

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

    // 3. Logika Szybkiego Estymatora OZC
    const slider = document.getElementById('sumAreaSlider');
    const areaOut = document.getElementById('sumAreaOut');
    const resOzc = document.getElementById('resOzc');
    const resPump = document.getElementById('resPump');
    const resLoops = document.getElementById('resLoops');

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

        // Obliczenia:
        // Zakładamy WT2021 (40 W/m2)
        const ozc_W = area * 40;
        const ozc_kW = ozc_W / 1000;
        
        // Pompa Ciepła: OZC + lekki naddatek na straty (np. 1kW)
        const pump_kW = Math.ceil(ozc_kW + 1);

        // Średnio 1 obieg (pętla) na 15 m2
        const loops = Math.ceil(area / 15);

        resOzc.innerHTML = ozc_kW.toFixed(1) + ' <span style="font-size:14px;color:#64748b;">kW</span>';
        resPump.innerHTML = pump_kW.toFixed(1) + ' <span style="font-size:14px;color:var(--rk-sum-primary);">kW</span>';
        resLoops.innerHTML = loops + ' <span style="font-size:14px;color:#64748b;">szt.</span>';
    }

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



<style>
:root {
    --rk-base-dark: #0f172a;
    --rk-base-panel: #1e293b;
    --rk-base-card: #ffffff;
    --rk-brand-primary: #f59e0b; /* Złoty bursztyn jako główny akcent (ciepło) */
    --rk-brand-light: #fef3c7;
    --rk-brand-hover: #d97706;
    --rk-state-green: #10b981;
    --rk-state-red: #ef4444;
    --rk-text-main: #334155;
    --rk-text-muted: #64748b;
    --rk-border-color: #e2e8f0;
}

.rk-geo-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-base-card);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(245, 158, 11, 0.15);
    border: 1px solid rgba(245, 158, 11, 0.25);
    overflow: hidden;
}

/* Sekcja Nagłówka */
.rk-geo-header {
    background: var(--rk-base-dark);
    padding: 40px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-brand-primary);
    position: relative;
}

.rk-geo-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(245, 158, 11, 0.2);
    color: var(--rk-brand-primary);
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(245, 158, 11, 0.4);
}

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

.rk-geo-header h2 span { color: var(--rk-brand-primary); }

.rk-geo-lead {
    font-size: 15px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

.rk-geo-lead strong { color: #ffffff; font-weight: 700; }
.rk-link-geo { color: var(--rk-brand-primary); text-decoration: none; border-bottom: 1px dashed var(--rk-brand-primary); transition: all 0.3s; }
.rk-link-geo:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Pulpit Interaktywny */
.rk-geo-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-geo-dashboard {
    display: grid;
    grid-template-columns: 1fr 340px;
    gap: 30px;
}

/* Panel Kontrolek (Lewy) */
.rk-geo-controls {
    background: #ffffff;
    border-radius: 16px;
    padding: 30px;
    border: 1px solid var(--rk-border-color);
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.03);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-geo-panel-title {
    font-size: 17px;
    font-weight: 800;
    color: var(--rk-base-dark);
    margin: 0 0 25px 0;
    border-bottom: 2px solid #f1f5f9;
    padding-bottom: 12px;
}

.rk-geo-group { margin-bottom: 30px; }
.rk-geo-label { display: block; font-size: 12px; font-weight: 800; color: var(--rk-text-muted); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }

.rk-geo-range-box { display: flex; align-items: center; gap: 15px; }
.rk-geo-slider { flex: 1; -webkit-appearance: none; height: 6px; background: #e2e8f0; border-radius: 3px; outline: none; }
.rk-geo-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%; background: var(--rk-brand-primary); cursor: pointer; border: 3px solid #ffffff; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: transform 0.1s; }
.rk-geo-slider::-webkit-slider-thumb:active { transform: scale(1.2); }

.rk-geo-val-display { font-size: 20px; font-weight: 900; color: var(--rk-base-dark); min-width: 85px; text-align: right; font-variant-numeric: tabular-nums; }
.rk-geo-val-display span { color: var(--rk-brand-primary); }

/* Kafelki wyboru rozstawu */
.rk-geo-tile-stack { display: flex; flex-direction: column; gap: 12px; }
.rk-geo-tile-option { width: 100%; padding: 14px 18px; text-align: left; background: #ffffff; border: 2px solid var(--rk-border-color); border-radius: 10px; cursor: pointer; transition: all 0.2s; display: flex; flex-direction: column; gap: 4px; position: relative; overflow: hidden; }
.rk-geo-tile-option strong { font-size: 15px; color: var(--rk-base-dark); }
.rk-geo-tile-option span { font-size: 12px; color: var(--rk-text-muted); font-weight: 500; }

.rk-geo-tile-option::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: transparent; transition: background 0.2s; }
.rk-geo-tile-option.selected { background: var(--rk-brand-light); border-color: var(--rk-brand-primary); }
.rk-geo-tile-option.selected::before { background: var(--rk-brand-primary); }
.rk-geo-tile-option.selected strong { color: var(--rk-brand-hover); }

/* Wyniki i Wizualizacja (Prawa) */
.rk-geo-results-panel {
    background: var(--rk-base-panel);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    border: 1px solid #334155;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.1);
}

.rk-geo-res-title { font-size: 11px; text-transform: uppercase; font-weight: 800; color: #94a3b8; margin-bottom: 15px; letter-spacing: 1px; text-align: center; }

/* Nowy Dwuczęściowy Schemat SVG (Przekrój + Wskaźnik Oporu) */
.rk-geo-svg-stage {
    background: var(--rk-base-dark);
    border-radius: 12px;
    padding: 10px;
    height: 160px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.5);
    margin-bottom: 20px;
    position: relative;
    border: 1px solid #334155;
}

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

/* Klasy kontrolujące widoczność warstw termowizji */
.therm-layer { opacity: 0; transition: opacity 0.5s ease; }
.rk-geo-svg-stage[data-spacing="20"] .therm-20 { opacity: 1; }
.rk-geo-svg-stage[data-spacing="15"] .therm-15 { opacity: 1; }
.rk-geo-svg-stage[data-spacing="10"] .therm-10 { opacity: 1; }

/* Animacje statycznego wskaźnika oporu pompy */
.pump-indicator { transition: stroke-dashoffset 0.6s cubic-bezier(0.4, 0, 0.2, 1), stroke 0.6s; stroke-linecap: round; }
.pump-status-icon { transition: fill 0.6s; }

/* Stany pompy obiegowej */
.rk-geo-svg-stage[data-pump="normal"] .pump-indicator { stroke: var(--rk-state-green); stroke-dashoffset: 130; }
.rk-geo-svg-stage[data-pump="normal"] .pump-status-icon { fill: var(--rk-state-green); }

.rk-geo-svg-stage[data-pump="warning"] .pump-indicator { stroke: var(--rk-brand-primary); stroke-dashoffset: 60; }
.rk-geo-svg-stage[data-pump="warning"] .pump-status-icon { fill: var(--rk-brand-primary); }

.rk-geo-svg-stage[data-pump="critical"] .pump-indicator { stroke: var(--rk-state-red); stroke-dashoffset: 10; animation: pulseCritical 0.5s infinite alternate; }
.rk-geo-svg-stage[data-pump="critical"] .pump-status-icon { fill: var(--rk-state-red); animation: pulseCritical 0.5s infinite alternate; }

@keyframes pulseCritical {
    from { opacity: 0.6; filter: drop-shadow(0 0 2px var(--rk-state-red)); }
    to { opacity: 1; filter: drop-shadow(0 0 8px var(--rk-state-red)); }
}

/* Parametry liczbowe */
.rk-geo-rows { display: flex; flex-direction: column; gap: 10px; margin-bottom: 25px; }
.rk-geo-row { display: flex; justify-content: space-between; align-items: center; font-size: 13px; padding-bottom: 8px; border-bottom: 1px dashed rgba(255,255,255,0.05); }
.rk-geo-row:last-child { border-bottom: none; }
.rk-geo-lbl { color: #cbd5e1; }
.rk-geo-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }

.rk-geo-status-box {
    background: rgba(16, 185, 129, 0.1);
    border: 1px solid rgba(16, 185, 129, 0.2);
    border-radius: 10px;
    padding: 15px;
    text-align: center;
    transition: all 0.3s;
    margin-top: auto;
}
.rk-status-lbl { font-size: 10px; font-weight: 800; color: var(--rk-state-green); text-transform: uppercase; margin-bottom: 6px; display: block; letter-spacing: 0.5px; }
.rk-status-val { font-size: 13px; font-weight: 600; color: #ffffff; line-height: 1.4; }

/* Sekcja Mocnego CTA */
.rk-geo-cta-block {
    background: var(--rk-base-panel);
    padding: 30px 50px;
    border-top: 2px solid var(--rk-brand-primary);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 30px;
}

.rk-geo-cta-text h4 { font-size: 17px; font-weight: 800; color: #ffffff; margin: 0 0 6px 0; }
.rk-geo-cta-text p { font-size: 13px; color: #94a3b8; margin: 0; line-height: 1.5; }
.rk-geo-cta-btn {
    background: var(--rk-brand-primary);
    color: #ffffff;
    padding: 15px 30px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 800;
    text-decoration: none;
    box-shadow: 0 4px 15px rgba(245, 158, 11, 0.3);
    transition: all 0.2s;
    white-space: nowrap;
    border: none;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.rk-geo-cta-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(245, 158, 11, 0.4); background: var(--rk-brand-hover); }

@media (max-width: 768px) {
    .rk-geo-header, .rk-geo-interactive, .rk-geo-cta-block { padding: 30px 20px; }
    .rk-geo-header h2 { font-size: 22px; }
    .rk-geo-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-geo-controls { padding: 20px; }
    .rk-geo-svg-stage { height: 140px; }
    .rk-geo-cta-block { flex-direction: column; text-align: center; gap: 15px; }
    .rk-geo-cta-btn { width: 100%; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-geometria",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak OZC wpływa na projekt ogrzewania podłogowego?",
    "description": "Zobacz, jak wyniki projektowego obciążenia cieplnego (OZC) determinują geometrię pętli, rozstaw rur grzewczych oraz zrównoważenie hydrauliczne rozdzielacza.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-geometria",
    "name": "Parametry geometryczno-hydrauliczne pętli podłogówki na bazie OZC",
    "description": "Zależność rozstawu rur grzewczych, oporów ciśnienia oraz długości obiegów grzewczych w funkcji gęstości zapotrzebowania na moc szczytową pomieszczeń.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowanie ogrzewania podłogowego rozstaw",
      "maksymalna długość pętli podłogówki 16mm",
      "strefy brzegowe pod dużymi przeszkleniami",
      "zbalansowanie hydrauliczne rozdzielacza",
      "obciążenie cieplne a opory ciśnienia"
    ],
    "measurementTechnique": "Symulacja gęstości układania rur pex oraz wyznaczanie strat ciśnienia w pętli grzewczej zgodnie z wytycznymi normy PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zależność geometryczna: Wyższe obciążenie szczytowe wymusza gęstszy rozstaw rur (co 10 cm) w celu uniknięcia przewymiarowania temperatury zasilania.",
        "Ograniczenie hydrauliczne: Maksymalna długość obwodu dla średnicy 16mm wynosi 100-120m, chroniąc układ przed oporami paraliżującymi pompy obiegowe."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-geometria",
    "name": "Symulator Geometrii i Oporów Hydraulicznych Pętli",
    "description": "Interaktywny analizator pozwalający inwestorom sprawdzić, jak zapotrzebowanie na moc i rozstaw rur wpływają na długość obwodu i ciśnienie instalacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires modern browser with SVG and JavaScript enabled",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-geo-container" id="rk-geo-app">
    
    <div class="rk-geo-header">
        <div class="rk-geo-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg>
            Wpływ OZC na wykonawstwo
        </div>
        <h2>Jak to wpływa na projekt ogrzewania podłogowego?</h2>
        <p class="rk-geo-lead">
            Projektowe Obciążenie Cieplne bezpośrednio determinuje geometrię i parametry hydrauliczne instalacji płaszczyznowej. Na podstawie uzyskanych wyników szczytowych dla każdego pokoju, projektant dobiera optymalny rozstaw rur grzewczych, zapobiegając nadmiernym oporom ciśnienia. 
            <br><br>
            OZC pozwala także na dokładne zlokalizowanie stref brzegowych pod dużymi przeszkleniami oraz precyzyjny dobór pomp ciepła. Bez tych danych <a href="https://projekt-ogrzewania.pl/regulacja-ogrzewania-podlogowego-przeplywy-w-petlach/" class="rk-link-geo">zbalansowanie hydrauliczne rozdzielacza</a> jest niewykonalne, co skazuje inwestora na losowe, nieefektywne działanie systemu.
        </p>
    </div>

    <div class="rk-geo-interactive">
        <div class="rk-geo-dashboard">
            
            <div class="rk-geo-controls">
                <div class="rk-geo-panel-title">Analizator Pętli Grzewczej (Pokój 20 m²)</div>
                
                <div class="rk-geo-group">
                    <label class="rk-geo-label">Obciążenie cieplne pokoju (OZC)</label>
                    <div class="rk-geo-range-box">
                        <input type="range" id="geoInpPower" class="rk-geo-slider" min="300" max="1400" value="800" step="50">
                        <div class="rk-geo-val-display"><span id="geoValPowerOut">800</span> W</div>
                    </div>
                </div>

                <div class="rk-geo-group" style="margin-bottom:0;">
                    <label class="rk-geo-label">Planowany rozstaw rur grzewczych</label>
                    <div class="rk-geo-tile-stack">
                        <div class="rk-geo-tile-option" data-spacing="10">
                            <strong>co 10 cm</strong>
                            <span>Gęsty (Łazienki / Strefy brzegowe)</span>
                        </div>
                        <div class="rk-geo-tile-option selected" data-spacing="15">
                            <strong>co 15 cm</strong>
                            <span>Standard budowlany (WT 2021)</span>
                        </div>
                        <div class="rk-geo-tile-option" data-spacing="20">
                            <strong>co 20 cm</strong>
                            <span>Rzadki / Ekonomiczny (WT 2014)</span>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-geo-results-panel">
                <div class="rk-geo-res-title">Opory i Zagęszczenie Rur (Pętla 16mm)</div>
                
                <div class="rk-geo-svg-stage" id="geoSvgStage" data-spacing="15" data-pump="normal">
                    <svg class="rk-geo-svg" viewBox="0 0 250 110">
                        <defs>
                            <filter id="heatGlow" x="-20%" y="-20%" width="140%" height="140%">
                                <feGaussianBlur stdDeviation="3" result="blur" />
                                <feComposite in="SourceGraphic" in2="blur" operator="over" />
                            </filter>
                        </defs>

                        <text x="75" y="15" fill="#64748b" font-size="7" font-weight="bold" text-anchor="middle" letter-spacing="0.5">ROZKŁAD TEMPERATUR (TERMOWIZJA)</text>
                        <rect x="10" y="25" width="130" height="75" fill="#1e3a8a" rx="4" stroke="#334155" stroke-width="2"/>
                        
                        <g class="therm-layer therm-20">
                            <path d="M 15 35 L 135 35 M 15 55 L 135 55 M 15 75 L 135 75 M 15 90 L 135 90" stroke="#f59e0b" stroke-width="10" filter="url(#heatGlow)"/>
                        </g>
                        <g class="therm-layer therm-15">
                            <path d="M 15 32 L 135 32 M 15 45 L 135 45 M 15 58 L 135 58 M 15 71 L 135 71 M 15 84 L 135 84 M 15 95 L 135 95" stroke="#ef4444" stroke-width="11" filter="url(#heatGlow)"/>
                        </g>
                        <g class="therm-layer therm-10">
                            <path d="M 15 30 L 135 30 M 15 38 L 135 38 M 15 46 L 135 46 M 15 54 L 135 54 M 15 62 L 135 62 M 15 70 L 135 70 M 15 78 L 135 78 M 15 86 L 135 86 M 15 94 L 135 94" stroke="#ef4444" stroke-width="12" filter="url(#heatGlow)"/>
                        </g>

                        <text x="200" y="15" fill="#64748b" font-size="7" font-weight="bold" text-anchor="middle" letter-spacing="0.5">OPÓR POMPY OBIEGOWEJ</text>
                        
                        <path d="M 170 65 A 30 30 0 0 1 230 65" fill="none" stroke="#1e293b" stroke-width="8" stroke-linecap="round"/>
                        <path class="pump-indicator" d="M 170 65 A 30 30 0 0 1 230 65" fill="none" stroke-width="8" stroke-dasharray="94"/>
                        
                        <circle cx="200" cy="60" r="8" class="pump-status-icon"/>
                        <path d="M 197 57 L 204 60 L 197 63 Z" fill="#0b1120"/>

                        <text x="200" y="90" fill="#ffffff" font-size="7" font-weight="bold" text-anchor="middle" id="geoPumpText">STABILNIE</text>
                    </svg>
                </div>

                <div class="rk-geo-rows">
                    <div class="rk-geo-row">
                        <span class="rk-geo-lbl">Szacowana długość rury:</span>
                        <span class="rk-geo-val"><span id="geoOutLength">148</span> m</span>
                    </div>
                    <div class="rk-geo-row">
                        <span class="rk-geo-lbl">Rozkład temperatury:</span>
                        <span class="rk-geo-val" id="geoOutEdge">Równomierny</span>
                    </div>
                </div>

                <div class="rk-geo-status-box" id="geoStatusBox">
                    <span class="rk-status-lbl" id="geoStatusLbl">Status układu</span>
                    <div class="rk-status-val" id="geoStatusVal">Pętla zbyt długa! Wykonawca musi podzielić obieg.</div>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-geo-cta-block">
        <div class="rk-geo-cta-text">
            <h4>Nie ryzykuj układania podłogówki „na intuicję” instalatora</h4>
            <p>Zamów profesjonalny, kompletny projekt hydrauliczny oparty o rzetelne obliczenia OZC.</p>
        </div>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-geo-cta-btn">Zamów profesjonalny projekt</a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-geo-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd integralności danych</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja symulacji matrycy hydraulicznej stanowi zastrzeżoną część portalu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Stan kalkulatora
    let geoState = {
        power: 800,
        spacing: 15
    };

    // 3. Elementy DOM
    const inpPower = document.getElementById('geoInpPower');
    const valPowerOut = document.getElementById('geoValPowerOut');
    const tileOptions = document.querySelectorAll('.rk-geo-tile-option');
    
    // SVG Elements
    const svgStage = document.getElementById('geoSvgStage');
    const pumpText = document.getElementById('geoPumpText');

    // Elementy wyjściowe
    const outLength = document.getElementById('geoOutLength');
    const outEdge = document.getElementById('geoOutEdge');
    const statusBox = document.getElementById('geoStatusBox');
    const statusLbl = document.getElementById('geoStatusLbl');
    const statusVal = document.getElementById('geoStatusVal');

    // 4. Silnik obliczeń inżynierskich dla pokoju 20m2
    function updateHydraulics() {
        // Obliczenie zapotrzebowania na rurę: Powierzchnia(20) / rozstaw + podejścia(15)
        let calculatedLength = Math.round((20 / (geoState.spacing / 100)) + 15);
        outLength.textContent = calculatedLength;

        // Aktualizacja widoczności warstw termowizji w SVG (data-spacing)
        svgStage.setAttribute('data-spacing', geoState.spacing.toString());

        // Analiza "Zebry termicznej"
        if (geoState.spacing === 20) {
            outEdge.textContent = "Ryzyko niedogrzanych stref";
            outEdge.style.color = "var(--rk-brand-primary)";
        } else if (geoState.spacing === 15) {
            outEdge.textContent = "Normatywny (Dobra dystrybucja)";
            outEdge.style.color = "var(--rk-state-green)";
        } else {
            outEdge.textContent = "Zagęszczony (Idealny rozkład)";
            outEdge.style.color = "var(--rk-state-green)";
        }

        // Klasyfikacja hydrauliczna pompy na podstawie długości (limit 120m)
        if (calculatedLength > 120) {
            svgStage.setAttribute('data-pump', 'critical');
            pumpText.textContent = "KRYTYCZNE (>35 kPa)";
            pumpText.setAttribute("fill", "#ef4444");

            statusBox.style.backgroundColor = "rgba(239, 68, 68, 0.1)";
            statusBox.style.borderColor = "rgba(239, 68, 68, 0.2)";
            statusLbl.style.color = "var(--rk-state-red)";
            statusVal.textContent = "Pętla zbyt długa! Wysokie opory zdławią pompę. Wykonawca musi podzielić obwód.";
        } else if (calculatedLength >= 100 && calculatedLength <= 120) {
            svgStage.setAttribute('data-pump', 'warning');
            pumpText.textContent = "PODWYŻSZONE OPORY";
            pumpText.setAttribute("fill", "#f59e0b");

            statusBox.style.backgroundColor = "rgba(245, 158, 11, 0.1)";
            statusBox.style.borderColor = "rgba(245, 158, 11, 0.2)";
            statusLbl.style.color = "var(--rk-brand-primary)";
            statusVal.textContent = "Granica normy (ok. 100m). Wymaga precyzyjnego równoważenia na rozdzielaczu.";
        } else {
            svgStage.setAttribute('data-pump', 'normal');
            pumpText.textContent = "OPTYMALNE (<15 kPa)";
            pumpText.setAttribute("fill", "#10b981");

            statusBox.style.backgroundColor = "rgba(16, 185, 129, 0.1)";
            statusBox.style.borderColor = "rgba(16, 185, 129, 0.2)";
            statusLbl.style.color = "var(--rk-state-green)";
            statusVal.textContent = "Bezpieczne parametry pętli. Pompa pracuje na maksymalnym współczynniku wydajności.";
        }
    }

    // 5. Zdarzenia wejściowe
    inpPower.addEventListener('input', function(e) {
        geoState.power = parseInt(e.target.value);
        valPowerOut.innerHTML = `<span>${geoState.power}</span> W`;
        updateHydraulics();
    });

    tileOptions.forEach(tile => {
        tile.addEventListener('click', function() {
            tileOptions.forEach(t => t.classList.remove('selected'));
            this.classList.add('selected');
            geoState.spacing = parseInt(this.getAttribute('data-spacing'));
            updateHydraulics();
        });
    });

    // Inicjalizacja formatowania tekstu suwaka
    valPowerOut.innerHTML = `<span>${geoState.power}</span> W`;

    // Uruchomienie kalkulatora
    updateHydraulics();
});
</script>



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-brand: #2563eb; /* Inżynieryjny niebieski */
    --rk-cs-brand-light: #eff6ff;
    --rk-cs-accent: #10b981; /* Zielony dla oszczędności / OZC */
    --rk-cs-alert: #ef4444; /* Czerwony dla błędów instalatora */
    --rk-cs-bg: #ffffff;
    --rk-cs-panel: #f8fafc;
    --rk-cs-border: #e2e8f0;
    --rk-cs-text: #475569;
    --rk-cs-muted: #94a3b8;
}

.rk-cs-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-cs-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(37, 99, 235, 0.15);
    border: 1px solid rgba(37, 99, 235, 0.2);
    overflow: hidden;
}

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

.rk-cs-header::after {
    content: '';
    position: absolute;
    top: -50px;
    right: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(37, 99, 235, 0.4) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    pointer-events: none;
}

.rk-cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #bfdbfe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(255, 255, 255, 0.2);
    position: relative;
    z-index: 2;
}

.rk-cs-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 25px 0;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.rk-cs-title span { color: #60a5fa; }

/* Grid Statystyk w Nagłówku */
.rk-cs-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.rk-cs-stat-box {
    background: rgba(0, 0, 0, 0.25);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
    backdrop-filter: blur(4px);
}

.rk-cs-stat-lbl { display: block; font-size: 11px; color: #94a3b8; text-transform: uppercase; font-weight: 800; margin-bottom: 6px; letter-spacing: 0.5px; }
.rk-cs-stat-val { display: block; font-size: 16px; font-weight: 900; color: #ffffff; }
.rk-cs-stat-val.highlight { color: #10b981; }

/* Główny Panel Interaktywny */
.rk-cs-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-cs-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-cs-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
    overflow: hidden;
}

/* Lewa Kolumna - Kontrola i Zestawienie */
.rk-cs-comparison {
    padding: 30px;
    display: flex;
    flex-direction: column;
}

.rk-cs-comp-title {
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-cs-dark);
    margin: 0 0 20px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* Toggle Switch (Przełącznik) */
.rk-cs-toggle-wrapper {
    display: flex;
    background: var(--rk-cs-panel);
    border: 2px solid var(--rk-cs-border);
    border-radius: 12px;
    padding: 4px;
    margin-bottom: 30px;
    position: relative;
}

.rk-cs-toggle-btn {
    flex: 1;
    text-align: center;
    padding: 12px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-cs-muted);
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 2;
}

.rk-cs-toggle-btn.active.mode-bad { color: #ffffff; }
.rk-cs-toggle-btn.active.mode-good { color: #ffffff; }

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

.rk-cs-dashboard[data-mode="bad"] .rk-cs-toggle-bg { left: 4px; background: var(--rk-cs-alert); box-shadow: 0 4px 10px rgba(239, 68, 68, 0.3); }
.rk-cs-dashboard[data-mode="good"] .rk-cs-toggle-bg { left: calc(50%); background: var(--rk-cs-accent); box-shadow: 0 4px 10px rgba(16, 185, 129, 0.3); }

/* Wiersze Danych */
.rk-cs-data-rows { display: flex; flex-direction: column; gap: 15px; }
.rk-cs-data-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-bottom: 12px;
    border-bottom: 1px dashed var(--rk-cs-border);
}
.rk-cs-data-row:last-child { border-bottom: none; }
.rk-cs-data-lbl { font-size: 13px; color: var(--rk-cs-text); font-weight: 600; }
.rk-cs-data-val { font-size: 15px; font-weight: 900; transition: color 0.3s; font-variant-numeric: tabular-nums; }

.rk-cs-dashboard[data-mode="bad"] .rk-cs-data-val { color: var(--rk-cs-alert); }
.rk-cs-dashboard[data-mode="good"] .rk-cs-data-val { color: var(--rk-cs-accent); }

/* Prawa Kolumna - Wizualizacja SVG */
.rk-cs-visual {
    background: var(--rk-cs-dark);
    padding: 30px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
}

.rk-cs-svg-stage { width: 100%; height: 200px; }

/* SVG Animacje */
.anim-hp-box { transition: all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); transform-origin: center bottom; }
.anim-fan { transform-origin: 150px 100px; }
.anim-pipe { transition: all 0.5s ease; stroke-dasharray: 4 4; }

.rk-cs-dashboard[data-mode="bad"] .anim-hp-box { transform: scale(1.1); fill: #450a0a; stroke: #ef4444; }
.rk-cs-dashboard[data-mode="bad"] .anim-fan { animation: fanSpin 0.5s linear infinite; fill: #ef4444; }
.rk-cs-dashboard[data-mode="bad"] .anim-pipe { stroke: #ef4444; stroke-width: 4; stroke-dasharray: 20 10; }

.rk-cs-dashboard[data-mode="good"] .anim-hp-box { transform: scale(0.85); fill: #064e3b; stroke: #10b981; }
.rk-cs-dashboard[data-mode="good"] .anim-fan { animation: fanSpin 2s linear infinite; fill: #10b981; }
.rk-cs-dashboard[data-mode="good"] .anim-pipe { stroke: #10b981; stroke-width: 2; stroke-dasharray: none; }

@keyframes fanSpin { 100% { transform: rotate(360deg); } }

/* Odznaka Oszczędności (Wyskakująca) */
.rk-cs-savings-badge {
    position: absolute;
    top: 20px;
    right: 20px;
    background: var(--rk-cs-accent);
    color: #ffffff;
    padding: 10px 15px;
    border-radius: 12px;
    font-weight: 900;
    font-size: 16px;
    box-shadow: 0 10px 20px rgba(16, 185, 129, 0.4);
    opacity: 0;
    transform: translateY(-10px) scale(0.9);
    transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.rk-cs-dashboard[data-mode="good"] .rk-cs-savings-badge { opacity: 1; transform: translateY(0) scale(1); }

/* Autor i Opis */
.rk-cs-author-section {
    padding: 0 50px 30px 50px;
    background: #f8fafc;
}

.rk-cs-author-box {
    background: #ffffff;
    border-left: 4px solid var(--rk-cs-brand);
    padding: 20px;
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    gap: 20px;
    box-shadow: 0 4px 15px rgba(0,0,0,0.03);
    border: 1px solid var(--rk-cs-border);
    border-left: 4px solid var(--rk-cs-brand);
}

.rk-cs-author-photo {
    width: 60px;
    height: 60px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--rk-cs-brand-light);
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2);
    flex-shrink: 0;
}

.rk-cs-author-text p { margin: 0; font-size: 14px; color: var(--rk-cs-text); line-height: 1.6; }
.rk-cs-author-text strong { color: var(--rk-cs-dark); font-weight: 800; }

/* Sekcja Mocnego CTA */
.rk-cs-cta-block {
    background: linear-gradient(135deg, #1e1b4b 0%, var(--rk-cs-dark) 100%);
    padding: 35px 50px;
    border-top: 1px solid rgba(37, 99, 235, 0.2);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 30px;
}

.rk-cs-cta-text h4 { font-size: 18px; font-weight: 800; color: #ffffff; margin: 0 0 8px 0; }
.rk-cs-cta-text p { font-size: 14px; color: #94a3b8; margin: 0; line-height: 1.5; }
.rk-cs-cta-btn {
    background: var(--rk-cs-brand);
    color: #ffffff;
    padding: 16px 32px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    text-decoration: none;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.5);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    white-space: nowrap;
    border: none;
    text-transform: uppercase;
}
.rk-cs-cta-btn:hover { transform: translateY(-3px); box-shadow: 0 15px 25px -5px rgba(37, 99, 235, 0.6); background: #3b82f6; }

@media (max-width: 768px) {
    .rk-cs-header, .rk-cs-interactive, .rk-cs-author-section, .rk-cs-cta-block { padding: 30px 20px; }
    .rk-cs-title { font-size: 24px; }
    .rk-cs-stats-grid { grid-template-columns: 1fr 1fr; }
    .rk-cs-dashboard { grid-template-columns: 1fr; }
    .rk-cs-svg-stage { height: 160px; }
    .rk-cs-author-box { flex-direction: column; text-align: center; }
    .rk-cs-cta-block { flex-direction: column; text-align: center; gap: 20px; }
    .rk-cs-cta-btn { width: 100%; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Case Study: OZC dla domu w Nowym Targu (174 m²)",
    "description": "Zakończyliśmy pełne opracowanie OZC dla domu 174m2 w V strefie klimatycznej (-24 st C). Zmiana pompy ciepła z 10 kW na 5 kW dała 6500 PLN oszczędności.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-04-14",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-casestudy",
    "name": "Wyniki optymalizacji OZC - Nowy Targ",
    "description": "Porównanie doboru pompy ciepła na podstawie intuicji instalatora vs precyzyjne wyliczenia OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "pompa ciepła 5kW vs 10kW",
      "OZC Nowy Targ V strefa klimatyczna",
      "rozstaw rur 15cm i 10cm",
      "przepływ zasilania 1.8 l/min",
      "oszczędność na pompie 6500 PLN"
    ],
    "measurementTechnique": "Analiza cieplna budynku OZC i projektowanie hydrauliczne wg PN-EN 12831.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Lokalizacja: Nowy Targ (V strefa, -24°C), Dom tradycyjny ceramika + 22cm EPS, Wentylacja mechaniczna.",
        "Obciążenie całkowite: 4,85 kW, pozwalające na redukcję pompy z 10 kW na 5 kW.",
        "Zysk: 6500 PLN, rozstaw salon 15 cm / łazienki 10 cm, przepływy: 1.8 l/min."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-casestudy",
    "name": "Kalkulator Oszczędności OZC",
    "description": "Interaktywny panel prezentujący realne oszczędności (6500 PLN) wynikające z przeliczenia instalatora vs inżyniera w Nowym Targu.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires modern browser with SVG and JavaScript enabled",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-cs-container" id="rk-cs-app">
    
    <div class="rk-cs-header">
        <div class="rk-cs-badge">Case Study: Kwiecień 2025</div>
        <h2 class="rk-cs-title">Instalator vs Inżynier: <span>Oszczędność 6 500 PLN</span></h2>
        
        <div class="rk-cs-stats-grid">
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Inwestor</span>
                <span class="rk-cs-stat-val">Pan Mariusz</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Lokalizacja</span>
                <span class="rk-cs-stat-val">Nowy Targ (-24°C)</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Powierzchnia</span>
                <span class="rk-cs-stat-val">174 m²</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Obciążenie (OZC)</span>
                <span class="rk-cs-stat-val highlight">4,85 kW</span>
            </div>
        </div>
    </div>

    <div class="rk-cs-interactive">
        
        <div class="rk-cs-dashboard" id="csDashboard" data-mode="bad">
            
            <div class="rk-cs-comparison">
                <h3 class="rk-cs-comp-title">Wybierz scenariusz doboru:</h3>
                
                <div class="rk-cs-toggle-wrapper">
                    <div class="rk-cs-toggle-bg"></div>
                    <div class="rk-cs-toggle-btn active mode-bad" id="btnModeBad" data-target="bad">Intuicja Instalatora</div>
                    <div class="rk-cs-toggle-btn mode-good" id="btnModeGood" data-target="good">Twarde OZC (Inżynieria)</div>
                </div>

                <div class="rk-cs-data-rows">
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Moc Pompy Ciepła:</span>
                        <span class="rk-cs-data-val" id="valPump">10 kW (Przewymiarowana)</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Rozstaw rur (Salon):</span>
                        <span class="rk-cs-data-val" id="valSpace">&#8222;Jak wyjdzie&#8221;</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Nastawy rotametrów:</span>
                        <span class="rk-cs-data-val" id="valFlow">Wszystko na 100%</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Koszt inwestycji:</span>
                        <span class="rk-cs-data-val" id="valCost">Drogo i nieefektywnie</span>
                    </div>
                </div>
            </div>

            <div class="rk-cs-visual">
                <div class="rk-cs-savings-badge">+ 6 500 PLN w kieszeni!</div>
                
                <div class="rk-cs-svg-stage">
                    <svg viewBox="0 0 300 200" width="100%" height="100%">
                        <path class="anim-pipe" d="M 50 180 L 250 180 M 50 170 L 250 170 M 50 160 L 250 160" stroke-linecap="round"/>
                        
                        <path d="M 150 20 L 50 80 L 50 150 L 250 150 L 250 80 Z" fill="none" stroke="#334155" stroke-width="4" stroke-linejoin="round"/>
                        
                        <g class="anim-hp-box" transform="translate(0, 0)">
                            <rect x="110" y="70" width="80" height="80" rx="8" stroke-width="4"/>
                            <g class="anim-fan">
                                <circle cx="150" cy="110" r="25" fill="#0f172a" opacity="0.5"/>
                                <path d="M 150 85 L 165 110 L 135 110 Z"/>
                                <path d="M 150 135 L 135 110 L 165 110 Z"/>
                                <circle cx="150" cy="110" r="5" fill="#ffffff"/>
                            </g>
                        </g>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-cs-author-section">
        <div class="rk-cs-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-cs-author-photo" loading="lazy">
            <div class="rk-cs-author-text">
                <p>14 kwietnia 2025 r. zakończyliśmy dokumentację dla budynku w Nowym Targu (ceramika + 22cm EPS, rekuperacja). Projektowe obciążenie wyniosło zaledwie <strong>4,85 kW</strong> przy strefie V (-24°C). Pozwoliło to odrzucić propozycję wykonawcy (10 kW), dobrać pompę 5 kW i wyznaczyć precyzyjny rozstaw rur co 15 cm i 10 cm, z przepływami rzędu 1,8 l/min. <strong>Wynik? Zbalansowany układ i fizyczna oszczędność 6500 zł dla Inwestora.</strong></p>
            </div>
        </div>
    </div>

    <div class="rk-cs-cta-block">
        <div class="rk-cs-cta-text">
            <h4>Przestań przepłacać za przewymiarowane urządzenia</h4>
            <p>Zamów projekt OZC + Ogrzewanie Podłogowe i odzyskaj kontrolę nad budżetem budowy.</p>
        </div>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-cs-cta-btn">Zamów Pakiet Projektowy</a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-cs-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji modułu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja Case Study należy do portalu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy DOM
    const dashboard = document.getElementById('csDashboard');
    const btnBad = document.getElementById('btnModeBad');
    const btnGood = document.getElementById('btnModeGood');
    
    // Pola Danych
    const valPump = document.getElementById('valPump');
    const valSpace = document.getElementById('valSpace');
    const valFlow = document.getElementById('valFlow');
    const valCost = document.getElementById('valCost');

    // 3. Baza Danych Scenariuszy
    const dataScenarios = {
        bad: {
            pump: "10 kW (Przewymiarowana)",
            space: "Intuicyjnie / Losowo",
            flow: "Maksymalne na pompie",
            cost: "Ogromne rachunki i zjawisko taktowania"
        },
        good: {
            pump: "5 kW (Idealnie dobrana OZC)",
            space: "15 cm (Salon) / 10 cm (Łazienka)",
            flow: "Precyzyjne 1,8 l/min",
            cost: "Zoptymalizowane + zysk na starcie"
        }
    };

    // 4. Silnik Przełączania
    function setMode(mode) {
        // Zmiana atrybutu głównego (napędza CSS i SVG)
        dashboard.setAttribute('data-mode', mode);
        
        // Klasy przycisków
        if (mode === 'bad') {
            btnBad.classList.add('active');
            btnGood.classList.remove('active');
        } else {
            btnGood.classList.add('active');
            btnBad.classList.remove('active');
        }

        // Aktualizacja tekstów
        const data = dataScenarios[mode];
        valPump.textContent = data.pump;
        valSpace.textContent = data.space;
        valFlow.textContent = data.flow;
        valCost.textContent = data.cost;
    }

    // Zdarzenia kliknięcia
    btnBad.addEventListener('click', () => setMode('bad'));
    btnGood.addEventListener('click', () => setMode('good'));

});
</script>



<style>
:root {
    --rk-ozcfaq-dark: #0f172a;
    --rk-ozcfaq-brand: #0284c7; /* Ekspercki niebieski OZC */
    --rk-ozcfaq-brand-light: #e0f2fe;
    --rk-ozcfaq-accent: #0ea5e9;
    --rk-ozcfaq-bg: #f8fafc;
    --rk-ozcfaq-border: #cbd5e1;
    --rk-ozcfaq-text: #334155;
    --rk-ozcfaq-hover: #f1f5f9;
}

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

/* Nagłówek */
.rk-ozcfaq-header {
    background: linear-gradient(135deg, var(--rk-ozcfaq-dark) 0%, #1e293b 100%);
    padding: 40px 45px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-ozcfaq-brand);
    text-align: center;
}

.rk-ozcfaq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-ozcfaq-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
    color: #ffffff;
}

.rk-ozcfaq-title span { color: #38bdf8; }

/* Akordeon */
.rk-ozcfaq-interactive {
    padding: 40px 45px;
    background: var(--rk-ozcfaq-bg);
}

.rk-ozcfaq-list {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

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

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

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

.rk-ozcfaq-question:hover {
    background: var(--rk-ozcfaq-hover);
}

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

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

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

/* Odpowiedź z Gridem i Animacją SVG */
.rk-ozcfaq-answer-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

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

.rk-ozcfaq-answer-inner {
    overflow: hidden;
}

.rk-ozcfaq-content {
    padding: 25px;
    border-top: 1px solid var(--rk-ozcfaq-border);
    display: grid;
    grid-template-columns: 1fr 180px;
    gap: 30px;
    align-items: center;
}

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

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

.rk-link {
    color: var(--rk-ozcfaq-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(2, 132, 199, 0.2);
    transition: all 0.3s;
}

.rk-link:hover {
    border-bottom-color: var(--rk-ozcfaq-brand);
}

/* Wizualizacje SVG */
.rk-ozcfaq-visual {
    background: var(--rk-ozcfaq-dark);
    border-radius: 12px;
    padding: 15px;
    height: 130px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 10px rgba(0,0,0,0.3);
    position: relative;
    overflow: hidden;
}

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

/* Animacje specyficzne dla każdego SVG zależne od .active w rodzicu */

/* FAQ 1: Pokoje OZC */
.anim-room-1, .anim-room-2, .anim-room-3 { opacity: 0.3; transition: opacity 0.5s; }
.rk-ozcfaq-item.active .anim-room-1 { animation: pulseRed 2s infinite; }
.rk-ozcfaq-item.active .anim-room-2 { animation: pulseOrange 2s 0.6s infinite; }
.rk-ozcfaq-item.active .anim-room-3 { animation: pulseYellow 2s 1.2s infinite; }
@keyframes pulseRed { 50% { fill: #ef4444; opacity: 0.9; } }
@keyframes pulseOrange { 50% { fill: #f97316; opacity: 0.9; } }
@keyframes pulseYellow { 50% { fill: #eab308; opacity: 0.9; } }

/* FAQ 2: Rekuperacja/Aktualizacja */
.anim-fan { transform-origin: center; transition: transform 0.5s; }
.rk-ozcfaq-item.active .anim-fan { animation: spinFan 2s linear infinite; }
@keyframes spinFan { to { transform: rotate(360deg); } }
.anim-insulation { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 1s 0.3s; }
.rk-ozcfaq-item.active .anim-insulation { stroke-dashoffset: 0; }

/* FAQ 3: EUco vs OZC */
.anim-bar-euco { transform: scaleX(0); transform-origin: left; transition: transform 1s 0.2s cubic-bezier(0.2, 0.8, 0.2, 1); }
.rk-ozcfaq-item.active .anim-bar-euco { transform: scaleX(1); }
.anim-bar-ozc { transform: scaleX(0); transform-origin: left; transition: transform 1s 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); }
.rk-ozcfaq-item.active .anim-bar-ozc { transform: scaleX(1); }

/* FAQ 4: Zyski (Noc) */
.anim-sun { transition: transform 1s, opacity 1s; }
.anim-moon { opacity: 0; transform: translateY(-20px); transition: transform 1s, opacity 1s; }
.rk-ozcfaq-item.active .anim-sun { transform: translateY(30px); opacity: 0; }
.rk-ozcfaq-item.active .anim-moon { opacity: 1; transform: translateY(0); }
.anim-snow { opacity: 0; }
.rk-ozcfaq-item.active .anim-snow { animation: fallSnow 2s infinite linear; }
@keyframes fallSnow { 0% { opacity: 0; transform: translateY(-10px); } 50% { opacity: 1; } 100% { opacity: 0; transform: translateY(20px); } }

/* FAQ 5: Stary Dom */
.anim-scan { transform: translateY(-10px); opacity: 0; }
.rk-ozcfaq-item.active .anim-scan { animation: scanWall 2.5s infinite; }
@keyframes scanWall { 0% { transform: translateY(-10px); opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { transform: translateY(60px); opacity: 0; } }

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

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "FAQ – Najczęściej zadawane pytania o OZC",
    "description": "Eksperckie odpowiedzi na pytania dotyczące Projektowego Obciążenia Cieplnego (OZC), różnic z EUco, modernizacji starych domów i aktualizacji projektu.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy obliczenia OZC wykonuje się dla całego budynku, czy dla każdego pomieszczenia osobno?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Obliczenia OZC muszą być bezwzględnie wykonane dla każdego pomieszczenia z osobna, ponieważ każde wnętrze posiada inną strukturę przegród zewnętrznych oraz odmienne straty wentylacyjne. Zbiorczy wynik dla całego budynku jest jedynie sumą składowych służącą do doboru mocy źródła ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Jak często należy aktualizować obliczenia OZC w trakcie trwania budowy domu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Aktualizację obliczeń OZC należy przeprowadzić zawsze wtedy, gdy w trakcie realizacji inwestycji dojdzie do istotnych zmian w materiałach izolacyjnych lub stolarki otworowej w stosunku do pierwotnego projektu. Zmiana grubości styropianu czy rezygnacja z rekuperacji całkowicie zmienia bilans cieplny budynku."
        }
      },
      {
        "@type": "Question",
        "name": "Czy wskaźnik EUco z charakterystyki energetycznej projektu to samo co Projektowe Obciążenie Cieplne?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, wskaźnik EUco określa sezonowe zapotrzebowanie na energię użytkową w ciągu całego roku wyrażane w kWh/(m2 rok), natomiast OZC to chwilowa, maksymalna moc cieplna wyrażana w kilowatach [kW], potrzebna do pokrycia strat w warunkach skrajnego mrozu. OZC decyduje o fizycznej wielkości urządzeń, a EUco o rocznych kosztach paliwa."
        }
      },
      {
        "@type": "Question",
        "name": "Jaki wpływ na wartość OZC mają zyski ciepła od nasłonecznienia oraz urządzeń wewnętrznych?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Zgodnie z procedurą normy PN-EN 12831, przy obliczaniu Projektowego Obciążenia Cieplnego mającego na celu dobór mocy urządzeń grzewczych, zyski ciepła od nasłonecznienia oraz zyski wewnętrzne są całkowicie pomijane. Założenie to wynika z faktu, że maksymalne, krytyczne obciążenie cieplne może wystąpić w środku nocy, kiedy zyski te nie występują."
        }
      },
      {
        "@type": "Question",
        "name": "Czy stary dom z lat 80. bez dokumentacji projektowej można poprawnie przeliczyć pod kątem OZC?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak, dla starych budynków wykonuje się inwentaryzację termomodernizacyjną, odtwarzając strukturę przegród na podstawie odkrywek oraz oceniając stan techniczny stolarki okiennej. Wprowadzając te dane do programu, inżynier jest w stanie z wysoką dokładnością wyznaczyć realne OZC obiektu przed doborem pompy ciepła."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-faq",
    "name": "Baza Wiedzy Inwestorskiej: Parametry Normy PN-EN 12831",
    "description": "Zbiór danych i definicji rozróżniających wartości OZC od charakterystyki energetycznej (EUco) oraz uwzględniających zyski pasywne.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": { "@type": "Person", "name": "Robert Kucharski" },
    "keywords": [
      "obliczenia OZC dla pomieszczeń",
      "aktualizacja bilansu cieplnego",
      "EUco a obciążenie cieplne",
      "pasywne zyski ciepła OZC",
      "termomodernizacja starego domu"
    ],
    "measurementTechnique": "Interpretacja wymagań normy PN-EN 12831 w kontekście fizyki budowli i warunków zimowych bez zysków solarnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "OZC określa szczytowe zapotrzebowanie (kW) w mroźną noc bez słońca.",
        "EUco to roczne zużycie energii wyrażane w kWh/(m2 rok)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-faq",
    "name": "Interaktywny Przewodnik: Mechanika Obliczeń OZC",
    "description": "Interaktywny moduł edukacyjny typu akordeon, wykorzystujący animacje SVG do demonstracji procesów wymiany ciepła, inwentaryzacji oraz bilansu cieplnego budynku.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": { "@type": "Person", "name": "Robert Kucharski" }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-ozcfaq-container" id="rk-ozc-faq-app">
    <div class="rk-ozcfaq-header">
        <div class="rk-ozcfaq-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Baza Wiedzy Inwestora
        </div>
        <h2 class="rk-ozcfaq-title">FAQ – <span>Najczęściej zadawane pytania o OZC</span></h2>
    </div>

    <div class="rk-ozcfaq-interactive">
        <div class="rk-ozcfaq-list">
            
            <!-- Pytanie 1 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>1. Czy obliczenia OZC wykonuje się dla całego budynku, czy dla każdego pomieszczenia osobno?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Obliczenia OZC muszą być <strong>bezwzględnie wykonane dla każdego pomieszczenia z osobna</strong>. Każde wnętrze posiada inną strukturę przegród zewnętrznych oraz odmienne <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-link">straty wentylacyjne</a>. Zbiorczy wynik dla całego budynku jest jedynie sumą matematyczną tych składowych, która służy wyłącznie do określenia całkowitej mocy źródła ciepła (np. pompy ciepła).
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <path d="M 10 35 L 50 5 L 90 35" fill="none" stroke="#64748b" stroke-width="3" stroke-linejoin="round"/>
                                    <rect x="20" y="35" width="60" height="30" fill="none" stroke="#64748b" stroke-width="2"/>
                                    <line x1="50" y1="35" x2="50" y2="65" stroke="#64748b" stroke-width="2"/>
                                    <line x1="20" y1="50" x2="80" y2="50" stroke="#64748b" stroke-width="2"/>
                                    <rect class="anim-room-1" x="22" y="37" width="26" height="11" fill="#475569"/>
                                    <rect class="anim-room-2" x="52" y="37" width="26" height="11" fill="#475569"/>
                                    <rect class="anim-room-3" x="22" y="52" width="56" height="11" fill="#475569"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 2 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>2. Jak często należy aktualizować obliczenia OZC w trakcie trwania budowy domu?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Aktualizację obliczeń OZC należy przeprowadzić <strong>zawsze wtedy, gdy dochodzi do istotnych zmian</strong> w strukturze przegród względem pierwotnego projektu architektonicznego. Zmiana grubości styropianu na elewacji, wstawienie gorszych parametrów stolarki okiennej czy rezygnacja z <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-link">wentylacji mechanicznej (rekuperacji)</a> na rzecz grawitacyjnej całkowicie zmienia bilans cieplny budynku.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="20" y="20" width="60" height="30" fill="none" stroke="#64748b" stroke-width="3" rx="4"/>
                                    <line class="anim-insulation" x1="20" y1="15" x2="80" y2="15" stroke="#0ea5e9" stroke-width="4" stroke-linecap="round"/>
                                    <g transform="translate(50, 35)">
                                        <circle cx="0" cy="0" r="10" fill="none" stroke="#94a3b8" stroke-width="2"/>
                                        <path class="anim-fan" d="M 0 -8 L 2 -2 L 8 0 L 2 2 L 0 8 L -2 2 L -8 0 L -2 -2 Z" fill="#cbd5e1"/>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 3 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>3. Czy wskaźnik EUco z charakterystyki energetycznej to samo co OZC?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                <strong>Nie, to dwa zupełnie różne parametry.</strong> Wskaźnik EUco określa sezonowe zapotrzebowanie na energię użytkową w ciągu całego roku (wyrażane w kWh/m2 na rok), czyli informuje o rocznych kosztach paliwa. Natomiast OZC to chwilowa, maksymalna moc cieplna wyrażana w kilowatach [kW], potrzebna do pokrycia strat w warunkach skrajnego mrozu. OZC decyduje o <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" class="rk-link">fizycznej wielkości i mocy urządzeń</a>.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <text x="10" y="30" fill="#94a3b8" font-size="10" font-family="sans-serif">EUco</text>
                                    <rect x="35" y="22" width="55" height="8" fill="#1e293b" rx="2"/>
                                    <rect class="anim-bar-euco" x="35" y="22" width="45" height="8" fill="#0ea5e9" rx="2"/>
                                    
                                    <text x="10" y="55" fill="#94a3b8" font-size="10" font-family="sans-serif">OZC</text>
                                    <rect x="35" y="47" width="55" height="8" fill="#1e293b" rx="2"/>
                                    <rect class="anim-bar-ozc" x="35" y="47" width="25" height="8" fill="#ef4444" rx="2"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 4 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>4. Jaki wpływ na wartość OZC mają zyski ciepła od słońca i urządzeń?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Zgodnie z procedurą normy PN-EN 12831, przy obliczaniu Projektowego Obciążenia Cieplnego mającego na celu dobór mocy urządzeń grzewczych, <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/" class="rk-link">pasywne zyski ciepła</a> od nasłonecznienia oraz wewnętrzne zyski bytowe są <strong>całkowicie pomijane</strong>. Założenie to jest logiczne – maksymalne, krytyczne obciążenie cieplne budynku zawsze występuje w środku mroźnej nocy, kiedy tych zysków po prostu nie ma.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <g class="anim-sun">
                                        <circle cx="50" cy="35" r="12" fill="#eab308"/>
                                        <path d="M 50 15 L 50 18 M 50 52 L 50 55 M 30 35 L 33 35 M 67 35 L 70 35" stroke="#eab308" stroke-width="2" stroke-linecap="round"/>
                                    </g>
                                    <g class="anim-moon">
                                        <path d="M 50 20 A 12 12 0 1 0 60 40 A 15 15 0 0 1 50 20 Z" fill="#e2e8f0"/>
                                        <circle class="anim-snow" cx="35" cy="25" r="1.5" fill="#ffffff"/>
                                        <circle class="anim-snow" cx="65" cy="45" r="1.5" fill="#ffffff" style="animation-delay: 0.5s"/>
                                        <circle class="anim-snow" cx="45" cy="50" r="1.5" fill="#ffffff" style="animation-delay: 1s"/>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 5 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>5. Czy stary dom z lat 80. bez projektu można policzyć pod kątem OZC?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Tak, dla starych budynków wykonuje się <strong>inwentaryzację termomodernizacyjną</strong>. Inżynier odtwarza strukturę przegród na podstawie odkrywek fizycznych oraz oceny stanu technicznego stolarki okiennej i stropów. Wprowadzając zebrane dane do oprogramowania inżynierskiego, jest w stanie z wysoką dokładnością wyznaczyć realne OZC, co jest warunkiem koniecznym do weryfikacji, <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-remontowanym-budynku-czy-warto/" class="rk-link">czy w starym budynku sprawdzi się instalacja płaszczyznowa</a> z pompą ciepła.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <g stroke="#64748b" stroke-width="2" fill="none">
                                        <rect x="25" y="15" width="15" height="8"/>
                                        <rect x="42" y="15" width="15" height="8"/>
                                        <rect x="59" y="15" width="15" height="8"/>
                                        <rect x="18" y="25" width="15" height="8"/>
                                        <rect x="35" y="25" width="15" height="8"/>
                                        <rect x="52" y="25" width="15" height="8"/>
                                        <rect x="69" y="25" width="15" height="8"/>
                                        <rect x="25" y="35" width="15" height="8"/>
                                        <rect x="42" y="35" width="15" height="8"/>
                                        <rect x="59" y="35" width="15" height="8"/>
                                    </g>
                                    <line class="anim-scan" x1="15" y1="20" x2="85" y2="20" stroke="#0ea5e9" stroke-width="2" stroke-dasharray="4 4"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez wyskakujących H2/H3 z błędami)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-ozc-faq-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

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

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



<style>
:root {
    --rk-ozc-dark: #0f172a;
    --rk-ozc-blue: #0284c7;
    --rk-ozc-light-blue: #f0f9ff;
    --rk-ozc-green: #059669;
    --rk-ozc-green-light: #ecfdf5;
    --rk-ozc-red: #dc2626;
    --rk-ozc-red-light: #fef2f2;
    --rk-ozc-gold: #fbbf24;
    --rk-ozc-gray: #64748b;
    --rk-ozc-border: #e2e8f0;
    --rk-ozc-bg: #ffffff;
}

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

/* Sekcja Nagłówkowa */
.rk-ozc-header {
    padding: 45px 50px 35px;
    background: linear-gradient(135deg, var(--rk-ozc-dark) 0%, #1e293b 100%);
    color: #ffffff;
    text-align: center;
    position: relative;
    border-bottom: 4px solid var(--rk-ozc-blue);
}

.rk-ozc-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.2);
}

.rk-ozc-header h2 {
    font-size: 32px;
    font-weight: 900;
    margin: 0 0 20px 0;
    color: #ffffff;
    line-height: 1.2;
}

.rk-ozc-intro-text {
    font-size: 17px;
    line-height: 1.7;
    color: #cbd5e1;
    max-width: 800px;
    margin: 0 auto;
    font-weight: 400;
}

.rk-ozc-intro-text a {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: color 0.3s;
}

.rk-ozc-intro-text a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Interaktywny Symulator (Mobile App Switch) */
.rk-ozc-interactive {
    padding: 45px 50px;
    background: #f8fafc;
}

.rk-switcher-wrapper {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-app-switch {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 5px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 500px;
}

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

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

.rk-switch-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-ozc-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-switch[data-mode="pro"] .rk-switch-glider {
    transform: translateX(100%);
    background: var(--rk-ozc-green);
}

/* Wynik symulacji */
.rk-ozc-result-box {
    background: #ffffff;
    border-radius: 20px;
    border: 2px solid var(--rk-ozc-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 160px 1fr;
    gap: 40px;
    align-items: center;
    transition: all 0.4s ease;
}

.rk-ozc-result-box.mode-amateur {
    border-color: var(--rk-ozc-red-light);
    box-shadow: 0 15px 35px -10px rgba(220, 38, 38, 0.12);
}

.rk-ozc-result-box.mode-pro {
    border-color: var(--rk-ozc-green-light);
    box-shadow: 0 15px 35px -10px rgba(5, 150, 105, 0.12);
}

.rk-svg-stage {
    width: 100%;
    max-width: 160px;
    margin: 0 auto;
}

/* Animacje SVG */
.anim-pump-body { transition: fill 0.5s ease; }
.anim-waves { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0.5s ease; }

.mode-amateur .anim-pump-body { fill: var(--rk-ozc-red); animation: taktowaniePompy 0.3s infinite; }
.mode-amateur .anim-waves { stroke: var(--rk-ozc-red); animation: brokenWaves 1.5s infinite; }

.mode-pro .anim-pump-body { fill: var(--rk-ozc-green); animation: stabilnaPraca 3s infinite; }
.mode-pro .anim-waves { stroke: var(--rk-ozc-green); animation: smoothWaves 2s infinite linear; }

@keyframes taktowaniePompy {
    0% { transform: translate(1px, 1px); }
    25% { transform: translate(-2px, -1px); }
    50% { transform: translate(2px, 2px); }
    75% { transform: translate(-1px, -2px); }
    100% { transform: translate(1px, 1px); }
}

@keyframes stabilnaPraca {
    0% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0)); transform: scale(1); }
    50% { filter: drop-shadow(0 0 15px rgba(16, 185, 129, 0.6)); transform: scale(1.02); }
    100% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0)); transform: scale(1); }
}

@keyframes brokenWaves {
    0% { stroke-dashoffset: 100; opacity: 1; }
    50% { stroke-dashoffset: 50; opacity: 0.2; }
    100% { stroke-dashoffset: 0; opacity: 1; }
}

@keyframes smoothWaves {
    0% { stroke-dashoffset: 100; opacity: 0.8; }
    100% { stroke-dashoffset: -100; opacity: 0.8; }
}

.rk-ozc-content h3 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 800;
}

.mode-amateur .rk-ozc-content h3 { color: var(--rk-ozc-red); }
.mode-pro .rk-ozc-content h3 { color: var(--rk-ozc-green); }

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

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

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

/* Tabela Kafelkowa (Koszty i Efekty) */
.rk-data-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-top: 25px;
}

.rk-tile {
    background: #f1f5f9;
    padding: 18px;
    border-radius: 14px;
    border-left: 4px solid transparent;
    transition: all 0.3s ease;
}

.mode-amateur .rk-tile { border-left-color: var(--rk-ozc-red); background: #fef2f2; }
.mode-pro .rk-tile { border-left-color: var(--rk-ozc-green); background: #ecfdf5; }

.rk-tile-label {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 5px;
}

.rk-tile-value {
    display: block;
    font-size: 17px;
    font-weight: 900;
    color: var(--rk-ozc-dark);
}

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

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

.rk-btn-massive:hover {
    transform: translateY(-5px);
    background: #0369a1;
    box-shadow: 0 20px 35px -5px rgba(2, 132, 199, 0.5);
    border-color: #7dd3fc;
}

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

@media (max-width: 768px) {
    .rk-ozc-header, .rk-ozc-interactive, .rk-ozc-cta-box { padding: 35px 25px; }
    .rk-ozc-result-box { grid-template-columns: 1fr; text-align: center; padding: 25px; gap: 20px; }
    .rk-svg-stage { max-width: 120px; margin-bottom: 10px; }
    .rk-switch-btn { padding: 12px 10px; font-size: 13px; }
    .rk-data-tiles { grid-template-columns: 1fr; gap: 12px; }
    .rk-btn-massive { width: 100%; padding: 18px 20px; font-size: 16px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Podsumowanie techniczne: OZC a przyszłość instalacji",
    "description": "Projektowe Obciążenie Cieplne (OZC) wyznaczone według normy PN-EN 12831 to inżynierski fundament. Chroni przed taktowaniem pompy ciepła i błędami w układaniu podłogówki.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-podsumowanie",
    "name": "Wpływ obliczeń OZC na żywotność i koszty instalacji grzewczej",
    "description": "Analiza porównawcza parametrów pracy pompy ciepła i hydrauliki ogrzewania podłogowego w przypadku zastosowania normy PN-EN 12831 oraz doboru szacunkowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne",
      "taktowanie pompy ciepła",
      "zbalansowanie hydrauliczne rotametry",
      "bezwładność termiczna jastrychu",
      "norma PN-EN 12831"
    ],
    "measurementTechnique": "Symulacja skutków doboru mocy źródła ciepła oraz nastaw rozdzielacza w oparciu o wyliczenia strat ciepła vs. przeliczniki W/m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wariant Szacunkowy: Przewymiarowana pompa ciepła, ciągłe taktowanie, brak możliwości zbalansowania pętli po wylaniu betonu.",
        "Wariant z OZC: Precyzyjnie dobrana moc, stabilna praca sprężarki, zbilansowane przepływy gwarantujące bezawaryjność."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-podsumowanie",
    "name": "Symulator Efektywności: OZC vs Zgadywanie",
    "description": "Interaktywny panel demonstrujący mechaniczne i finansowe skutki braku precyzyjnego Projektowego Obciążenia Cieplnego w systemach ogrzewania płaszczyznowego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-ozc-container" id="ozc-sum-app">
    <!-- Nagłówek -->
    <div class="rk-ozc-header">
        <div class="rk-ozc-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Podsumowanie Techniczne
        </div>
        <h2>OZC a przyszłość Twojej instalacji</h2>
        <p class="rk-ozc-intro-text">
            Projektowe Obciążenie Cieplne (OZC) wyznaczone zgodnie z normą <strong>PN-EN 12831</strong> to kluczowa decyzja inżynierska na etapie budowy lub modernizacji domu. Wodne ogrzewanie podłogowe jako system niskotemperaturowy o ogromnej <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności termicznej</a> nie wybacza błędów – rury zalane betonem jastrychowym stają się elementem konstrukcyjnym budynku.
        </p>
    </div>

    <!-- Symulator Standardu -->
    <div class="rk-ozc-interactive">
        <div class="rk-switcher-wrapper">
            <div class="rk-app-switch" id="ozcSwitchContainer" data-mode="amateur">
                <div class="rk-switch-glider" id="ozcGlider"></div>
                <button class="rk-switch-btn active" data-target="amateur">Przelicznik &#8222;Na oko&#8221;</button>
                <button class="rk-switch-btn" data-target="pro">Projekt OZC (PN-EN 12831)</button>
            </div>
        </div>

        <div class="rk-ozc-result-box mode-amateur" id="ozcResultContent">
            <div class="rk-svg-stage">
                <!-- SVG animowane z kodu -->
                <svg viewBox="0 0 100 100" width="100%" height="100%">
                    <!-- Pompa Ciepła -->
                    <rect x="25" y="30" width="50" height="60" rx="6" class="anim-pump-body" />
                    <circle cx="50" cy="50" r="14" fill="#ffffff" opacity="0.9" />
                    <path d="M 45 45 L 55 50 L 45 55 Z" fill="#1e293b" />
                    <!-- Fale Ciepła (podłogówka) -->
                    <path d="M 10 95 Q 30 80 50 95 T 90 95" fill="none" stroke-width="4" stroke-linecap="round" class="anim-waves" />
                    <path d="M 10 105 Q 30 90 50 105 T 90 105" fill="none" stroke-width="4" stroke-linecap="round" class="anim-waves" style="animation-delay: 0.3s" />
                </svg>
            </div>
            
            <div class="rk-ozc-content">
                <h3 id="dynTitle">Taktowanie i nieodwracalne błędy</h3>
                <p id="dynDesc">
                    Rezygnacja z precyzyjnych obliczeń komputerowych na rzecz archaicznych przeliczników powierzchniowych to prosta droga do zakupu przewymiarowanej, stale taktującej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a>, generującej wysokie koszty eksploatacji i skazanej na szybką awarię. Wadliwy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a> czy błędne zbalansowanie hydrauliczne na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach</a> są niemal niemożliwe do skorygowania po fakcie.
                </p>
                
                <div class="rk-data-tiles">
                    <div class="rk-tile">
                        <span class="rk-tile-label" id="dynLabel1">Ryzyko dla sprężarki</span>
                        <span class="rk-tile-value" id="dynVal1">Krytyczne (Taktowanie)</span>
                    </div>
                    <div class="rk-tile">
                        <span class="rk-tile-label" id="dynLabel2">Regulacja hydrauliczna</span>
                        <span class="rk-tile-value" id="dynVal2">Niemożliwa do kalibracji</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Mocne CTA -->
    <div class="rk-ozc-cta-box">
        <h3 style="font-size: 24px; font-weight: 900; color: var(--rk-ozc-dark); margin: 0 0 15px 0;">Zbuduj instalację, która przetrwa dekady</h3>
        <p class="rk-ozc-intro-text" style="color: #64748b; margin-bottom: 30px;">
            Nie pozwól, by błędy na etapie planowania uderzyły Cię po portfelu. Wykorzystaj inżynierską wiedzę, sprawdzone normy i narzędzia, które gwarantują spokój.
        </p>
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-massive">
            PRZEJDŹ DO BAZY WIEDZY I PORADNIKÓW
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('ozc-sum-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener podsumowujący oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Mobile App Switch)
    const switchContainer = document.getElementById('ozcSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-switch-btn');
    const resultBox = document.getElementById('ozcResultContent');
    
    // Elementy tekstowe do podmiany
    const dynTitle = document.getElementById('dynTitle');
    const dynDesc = document.getElementById('dynDesc');
    const dynLabel1 = document.getElementById('dynLabel1');
    const dynVal1 = document.getElementById('dynVal1');
    const dynLabel2 = document.getElementById('dynLabel2');
    const dynVal2 = document.getElementById('dynVal2');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Animacja przełącznika
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const targetMode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', targetMode);

            // Aktualizacja treści i klas kontenera SVG
            if (targetMode === 'pro') {
                resultBox.className = 'rk-ozc-result-box mode-pro';
                
                dynTitle.textContent = "Cicha, energooszczędna praca na dekady";
                dynDesc.innerHTML = `Jedynie precyzyjne powiązanie strat ciepła każdego pomieszczenia z geometrią <a href="https://projekt-ogrzewania.pl/petla-grzewcza/">pętli grzewczych</a> gwarantuje bezawaryjną, cichą i maksymalnie energooszczędną pracę całego systemu przez dekady. Wykluczasz awarie jeszcze na papierze.`;
                
                dynLabel1.textContent = "Żywotność układu";
                dynVal1.textContent = "Maksymalna wydajność (COP)";
                dynVal1.style.color = "var(--rk-ozc-green)";
                
                dynLabel2.textContent = "Przepływy w pętlach";
                dynVal2.textContent = "Idealnie zbalansowane";
                dynVal2.style.color = "var(--rk-ozc-green)";

            } else {
                resultBox.className = 'rk-ozc-result-box mode-amateur';
                
                dynTitle.textContent = "Taktowanie i nieodwracalne błędy";
                dynDesc.innerHTML = `Rezygnacja z precyzyjnych obliczeń komputerowych na rzecz archaicznych przeliczników powierzchniowych to prosta droga do zakupu przewymiarowanej, stale taktującej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a>, generującej wysokie koszty eksploatacji i skazanej na szybką awarię. Wadliwy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a> czy błędne zbalansowanie hydrauliczne na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach</a> są niemal niemożliwe do skorygowania po fakcie.`;
                
                dynLabel1.textContent = "Ryzyko dla sprężarki";
                dynVal1.textContent = "Krytyczne (Taktowanie)";
                dynVal1.style.color = "var(--rk-ozc-dark)";
                
                dynLabel2.textContent = "Regulacja hydrauliczna";
                dynVal2.textContent = "Niemożliwa do kalibracji";
                dynVal2.style.color = "var(--rk-ozc-dark)";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-ozcdl-dark: #0f172a;
    --rk-ozcdl-brand: #ea580c; /* Ognisty pomarańcz nawiązujący do ciepła */
    --rk-ozcdl-brand-dark: #c2410c;
    --rk-ozcdl-bg: #f8fafc;
    --rk-ozcdl-border: #e2e8f0;
    --rk-ozcdl-text: #334155;
    --rk-ozcdl-white: #ffffff;
    --rk-ozcdl-accent: #38bdf8;
}

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

/* NAGŁÓWEK SEKCI */
.rk-ozcdl-header {
    background: linear-gradient(135deg, var(--rk-ozcdl-dark) 0%, #311505 100%);
    padding: 45px 50px;
    color: var(--rk-ozcdl-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    overflow: hidden;
}

.rk-ozcdl-header::after {
    content: '';
    position: absolute;
    bottom: -50px;
    right: -20px;
    width: 200px;
    height: 200px;
    background: radial-gradient(circle, rgba(234, 88, 12, 0.4) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    pointer-events: none;
}

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

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

.rk-ozcdl-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 12px 0;
    line-height: 1.3;
    letter-spacing: -0.5px;
}

.rk-ozcdl-header h2 span { color: #f97316; }

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

/* WIZUALIZACJA IKONY Z ANIMACJĄ CIEPŁA */
.rk-ozcdl-visual {
    position: relative;
    z-index: 2;
}

.rk-ozcdl-icon-svg {
    width: 90px;
    height: auto;
    filter: drop-shadow(0 15px 20px rgba(0,0,0,0.4));
    animation: ozcFloat 3.5s infinite ease-in-out alternate;
}

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

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

.rk-ozcdl-preview-box {
    flex: 1;
    background: var(--rk-ozcdl-bg);
    border: 2px dashed #cbd5e1;
    border-radius: 16px;
    padding: 10px;
    position: relative;
    cursor: zoom-in;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-ozcdl-preview-box:hover {
    transform: scale(1.03);
    border-color: var(--rk-ozcdl-brand);
    border-style: solid;
    box-shadow: 0 20px 30px -10px rgba(234, 88, 12, 0.2);
}

.rk-ozcdl-preview-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}

.rk-ozcdl-zoom-badge {
    position: absolute;
    bottom: 20px;
    right: 20px;
    background: rgba(15, 23, 42, 0.85);
    color: white;
    padding: 8px 16px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    backdrop-filter: blur(4px);
    transition: background 0.3s;
}

.rk-ozcdl-preview-box:hover .rk-ozcdl-zoom-badge {
    background: var(--rk-ozcdl-brand);
}

/* INTERAKTYWNY PANEL (PRAWA STRONA) */
.rk-ozcdl-info-side {
    flex: 1.2;
    display: flex;
    flex-direction: column;
}

/* Zakładki (Tabs) */
.rk-ozcdl-tabs {
    display: flex;
    background: #f1f5f9;
    border-radius: 12px;
    padding: 6px;
    margin-bottom: 25px;
}

.rk-ozcdl-tab {
    flex: 1;
    text-align: center;
    padding: 12px;
    font-size: 13.5px;
    font-weight: 800;
    color: var(--rk-ozcdl-muted);
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.2s ease;
}

.rk-ozcdl-tab.active {
    background: var(--rk-ozcdl-white);
    color: var(--rk-ozcdl-brand);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.rk-ozcdl-panel {
    display: none;
    animation: fadeInTab 0.3s ease;
}

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

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

.rk-ozcdl-feature-list {
    list-style: none;
    padding: 0;
    margin: 0 0 30px 0;
}

.rk-ozcdl-feature-item {
    display: flex;
    align-items: flex-start;
    gap: 15px;
    margin-bottom: 18px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--rk-ozcdl-text);
    line-height: 1.5;
}

.rk-ozcdl-feature-item svg {
    width: 22px;
    height: 22px;
    color: var(--rk-ozcdl-brand);
    flex-shrink: 0;
    margin-top: 2px;
}

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

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

.rk-ozcdl-main-btn svg { width: 24px; height: 24px; animation: bounceDl 2s infinite; }

@keyframes bounceDl {
    0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
    40% { transform: translateY(-4px); }
    60% { transform: translateY(-2px); }
}

/* STOPKA MODUŁU */
.rk-ozcdl-footer {
    padding: 20px 50px;
    background: var(--rk-ozcdl-bg);
    border-top: 1px solid var(--rk-ozcdl-border);
    font-size: 13px;
    color: var(--rk-ozcdl-text);
    text-align: center;
}

.rk-ozcdl-footer a {
    color: var(--rk-ozcdl-brand);
    font-weight: 800;
    text-decoration: none;
    transition: color 0.2s;
}

.rk-ozcdl-footer a:hover { text-decoration: underline; }

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Infografika: Projektowe Obciążenie Cieplne (OZC)",
    "description": "Pobierz kompleksową infografikę PDF omawiającą kluczowe parametry OZC, typowe wartości dla budynków i najczęstsze błędy instalatorów.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-infografika",
    "name": "Wskaźniki zapotrzebowania cieplnego budynków (W/m²)",
    "description": "Zestawienie średniego zapotrzebowania na moc (OZC) w zależności od standardu izolacji budynku oraz rozkład strat ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika OZC pdf",
      "pobierz OZC",
      "wskaźniki W/m2 dom",
      "straty ciepła schemat",
      "obliczanie zapotrzebowania na ciepło"
    ],
    "measurementTechnique": "Analiza normatywna zapotrzebowania mocy szczytowej w zależności od standardu termicznego budynku.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Typowe wartości OZC: Dom stary (90-150 W/m²), Modernizowany (50-80 W/m²), Energooszczędny (30-50 W/m²).",
        "Rozkład strat ciepła: Okna (35%), Ściany (26%), Dach (25%), Wentylacja (20%).",
        "Efekty poprawnie wykonanego OZC: Redukcja kosztów ogrzewania o 30% i odpowiedni dobór mocy pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-infografika",
    "name": "Centrum Pobierania Wiedzy: Infografika OZC",
    "description": "Interaktywny moduł edukacyjny udostępniający graficzne kompendium wiedzy o Projektowym Obciążeniu Cieplnym w formacie PDF.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-ozcdl-container" id="app-ozc-dl">
    
    <div class="rk-ozcdl-header">
        <div class="rk-ozcdl-header-content">
            <div class="rk-ozcdl-badge">Darmowe Materiały Edukacyjne</div>
            <h2>Pobierz Kompletny <span>Poradnik OZC</span></h2>
            <p>Zabierz inżynierską wiedzę ze sobą. Kompendium parametrów cieplnych, wskaźniki W/m² oraz schemat ucieczki ciepła z budynku w jednym, czytelnym pliku PDF.</p>
        </div>
        <div class="rk-ozcdl-visual">
            <svg class="rk-ozcdl-icon-svg" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M75 15 L25 15 C19.5 15 15 19.5 15 25 L15 75 C15 80.5 19.5 85 25 85 L75 85 C80.5 85 85 80.5 85 75 L85 25 C85 19.5 80.5 15 75 15 Z" fill="#ea580c"/>
                <path d="M55 15 L85 45 L85 25 C85 19.5 80.5 15 75 15 Z" fill="#c2410c"/>
                <text x="50" y="65" fill="#ffffff" font-size="24" font-weight="900" font-family="sans-serif" text-anchor="middle">PDF</text>
                <path d="M50 25 C45 35 35 40 45 50 C55 60 65 35 50 25 Z" fill="#fbd38d" opacity="0.8"/>
            </svg>
        </div>
    </div>

    <div class="rk-ozcdl-workspace">
        
        <div class="rk-ozcdl-preview-box" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp', '_blank')">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp" alt="Infografika Projektowe Obciążenie Cieplne OZC" class="rk-ozcdl-preview-img" loading="lazy">
            <div class="rk-ozcdl-zoom-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="vertical-align: middle; margin-right: 5px;"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                Powiększ podgląd
            </div>
        </div>

        <div class="rk-ozcdl-info-side">
            
            <div class="rk-ozcdl-tabs">
                <div class="rk-ozcdl-tab active" data-tab="tab-content">Co znajdziesz w środku?</div>
                <div class="rk-ozcdl-tab" data-tab="tab-why">Dlaczego warto?</div>
            </div>

            <div class="rk-ozcdl-panel active" id="tab-content">
                <ul class="rk-ozcdl-feature-list">
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Tabela wskaźników: Porównanie OZC (W/m²) dla starego i nowego budownictwa.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Schemat ucieczki ciepła: % podział strat przez dach, ściany, okna i wentylację.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Checklista inżyniera: 3 krytyczne błędy instalatorów, których musisz unikać.
                    </li>
                </ul>
            </div>

            <div class="rk-ozcdl-panel" id="tab-why">
                <ul class="rk-ozcdl-feature-list">
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"/></svg>
                        Oszczędność do 30% na kosztach ogrzewania dzięki poprawnemu doborowi pompy.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Zabezpieczenie przed kosztownym przewymiarowaniem urządzeń grzewczych.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Gwarancja optymalnego zrównoważenia hydraulicznego instalacji podłogowej.
                    </li>
                </ul>
            </div>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.pdf" class="rk-ozcdl-main-btn" target="_blank">
                <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                POBIERZ INFOGRAFIKĘ (PDF)
            </a>
            
        </div>

    </div>

    <div class="rk-ozcdl-footer">
        © 2026 Projekt-Ogrzewania.pl | Autor merytoryczny: <strong>Robert Kucharski</strong>.<br>
        Udostępnianie pliku jest dozwolone wyłącznie z zachowaniem <a href="https://projekt-ogrzewania.pl/">linku do źródła</a>.
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. OCHRONA DOMENOWA (DOMAIN LOCK)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowed.includes(domain)) {
        const container = document.getElementById('app-ozc-dl');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fff7ed; border: 2px solid #ea580c; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 900; color: #9a3412;">Zasoby Chronione</div>
                    <p style="color: #c2410c; font-size: 14px;">Ta infografika i dokumentacja OZC są własnością serwisu Projekt-Ogrzewania.pl.</p>
                </div>
            `;
        }
        return;
    }

    // 2. LOGIKA ZAKŁADEK (INTERAKTYWNOŚĆ)
    const tabs = document.querySelectorAll('.rk-ozcdl-tab');
    const panels = document.querySelectorAll('.rk-ozcdl-panel');

    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            // Usuń aktywną klasę ze wszystkich zakładek i paneli
            tabs.forEach(t => t.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            // Dodaj aktywną klasę do klikniętej zakładki
            tab.classList.add('active');
            
            // Pokaż odpowiedni panel
            const targetId = tab.getAttribute('data-tab');
            const targetPanel = document.getElementById(targetId);
            if(targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">Projektowe Obciążenie Cieplne (OZC).</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pompa ciepła do domu – jak działa, ile zużywa prądu i jak dobrać moc?</title>
		<link>https://projekt-ogrzewania.pl/pompa-ciepla/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 03 Jan 2026 16:18:37 +0000</pubDate>
				<category><![CDATA[Budownictwo energooszczędne]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Energooszczędne budownictwo]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie budynków]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Technologie OZE]]></category>
		<category><![CDATA[bufor ciepła]]></category>
		<category><![CDATA[cop]]></category>
		<category><![CDATA[dolne źródło]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[gruntowa pompa ciepła]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[pompy ciepła]]></category>
		<category><![CDATA[powietrzna pompa ciepła]]></category>
		<category><![CDATA[praca biwalentna]]></category>
		<category><![CDATA[projekt instalacji grzewczej]]></category>
		<category><![CDATA[schemat hydrauliczny]]></category>
		<category><![CDATA[scop]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3039</guid>

					<description><![CDATA[<p>Pompa ciepła to dziś jedno z najbardziej zaawansowanych technologicznie rozwiązań grzewczych, które realnie zmienia sposób projektowania nowoczesnych instalacji w budownictwie jednorodzinnym i komercyjnym. W artykule szczegółowo omawiamy zasadę działania pomp ciepła w ujęciu termodynamicznym, porównujemy ich główne typy, analizujemy kryteria doboru mocy, pracę biwalentną oraz kluczowe schematy hydrauliczne. Szczególną uwagę poświęcono współpracy pompy ciepła z ogrzewaniem podłogowym, buforom ciepła oraz aspektom projektowym decydującym o rzeczywistej sprawności i trwałości całego systemu.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">Pompa ciepła do domu – jak działa, ile zużywa prądu i jak dobrać moc?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-hp-guide {
    --rk-navy: #0b2536;
    --rk-navy-2: #12394d;
    --rk-navy-3: #1b465b;
    --rk-cyan: #29c4d7;
    --rk-cyan-dark: #078fb3;
    --rk-cyan-soft: #def7fa;
    --rk-orange: #ff6846;
    --rk-orange-dark: #e44f31;
    --rk-yellow: #f2b526;
    --rk-green: #2fcda1;
    --rk-green-dark: #168267;
    --rk-red: #d7504a;
    --rk-purple: #6963ce;
    --rk-ink: #10283a;
    --rk-copy: #3c5668;
    --rk-muted: #6b8191;
    --rk-line: #d3e2e8;
    --rk-bg: #f3f8fa;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: Arial, Helvetica, sans-serif;
    line-height: 1.62;
    margin: 0 auto;
    max-width: 1360px;
    overflow-wrap: anywhere;
    width: 100%;
  }

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

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

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

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

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

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

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

  #rk-hp-guide .rk-hp-hero {
    background:
      radial-gradient(circle at 91% 112%, rgba(41, 196, 215, 0.24) 0, rgba(41, 196, 215, 0.24) 17%, transparent 17.2%),
      linear-gradient(120deg, #0b2536 0%, #143e52 61%, #0d6576 100%);
    color: var(--rk-white);
    overflow: hidden;
    padding: 62px 58px 56px;
    position: relative;
  }

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

  #rk-hp-guide .rk-hp-kicker,
  #rk-hp-guide .rk-hp-eyebrow {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.77rem;
    font-weight: 900;
    letter-spacing: 0.13em;
    text-transform: uppercase;
  }

  #rk-hp-guide .rk-hp-kicker {
    color: #6ce5ef;
    margin: 0 0 19px 28px;
  }

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

  #rk-hp-guide .rk-hp-hero-title {
    font-size: clamp(2.4rem, 6vw, 5.35rem);
    margin: 0;
    max-width: 1180px;
  }

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

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

  #rk-hp-guide .rk-hp-hero-tags,
  #rk-hp-guide .rk-hp-meta,
  #rk-hp-guide .rk-hp-shortcuts,
  #rk-hp-guide .rk-hp-tool-actions,
  #rk-hp-guide .rk-hp-legend {
    display: flex;
    flex-wrap: wrap;
  }

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

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

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

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

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

  #rk-hp-guide .rk-hp-shortcuts-label {
    color: var(--rk-ink);
    flex: 1 0 100%;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-bottom: 3px;
    text-transform: uppercase;
  }

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

  #rk-hp-guide .rk-hp-shortcuts a:hover,
  #rk-hp-guide .rk-hp-shortcuts a:focus-visible {
    background: var(--rk-cyan-soft);
    border-color: #a9e4eb;
    color: var(--rk-ink);
  }

  #rk-hp-guide .rk-hp-section {
    background: #ffffff;
    padding: 64px 58px;
  }

  #rk-hp-guide .rk-hp-section + .rk-hp-section {
    border-top: 1px solid #e3ecef;
  }

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

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

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

  #rk-hp-guide .rk-hp-section-dark .rk-hp-lead,
  #rk-hp-guide .rk-hp-section-dark .rk-hp-copy {
    color: #c6dce4;
  }

  #rk-hp-guide .rk-hp-eyebrow {
    margin-bottom: 12px;
  }

  #rk-hp-guide .rk-hp-section-title {
    color: var(--rk-ink);
    font-size: clamp(2rem, 4.2vw, 3.55rem);
    margin: 0;
    max-width: 1120px;
  }

  #rk-hp-guide .rk-hp-lead {
    color: var(--rk-copy);
    font-size: 1.12rem;
    line-height: 1.7;
    margin: 22px 0 0;
    max-width: 1120px;
  }

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

  #rk-hp-guide .rk-hp-grid-2,
  #rk-hp-guide .rk-hp-grid-3,
  #rk-hp-guide .rk-hp-grid-4,
  #rk-hp-guide .rk-hp-cycle-grid,
  #rk-hp-guide .rk-hp-question-grid,
  #rk-hp-guide .rk-hp-result-grid,
  #rk-hp-guide .rk-hp-source-grid,
  #rk-hp-guide .rk-hp-author-facts,
  #rk-hp-guide .rk-hp-chart-fields {
    display: grid;
    gap: 18px;
    margin-top: 28px;
  }

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

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

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

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

  #rk-hp-guide .rk-hp-card h3 {
    color: var(--rk-ink);
    font-size: 1.08rem;
    line-height: 1.27;
    margin: 12px 0 0;
  }

  #rk-hp-guide .rk-hp-card p {
    color: var(--rk-copy);
    font-size: 0.94rem;
    margin: 11px 0 0;
  }

  #rk-hp-guide .rk-hp-card-number,
  #rk-hp-guide .rk-hp-icon {
    color: var(--rk-cyan-dark);
    display: inline-block;
    font-size: 0.74rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-hp-guide .rk-hp-icon {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 12px;
    display: inline-flex;
    font-size: 1rem;
    height: 40px;
    justify-content: center;
    letter-spacing: 0;
    width: 40px;
  }

  #rk-hp-guide .rk-hp-answer {
    background: linear-gradient(120deg, #e5f9fb 0%, #f7fcfd 100%);
    border: 1px solid #b8e9ee;
    border-left: 7px solid var(--rk-cyan);
    border-radius: 16px;
    margin-top: 28px;
    padding: 23px 25px;
  }

  #rk-hp-guide .rk-hp-answer > strong {
    display: block;
    font-size: 1.12rem;
    line-height: 1.5;
  }

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

  #rk-hp-guide .rk-hp-note,
  #rk-hp-guide .rk-hp-responsibility {
    background: #fff7e5;
    border-left: 6px solid var(--rk-yellow);
    border-radius: 13px;
    color: #473b1a;
    margin-top: 25px;
    padding: 18px 21px;
  }

  #rk-hp-guide .rk-hp-note p,
  #rk-hp-guide .rk-hp-responsibility p {
    margin: 0;
  }

  #rk-hp-guide .rk-hp-note-bad {
    background: #fff0eb;
    border-left-color: var(--rk-orange);
    color: #573026;
  }

  #rk-hp-guide .rk-hp-note-good {
    background: #e9fbf5;
    border-left-color: var(--rk-green);
    color: #184b3f;
  }

  #rk-hp-guide .rk-hp-bullets,
  #rk-hp-guide .rk-hp-checklist {
    color: var(--rk-copy);
    margin: 15px 0 0;
    padding-left: 20px;
  }

  #rk-hp-guide .rk-hp-bullets li,
  #rk-hp-guide .rk-hp-checklist li {
    margin: 7px 0;
  }

  #rk-hp-guide .rk-hp-formula {
    background: #e8f8fb;
    border: 1px solid #b9e8ee;
    border-radius: 14px;
    color: #08374a;
    font-family: Consolas, Monaco, monospace;
    font-size: clamp(0.96rem, 2vw, 1.22rem);
    font-weight: 800;
    line-height: 1.45;
    margin-top: 22px;
    overflow-wrap: anywhere;
    padding: 18px 20px;
  }

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

  #rk-hp-guide table {
    border-collapse: separate;
    border-spacing: 0;
    color: var(--rk-copy);
    font-size: 0.91rem;
    min-width: 760px;
    width: 100%;
  }

  #rk-hp-guide th {
    background: var(--rk-navy);
    color: #ffffff;
    font-size: 0.76rem;
    letter-spacing: 0.045em;
    padding: 15px;
    text-align: left;
    text-transform: uppercase;
  }

  #rk-hp-guide th:first-child {
    border-radius: 13px 0 0;
  }

  #rk-hp-guide th:last-child {
    border-radius: 0 13px 0 0;
  }

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

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

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

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

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

  #rk-hp-guide .rk-hp-cycle-tool,
  #rk-hp-guide .rk-hp-analyzer,
  #rk-hp-guide .rk-hp-chart-tool {
    background: var(--rk-navy);
    border: 1px solid #295166;
    border-radius: 22px;
    color: #ffffff;
    margin-top: 30px;
    padding: 30px;
    width: 100%;
  }

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

  #rk-hp-guide .rk-hp-tool-head p {
    color: #bdd4dd;
    margin: 8px 0 0;
  }

  #rk-hp-guide .rk-hp-source-switch {
    display: grid;
    gap: 12px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 22px;
  }

  #rk-hp-guide .rk-hp-source-button,
  #rk-hp-guide .rk-hp-analyze-button,
  #rk-hp-guide .rk-hp-reset-button,
  #rk-hp-guide .rk-hp-chart-button {
    border: 0;
    border-radius: 12px;
    cursor: pointer;
    font-weight: 900;
    padding: 13px 18px;
  }

  #rk-hp-guide .rk-hp-source-button {
    background: #1b465b;
    border: 1px solid #497185;
    color: #e8f5f8;
  }

  #rk-hp-guide .rk-hp-source-button[aria-pressed="true"] {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    color: var(--rk-navy);
  }

  #rk-hp-guide .rk-hp-source-summary {
    background: #183c4f;
    border: 1px solid #3a6175;
    border-radius: 14px;
    color: #d5e7ec;
    margin-top: 16px;
    padding: 17px 19px;
  }

  #rk-hp-guide .rk-hp-source-summary strong {
    color: #73e8f1;
  }

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

  #rk-hp-guide .rk-hp-cycle-card {
    background: #15374a;
    border: 1px solid #365f73;
    border-radius: 16px;
    padding: 21px;
    position: relative;
  }

  #rk-hp-guide .rk-hp-cycle-card::before {
    background: var(--rk-cyan);
    border-radius: 999px;
    content: "";
    height: 5px;
    left: 20px;
    position: absolute;
    right: 20px;
    top: 0;
  }

  #rk-hp-guide .rk-hp-cycle-card:nth-child(2)::before,
  #rk-hp-guide .rk-hp-cycle-card:nth-child(4)::before {
    background: var(--rk-orange);
  }

  #rk-hp-guide .rk-hp-cycle-step {
    align-items: center;
    background: rgba(41, 196, 215, 0.14);
    border-radius: 11px;
    color: #77e9f2;
    display: inline-flex;
    font-size: 0.78rem;
    font-weight: 900;
    height: 36px;
    justify-content: center;
    width: 36px;
  }

  #rk-hp-guide .rk-hp-cycle-card h4 {
    color: #ffffff;
    font-size: 1.03rem;
    line-height: 1.3;
    margin: 14px 0 0;
  }

  #rk-hp-guide .rk-hp-cycle-card p {
    color: #bdd4dd;
    font-size: 0.9rem;
    margin: 9px 0 0;
  }

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

  #rk-hp-guide .rk-hp-question {
    background: #15374a;
    border: 1px solid #365f73;
    border-radius: 15px;
    padding: 18px;
  }

  #rk-hp-guide .rk-hp-question label {
    color: #ffffff;
    display: block;
    font-size: 0.94rem;
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-hp-guide .rk-hp-question small {
    color: #a9c5cf;
    display: block;
    line-height: 1.45;
    margin-top: 6px;
  }

  #rk-hp-guide .rk-hp-question select,
  #rk-hp-guide .rk-hp-chart-field input,
  #rk-hp-guide .rk-hp-chart-field select {
    background: #ffffff;
    border: 1px solid #b9cbd3;
    border-radius: 10px;
    color: var(--rk-ink);
    margin-top: 12px;
    padding: 12px;
    width: 100%;
  }

  #rk-hp-guide .rk-hp-tool-actions {
    gap: 12px;
    margin-top: 20px;
  }

  #rk-hp-guide .rk-hp-analyze-button,
  #rk-hp-guide .rk-hp-chart-button {
    background: var(--rk-cyan);
    color: var(--rk-navy);
  }

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

  #rk-hp-guide .rk-hp-analyzer-result {
    background: #102f41;
    border: 1px solid #3c6478;
    border-radius: 17px;
    margin-top: 22px;
    padding: 22px;
  }

  #rk-hp-guide .rk-hp-status {
    border-radius: 13px;
    font-weight: 900;
    line-height: 1.45;
    padding: 15px 17px;
  }

  #rk-hp-guide .rk-hp-status.is-neutral {
    background: #1d4658;
    color: #d8edf2;
  }

  #rk-hp-guide .rk-hp-status.is-warning {
    background: #5d4919;
    color: #ffedb4;
  }

  #rk-hp-guide .rk-hp-status.is-stop {
    background: #60312d;
    color: #ffd8cf;
  }

  #rk-hp-guide .rk-hp-status.is-good {
    background: #164b40;
    color: #c9f8e9;
  }

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

  #rk-hp-guide .rk-hp-result-column {
    background: #16394c;
    border: 1px solid #365f73;
    border-radius: 14px;
    padding: 18px;
  }

  #rk-hp-guide .rk-hp-result-column h4 {
    color: #ffffff;
    font-size: 0.95rem;
    margin: 0;
  }

  #rk-hp-guide .rk-hp-result-column ul {
    color: #c4dbe3;
    margin: 12px 0 0;
    padding-left: 18px;
  }

  #rk-hp-guide .rk-hp-result-column li {
    margin: 7px 0;
  }

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

  #rk-hp-guide .rk-hp-chart-field {
    background: #15374a;
    border: 1px solid #365f73;
    border-radius: 14px;
    padding: 15px;
  }

  #rk-hp-guide .rk-hp-chart-field label {
    color: #ffffff;
    display: block;
    font-size: 0.81rem;
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-hp-guide .rk-hp-chart-field small {
    color: #a9c5cf;
    display: block;
    font-size: 0.74rem;
    margin-top: 7px;
  }

  #rk-hp-guide .rk-hp-capacity-title {
    color: #72e7f1;
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.09em;
    margin: 24px 0 0;
    text-transform: uppercase;
  }

  #rk-hp-guide .rk-hp-chart-canvas-wrap {
    background: #f7fbfc;
    border: 1px solid #c9dbe3;
    border-radius: 16px;
    margin-top: 22px;
    padding: 14px;
    width: 100%;
  }

  #rk-hp-guide #rk-hp-chart {
    display: block;
    height: 480px;
    max-width: 100%;
    width: 100%;
  }

  #rk-hp-guide .rk-hp-legend {
    color: #d5e6ec;
    gap: 10px 20px;
    margin-top: 17px;
  }

  #rk-hp-guide .rk-hp-legend span {
    align-items: center;
    display: inline-flex;
    font-size: 0.81rem;
    font-weight: 800;
    gap: 8px;
  }

  #rk-hp-guide .rk-hp-legend i {
    border-radius: 999px;
    display: inline-block;
    height: 4px;
    width: 28px;
  }

  #rk-hp-guide .rk-hp-legend .is-building {
    background: var(--rk-orange);
  }

  #rk-hp-guide .rk-hp-legend .is-pump {
    background: var(--rk-cyan);
  }

  #rk-hp-guide .rk-hp-legend .is-minimum {
    background: var(--rk-purple);
  }

  #rk-hp-guide .rk-hp-chart-result {
    background: #173c4f;
    border-left: 5px solid var(--rk-cyan);
    border-radius: 12px;
    color: #d9eaf0;
    margin-top: 18px;
    padding: 17px 19px;
  }

  #rk-hp-guide .rk-hp-chart-result strong {
    color: #ffffff;
  }

  #rk-hp-guide .rk-hp-cta {
    background:
      radial-gradient(circle at 92% 117%, rgba(41, 196, 215, 0.22) 0, rgba(41, 196, 215, 0.22) 24%, transparent 24.2%),
      linear-gradient(125deg, #0b2536, #14566a);
    border-radius: 21px;
    color: #ffffff;
    margin-top: 30px;
    padding: 34px;
  }

  #rk-hp-guide .rk-hp-cta-title {
    font-size: clamp(1.55rem, 3vw, 2.35rem);
    max-width: 950px;
  }

  #rk-hp-guide .rk-hp-cta p {
    color: #d3e5eb;
    margin: 14px 0 0;
    max-width: 980px;
  }

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

  #rk-hp-guide .rk-hp-cta-button:hover,
  #rk-hp-guide .rk-hp-cta-button:focus-visible {
    background: #ff7b5d;
    color: #ffffff;
  }

  #rk-hp-guide .rk-hp-link-disclosure {
    color: #b7d0da;
    display: block;
    font-size: 0.73rem;
    margin-top: 11px;
  }

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

  #rk-hp-guide .rk-hp-source-card {
    background: #f4f9fb;
    border: 1px solid #cfdee5;
    border-radius: 15px;
    padding: 20px 22px;
  }

  #rk-hp-guide .rk-hp-source-card a {
    font-size: 1.04rem;
    font-weight: 900;
  }

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

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

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

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

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

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

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

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

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

  #rk-hp-guide .rk-hp-author {
    background: #eef6f8;
    border-top: 1px solid var(--rk-line);
    padding: 64px 58px;
  }

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

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

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

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

  #rk-hp-guide .rk-hp-author-name a {
    color: #ffffff;
    text-decoration: none;
  }

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

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

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

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

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

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

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

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

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

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

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

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

  @media (max-width: 1080px) {
    #rk-hp-guide .rk-hp-grid-4,
    #rk-hp-guide .rk-hp-cycle-grid,
    #rk-hp-guide .rk-hp-chart-fields {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

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

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

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

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

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

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

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

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

    #rk-hp-guide .rk-hp-grid-2,
    #rk-hp-guide .rk-hp-grid-3,
    #rk-hp-guide .rk-hp-grid-4,
    #rk-hp-guide .rk-hp-cycle-grid,
    #rk-hp-guide .rk-hp-question-grid,
    #rk-hp-guide .rk-hp-chart-fields,
    #rk-hp-guide .rk-hp-source-switch,
    #rk-hp-guide .rk-hp-author-facts {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-hp-guide .rk-hp-cycle-tool,
    #rk-hp-guide .rk-hp-analyzer,
    #rk-hp-guide .rk-hp-chart-tool,
    #rk-hp-guide .rk-hp-cta {
      border-radius: 17px;
      padding: 20px;
    }

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

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

    #rk-hp-guide #rk-hp-chart {
      height: 360px;
    }

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

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

    #rk-hp-guide table {
      min-width: 0;
    }

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

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

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

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

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

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

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

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

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

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

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

    #rk-hp-guide .rk-hp-hero-title {
      font-size: 2.2rem;
    }

    #rk-hp-guide .rk-hp-section-title {
      font-size: 1.87rem;
    }

    #rk-hp-guide #rk-hp-chart {
      height: 310px;
    }
  }

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

<article id="rk-hp-guide" aria-labelledby="rk-hp-visual-title">
  <div class="rk-hp-shell">
    <header class="rk-hp-hero">
      <span class="rk-hp-kicker">Pompa ciepła · aktualizacja techniczna 2026</span>
      <div class="rk-hp-hero-title" id="rk-hp-visual-title">Pompa ciepła do domu: <span>dobór bez skrótów</span></div>
      <p class="rk-hp-hero-lead">Sprawdź, jak działa obieg chłodniczy, czym różnią się COP i SCOP, jak czytać moc urządzenia przy temperaturze projektowej oraz kiedy podłogówka, grzejniki, bufor i sterowanie tworzą z pompą spójny system.</p>
      <div class="rk-hp-hero-tags" aria-label="Zakres poradnika">
        <span>dobór z OZC</span>
        <span>COP i SCOP</span>
        <span>punkt biwalentny</span>
        <span>podłogówka i grzejniki</span>
        <span>analizator + wykres</span>
      </div>
      <div class="rk-hp-meta">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 29 minut</strong></span>
        <span>Aktualizacja techniczna: <strong>9 września 2026 r.</strong></span>
      </div>
    </header>

    <nav class="rk-hp-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-hp-shortcuts-label">Na skróty</span>
      <a href="#rk-hp-quick">Szybka odpowiedź</a>
      <a href="#rk-hp-cycle">Jak działa</a>
      <a href="#rk-hp-cop">COP i SCOP</a>
      <a href="#rk-hp-types">Rodzaje pomp</a>
      <a href="#rk-hp-monoblock">Monoblok czy split</a>
      <a href="#rk-hp-analyzer-section">Analizator</a>
      <a href="#rk-hp-sizing">Dobór mocy</a>
      <a href="#rk-hp-curve">Wykres i biwalencja</a>
      <a href="#rk-hp-emitter">Podłogówka i grzejniki</a>
      <a href="#rk-hp-flow">Temperatura i przepływ</a>
      <a href="#rk-hp-buffer">Bufor i defrost</a>
      <a href="#rk-hp-cost">Zużycie prądu</a>
      <a href="#rk-hp-fgas">Czynniki i F-gazy</a>
      <a href="#rk-hp-renovation">Nowy i remontowany dom</a>
      <a href="#rk-hp-practical">Montaż i eksploatacja</a>
      <a href="#rk-hp-checklist">Checklista</a>
      <a href="#rk-hp-errors">Błędy</a>
      <a href="#rk-hp-summary">Podsumowanie</a>
      <a href="#rk-hp-final">Projekt podłogówki</a>
      <a href="#rk-hp-sources">Źródła</a>
      <a href="#rk-hp-faq">FAQ</a>
      <a href="#rk-hp-author">Autor</a>
    </nav>

    <section class="rk-hp-section" id="rk-hp-quick">
      <span class="rk-hp-eyebrow">Odpowiedź w 60 sekund</span>
      <h2 class="rk-hp-section-title">Kiedy pompa ciepła ma sens?</h2>
      <p class="rk-hp-lead"><strong>Pompa ciepła ma sens wtedy, gdy budynek, odbiorniki i konkretne urządzenie zostały sprawdzone w tych samych warunkach obliczeniowych.</strong> Nie wystarczy metraż domu, deklaracja „do 200 m²” ani jedna wartość mocy z katalogu.</p>
      <div class="rk-hp-answer">
        <strong>Najpierw ustala się projektową stratę ciepła budynku i wymaganą temperaturę zasilania. Dopiero potem porównuje się moc, modulację, przepływ, zład, hałas i sposób przygotowania ciepłej wody konkretnej pompy.</strong>
        <p>Dom nie musi być nowy ani mieć wyłącznie podłogówki. Musi natomiast osiągać wymagany komfort przy parametrach, które wybrane urządzenie potrafi zapewnić z akceptowalną efektywnością i bez niekontrolowanego udziału grzałki.</p>
      </div>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card">
          <span class="rk-hp-icon">1</span>
          <h3>Budynek</h3>
          <p>Potrzebne jest obciążenie cieplne przy temperaturze projektowej, a nie iloczyn powierzchni i przypadkowego wskaźnika W/m².</p>
        </article>
        <article class="rk-hp-card">
          <span class="rk-hp-icon">2</span>
          <h3>Odbiorniki</h3>
          <p>Podłoga, grzejniki lub klimakonwektory muszą oddać wymaganą moc przy ustalonej temperaturze zasilania i przepływie.</p>
        </article>
        <article class="rk-hp-card">
          <span class="rk-hp-icon">3</span>
          <h3>Urządzenie</h3>
          <p>Liczy się moc i COP w punkcie odpowiadającym projektowej temperaturze powietrza lub źródła oraz temperaturze wody.</p>
        </article>
      </div>
      <p class="rk-hp-copy">Jeżeli najważniejsze jest pytanie o współpracę z instalacją płaszczyznową, zacznij od poradnika <a href="https://projekt-ogrzewania.pl/czy-pompa-ciepla-ogrzeje-dom-z-podlogowka/">czy pompa ciepła ogrzeje dom z podłogówką</a>. Poniżej rozkładam na czynniki cały proces: od fizyki obiegu po dane potrzebne przed podpisaniem umowy.</p>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-cycle">
      <span class="rk-hp-eyebrow">Energia jest przenoszona, nie tworzona z niczego</span>
      <h2 class="rk-hp-section-title">Jak działa pompa ciepła?</h2>
      <p class="rk-hp-lead">Pompa ciepła odbiera energię ze źródła dolnego, podnosi poziom temperatury dzięki pracy sprężarki i przekazuje ciepło do instalacji budynku. Poniższy moduł pokazuje funkcje elementów bez udawania schematu konkretnego urządzenia.</p>

      <div class="rk-hp-cycle-tool" aria-labelledby="rk-hp-cycle-tool-title">
        <div class="rk-hp-tool-head">
          <h3 id="rk-hp-cycle-tool-title">Cztery etapy obiegu chłodniczego</h3>
          <p>Wybierz źródło. Zmieni się opis pierwszego etapu; funkcje sprężarki, skraplacza i zaworu rozprężnego pozostają takie same.</p>
        </div>
        <div class="rk-hp-source-switch" aria-label="Wybór źródła dolnego">
          <button class="rk-hp-source-button" type="button" data-rk-source="air" aria-pressed="true">Powietrze zewnętrzne</button>
          <button class="rk-hp-source-button" type="button" data-rk-source="ground" aria-pressed="false">Grunt</button>
        </div>
        <div class="rk-hp-source-summary" aria-live="polite">
          <strong id="rk-hp-source-name">Pompa powietrze–woda:</strong>
          <span id="rk-hp-source-description"> parownik odbiera energię z powietrza. W chłodnej i wilgotnej pogodzie na wymienniku może powstawać szron, dlatego urządzenie okresowo przeprowadza odszranianie.</span>
        </div>
        <div class="rk-hp-cycle-grid">
          <article class="rk-hp-cycle-card">
            <span class="rk-hp-cycle-step">1</span>
            <h4>Parownik pobiera energię</h4>
            <p id="rk-hp-evaporator-text">Czynnik chłodniczy odbiera ciepło od powietrza przepływającego przez wymiennik i odparowuje przy niskim ciśnieniu.</p>
          </article>
          <article class="rk-hp-cycle-card">
            <span class="rk-hp-cycle-step">2</span>
            <h4>Sprężarka podnosi ciśnienie</h4>
            <p>Energia elektryczna napędza sprężarkę. Wraz ze wzrostem ciśnienia rośnie temperatura pary czynnika chłodniczego.</p>
          </article>
          <article class="rk-hp-cycle-card">
            <span class="rk-hp-cycle-step">3</span>
            <h4>Skraplacz oddaje ciepło</h4>
            <p>Czynnik przekazuje energię wodzie instalacyjnej, skrapla się, a ogrzana woda trafia do podłogi, grzejników lub zasobnika CWU.</p>
          </article>
          <article class="rk-hp-cycle-card">
            <span class="rk-hp-cycle-step">4</span>
            <h4>Zawór obniża ciśnienie</h4>
            <p>Po rozprężeniu spadają ciśnienie i temperatura czynnika. Obieg wraca do parownika i cykl może rozpocząć się ponownie.</p>
          </article>
        </div>
        <div class="rk-hp-note rk-hp-note-good">
          <p><strong>Ważne:</strong> pompa dostarcza do instalacji sumę energii pobranej ze źródła i energii elektrycznej zużytej przez układ. Rzeczywista proporcja zmienia się wraz z temperaturami, obciążeniem, odszranianiem i pracą urządzeń pomocniczych.</p>
        </div>
      </div>
    </section>

    <section class="rk-hp-section" id="rk-hp-cop">
      <span class="rk-hp-eyebrow">Jedna liczba nie opisuje sezonu</span>
      <h2 class="rk-hp-section-title">COP, SCOP i sezonowa efektywność</h2>
      <p class="rk-hp-lead">COP dotyczy określonego punktu pracy, natomiast SCOP opisuje efektywność sezonową według przyjętej metody i profilu klimatycznego. Obie wartości są użyteczne, jeśli porównujesz je przy tych samych granicach i temperaturach.</p>
      <div class="rk-hp-formula" role="note">COP = moc cieplna oddana do instalacji ÷ moc elektryczna pobierana w danym punkcie pracy</div>
      <div class="rk-hp-table-wrap">
        <table>
          <thead>
            <tr><th>Wskaźnik</th><th>Co opisuje</th><th>Jak go czytać</th><th>Czego nie dowodzi</th></tr>
          </thead>
          <tbody>
            <tr><td data-label="Wskaźnik"><strong>COP</strong></td><td data-label="Co opisuje">Chwilowy punkt badania, np. A7/W35 albo A−7/W45.</td><td data-label="Jak go czytać">Zawsze razem z temperaturą źródła, wody i warunkami testu.</td><td data-label="Czego nie dowodzi">Nie jest rocznym wynikiem i nie określa rachunku za energię.</td></tr>
            <tr><td data-label="Wskaźnik"><strong>SCOP</strong></td><td data-label="Co opisuje">Modelowy sezon grzewczy dla określonego klimatu i zastosowania.</td><td data-label="Jak go czytać">Sprawdź temperaturę zastosowania, klimat i zakres energii pomocniczej.</td><td data-label="Czego nie dowodzi">Nie gwarantuje identycznego wyniku w konkretnym domu.</td></tr>
            <tr><td data-label="Wskaźnik"><strong>SPF z pomiaru</strong></td><td data-label="Co opisuje">Stosunek dostarczonego ciepła do energii pobranej w rzeczywistym okresie.</td><td data-label="Jak go czytać">Najpierw zdefiniuj licznik ciepła, licznik energii i granice systemu.</td><td data-label="Czego nie dowodzi">Nie da się porównać dwóch instalacji o innych granicach pomiaru.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-hp-note rk-hp-note-bad">
        <p><strong>Nie porównuj samych nagłówków katalogowych.</strong> COP dla A7/W35 nie jest równoważny COP dla A−7/W45. Niższa temperatura źródła i wyższa temperatura wody zwykle zwiększają pracę sprężarki oraz obniżają efektywność, ale skalę trzeba odczytać z danych konkretnego urządzenia.</p>
      </div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-types">
      <span class="rk-hp-eyebrow">Źródło dolne zmienia projekt i eksploatację</span>
      <h2 class="rk-hp-section-title">Powietrzna, gruntowa czy wodna pompa ciepła?</h2>
      <p class="rk-hp-lead">Nie ma jednego rodzaju najlepszego dla każdej działki. Trzeba porównać dostępność źródła, nakład inwestycyjny, przebieg mocy w sezonie, formalności, serwis i wpływ na otoczenie.</p>
      <div class="rk-hp-table-wrap">
        <table>
          <thead><tr><th>Rodzaj</th><th>Źródło energii</th><th>Mocne strony</th><th>Warunki i ograniczenia</th></tr></thead>
          <tbody>
            <tr><td data-label="Rodzaj"><strong>Powietrze–woda</strong></td><td data-label="Źródło energii">Powietrze zewnętrzne.</td><td data-label="Mocne strony">Brak odwiertów, relatywnie prostsza realizacja i szeroka dostępność rozwiązań.</td><td data-label="Warunki i ograniczenia">Moc i COP zmieniają się z pogodą; trzeba uwzględnić odszranianie, hałas, skropliny i lokalizację jednostki.</td></tr>
            <tr><td data-label="Rodzaj"><strong>Grunt–woda</strong></td><td data-label="Źródło energii">Sondy pionowe albo kolektor poziomy.</td><td data-label="Mocne strony">Stabilniejsze warunki źródła w sezonie i brak zewnętrznego wentylatora jednostki powietrznej.</td><td data-label="Warunki i ograniczenia">Projekt dolnego źródła, miejsce lub odwierty, większy koszt wejścia i wymagania formalne zależne od rozwiązania.</td></tr>
            <tr><td data-label="Rodzaj"><strong>Woda–woda</strong></td><td data-label="Źródło energii">Woda gruntowa lub inne dopuszczone źródło wodne.</td><td data-label="Mocne strony">Potencjalnie stabilna temperatura źródła.</td><td data-label="Warunki i ograniczenia">Wydajność, jakość wody, studnie, zrzut, pozwolenia i trwałość układu wymagają indywidualnego rozpoznania.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-hp-copy">Różnica nie sprowadza się do etykiety „droższa” albo „tańsza”. W powietrznej pompie część ryzyka przenosi się na niskie temperatury i defrost, w gruntowej — na poprawne rozpoznanie i wykonanie dolnego źródła, a w wodnej — na jakość oraz pewność zasobu wody.</p>
    </section>

    <section class="rk-hp-section" id="rk-hp-monoblock">
      <span class="rk-hp-eyebrow">Dwie architektury, różne odpowiedzialności</span>
      <h2 class="rk-hp-section-title">Monoblok czy split?</h2>
      <p class="rk-hp-lead">W monobloku zasadniczy obieg chłodniczy jest fabrycznie zamknięty w jednostce, a przez przegrodę przechodzi instalacja wodna. W splicie jednostki łączy instalacja chłodnicza wykonywana na miejscu. To wpływa na montaż, ochronę przed zamarzaniem i zakres wymaganych kwalifikacji.</p>
      <div class="rk-hp-grid-2">
        <article class="rk-hp-card">
          <span class="rk-hp-card-number">MONOBLOK</span>
          <h3>Na zewnątrz znajduje się wymiennik wodny</h3>
          <ul class="rk-hp-bullets">
            <li>trzeba rozwiązać ochronę odcinka wodnego przy zaniku energii i awarii,</li>
            <li>ważne są izolacja, trasa, spadki i sposób odprowadzenia skroplin,</li>
            <li>fabrycznie zamknięty obieg chłodniczy ogranicza prace chłodnicze na budowie.</li>
          </ul>
        </article>
        <article class="rk-hp-card">
          <span class="rk-hp-card-number">SPLIT</span>
          <h3>Połączenie chłodnicze powstaje na budowie</h3>
          <ul class="rk-hp-bullets">
            <li>jakość wykonania, próżnia, szczelność i dokumentacja połączeń mają znaczenie,</li>
            <li>zakres obowiązków zależy między innymi od czynnika, ilości i obowiązujących przepisów,</li>
            <li>część wodna może pozostawać wewnątrz budynku, lecz nie usuwa to pozostałych ryzyk projektu.</li>
          </ul>
        </article>
      </div>
      <div class="rk-hp-note">
        <p><strong>Nie wybieraj wyłącznie po nazwie czynnika lub konstrukcji.</strong> Monoblok nie jest automatycznie lepszy od splitu, a split nie jest automatycznie bezpieczniejszy. Oceniaj kompletny układ, warunki montażu, serwis i dokumentację konkretnego modelu.</p>
      </div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-analyzer-section">
      <span class="rk-hp-eyebrow">Narzędzie decyzyjne zamiast kalkulatora z metrażu</span>
      <h2 class="rk-hp-section-title">Analizator gotowości budynku i instalacji</h2>
      <p class="rk-hp-lead">Zaznacz stan przygotowania inwestycji. Analizator nie daje punktów i nie wybiera modelu. Rozdziela dane potwierdzone, informacje wymagające sprawdzenia oraz braki, które mogą unieważnić wstępny dobór.</p>

      <div class="rk-hp-analyzer" id="rk-hp-analyzer" aria-labelledby="rk-hp-analyzer-title">
        <div class="rk-hp-tool-head">
          <h3 id="rk-hp-analyzer-title">Czy dobór można już zweryfikować?</h3>
          <p>Odpowiedz na wszystkie pytania. „Nie wiem” oznacza brak danych, a nie odpowiedź negatywną.</p>
        </div>
        <div class="rk-hp-question-grid">
          <div class="rk-hp-question">
            <label for="rk-hp-q1">1. Czy masz obliczeniową stratę ciepła budynku przy temperaturze projektowej?</label>
            <small>OZC albo równoważne obliczenie, z założeniami dotyczącymi wentylacji i infiltracji.</small>
            <select id="rk-hp-q1" data-rk-name="Obciążenie cieplne budynku" data-rk-critical="true">
              <option value="unknown">Nie wiem / brak obliczeń</option><option value="yes">Tak, mam wynik i założenia</option><option value="no">Nie, dobór opiera się na metrażu</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q2">2. Czy znasz projektową temperaturę zewnętrzną przyjętą w obliczeniach?</label>
            <small>Moc pompy i strata budynku muszą być porównane dla zgodnych warunków.</small>
            <select id="rk-hp-q2" data-rk-name="Temperatura projektowa" data-rk-critical="true">
              <option value="unknown">Nie wiem</option><option value="yes">Tak, jest udokumentowana</option><option value="no">Nie została ustalona</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q3">3. Czy odbiorniki sprawdzono przy rzeczywistej temperaturze zasilania?</label>
            <small>Dotyczy podłogówki, grzejników i każdego dodatkowego odbiornika.</small>
            <select id="rk-hp-q3" data-rk-name="Moc odbiorników i temperatura wody" data-rk-critical="true">
              <option value="unknown">Nie wiem</option><option value="yes">Tak, pomieszczenie po pomieszczeniu</option><option value="no">Nie, przyjęto ogólne założenie</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q4">4. Czy znasz moc konkretnej pompy w projektowym punkcie pracy?</label>
            <small>Nie tylko nazwę modelu lub moc nominalną z pierwszej strony broszury.</small>
            <select id="rk-hp-q4" data-rk-name="Moc urządzenia w punkcie projektowym" data-rk-critical="true">
              <option value="unknown">Nie wiem / brak tabeli</option><option value="yes">Tak, z tabeli lub mapy pracy</option><option value="no">Nie, mam tylko moc nominalną</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q5">5. Czy znasz minimalną moc modulowaną w łagodnej pogodzie?</label>
            <small>Pomaga ocenić ryzyko częstych startów przy małym chwilowym obciążeniu.</small>
            <select id="rk-hp-q5" data-rk-name="Minimalna modulacja" data-rk-critical="false">
              <option value="unknown">Nie wiem</option><option value="yes">Tak, dla właściwych warunków</option><option value="no">Nie została sprawdzona</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q6">6. Czy sprawdzono minimalny przepływ i wymagany zład wody?</label>
            <small>Wraz z energią potrzebną do odszraniania i zachowaniem instalacji po zamknięciu stref.</small>
            <select id="rk-hp-q6" data-rk-name="Minimalny przepływ i zład" data-rk-critical="true">
              <option value="unknown">Nie wiem</option><option value="yes">Tak, według dokumentacji urządzenia</option><option value="no">Nie</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q7">7. Czy sterowanie strefowe przeanalizowano hydraulicznie?</label>
            <small>Zamknięcie wielu siłowników zmienia przepływ i pojemność dostępną dla pompy.</small>
            <select id="rk-hp-q7" data-rk-name="Sterowanie strefowe i hydraulika" data-rk-critical="false">
              <option value="unknown">Nie wiem</option><option value="yes">Tak</option><option value="no">Nie</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q8">8. Czy potrzeby CWU ustalono oddzielnie od ogrzewania?</label>
            <small>Wielkość zasobnika, liczba użytkowników i oczekiwany czas dogrzania nie są częścią OZC.</small>
            <select id="rk-hp-q8" data-rk-name="Ciepła woda użytkowa" data-rk-critical="false">
              <option value="unknown">Nie wiem</option><option value="yes">Tak</option><option value="no">Nie</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q9">9. Czy zweryfikowano zasilanie elektryczne i zabezpieczenia?</label>
            <small>Obejmuje pompę, grzałkę, urządzenia pomocnicze i warunki przyłączenia.</small>
            <select id="rk-hp-q9" data-rk-name="Zasilanie elektryczne" data-rk-critical="true">
              <option value="unknown">Nie wiem</option><option value="yes">Tak, przez właściwego projektanta lub instalatora</option><option value="no">Nie</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q10">10. Czy sprawdzono lokalizację, hałas i odprowadzenie skroplin?</label>
            <small>Nie wystarcza katalogowy poziom mocy akustycznej bez geometrii działki i przegród.</small>
            <select id="rk-hp-q10" data-rk-name="Lokalizacja, hałas i skropliny" data-rk-critical="false">
              <option value="unknown">Nie wiem</option><option value="yes">Tak</option><option value="no">Nie</option>
            </select>
          </div>
          <div class="rk-hp-question">
            <label for="rk-hp-q11">11. Czy rozwiązano ryzyko właściwe dla monobloku albo splitu?</label>
            <small>Dla monobloku: zamarzanie wody. Dla splitu: poprawne wykonanie obiegu chłodniczego i wymagane kwalifikacje.</small>
            <select id="rk-hp-q11" data-rk-name="Ryzyko konstrukcji monoblok lub split" data-rk-critical="true">
              <option value="unknown">Nie wiem</option><option value="yes">Tak, rozwiązanie jest opisane</option><option value="no">Nie</option>
            </select>
          </div>
        </div>
        <div class="rk-hp-tool-actions">
          <button class="rk-hp-analyze-button" id="rk-hp-analyze" type="button">Przeanalizuj warunki</button>
          <button class="rk-hp-reset-button" id="rk-hp-analyzer-reset" type="button">Wyczyść odpowiedzi</button>
        </div>
        <div class="rk-hp-analyzer-result" aria-live="polite">
          <div class="rk-hp-status is-neutral" id="rk-hp-analyzer-status">Uzupełnij odpowiedzi, aby rozdzielić dane potwierdzone, braki i warunki krytyczne.</div>
          <div class="rk-hp-result-grid">
            <div class="rk-hp-result-column"><h4>Potwierdzone</h4><ul id="rk-hp-confirmed"><li>Brak ocenionych pozycji.</li></ul></div>
            <div class="rk-hp-result-column"><h4>Do sprawdzenia</h4><ul id="rk-hp-check"><li>Wszystkie odpowiedzi „Nie wiem” trafią tutaj.</li></ul></div>
            <div class="rk-hp-result-column"><h4>Warunki krytyczne</h4><ul id="rk-hp-critical"><li>Odpowiedź „Nie” przy pozycji krytycznej trafi tutaj.</li></ul></div>
          </div>
        </div>
        <noscript><div class="rk-hp-note rk-hp-note-bad"><p>Do działania analizatora potrzebna jest obsługa JavaScript. Bez niej potraktuj wszystkie pytania jako ręczną checklistę.</p></div></noscript>
      </div>
    </section>

    <section class="rk-hp-section" id="rk-hp-sizing">
      <span class="rk-hp-eyebrow">Moc wynika z bilansu, nie z powierzchni</span>
      <h2 class="rk-hp-section-title">Jak prawidłowo dobrać moc pompy ciepła z OZC?</h2>
      <p class="rk-hp-lead">Dobór zaczyna się od obciążenia cieplnego budynku przy właściwej temperaturze zewnętrznej. Następnie trzeba ustalić temperaturę wody, sprawdzić moc pompy w tym samym punkcie, określić strategię pracy grzałki i ocenić dolny zakres modulacji.</p>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">KROK 1</span><h3>Policz budynek</h3><p>Powierzchnie i współczynniki przegród, mostki, temperatury pomieszczeń, wentylacja oraz infiltracja tworzą projektową stratę ciepła.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">KROK 2</span><h3>Ustal temperaturę wody</h3><p>Odbiorniki trzeba sprawdzić przy parametrach, które rzeczywiście mają pokryć straty pomieszczeń — z uwzględnieniem powierzchni czynnej i okładzin.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">KROK 3</span><h3>Odczytaj moc urządzenia</h3><p>Porównaj tabelę lub mapę pracy dla temperatury zewnętrznej i temperatury wody odpowiadających projektowi, nie tylko nazwę mocy modelu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">KROK 4</span><h3>Ustal biwalencję</h3><p>Zdecyduj, przy jakich warunkach dopuszczasz źródło szczytowe i czy jego moc oraz zasilanie zostały uwzględnione.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">KROK 5</span><h3>Sprawdź minimum</h3><p>Za duża minimalna moc przy łagodnej pogodzie może prowadzić do krótkich cykli, jeśli hydraulika i sterowanie nie zapewnią odbioru energii.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">KROK 6</span><h3>Domknij system</h3><p>Przepływ, zład, odszranianie, CWU, hałas, skropliny, elektryka i warunki serwisu są częścią doboru, a nie dodatkami po zakupie.</p></article>
      </div>
      <div class="rk-hp-formula" role="note">Projektowy punkt porównania: Q̇ budynku przy T<sub>zew,proj</sub> ↔ Q̇ pompy przy tej samej T<sub>zew</sub> i wymaganej T<sub>zasilania</sub></div>
      <p class="rk-hp-copy">Jeżeli chcesz zobaczyć, skąd biorą się poszczególne składniki bilansu, przeczytaj poradnik <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty cieplne w budynkach</a>. Do wstępnego uporządkowania danych możesz wykorzystać również <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">kalkulator strat ciepła budynku</a>, pamiętając, że uproszczone narzędzie nie zastępuje pełnego OZC.</p>
      <div class="rk-hp-note rk-hp-note-bad"><p><strong>Dlaczego nie ma tu kalkulatora „m² × W/m²”?</strong> Dwa domy o tej samej powierzchni mogą mieć inne przegrody, wentylację, temperatury wewnętrzne i klimat. Ten sam wskaźnik powierzchniowy może więc jednemu urządzeniu dodać niepotrzebny zapas, a innemu nie zapewnić mocy w warunkach projektowych.</p></div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-curve">
      <span class="rk-hp-eyebrow">Własne dane zamiast katalogowej obietnicy</span>
      <h2 class="rk-hp-section-title">Wykres mocy pompy i orientacyjny punkt biwalentny</h2>
      <p class="rk-hp-lead">Wpisz projektową stratę budynku oraz cztery punkty mocy grzewczej z dokumentacji konkretnego modelu dla tej samej temperatury wody. Narzędzie zestawi liniowy model obciążenia budynku z interpolowaną krzywą urządzenia.</p>

      <div class="rk-hp-chart-tool" aria-labelledby="rk-hp-chart-tool-title">
        <div class="rk-hp-tool-head">
          <h3 id="rk-hp-chart-tool-title">Porównanie budynku i wybranej pompy</h3>
          <p>Dane demonstracyjne nie opisują żadnego producenta. Zastąp je wartościami z tabeli mocy dla rozważanego modelu.</p>
        </div>

        <div class="rk-hp-chart-fields">
          <div class="rk-hp-chart-field">
            <label for="rk-hp-design-load">Projektowa strata ciepła [kW]</label>
            <input id="rk-hp-design-load" type="number" min="0.5" max="80" step="0.1" value="8.0" inputmode="decimal">
            <small>Wynik OZC dla całego budynku.</small>
          </div>
          <div class="rk-hp-chart-field">
            <label for="rk-hp-design-temp">Temperatura projektowa [°C]</label>
            <input id="rk-hp-design-temp" type="number" min="-35" max="0" step="1" value="-20" inputmode="numeric">
            <small>Ta sama, dla której podano stratę.</small>
          </div>
          <div class="rk-hp-chart-field">
            <label for="rk-hp-balance-temp">Temperatura bez ogrzewania [°C]</label>
            <input id="rk-hp-balance-temp" type="number" min="8" max="20" step="0.5" value="16" inputmode="decimal">
            <small>Uproszczony punkt zerowego obciążenia.</small>
          </div>
          <div class="rk-hp-chart-field">
            <label for="rk-hp-water-temp">Temperatura wody z tabeli</label>
            <select id="rk-hp-water-temp"><option value="W35">W35</option><option value="W45">W45</option><option value="W55">W55</option><option value="inna">inna, jednakowa dla punktów</option></select>
            <small>Nie mieszaj danych dla różnych W.</small>
          </div>
        </div>

        <div class="rk-hp-capacity-title">Moc grzewcza pompy z tabeli producenta</div>
        <div class="rk-hp-chart-fields">
          <div class="rk-hp-chart-field"><label for="rk-hp-cap-p7">A7 [kW]</label><input id="rk-hp-cap-p7" type="number" min="0.1" max="100" step="0.1" value="9.1" inputmode="decimal"><small>Temperatura powietrza +7°C.</small></div>
          <div class="rk-hp-chart-field"><label for="rk-hp-cap-p2">A2 [kW]</label><input id="rk-hp-cap-p2" type="number" min="0.1" max="100" step="0.1" value="8.3" inputmode="decimal"><small>Temperatura powietrza +2°C.</small></div>
          <div class="rk-hp-chart-field"><label for="rk-hp-cap-m7">A−7 [kW]</label><input id="rk-hp-cap-m7" type="number" min="0.1" max="100" step="0.1" value="7.0" inputmode="decimal"><small>Temperatura powietrza −7°C.</small></div>
          <div class="rk-hp-chart-field"><label for="rk-hp-cap-m15">A−15 [kW]</label><input id="rk-hp-cap-m15" type="number" min="0.1" max="100" step="0.1" value="5.8" inputmode="decimal"><small>Temperatura powietrza −15°C.</small></div>
        </div>

        <div class="rk-hp-chart-fields">
          <div class="rk-hp-chart-field">
            <label for="rk-hp-min-output">Orientacyjna minimalna moc [kW]</label>
            <input id="rk-hp-min-output" type="number" min="0" max="30" step="0.1" value="2.5" inputmode="decimal">
            <small>Opcjonalna linia pomocnicza; minimum także zależy od warunków.</small>
          </div>
        </div>

        <div class="rk-hp-tool-actions">
          <button class="rk-hp-chart-button" id="rk-hp-chart-update" type="button">Aktualizuj wykres</button>
          <button class="rk-hp-reset-button" id="rk-hp-chart-reset" type="button">Przywróć dane demonstracyjne</button>
        </div>

        <div class="rk-hp-chart-canvas-wrap">
          <canvas id="rk-hp-chart" width="1200" height="600" role="img" aria-label="Wykres obciążenia cieplnego budynku i mocy pompy ciepła w zależności od temperatury zewnętrznej"></canvas>
        </div>
        <div class="rk-hp-legend" aria-hidden="true">
          <span><i class="is-building"></i>obciążenie budynku</span>
          <span><i class="is-pump"></i>interpolowana moc pompy</span>
          <span><i class="is-minimum"></i>orientacyjna moc minimalna</span>
        </div>
        <div class="rk-hp-chart-result" id="rk-hp-chart-result" aria-live="polite"><strong>Wynik:</strong> zaktualizuj wykres, aby odczytać porównanie.</div>
        <div class="rk-hp-note">
          <p><strong>Zakres narzędzia:</strong> linia budynku i odcinki pomiędzy punktami pompy są uproszczeniem liniowym. Wykres nie uwzględnia pełnej mapy modulacji, defrostu, ograniczeń sprężarki, CWU, pracy grzałki ani rocznego rozkładu pogody. Nie jest doborem urządzenia i nie wylicza sezonowego udziału energii.</p>
        </div>
        <noscript><div class="rk-hp-note rk-hp-note-bad"><p>Wykres wymaga obsługi JavaScript. Bez niej porównaj ręcznie stratę budynku i tabelę mocy pompy w tym samym punkcie temperatur.</p></div></noscript>
      </div>

      <p class="rk-hp-copy">Pełny projekt wymaga połączenia takiego porównania z obciążeniem każdego pomieszczenia i hydrauliką instalacji. Zobacz, jak wygląda <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a>.</p>

      <aside class="rk-hp-cta" aria-label="Projekt ogrzewania podłogowego do pompy ciepła">
        <div class="rk-hp-cta-title">Masz OZC i wybraną pompę? Sprawdź jeszcze, czy podłogówka odbierze wymaganą moc przy zakładanej temperaturze wody</div>
        <p>Projekt łączy straty poszczególnych pomieszczeń z powierzchnią czynną podłogi, oporem okładzin, rozstawem rur, długościami pętli, przepływami, stratami ciśnienia i nastawami rozdzielacza. To naturalny kolejny krok po wstępnej weryfikacji wykresu urządzenia.</p>
        <a class="rk-hp-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt podłogówki do pompy ciepła</a>
        <small class="rk-hp-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </aside>
    </section>

    <section class="rk-hp-section" id="rk-hp-emitter">
      <span class="rk-hp-eyebrow">Źródło i odbiornik muszą tworzyć jeden układ</span>
      <h2 class="rk-hp-section-title">Pompa ciepła z podłogówką i grzejnikami</h2>
      <p class="rk-hp-lead">Ogrzewanie podłogowe często dobrze współpracuje z pompą ciepła, ponieważ dużą powierzchnią może oddawać ciepło przy relatywnie niskiej temperaturze wody. Nie oznacza to jednak, że każda podłoga wystarczy ani że grzejniki są z definicji wykluczone.</p>
      <div class="rk-hp-table-wrap">
        <table>
          <thead><tr><th>Odbiornik</th><th>Co trzeba policzyć</th><th>Główna korzyść</th><th>Typowa pułapka</th></tr></thead>
          <tbody>
            <tr><td data-label="Odbiornik"><strong>Podłogówka</strong></td><td data-label="Co trzeba policzyć">Moc z powierzchni czynnej, opór okładziny, temperaturę powierzchni, rozstaw, przepływ i pętle.</td><td data-label="Główna korzyść">Duża powierzchnia wymiany może ograniczyć wymaganą temperaturę wody.</td><td data-label="Typowa pułapka">Założenie, że rozstaw 10 cm automatycznie pokryje każdą stratę.</td></tr>
            <tr><td data-label="Odbiornik"><strong>Grzejniki</strong></td><td data-label="Co trzeba policzyć">Moc przy rzeczywistej temperaturze zasilania i powrotu, nie przy dawnych parametrach kotłowych.</td><td data-label="Główna korzyść">Można wykorzystać lub odpowiednio powiększyć istniejące odbiorniki.</td><td data-label="Typowa pułapka">Odczyt mocy dla 75/65/20 i przeniesienie jej na znacznie niższe parametry.</td></tr>
            <tr><td data-label="Odbiornik"><strong>Klimakonwektory</strong></td><td data-label="Co trzeba policzyć">Moc, przepływ, hałas wentylatora, skropliny oraz tryb chłodzenia.</td><td data-label="Główna korzyść">Duża moc przy niższej temperaturze wody i możliwość chłodzenia w odpowiednim układzie.</td><td data-label="Typowa pułapka">Pominięcie akustyki, kondensacji i odprowadzenia skroplin.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-hp-copy">W podłogówce najpierw sprawdza się <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">dopuszczalną temperaturę zasilania</a> i <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/">optymalne temperatury pracy</a>. Następnie dobiera się <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur w wodnym ogrzewaniu podłogowym</a> z uwzględnieniem tego, jak <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">okładzina wpływa na wydajność podłogi</a>. Materiał i światło przewodów trzeba sprawdzić osobno — pomaga w tym poradnik o <a href="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/">rurach do ogrzewania podłogowego</a>.</p>
      <div class="rk-hp-note"><p><strong>Nie istnieje uniwersalne „maksymalnie 35°C”.</strong> Wymagana i dopuszczalna temperatura wynika z obciążenia, konstrukcji podłogi, okładziny, strefy, ograniczeń komfortu i dokumentacji systemu. Im niższa temperatura wystarczy do pokrycia strat, tym korzystniejsze warunki ma zwykle pompa.</p></div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-flow">
      <span class="rk-hp-eyebrow">Kilowaty trzeba przenieść wodą</span>
      <h2 class="rk-hp-section-title">Temperatura zasilania, przepływ i średnice</h2>
      <p class="rk-hp-lead">Pompa może wytwarzać wymaganą moc, lecz instalacja musi jeszcze przenieść ją przez określony przepływ i różnicę temperatur. Dlatego dobór średnic oraz pompy obiegowej nie powinien powstawać z jednej tabeli metrażowej.</p>
      <div class="rk-hp-formula" role="note">Q̇ [kW] ≈ 1,163 × V̇ [m³/h] × ΔT [K] &nbsp;—&nbsp; zależność orientacyjna dla wody</div>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">MOC</span><h3>Wynika z obciążenia</h3><p>W trybie ogrzewania instalacja musi rozdzielić moc pomiędzy aktywne pomieszczenia bez pozostawienia drogi krytycznej poza zakresem pompy obiegowej.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">ΔT</span><h3>Nie jest zawsze równe 5 K</h3><p>Projektowa różnica temperatur zależy od koncepcji, odbiorników, regulacji oraz warunków pracy. Nie wolno jej kopiować bez sprawdzenia.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">OPÓR</span><h3>Liczy się cała droga</h3><p>Rury, kształtki, zawory, wymienniki, rozdzielacz i urządzenia dodatkowe składają się na punkt pracy obiegu.</p></article>
      </div>
      <p class="rk-hp-copy">Przepływ i wysokość podnoszenia możesz uporządkować w <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulatorze doboru pompy obiegowej</a>. Osobno trzeba zweryfikować <a href="https://projekt-ogrzewania.pl/jaka-srednica-rury-zasilajacej-rozdzielacz-w-ukladzie-ogrzewania-podlogowego-kalkulator/">średnicę rury zasilającej rozdzielacz</a>, docelowe <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">przepływy na rotametrach</a> i <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalną długość pętli ogrzewania podłogowego</a>.</p>
      <div class="rk-hp-note rk-hp-note-bad"><p><strong>Nie ma jednej średnicy magistrali „dla pompy 8 kW”.</strong> Dla tej samej mocy przepływ zmienia się wraz z ΔT i właściwościami medium, a średnica wynika również z długości, armatury, dostępnego sprężu, prędkości oraz dopuszczalnych strat ciśnienia.</p></div>
    </section>

    <section class="rk-hp-section" id="rk-hp-buffer">
      <span class="rk-hp-eyebrow">Element funkcjonalny, nie obowiązkowy symbol instalacji</span>
      <h2 class="rk-hp-section-title">Bufor, minimalny zład i odszranianie</h2>
      <p class="rk-hp-lead">Bufor nie jest automatycznie konieczny w każdej instalacji i nie jest też automatycznie błędem. Jego funkcję trzeba nazwać: zwiększenie dostępnego zładu, zapewnienie energii do defrostu, ograniczenie taktowania, stabilizacja przepływu albo rozdzielenie hydrauliczne obiegów.</p>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">UKŁAD BEZPOŚREDNI</span><h3>Możliwie prosta hydraulika</h3><p>Może działać poprawnie, jeśli otwarta instalacja zapewnia wymagany przepływ i zład we wszystkich stanach sterowania, a dokumentacja urządzenia na to pozwala.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">ZWIĘKSZENIE ZŁADU</span><h3>Pojemność bez pełnego rozdziału</h3><p>Dodatkowa pojemność może ograniczyć tempo zmian temperatury, lecz sama nie rozwiązuje każdego problemu przepływowego lub regulacyjnego.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">ROZDZIAŁ HYDRAULICZNY</span><h3>Dwa obiegi wymagają obliczeń</h3><p>Sprzęgło lub bufor z króćcami może rozdzielić przepływy, ale dodaje pompy, mieszanie i straty — trzeba policzyć konsekwencje dla temperatury oraz efektywności.</p></article>
      </div>
      <p class="rk-hp-copy">Zanim dodasz kolejny zbiornik, sprawdź, jak działa <a href="https://projekt-ogrzewania.pl/sprzeglo-hydrauliczne-w-instalacji-ogrzewania-podlogowego/">sprzęgło hydrauliczne w instalacji podłogowej</a> i jakie konsekwencje ma <a href="https://projekt-ogrzewania.pl/wiekszy-czy-mniejszy-zlad-wody-w-ogrzewaniu-podlogowym/">większy lub mniejszy zład wody</a>. Wymagana objętość oraz minimalny przepływ powinny pochodzić z dokumentacji konkretnej pompy i modelu pracy całej instalacji.</p>
      <div class="rk-hp-note"><p><strong>Defrost nie ma jednej stałej częstotliwości.</strong> Zależy od temperatury, wilgotności, konstrukcji urządzenia i sterowania. Podczas odszraniania układ potrzebuje odpowiedniego przepływu i dostępnej energii; sposób jej zapewnienia wynika z kompletnej koncepcji hydraulicznej.</p></div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-cost">
      <span class="rk-hp-eyebrow">Najpierw energia, potem taryfa</span>
      <h2 class="rk-hp-section-title">Ile prądu zużywa pompa ciepła i od czego zależy koszt?</h2>
      <p class="rk-hp-lead">Rocznego rachunku nie da się wiarygodnie wyprowadzić z powierzchni domu ani katalogowego COP. Potrzebne są roczne potrzeby ogrzewania i CWU, realistyczna efektywność sezonowa, udział grzałki, energia pomocnicza oraz sposób rozliczania energii.</p>
      <div class="rk-hp-formula" role="note">Energia elektryczna ogrzewania ≈ roczne ciepło dostarczone do CO ÷ rzeczywista efektywność sezonowa systemu</div>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">MODEL A</span><h3>12 000 kWh ciepła ÷ 4,0</h3><p>Około 3 000 kWh energii elektrycznej na ogrzewanie w przyjętym modelu — przed doliczeniem CWU, grzałki i urządzeń poza granicą obliczenia.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">MODEL B</span><h3>12 000 kWh ciepła ÷ 3,0</h3><p>Około 4 000 kWh. Ta sama potrzeba cieplna przy niższej efektywności oznacza o jedną trzecią większe zużycie w tym uproszczeniu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">RACHUNEK</span><h3>kWh to jeszcze nie złote</h3><p>Koszt zależy od cen energii i dystrybucji, taryfy, autokonsumpcji, godzin pracy oraz zasad rozliczeń obowiązujących w danym okresie.</p></article>
      </div>
      <p class="rk-hp-copy">Przykłady są scenariuszami edukacyjnymi, nie prognozą dla konkretnego domu. Potrzeby cieplne można ograniczyć między innymi przez poprawę przegród i właściwie zaprojektowaną wentylację; zależność pomiędzy systemami wyjaśnia poradnik o tym, czy <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">rekuperacja i ogrzewanie podłogowe się opłacają</a>.</p>
      <div class="rk-hp-note rk-hp-note-bad"><p><strong>Nie myl mocy z efektywnością.</strong> Urządzenie może dostarczyć brakującą moc dzięki grzałce, ale nie oznacza to, że cała energia cieplna została wytworzona z wysokim COP sprężarki. W analizie trzeba oddzielić pracę sprężarki, grzałki i urządzeń pomocniczych.</p></div>
    </section>

    <section class="rk-hp-section" id="rk-hp-fgas">
      <span class="rk-hp-eyebrow">Czynnik jest częścią systemu bezpieczeństwa i serwisu</span>
      <h2 class="rk-hp-section-title">Czynniki chłodnicze i przepisy F-gazowe</h2>
      <p class="rk-hp-lead">Oznaczenia R290, R32 lub inne nie tworzą prostego rankingu urządzeń. Czynnik wpływa na konstrukcję, bezpieczeństwo, zakres zastosowania, serwis i obowiązki wynikające z przepisów, ale o jakości systemu nadal decyduje kompletny projekt oraz właściwości konkretnej pompy.</p>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">WŁAŚCIWOŚCI</span><h3>Nie tylko GWP</h3><p>Poza wpływem klimatycznym znaczenie mają klasa bezpieczeństwa, palność, ciśnienia pracy, ilość czynnika, lokalizacja i rozwiązania konstrukcyjne urządzenia.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">MONTAŻ</span><h3>Zakres zależy od układu</h3><p>Obowiązki przy urządzeniu hermetycznym, monobloku i splicie mogą być inne. Trzeba odnieść konkretną konfigurację do aktualnego prawa i instrukcji.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">SERWIS</span><h3>Dostępność ma znaczenie</h3><p>Przed zakupem sprawdź warunki gwarancji, kwalifikacje wymagane do prac, dostęp do serwisu oraz procedury na wypadek nieszczelności lub awarii.</p></article>
      </div>
      <div class="rk-hp-note"><p><strong>R290 nie oznacza automatycznie monobloku, a R32 nie definiuje samodzielnie jakości pompy.</strong> Porównuj moc, efektywność, zakres pracy, hałas, hydraulikę, bezpieczeństwo, warunki montażu i serwis tego samego urządzenia. Aktualne ramy unijne podaję w sekcji oficjalnych źródeł.</p></div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-renovation">
      <span class="rk-hp-eyebrow">Modernizacja wymaga diagnozy stanu istniejącego</span>
      <h2 class="rk-hp-section-title">Pompa ciepła w nowym i remontowanym domu</h2>
      <p class="rk-hp-lead">W nowym budynku można od początku skoordynować przegrody, wentylację, źródło ciepła, temperaturę wody i hydraulikę. W modernizowanym domu najpierw trzeba ustalić, co rzeczywiście istnieje i jak budynek zachowuje się w chłodne dni.</p>
      <div class="rk-hp-grid-2">
        <article class="rk-hp-card">
          <span class="rk-hp-card-number">NOWY DOM</span>
          <h3>Projektowanie od wspólnego bilansu</h3>
          <ul class="rk-hp-bullets">
            <li>obliczenia pomieszczenie po pomieszczeniu,</li>
            <li>temperatura wody skoordynowana z odbiornikami,</li>
            <li>trasy, miejsce jednostek, skropliny i zasilanie zaplanowane przed wykonaniem,</li>
            <li>sterowanie dostosowane do bezwładności instalacji.</li>
          </ul>
        </article>
        <article class="rk-hp-card">
          <span class="rk-hp-card-number">REMONT</span>
          <h3>Pomiary i warianty zamiast założeń</h3>
          <ul class="rk-hp-bullets">
            <li>inwentaryzacja przegród oraz istniejących grzejników,</li>
            <li>sprawdzenie możliwej temperatury zasilania w zimie,</li>
            <li>ocena miejsca, hałasu, elektryki i obecnej hydrauliki,</li>
            <li>porównanie wariantu przed i po termomodernizacji.</li>
          </ul>
        </article>
      </div>
      <p class="rk-hp-copy">Pompa ciepła może pracować w starszym budynku, jeśli po obliczeniach i inwentaryzacji odbiorniki pokrywają straty przy akceptowalnych parametrach. Jeżeli modernizacja obejmuje również podłogę, zobacz analizę <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-remontowanym-budynku-czy-warto/">ogrzewania podłogowego w remontowanym budynku</a>. Czasami racjonalnym etapem jest najpierw ograniczenie strat, wymiana części odbiorników lub układ mieszany.</p>
      <div class="rk-hp-note rk-hp-note-good"><p><strong>Praktyczny test danych:</strong> zapisz temperaturę zasilania i powrotu, temperaturę zewnętrzną oraz zachowanie pomieszczeń podczas chłodnego, stabilnego okresu. Taki pomiar nie zastępuje OZC, ale pomaga wykryć założenia, które nie pasują do stanu rzeczywistego.</p></div>
    </section>

    <section class="rk-hp-section" id="rk-hp-practical">
      <span class="rk-hp-eyebrow">Dobry dobór można zepsuć detalem wykonawczym</span>
      <h2 class="rk-hp-section-title">Hałas, lokalizacja, skropliny, zasilanie i sterowanie</h2>
      <p class="rk-hp-lead">Jednostka zewnętrzna, rurociągi, zabezpieczenia, medium i automatyka powinny zostać opisane przed montażem. Katalogowa moc akustyczna, zdjęcie poglądowe i schemat uniwersalny nie zastępują oceny konkretnej działki oraz instalacji.</p>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">AKUSTYKA</span><h3>Źródło, odległość i odbicia</h3><p>Sprawdź moc akustyczną urządzenia, kierunek wydmuchu, odległość od własnych i sąsiednich okien, odbicia od ścian oraz tryby nocne.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">SKROPLINY</span><h3>Woda i lód potrzebują drogi</h3><p>Odprowadzenie kondensatu musi działać zimą, nie zalewać fundamentu lub przejścia i nie tworzyć niebezpiecznej tafli lodu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">WIBRACJE</span><h3>Konstrukcja nie może wzmacniać dźwięku</h3><p>Posadowienie, wsporniki, przejścia przez przegrody i elastyczne połączenia trzeba dobrać do masy, sił i warunków montażu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">ELEKTRYKA</span><h3>Sprężarka, grzałka i zabezpieczenia</h3><p>Moc przyłączeniowa, liczba faz, prądy, zabezpieczenia oraz sterowanie wymagają sprawdzenia przez osobę o właściwych kompetencjach.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">CHŁODZENIE</span><h3>Komfort bez kondensacji</h3><p>Jeśli instalacja ma chłodzić, trzeba kontrolować punkt rosy, zabezpieczyć powierzchnie i przewody oraz zapewnić odbiorniki właściwe dla wybranego trybu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">SERWIS</span><h3>Dostęp przed estetyką</h3><p>Zachowaj przestrzeń wymaganą do przepływu powietrza, czyszczenia wymiennika, wymiany podzespołów i bezpiecznych prac.</p></article>
      </div>
      <p class="rk-hp-copy">Automatyka powinna współpracować z bezwładnością systemu. Zobacz, jak działa <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowanie pogodowe w ogrzewaniu podłogowym</a>, kiedy sens mają <a href="https://projekt-ogrzewania.pl/czy-warto-montowac-sterowniki-do-ogrzewania-podlogowego/">sterowniki strefowe</a>, jaką funkcję ma <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">termostat podłogowy</a> oraz do czego służy <a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/">czujnik temperatury podłogi</a>. Częste zamykanie obiegów bez analizy przepływu może być sprzeczne z wymaganiami pompy.</p>
      <p class="rk-hp-copy">Jakość medium i ochrona instalacji również wymagają decyzji projektowej. Ogólne wskazówki znajdziesz w poradniku <a href="https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/">czym napełnić instalację ogrzewania podłogowego</a>, a funkcję urządzeń ochronnych opisuje materiał o <a href="https://projekt-ogrzewania.pl/separator-zanieczyszczen-i-powietrza-w-ogrzewaniu-podlogowym-dobor-schemat-montazu-spadek-cisnienia-i-normy/">separatorze zanieczyszczeń i powietrza</a>. Nie stosuj jednej recepty na wodę lub inhibitor bez uwzględnienia materiałów, gwarancji i wymagań wszystkich urządzeń.</p>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-checklist">
      <span class="rk-hp-eyebrow">Dokumenty ważniejsze od obietnicy sprzedawcy</span>
      <h2 class="rk-hp-section-title">Checklista przed podpisaniem umowy</h2>
      <p class="rk-hp-lead">Poproś, aby oferta na pompę ciepła odnosiła się do budynku, punktu pracy i całego systemu. Najważniejsze dane powinny dać się odnaleźć w obliczeniach, kartach urządzenia, schemacie oraz uzgodnionym zakresie wykonania.</p>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">BUDYNEK</span><h3>Dane wejściowe</h3><ul class="rk-hp-checklist"><li>OZC z temperaturą projektową,</li><li>straty pomieszczeń,</li><li>wentylacja i infiltracja,</li><li>stan przed lub po termomodernizacji,</li><li>potrzeby oraz profil CWU.</li></ul></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">URZĄDZENIE</span><h3>Parametry do porównania</h3><ul class="rk-hp-checklist"><li>moc i COP w punkcie projektowym,</li><li>zakres modulacji,</li><li>mapa lub tabela pracy,</li><li>minimalny przepływ i zład,</li><li>moc grzałki i strategia biwalencji.</li></ul></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">INSTALACJA</span><h3>Warunki wykonania</h3><ul class="rk-hp-checklist"><li>temperatura i moc odbiorników,</li><li>schemat hydrauliczny i sterowanie,</li><li>zasilanie oraz zabezpieczenia,</li><li>lokalizacja, hałas i skropliny,</li><li>rozruch, pomiary, gwarancja i serwis.</li></ul></article>
      </div>
      <p class="rk-hp-copy">Jeżeli w ofercie nie ma podstaw obliczeniowych, przeczytaj, <a href="https://projekt-ogrzewania.pl/czy-do-ogrzewania-podlogowego-potrzebny-jest-projekt/">czy do ogrzewania podłogowego potrzebny jest projekt</a>. Dobra dokumentacja nie polega na dodaniu większego urządzenia „na wszelki wypadek”, lecz na pokazaniu zależności pomiędzy budynkiem, pompą i instalacją.</p>
    </section>

    <section class="rk-hp-section" id="rk-hp-errors">
      <span class="rk-hp-eyebrow">Błędy wynikają zwykle z pominiętego połączenia</span>
      <h2 class="rk-hp-section-title">Najczęstsze błędy przy pompie ciepła</h2>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 1</span><h3>Dobór z samego metrażu</h3><p>Powierzchnia nie opisuje przegród, wentylacji, temperatur pomieszczeń ani lokalnego klimatu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 2</span><h3>Moc nominalna zamiast punktu pracy</h3><p>Nazwa modelu nie gwarantuje tej samej mocy przy mrozie i podwyższonej temperaturze wody.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 3</span><h3>SCOP jako obietnica rachunku</h3><p>Wynik etykiety nie zna rzeczywistego budynku, sterowania, taryfy, CWU ani udziału grzałki.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 4</span><h3>Bufor bez określonej funkcji</h3><p>Dodatkowy zbiornik nie naprawi automatycznie błędnych przepływów, sterowania lub temperatur.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 5</span><h3>Zamykanie wszystkich stref</h3><p>Automatyka pokojowa może pozbawić pompę minimalnego przepływu i aktywnego zładu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 6</span><h3>Pominięcie akustyki i skroplin</h3><p>Poprawna moc urządzenia nie usuwa problemu źle ustawionej jednostki, lodu lub drgań konstrukcji.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 7</span><h3>Grzejniki ocenione na oko</h3><p>Każdy odbiornik trzeba sprawdzić przy rzeczywistej temperaturze zasilania i projektowej stracie pomieszczenia.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 8</span><h3>Brak pomiarów po uruchomieniu</h3><p>Bez temperatur, przepływów, poboru energii i konfiguracji nie da się rzetelnie ocenić pracy systemu.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-card-number">BŁĄD 9</span><h3>Marketingowy ranking czynników</h3><p>Nazwa czynnika nie zastępuje oceny bezpieczeństwa, mocy, zakresu pracy, serwisu i warunków lokalnych.</p></article>
      </div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-summary">
      <span class="rk-hp-eyebrow">Wniosek projektowy</span>
      <h2 class="rk-hp-section-title">Pompa ciepła jest częścią instalacji, a nie samodzielną odpowiedzią</h2>
      <p class="rk-hp-lead">Dobrze dobrana pompa ciepła może ogrzewać nowy lub modernizowany dom, współpracować z podłogówką, właściwie dobranymi grzejnikami albo układem mieszanym. Warunkiem nie jest konkretne hasło technologiczne, lecz zgodność obciążenia budynku, mocy urządzenia, temperatury odbiorników, hydrauliki, automatyki i warunków montażu.</p>
      <div class="rk-hp-grid-3">
        <article class="rk-hp-card"><span class="rk-hp-icon">A</span><h3>Policz</h3><p>Projektowe straty budynku i pomieszczeń, wymagane temperatury, przepływy oraz potrzeby CWU.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-icon">B</span><h3>Porównaj</h3><p>Moc i efektywność urządzenia w rzeczywistych punktach pracy, dolną modulację oraz warunki hydrauliczne.</p></article>
        <article class="rk-hp-card"><span class="rk-hp-icon">C</span><h3>Udokumentuj</h3><p>Schemat, ustawienia, zabezpieczenia, rozruch, pomiary i odpowiedzialność za każdą część kompletnego systemu.</p></article>
      </div>
      <div class="rk-hp-note rk-hp-note-good"><p><strong>Najlepszy kolejny krok:</strong> zanim porównasz ceny urządzeń, przygotuj wspólny zestaw danych dla wszystkich ofert. Dopiero wtedy różnice w mocy, SCOP, hałasie, hydraulice i zakresie montażu są porównywalne.</p></div>
    </section>

    <section class="rk-hp-section" id="rk-hp-final">
      <span class="rk-hp-eyebrow">Końcowy krok przed wykonaniem</span>
      <h2 class="rk-hp-section-title">Połącz dobór pompy z hydrauliką ogrzewania podłogowego</h2>
      <p class="rk-hp-lead">Nawet prawidłowo dobrana pompa nie określa jeszcze rozstawu rur, długości pętli, przepływów ani nastaw rozdzielacza. Te dane wynikają z obciążeń poszczególnych pomieszczeń i konstrukcji podłogi.</p>
      <div class="rk-hp-cta">
        <div class="rk-hp-cta-title">Zamień parametry źródła ciepła w policzoną instalację podłogową</div>
        <p>Projekt obejmuje układ pomieszczeń, powierzchnie czynne, rozstaw rur, podział na pętle, długości, przepływy, opory oraz nastawy. Dzięki temu temperatura wody przyjęta dla pompy zostaje sprawdzona po stronie rzeczywistych odbiorników.</p>
        <a class="rk-hp-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów indywidualny projekt ogrzewania podłogowego</a>
        <small class="rk-hp-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-hp-section" id="rk-hp-sources">
      <span class="rk-hp-eyebrow">Podstawa techniczna</span>
      <h2 class="rk-hp-section-title">Źródła oficjalne i zakres odpowiedzialności</h2>
      <p class="rk-hp-lead">Odnośniki prowadzą wyłącznie do oficjalnych instytucji, rejestrów i aktów prawnych. Nie linkuję tu do producentów, sklepów ani konkurencyjnych serwisów. Źródła zewnętrzne są zebrane tylko w tej sekcji.</p>
      <div class="rk-hp-source-grid">
        <article class="rk-hp-source-card"><a href="https://sklep.pkn.pl/pn-en-12831-2006p.html" target="_blank" rel="nofollow noopener noreferrer">Polski Komitet Normalizacyjny — PN-EN 12831 i dokument zastępujący</a><p>Oficjalna karta wycofanego wydania wskazuje zastąpienie go przez PN-EN 12831-1:2017-08 dotyczącą metody obliczania projektowego obciążenia cieplnego.</p></article>
        <article class="rk-hp-source-card"><a href="https://energy-efficient-products.ec.europa.eu/faqs-0/what-minimum-seasonal-space-heating-energy-efficiency-heat-pumps-are-capable-low-and-medium_en" target="_blank" rel="nofollow noopener noreferrer">Komisja Europejska — sezonowa efektywność pomp ciepła</a><p>Oficjalne objaśnienie rozróżnia zastosowania nisko- i średniotemperaturowe oraz odnosi wymagania do sezonowej efektywności ogrzewania pomieszczeń.</p></article>
        <article class="rk-hp-source-card"><a href="https://eprel.ec.europa.eu/" target="_blank" rel="nofollow noopener noreferrer">Komisja Europejska — baza EPREL</a><p>Oficjalny europejski rejestr produktów z etykietami energetycznymi i kartami informacyjnymi. Dane trzeba odnosić do dokładnego identyfikatora modelu.</p></article>
        <article class="rk-hp-source-card"><a href="https://eur-lex.europa.eu/eli/reg/2024/573/oj" target="_blank" rel="nofollow noopener noreferrer">EUR-Lex — rozporządzenie (UE) 2024/573</a><p>Aktualna podstawa unijnych zasad dotyczących fluorowanych gazów cieplarnianych, w tym ograniczeń, certyfikacji i obowiązków właściwych dla konkretnych urządzeń oraz prac.</p></article>
        <article class="rk-hp-source-card"><a href="https://www.iea.org/reports/energy-efficiency-policy-toolkit/heat-pumps-for-buildings" target="_blank" rel="nofollow noopener noreferrer">Międzynarodowa Agencja Energetyczna — heat pumps for buildings</a><p>Oficjalny materiał o roli pomp ciepła w budynkach, efektywności, integracji z modernizacją i znaczeniu właściwego wdrożenia.</p></article>
      </div>
      <div class="rk-hp-responsibility"><p><strong>Zakres poradnika:</strong> treść i narzędzia pomagają uporządkować dane, wykryć brakujące warunki oraz zrozumieć zależności. Nie są projektem instalacji, świadectwem energetycznym, audytem, doborem konkretnego modelu, analizą akustyczną, projektem elektrycznym, instrukcją chłodniczą ani potwierdzeniem zgodności z gwarancją. Obowiązują aktualne przepisy, dokumentacja wybranego urządzenia, projekt i warunki rzeczywistego budynku.</p></div>
    </section>

    <section class="rk-hp-section rk-hp-section-soft" id="rk-hp-faq">
      <span class="rk-hp-eyebrow">Pytania inwestorów</span>
      <h2 class="rk-hp-section-title">FAQ — pompa ciepła do domu</h2>
      <div class="rk-hp-faq">
        <details><summary>Czy pompa ciepła ogrzeje każdy dom?</summary><div class="rk-hp-faq-answer"><p>Nie można tego potwierdzić na podstawie samej technologii. Trzeba znać projektową stratę ciepła, wymaganą temperaturę odbiorników oraz moc konkretnej pompy w odpowiadającym punkcie pracy. Starszy dom także może być odpowiedni, jeśli te warunki zostały spełnione.</p></div></details>
        <details><summary>Jaka moc pompy ciepła jest potrzebna do domu 150 m²?</summary><div class="rk-hp-faq-answer"><p>Powierzchnia 150 m² nie wystarcza do doboru. Potrzebne jest obciążenie cieplne obliczone dla lokalnej temperatury projektowej, a następnie porównanie go z mocą urządzenia przy wymaganej temperaturze wody i ustalonej strategii biwalentnej.</p></div></details>
        <details><summary>Czy pompa ciepła wymaga ogrzewania podłogowego?</summary><div class="rk-hp-faq-answer"><p>Nie. Podłogówka często pozwala pracować przy niższej temperaturze wody, ale poprawnie dobrane grzejniki lub klimakonwektory także mogą współpracować z pompą. Każdy odbiornik musi pokryć stratę pomieszczenia przy rzeczywistych parametrach.</p></div></details>
        <details><summary>Czy do pompy ciepła zawsze potrzebny jest bufor?</summary><div class="rk-hp-faq-answer"><p>Nie zawsze. Decyzja zależy od minimalnego przepływu i zładu, odszraniania, modulacji, sterowania strefowego, schematu hydraulicznego oraz wymagań konkretnej pompy. Bufor powinien mieć zdefiniowaną funkcję, a nie być dodawany automatycznie.</p></div></details>
        <details><summary>Co to jest punkt biwalentny pompy ciepła?</summary><div class="rk-hp-faq-answer"><p>To warunek, przy którym moc pompy i obciążenie budynku są sobie równe w przyjętym modelu. Poniżej tego punktu może być potrzebne źródło szczytowe, jeśli pompa nie pokrywa całej mocy. Nie istnieje jedna uniwersalna temperatura biwalencji dla wszystkich domów.</p></div></details>
        <details><summary>Czym różni się COP od SCOP?</summary><div class="rk-hp-faq-answer"><p>COP opisuje efektywność w konkretnym punkcie badania, a SCOP — wynik sezonowy według określonej metody, klimatu i zastosowania. Żadna z tych wartości sama nie jest gwarancją rachunku konkretnego budynku.</p></div></details>
        <details><summary>Co jest lepsze: pompa monoblok czy split?</summary><div class="rk-hp-faq-answer"><p>Nie ma jednej odpowiedzi. Monoblok wymaga rozwiązania ochrony zewnętrznego obiegu wodnego, a split poprawnego wykonania połączeń chłodniczych i spełnienia właściwych obowiązków. Porównaj kompletny montaż, bezpieczeństwo, serwis i parametry urządzenia.</p></div></details>
        <details><summary>Ile prądu zużywa pompa ciepła?</summary><div class="rk-hp-faq-answer"><p>Zależy to od ilości ciepła potrzebnego do ogrzewania i CWU, rzeczywistej efektywności sezonowej, temperatury wody, klimatu, sterowania, udziału grzałki oraz energii pomocniczej. Katalogowy COP nie wystarcza do wyliczenia rocznego zużycia.</p></div></details>
        <details><summary>Czy pompa ciepła może współpracować ze zwykłymi grzejnikami?</summary><div class="rk-hp-faq-answer"><p>Może, jeśli ich moc przy osiągalnej temperaturze zasilania pokrywa straty pomieszczeń. Moc podana dla wysokich parametrów kotłowych nie może być bezpośrednio przeniesiona na niską temperaturę wody.</p></div></details>
        <details><summary>Czy R290 jest zawsze lepszy od R32?</summary><div class="rk-hp-faq-answer"><p>Nie należy wybierać pompy wyłącznie po symbolu czynnika. Trzeba porównać wpływ klimatyczny, klasę bezpieczeństwa, konstrukcję, moc, efektywność, zakres pracy, lokalizację, wymagania montażowe i dostępność serwisu konkretnego urządzenia.</p></div></details>
      </div>
    </section>

    <section class="rk-hp-author" id="rk-hp-author">
      <span class="rk-hp-eyebrow">Opracowanie eksperckie</span>
      <h2 class="rk-hp-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-hp-author-layout">
        <aside class="rk-hp-author-side">
          <div class="rk-hp-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-hp-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <p class="rk-hp-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-hp-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-hp-author-main">
          <div class="rk-hp-author-quote">„Pompy ciepła nie dobiera się do metrażu ani do nazwy modelu. Najpierw trzeba połączyć obciążenie budynku, temperaturę odbiorników, rzeczywistą moc urządzenia i hydraulikę w jednym punkcie projektowym.”</div>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W pracy projektowej analizuje zależności pomiędzy stratami pomieszczeń, powierzchnią czynną podłogi, temperaturą zasilania, przepływami, oporami instalacji oraz wymaganiami źródła ciepła.</p>
          <p>W poradnikach oddziela deklaracje marketingowe od parametrów możliwych do sprawdzenia w obliczeniach i dokumentacji technicznej. Ten materiał został zweryfikowany pod kątem poprawnego rozróżnienia mocy i efektywności, warunków punktu pracy, doboru z OZC, funkcji bufora, wymagań przepływowych, sterowania strefowego oraz ograniczeń uproszczonych narzędzi.</p>
          <p>Treść nie promuje konkretnej marki ani czynnika chłodniczego. Jej celem jest pokazanie inwestorowi, jakie dane powinny być wspólne dla porównywanych ofert i w których miejscach potrzebna jest odpowiedzialność projektanta, instalatora chłodniczego, elektryka albo serwisu.</p>
          <p>Publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego w serwisie Projekt-Ogrzewania.pl</a>.</p>
          <div class="rk-hp-author-facts">
            <div class="rk-hp-author-fact"><strong>Zakres</strong>ogrzewanie podłogowe, bilanse cieplne i hydraulika instalacji</div>
            <div class="rk-hp-author-fact"><strong>Metoda pracy</strong>obliczenia, dokumentacja urządzeń i weryfikacja warunków rzeczywistych</div>
            <div class="rk-hp-author-fact"><strong>Aktualizacja</strong>stan techniczny materiału sprawdzony 9 września 2026 r.</div>
          </div>
        </div>
      </div>
    </section>

    
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "inLanguage": "pl-PL",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" }
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg"
      },
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/"
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/"
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "affiliation": [
        { "@id": "https://remont.biz.pl/#organization" },
        { "@id": "https://sobir.pl/#organization" }
      ],
      "knowsAbout": [
        "pompy ciepła",
        "ogrzewanie podłogowe",
        "obliczenia obciążenia cieplnego",
        "hydraulika instalacji grzewczych",
        "dobór pomp obiegowych",
        "sterowanie pogodowe"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Pompa-Ciepla-2026.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/01/Pompa-Ciepla-2026.webp",
      "width": 945,
      "height": 945,
      "caption": "Pompa ciepła przy domu jednorodzinnym",
      "creditText": "Robert Kucharski"
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#webpage",
      "url": "https://projekt-ogrzewania.pl/pompa-ciepla/",
      "name": "Pompa ciepła do domu – jak działa, ile zużywa prądu i jak dobrać moc?",
      "description": "Pompa ciepła do domu: sprawdź, jak działa, jak dobrać moc z OZC, ile zużywa prądu i kiedy dobrze współpracuje z podłogówką.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#primaryimage" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#breadcrumb" },
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#article" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Projekt Ogrzewania",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Pompa ciepła do domu",
          "item": "https://projekt-ogrzewania.pl/pompa-ciepla/"
        }
      ]
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#article",
      "url": "https://projekt-ogrzewania.pl/pompa-ciepla/",
      "headline": "Pompa ciepła do domu – jak działa, ile zużywa prądu i jak dobrać moc?",
      "description": "Techniczny poradnik o działaniu, doborze z OZC, COP, SCOP, punkcie biwalentnym, hydraulice, kosztach i współpracy pompy ciepła z podłogówką lub grzejnikami.",
      "datePublished": "2026-01-03T16:18:37+01:00",
      "dateModified": "2026-09-09T12:00:00+02:00",
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#webpage" },
      "image": { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#primaryimage" },
      "inLanguage": "pl-PL",
      "articleSection": [
        "Jak działa pompa ciepła",
        "COP i SCOP",
        "Dobór mocy z OZC",
        "Punkt biwalentny",
        "Pompa ciepła z podłogówką i grzejnikami",
        "Hydraulika, bufor i odszranianie",
        "Zużycie energii i koszty",
        "Czynniki chłodnicze i montaż"
      ],
      "keywords": [
        "pompa ciepła do domu",
        "jak działa pompa ciepła",
        "dobór pompy ciepła z OZC",
        "COP a SCOP",
        "punkt biwalentny",
        "pompa ciepła z podłogówką",
        "pompa ciepła do grzejników",
        "czy pompa ciepła potrzebuje bufora",
        "ile prądu zużywa pompa ciepła"
      ],
      "citation": [
        "https://sklep.pkn.pl/pn-en-12831-2006p.html",
        "https://energy-efficient-products.ec.europa.eu/faqs-0/what-minimum-seasonal-space-heating-energy-efficiency-heat-pumps-are-capable-low-and-medium_en",
        "https://eprel.ec.europa.eu/",
        "https://eur-lex.europa.eu/eli/reg/2024/573/oj",
        "https://www.iea.org/reports/energy-efficiency-policy-toolkit/heat-pumps-for-buildings"
      ],
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#readiness-tool" },
        { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#curve-tool" },
        { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#faq-schema" }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#readiness-tool",
      "name": "Analizator gotowości budynku i instalacji do pompy ciepła",
      "url": "https://projekt-ogrzewania.pl/pompa-ciepla/#rk-hp-analyzer-section",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Narzędzie porządkujące warunki potwierdzone, braki danych i krytyczne przeszkody przed doborem pompy ciepła."
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#curve-tool",
      "name": "Wykres mocy pompy ciepła i obciążenia budynku",
      "url": "https://projekt-ogrzewania.pl/pompa-ciepla/#rk-hp-curve",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript oraz Canvas",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Edukacyjne porównanie liniowego modelu obciążenia budynku z mocą pompy interpolowaną pomiędzy punktami wpisanymi z dokumentacji urządzenia."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#howto",
      "name": "Jak wstępnie zweryfikować dobór mocy pompy ciepła",
      "description": "Sześć etapów porównania budynku, odbiorników i konkretnego urządzenia.",
      "inLanguage": "pl-PL",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Policz budynek", "text": "Wyznacz projektowe obciążenie cieplne z uwzględnieniem przegród, wentylacji, infiltracji i temperatur pomieszczeń." },
        { "@type": "HowToStep", "position": 2, "name": "Ustal temperaturę wody", "text": "Sprawdź wymaganą moc odbiorników przy rzeczywistej temperaturze zasilania i powrotu." },
        { "@type": "HowToStep", "position": 3, "name": "Odczytaj moc urządzenia", "text": "Porównaj tabelę lub mapę mocy pompy dla projektowej temperatury źródła i wymaganej temperatury wody." },
        { "@type": "HowToStep", "position": 4, "name": "Ustal biwalencję", "text": "Określ warunki oraz moc źródła szczytowego i uwzględnij je w bilansie elektrycznym." },
        { "@type": "HowToStep", "position": 5, "name": "Sprawdź modulację", "text": "Zweryfikuj minimalną moc urządzenia przy łagodnej pogodzie i ryzyko częstych cykli." },
        { "@type": "HowToStep", "position": 6, "name": "Domknij system", "text": "Sprawdź przepływ, zład, odszranianie, CWU, hałas, skropliny, zasilanie oraz warunki serwisu." }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/pompa-ciepla/#faq-schema",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Czy pompa ciepła ogrzeje każdy dom?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie można tego potwierdzić na podstawie samej technologii. Trzeba znać projektową stratę ciepła, wymaganą temperaturę odbiorników oraz moc konkretnej pompy w odpowiadającym punkcie pracy. Starszy dom także może być odpowiedni, jeśli te warunki zostały spełnione." }
        },
        {
          "@type": "Question",
          "name": "Jaka moc pompy ciepła jest potrzebna do domu 150 m²?",
          "acceptedAnswer": { "@type": "Answer", "text": "Powierzchnia 150 m² nie wystarcza do doboru. Potrzebne jest obciążenie cieplne obliczone dla lokalnej temperatury projektowej, a następnie porównanie go z mocą urządzenia przy wymaganej temperaturze wody i ustalonej strategii biwalentnej." }
        },
        {
          "@type": "Question",
          "name": "Czy pompa ciepła wymaga ogrzewania podłogowego?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Podłogówka często pozwala pracować przy niższej temperaturze wody, ale poprawnie dobrane grzejniki lub klimakonwektory także mogą współpracować z pompą. Każdy odbiornik musi pokryć stratę pomieszczenia przy rzeczywistych parametrach." }
        },
        {
          "@type": "Question",
          "name": "Czy do pompy ciepła zawsze potrzebny jest bufor?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie zawsze. Decyzja zależy od minimalnego przepływu i zładu, odszraniania, modulacji, sterowania strefowego, schematu hydraulicznego oraz wymagań konkretnej pompy. Bufor powinien mieć zdefiniowaną funkcję, a nie być dodawany automatycznie." }
        },
        {
          "@type": "Question",
          "name": "Co to jest punkt biwalentny pompy ciepła?",
          "acceptedAnswer": { "@type": "Answer", "text": "To warunek, przy którym moc pompy i obciążenie budynku są sobie równe w przyjętym modelu. Poniżej tego punktu może być potrzebne źródło szczytowe, jeśli pompa nie pokrywa całej mocy. Nie istnieje jedna uniwersalna temperatura biwalencji dla wszystkich domów." }
        },
        {
          "@type": "Question",
          "name": "Czym różni się COP od SCOP?",
          "acceptedAnswer": { "@type": "Answer", "text": "COP opisuje efektywność w konkretnym punkcie badania, a SCOP — wynik sezonowy według określonej metody, klimatu i zastosowania. Żadna z tych wartości sama nie jest gwarancją rachunku konkretnego budynku." }
        },
        {
          "@type": "Question",
          "name": "Co jest lepsze: pompa monoblok czy split?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie ma jednej odpowiedzi. Monoblok wymaga rozwiązania ochrony zewnętrznego obiegu wodnego, a split poprawnego wykonania połączeń chłodniczych i spełnienia właściwych obowiązków. Porównaj kompletny montaż, bezpieczeństwo, serwis i parametry urządzenia." }
        },
        {
          "@type": "Question",
          "name": "Ile prądu zużywa pompa ciepła?",
          "acceptedAnswer": { "@type": "Answer", "text": "Zależy to od ilości ciepła potrzebnego do ogrzewania i CWU, rzeczywistej efektywności sezonowej, temperatury wody, klimatu, sterowania, udziału grzałki oraz energii pomocniczej. Katalogowy COP nie wystarcza do wyliczenia rocznego zużycia." }
        },
        {
          "@type": "Question",
          "name": "Czy pompa ciepła może współpracować ze zwykłymi grzejnikami?",
          "acceptedAnswer": { "@type": "Answer", "text": "Może, jeśli ich moc przy osiągalnej temperaturze zasilania pokrywa straty pomieszczeń. Moc podana dla wysokich parametrów kotłowych nie może być bezpośrednio przeniesiona na niską temperaturę wody." }
        },
        {
          "@type": "Question",
          "name": "Czy R290 jest zawsze lepszy od R32?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie należy wybierać pompy wyłącznie po symbolu czynnika. Trzeba porównać wpływ klimatyczny, klasę bezpieczeństwa, konstrukcję, moc, efektywność, zakres pracy, lokalizację, wymagania montażowe i dostępność serwisu konkretnego urządzenia." }
        }
      ]
    }
  ]
}
</script>

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

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

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

  function makeList(list, items, emptyText) {
    while (list.firstChild) {
      list.removeChild(list.firstChild);
    }
    if (items.length === 0) {
      var emptyItem = document.createElement("li");
      emptyItem.textContent = emptyText;
      list.appendChild(emptyItem);
      return;
    }
    items.forEach(function (itemText) {
      var item = document.createElement("li");
      item.textContent = itemText;
      list.appendChild(item);
    });
  }

  var sourceData = {
    air: {
      name: "Pompa powietrze–woda:",
      description: " parownik odbiera energię z powietrza. W chłodnej i wilgotnej pogodzie na wymienniku może powstawać szron, dlatego urządzenie okresowo przeprowadza odszranianie.",
      evaporator: "Czynnik chłodniczy odbiera ciepło od powietrza przepływającego przez wymiennik i odparowuje przy niskim ciśnieniu."
    },
    ground: {
      name: "Pompa grunt–woda:",
      description: " parownik odbiera energię z obiegu dolnego źródła połączonego z sondami lub kolektorem. Stabilność zależy od poprawnego zaprojektowania i regeneracji gruntu.",
      evaporator: "Czynnik chłodniczy odbiera ciepło od płynu krążącego w dolnym źródle i odparowuje przy niskim ciśnieniu."
    }
  };

  var sourceButtons = Array.prototype.slice.call(root.querySelectorAll("[data-rk-source]"));
  var sourceName = byId("rk-hp-source-name");
  var sourceDescription = byId("rk-hp-source-description");
  var evaporatorText = byId("rk-hp-evaporator-text");

  function selectSource(key) {
    var selected = sourceData[key];
    if (!selected) {
      return;
    }
    sourceName.textContent = selected.name;
    sourceDescription.textContent = selected.description;
    evaporatorText.textContent = selected.evaporator;
    sourceButtons.forEach(function (button) {
      var isSelected = button.getAttribute("data-rk-source") === key;
      button.setAttribute("aria-pressed", isSelected ? "true" : "false");
    });
  }

  sourceButtons.forEach(function (button) {
    button.addEventListener("click", function () {
      selectSource(button.getAttribute("data-rk-source"));
    });
  });

  var analyzerSelects = Array.prototype.slice.call(root.querySelectorAll("#rk-hp-analyzer select[data-rk-name]"));
  var analyzerStatus = byId("rk-hp-analyzer-status");
  var confirmedList = byId("rk-hp-confirmed");
  var checkList = byId("rk-hp-check");
  var criticalList = byId("rk-hp-critical");
  var analyzeButton = byId("rk-hp-analyze");
  var analyzerReset = byId("rk-hp-analyzer-reset");

  function analyzeReadiness() {
    var confirmed = [];
    var toCheck = [];
    var critical = [];

    analyzerSelects.forEach(function (select) {
      var label = select.getAttribute("data-rk-name");
      var isCritical = select.getAttribute("data-rk-critical") === "true";
      var value = select.value;

      if (value === "yes") {
        confirmed.push(label);
      } else if (value === "unknown") {
        toCheck.push(label + " — brak potwierdzonych danych");
      } else {
        if (isCritical) {
          critical.push(label + " — warunek nie został spełniony");
        } else {
          toCheck.push(label + " — wymaga rozwiązania przed zamówieniem");
        }
      }
    });

    makeList(confirmedList, confirmed, "Brak potwierdzonych pozycji.");
    makeList(checkList, toCheck, "Brak pozycji wymagających uzupełnienia.");
    makeList(criticalList, critical, "Nie wskazano niespełnionego warunku krytycznego.");

    if (critical.length > 0) {
      analyzerStatus.className = "rk-hp-status is-stop";
      analyzerStatus.textContent = "Wstrzymaj ostateczny dobór. Co najmniej jeden warunek krytyczny nie jest spełniony; najpierw trzeba uzupełnić obliczenia lub zmienić koncepcję.";
    } else if (toCheck.length > 0) {
      analyzerStatus.className = "rk-hp-status is-warning";
      analyzerStatus.textContent = "Dobór jest niekompletny. Nie wykryto jawnej przeszkody krytycznej, ale brakuje danych potrzebnych do odpowiedzialnej weryfikacji.";
    } else if (confirmed.length === analyzerSelects.length) {
      analyzerStatus.className = "rk-hp-status is-good";
      analyzerStatus.textContent = "Zakres danych jest wstępnie kompletny. Teraz należy sprawdzić ich spójność w obliczeniach i dokumentacji konkretnego urządzenia.";
    } else {
      analyzerStatus.className = "rk-hp-status is-neutral";
      analyzerStatus.textContent = "Uzupełnij odpowiedzi, aby rozdzielić dane potwierdzone, braki i warunki krytyczne.";
    }
  }

  analyzeButton.addEventListener("click", analyzeReadiness);
  analyzerReset.addEventListener("click", function () {
    analyzerSelects.forEach(function (select) {
      select.value = "unknown";
    });
    analyzeReadiness();
  });
  analyzerSelects.forEach(function (select) {
    select.addEventListener("change", analyzeReadiness);
  });

  var chart = byId("rk-hp-chart");
  var chartResult = byId("rk-hp-chart-result");
  var chartUpdate = byId("rk-hp-chart-update");
  var chartReset = byId("rk-hp-chart-reset");
  var chartContext = chart.getContext("2d");

  function numericValue(id) {
    return Number.parseFloat(byId(id).value);
  }

  function formatNumber(value, digits) {
    return value.toLocaleString("pl-PL", {
      minimumFractionDigits: digits,
      maximumFractionDigits: digits
    });
  }

  function readChartData() {
    return {
      designLoad: numericValue("rk-hp-design-load"),
      designTemp: numericValue("rk-hp-design-temp"),
      balanceTemp: numericValue("rk-hp-balance-temp"),
      waterTemp: byId("rk-hp-water-temp").value,
      capP7: numericValue("rk-hp-cap-p7"),
      capP2: numericValue("rk-hp-cap-p2"),
      capM7: numericValue("rk-hp-cap-m7"),
      capM15: numericValue("rk-hp-cap-m15"),
      minimumOutput: numericValue("rk-hp-min-output")
    };
  }

  function validateChartData(data) {
    if (Number.isFinite(data.designLoad) === false) {
      return "Wpisz projektową stratę ciepła.";
    }
    if (data.designLoad <= 0) {
      return "Projektowa strata ciepła musi być większa od zera.";
    }
    if (Number.isFinite(data.designTemp) === false) {
      return "Wpisz temperaturę projektową.";
    }
    if (Number.isFinite(data.balanceTemp) === false) {
      return "Wpisz temperaturę bez ogrzewania.";
    }
    if (data.designTemp >= data.balanceTemp) {
      return "Temperatura projektowa musi być niższa od temperatury bez ogrzewania.";
    }
    var capacities = [data.capM15, data.capM7, data.capP2, data.capP7];
    for (var i = 0; i < capacities.length; i += 1) {
      if (Number.isFinite(capacities[i]) === false) {
        return "Uzupełnij wszystkie cztery punkty mocy pompy.";
      }
      if (capacities[i] <= 0) {
        return "Każdy punkt mocy pompy musi być większy od zera.";
      }
    }
    if (Number.isFinite(data.minimumOutput) === false) {
      return "Wpisz orientacyjną moc minimalną albo wartość 0, aby ukryć linię.";
    }
    if (data.minimumOutput < 0) {
      return "Moc minimalna nie może być ujemna.";
    }
    return "";
  }

  function pumpPoints(data) {
    return [
      { x: -15, y: data.capM15 },
      { x: -7, y: data.capM7 },
      { x: 2, y: data.capP2 },
      { x: 7, y: data.capP7 }
    ];
  }

  function interpolatePump(points, temperature) {
    var firstIndex = 0;
    if (temperature <= points[0].x) {
      firstIndex = 0;
    } else if (temperature >= points[points.length - 1].x) {
      firstIndex = points.length - 2;
    } else {
      for (var i = 0; i < points.length - 1; i += 1) {
        if (temperature >= points[i].x) {
          if (temperature <= points[i + 1].x) {
            firstIndex = i;
            break;
          }
        }
      }
    }
    var p1 = points[firstIndex];
    var p2 = points[firstIndex + 1];
    var fraction = (temperature - p1.x) / (p2.x - p1.x);
    return p1.y + fraction * (p2.y - p1.y);
  }

  function buildingLoad(data, temperature) {
    var value = data.designLoad * (data.balanceTemp - temperature) / (data.balanceTemp - data.designTemp);
    if (value < 0) {
      return 0;
    }
    return value;
  }

  function findIntersection(data, points, xMin, xMax) {
    var steps = 900;
    var previousX = xMin;
    var previousDifference = interpolatePump(points, previousX) - buildingLoad(data, previousX);

    for (var i = 1; i <= steps; i += 1) {
      var currentX = xMin + (xMax - xMin) * i / steps;
      var currentDifference = interpolatePump(points, currentX) - buildingLoad(data, currentX);
      var crossed = false;

      if (previousDifference === 0) {
        crossed = true;
      } else if (previousDifference < 0) {
        if (currentDifference > 0) {
          crossed = true;
        }
      } else if (currentDifference < 0) {
        crossed = true;
      }

      if (crossed) {
        var denominator = currentDifference - previousDifference;
        var fraction = 0;
        if (denominator !== 0) {
          fraction = (0 - previousDifference) / denominator;
        }
        var intersectionX = previousX + (currentX - previousX) * fraction;
        return {
          x: intersectionX,
          y: buildingLoad(data, intersectionX)
        };
      }

      previousX = currentX;
      previousDifference = currentDifference;
    }
    return null;
  }

  function drawPolyline(context, points, xScale, yScale, color, width, dash) {
    context.save();
    context.beginPath();
    points.forEach(function (point, index) {
      var x = xScale(point.x);
      var y = yScale(point.y);
      if (index === 0) {
        context.moveTo(x, y);
      } else {
        context.lineTo(x, y);
      }
    });
    context.strokeStyle = color;
    context.lineWidth = width;
    context.lineJoin = "round";
    context.lineCap = "round";
    context.setLineDash(dash);
    context.stroke();
    context.restore();
  }

  function drawPoint(context, x, y, radius, fill, stroke) {
    context.save();
    context.beginPath();
    context.arc(x, y, radius, 0, Math.PI * 2);
    context.fillStyle = fill;
    context.fill();
    context.strokeStyle = stroke;
    context.lineWidth = 3;
    context.stroke();
    context.restore();
  }

  function drawChart() {
    var data = readChartData();
    var error = validateChartData(data);
    if (error !== "") {
      chartResult.innerHTML = "<strong>Sprawdź dane:</strong> " + error;
      chartResult.style.borderLeftColor = "#ff6846";
      return;
    }

    if (!chartContext) {
      chartResult.innerHTML = "<strong>Wykres niedostępny:</strong> przeglądarka nie udostępniła powierzchni Canvas.";
      return;
    }

    var dataPoints = pumpPoints(data);
    var xMin = Math.min(data.designTemp, -15);
    var xMax = Math.max(data.balanceTemp, 7);
    var sampleBuilding = [];
    var samplePump = [];
    var sampleCount = 160;
    var maxY = data.designLoad;

    for (var i = 0; i <= sampleCount; i += 1) {
      var temperature = xMin + (xMax - xMin) * i / sampleCount;
      var loadValue = buildingLoad(data, temperature);
      var pumpValue = interpolatePump(dataPoints, temperature);
      sampleBuilding.push({ x: temperature, y: loadValue });
      samplePump.push({ x: temperature, y: pumpValue });
      maxY = Math.max(maxY, loadValue, pumpValue, data.minimumOutput);
    }

    maxY = Math.max(2, Math.ceil(maxY * 1.16));
    var parentWidth = chart.parentElement.clientWidth - 28;
    var cssWidth = Math.max(280, parentWidth);
    var cssHeight = chart.clientHeight;
    if (cssHeight < 260) {
      cssHeight = 480;
    }
    var pixelRatio = window.devicePixelRatio;
    if (Number.isFinite(pixelRatio) === false) {
      pixelRatio = 1;
    }
    pixelRatio = Math.min(2, Math.max(1, pixelRatio));
    chart.width = Math.floor(cssWidth * pixelRatio);
    chart.height = Math.floor(cssHeight * pixelRatio);
    chartContext.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
    chartContext.clearRect(0, 0, cssWidth, cssHeight);
    chartContext.fillStyle = "#f7fbfc";
    chartContext.fillRect(0, 0, cssWidth, cssHeight);

    var compact = cssWidth < 580;
    var marginLeft = compact ? 45 : 66;
    var marginRight = compact ? 12 : 25;
    var marginTop = 28;
    var marginBottom = compact ? 58 : 64;
    var plotWidth = cssWidth - marginLeft - marginRight;
    var plotHeight = cssHeight - marginTop - marginBottom;

    function xScale(value) {
      return marginLeft + (value - xMin) / (xMax - xMin) * plotWidth;
    }

    function yScale(value) {
      return marginTop + plotHeight - value / maxY * plotHeight;
    }

    chartContext.font = compact ? "10px Arial" : "12px Arial";
    chartContext.fillStyle = "#506b7b";
    chartContext.strokeStyle = "#d5e3e8";
    chartContext.lineWidth = 1;

    for (var xTick = 0; xTick <= 6; xTick += 1) {
      var xValue = xMin + (xMax - xMin) * xTick / 6;
      var xPosition = xScale(xValue);
      chartContext.beginPath();
      chartContext.moveTo(xPosition, marginTop);
      chartContext.lineTo(xPosition, marginTop + plotHeight);
      chartContext.stroke();
      chartContext.textAlign = "center";
      chartContext.fillText(formatNumber(xValue, 0) + "°C", xPosition, marginTop + plotHeight + 22);
    }

    for (var yTick = 0; yTick <= 5; yTick += 1) {
      var yValue = maxY * yTick / 5;
      var yPosition = yScale(yValue);
      chartContext.beginPath();
      chartContext.moveTo(marginLeft, yPosition);
      chartContext.lineTo(marginLeft + plotWidth, yPosition);
      chartContext.stroke();
      chartContext.textAlign = "right";
      chartContext.fillText(formatNumber(yValue, 1), marginLeft - 8, yPosition + 4);
    }

    chartContext.save();
    chartContext.fillStyle = "#10283a";
    chartContext.font = compact ? "bold 11px Arial" : "bold 13px Arial";
    chartContext.textAlign = "center";
    chartContext.fillText("temperatura zewnętrzna [°C]", marginLeft + plotWidth / 2, cssHeight - 10);
    chartContext.translate(14, marginTop + plotHeight / 2);
    chartContext.rotate(-Math.PI / 2);
    chartContext.fillText("moc [kW]", 0, 0);
    chartContext.restore();

    drawPolyline(chartContext, sampleBuilding, xScale, yScale, "#ff6846", compact ? 3 : 4, []);
    drawPolyline(chartContext, samplePump, xScale, yScale, "#16bcd3", compact ? 3 : 4, []);

    if (data.minimumOutput > 0) {
      drawPolyline(chartContext, [{ x: xMin, y: data.minimumOutput }, { x: xMax, y: data.minimumOutput }], xScale, yScale, "#6963ce", 3, [8, 6]);
    }

    dataPoints.forEach(function (point) {
      drawPoint(chartContext, xScale(point.x), yScale(point.y), compact ? 4 : 5, "#ffffff", "#16bcd3");
    });

    drawPoint(chartContext, xScale(data.designTemp), yScale(data.designLoad), compact ? 5 : 6, "#ffffff", "#ff6846");

    var intersection = findIntersection(data, dataPoints, xMin, xMax);
    if (intersection) {
      drawPoint(chartContext, xScale(intersection.x), yScale(intersection.y), compact ? 5 : 6, "#f2b526", "#ffffff");
    }

    var capacityAtDesign = interpolatePump(dataPoints, data.designTemp);
    var differenceAtDesign = capacityAtDesign - data.designLoad;
    var designSentence = "Przy " + formatNumber(data.designTemp, 0) + "°C model budynku wymaga " + formatNumber(data.designLoad, 1) + " kW, a interpolowana lub ekstrapolowana moc pompy wynosi " + formatNumber(capacityAtDesign, 1) + " kW.";
    var differenceSentence = "";
    if (differenceAtDesign >= 0) {
      differenceSentence = " W tym punkcie model pokazuje nadwyżkę " + formatNumber(differenceAtDesign, 1) + " kW.";
    } else {
      differenceSentence = " W tym punkcie model pokazuje niedobór " + formatNumber(Math.abs(differenceAtDesign), 1) + " kW, który wymaga sprawdzenia w pełnej mapie pracy i strategii źródła szczytowego.";
    }

    var intersectionSentence = "";
    if (intersection) {
      intersectionSentence = " Orientacyjne przecięcie krzywych wypada przy " + formatNumber(intersection.x, 1) + "°C i mocy około " + formatNumber(intersection.y, 1) + " kW.";
    } else {
      intersectionSentence = " W pokazanym zakresie temperatur nie znaleziono przecięcia krzywych.";
    }

    var extrapolationSentence = "";
    if (data.designTemp < -15) {
      extrapolationSentence = " Uwaga: temperatura projektowa leży poniżej najniższego wpisanego punktu, więc moc pompy została ekstrapolowana; koniecznie zastąp ten fragment rzeczywistą tabelą lub mapą producenta.";
    } else if (data.designTemp > 7) {
      extrapolationSentence = " Uwaga: temperatura projektowa leży powyżej najwyższego wpisanego punktu, więc moc pompy została ekstrapolowana.";
    }

    chartResult.innerHTML = "<strong>Wynik dla " + data.waterTemp + ":</strong> " + designSentence + differenceSentence + intersectionSentence + extrapolationSentence;
    chartResult.style.borderLeftColor = "#29c4d7";
    chart.setAttribute("aria-label", designSentence + differenceSentence + intersectionSentence + extrapolationSentence);
  }

  function resetChart() {
    byId("rk-hp-design-load").value = "8.0";
    byId("rk-hp-design-temp").value = "-20";
    byId("rk-hp-balance-temp").value = "16";
    byId("rk-hp-water-temp").value = "W35";
    byId("rk-hp-cap-p7").value = "9.1";
    byId("rk-hp-cap-p2").value = "8.3";
    byId("rk-hp-cap-m7").value = "7.0";
    byId("rk-hp-cap-m15").value = "5.8";
    byId("rk-hp-min-output").value = "2.5";
    drawChart();
  }

  chartUpdate.addEventListener("click", drawChart);
  chartReset.addEventListener("click", resetChart);

  var resizeTimer = 0;
  window.addEventListener("resize", function () {
    window.clearTimeout(resizeTimer);
    resizeTimer = window.setTimeout(drawChart, 160);
  });

  selectSource("air");
  analyzeReadiness();
  drawChart();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">Pompa ciepła do domu – jak działa, ile zużywa prądu i jak dobrać moc?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
