<?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 Dom pasywny - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/category/dom-pasywny/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/category/dom-pasywny/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Mon, 14 Sep 2026 08:36:11 +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 Dom pasywny - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/category/dom-pasywny/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Bilans cieplny budynku – kalkulator strat, mocy i kosztów ogrzewania.</title>
		<link>https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 09:22:38 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Dom energooszczędny]]></category>
		<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Termomodernizacja]]></category>
		<category><![CDATA[bilans cieplny]]></category>
		<category><![CDATA[dom energooszczędny]]></category>
		<category><![CDATA[dom pasywny]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[mostki termiczne]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[rekuperacja]]></category>
		<category><![CDATA[straty ciepła]]></category>
		<category><![CDATA[zapotrzebowanie na ciepło]]></category>
		<category><![CDATA[zyski ciepła]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3221</guid>

					<description><![CDATA[<p>Bilans cieplny budynku to coś znacznie więcej niż tabelka z norm i obliczeń inżynierskich. To realna mapa strat i zysków energii, która decyduje o tym, czy dom będzie tani w utrzymaniu, komfortowy i odporny na rosnące ceny energii. W artykule pokazujemy, dlaczego bilans cieplny budynku: fundament efektywności energetycznej i komfortu nie jest pustym hasłem, lecz narzędziem, które pozwala świadomie projektować izolację, wentylację, okna i system ogrzewania. Konkretne wzory, liczby i porównania domów standardowych z pasywnymi pokazują czarno na białym, gdzie naprawdę ucieka ciepło – i jak to zmienić.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">Bilans cieplny budynku – kalkulator strat, mocy i kosztów ogrzewania.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-bilans-guide {
    --rk-bh-dark: #102536;
    --rk-bh-navy: #15384d;
    --rk-bh-navy-2: #1c5362;
    --rk-bh-blue: #078fbe;
    --rk-bh-cyan: #25c7d8;
    --rk-bh-cyan-soft: #e9fbfe;
    --rk-bh-orange: #ff6a3d;
    --rk-bh-orange-soft: #fff1eb;
    --rk-bh-green: #16836b;
    --rk-bh-green-soft: #eaf8f3;
    --rk-bh-yellow: #a86a00;
    --rk-bh-yellow-soft: #fff7dd;
    --rk-bh-red: #d94b3d;
    --rk-bh-red-soft: #fff0ee;
    --rk-bh-purple: #695ac9;
    --rk-bh-purple-soft: #f1efff;
    --rk-bh-ink: #1d2d39;
    --rk-bh-text: #465d6c;
    --rk-bh-muted: #6a7f8d;
    --rk-bh-line: #d3e3ea;
    --rk-bh-soft: #f4f9fb;
    --rk-bh-white: #ffffff;
    width: 100%;
    max-width: 1180px;
    margin: 34px auto 72px;
    color: var(--rk-bh-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 18px;
    line-height: 1.74;
  }
  #rk-bilans-guide,
  #rk-bilans-guide * { box-sizing: border-box; }
  #rk-bilans-guide img,
  #rk-bilans-guide svg { display: block; max-width: 100%; }
  #rk-bilans-guide button,
  #rk-bilans-guide input,
  #rk-bilans-guide select,
  #rk-bilans-guide label,
  #rk-bilans-guide summary,
  #rk-bilans-guide a { font: inherit; -webkit-tap-highlight-color: transparent; }
  #rk-bilans-guide button { cursor: pointer; }
  #rk-bilans-guide a {
    color: var(--rk-bh-blue);
    font-weight: 780;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }
  #rk-bilans-guide a:hover,
  #rk-bilans-guide a:focus-visible { color: var(--rk-bh-red); }
  #rk-bilans-guide button:focus-visible,
  #rk-bilans-guide summary:focus-visible,
  #rk-bilans-guide a:focus-visible,
  #rk-bilans-guide input:focus-visible,
  #rk-bilans-guide select:focus-visible {
    outline: 3px solid rgba(7, 143, 190, .28);
    outline-offset: 3px;
  }
  #rk-bilans-guide p,
  #rk-bilans-guide ul,
  #rk-bilans-guide ol { margin-top: 0; margin-bottom: 1.08em; }
  #rk-bilans-guide h2,
  #rk-bilans-guide h3,
  #rk-bilans-guide h4 {
    margin-top: 0;
    color: var(--rk-bh-dark);
    font-weight: 920;
    letter-spacing: -.035em;
    line-height: 1.15;
    overflow-wrap: anywhere;
  }
  #rk-bilans-guide h2 { margin-bottom: 18px; font-size: clamp(1.72rem, 4vw, 2.7rem); }
  #rk-bilans-guide h3 { margin-bottom: 11px; font-size: clamp(1.12rem, 2.35vw, 1.46rem); }
  #rk-bilans-guide h4 { margin-bottom: 8px; font-size: 1.02rem; }
  #rk-bilans-guide strong { font-weight: 860; }
  #rk-bilans-guide [hidden] { display: none !important; }
  #rk-bilans-guide .rk-bh-visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  var attempts = 0;
  var retryTimer = window.setInterval(function () {
    attempts += 1;
    if (init()) {
      window.clearInterval(retryTimer);
    } else if (attempts > 20) {
      window.clearInterval(retryTimer);
    }
  }, 300);
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">Bilans cieplny budynku – kalkulator strat, mocy i kosztów ogrzewania.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ogrzewanie podłogowe a pasywne zyski ciepła.</title>
		<link>https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 30 Dec 2025 11:28:18 +0000</pubDate>
				<category><![CDATA[Automatyka domowa]]></category>
		<category><![CDATA[Automatyka grzewcza]]></category>
		<category><![CDATA[Budownictwo energooszczędne]]></category>
		<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[HVAC]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Komfort cieplny]]></category>
		<category><![CDATA[Komfort w domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Technologie budowlane]]></category>
		<category><![CDATA[Technologie grzewcze]]></category>
		<category><![CDATA[bezwładność cieplna]]></category>
		<category><![CDATA[bilans cieplny]]></category>
		<category><![CDATA[energia słoneczna]]></category>
		<category><![CDATA[komfort termiczny]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pasywne zyski ciepła]]></category>
		<category><![CDATA[podłogówka]]></category>
		<category><![CDATA[pompy ciepła]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[sterowanie strefowe]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3004</guid>

					<description><![CDATA[<p>Nowoczesne budownictwo coraz częściej wykorzystuje darmową energię słoneczną, ale jej niewłaściwe połączenie z instalacją grzewczą potrafi przynieść więcej szkód niż korzyści. Ogrzewanie podłogowe a pasywne zyski ciepła to temat kluczowy dla komfortu i efektywności energetycznej budynku. W artykule pokazujemy, jak promieniowanie słoneczne wpływa na bezwładną wylewkę, dlaczego dochodzi do przegrzewania pomieszczeń oraz jak dzięki świadomemu projektowi i inteligentnemu sterowaniu zamienić słońce w realne wsparcie systemu grzewczego, a nie jego wroga.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">Ogrzewanie podłogowe a pasywne zyski ciepła.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-solar-guide {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #28c9da;
    --rk-cyan-soft: #e9fbff;
    --rk-orange: #ff7438;
    --rk-red: #e34837;
    --rk-yellow: #f3bd3f;
    --rk-yellow-soft: #fff8df;
    --rk-green: #16876d;
    --rk-green-soft: #eaf8f3;
    --rk-ink: #1f2937;
    --rk-text: #475968;
    --rk-muted: #6b7d89;
    --rk-line: #d9e7ed;
    --rk-soft: #f4f9fb;
    --rk-warm: #fff3eb;
    --rk-white: #ffffff;
    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.76;
  }

  #rk-solar-guide,
  #rk-solar-guide * {
    box-sizing: border-box;
  }

  #rk-solar-guide img,
  #rk-solar-guide svg {
    max-width: 100%;
  }

  #rk-solar-guide button,
  #rk-solar-guide input,
  #rk-solar-guide select,
  #rk-solar-guide label,
  #rk-solar-guide summary,
  #rk-solar-guide a {
    font: inherit;
    -webkit-tap-highlight-color: transparent;
  }

  #rk-solar-guide a {
    color: var(--rk-blue);
    font-weight: 780;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }

  #rk-solar-guide a:hover,
  #rk-solar-guide a:focus-visible {
    color: var(--rk-red);
  }

  #rk-solar-guide h2,
  #rk-solar-guide h3,
  #rk-solar-guide h4 {
    margin-top: 0;
    color: var(--rk-dark);
    font-weight: 920;
    letter-spacing: -0.035em;
    line-height: 1.16;
  }

  #rk-solar-guide h2 {
    margin-bottom: 18px;
    font-size: clamp(1.65rem, 3.7vw, 2.62rem);
  }

  #rk-solar-guide h3 {
    margin-bottom: 12px;
    font-size: clamp(1.15rem, 2.4vw, 1.5rem);
  }

  #rk-solar-guide h4 {
    margin-bottom: 8px;
    font-size: 1.03rem;
    letter-spacing: -0.018em;
  }

  #rk-solar-guide h2::before,
  #rk-solar-guide h2::after,
  #rk-solar-guide h3::before,
  #rk-solar-guide h3::after,
  #rk-solar-guide h4::before,
  #rk-solar-guide h4::after {
    content: none !important;
    display: none !important;
  }

  #rk-solar-guide p {
    margin: 0 0 1.18em;
    color: var(--rk-text);
  }

  #rk-solar-guide strong {
    color: var(--rk-dark);
  }

  #rk-solar-guide section[id] {
    scroll-margin-top: 28px;
  }

  #rk-solar-guide .rk-solar-shell {
    overflow: hidden;
    border: 1px solid var(--rk-line);
    border-radius: 30px;
    background: var(--rk-white);
    box-shadow: 0 25px 70px rgba(16, 37, 54, 0.12);
  }

  #rk-solar-guide .rk-solar-progress-track {
    position: sticky;
    z-index: 30;
    top: 0;
    width: 100%;
    height: 5px;
    overflow: hidden;
    background: rgba(255, 255, 255, 0.9);
  }

  #rk-solar-guide .rk-solar-progress {
    width: 0;
    height: 100%;
    background: linear-gradient(90deg, var(--rk-cyan), var(--rk-blue), var(--rk-yellow), var(--rk-orange));
  }

  #rk-solar-guide .rk-solar-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(38px, 6.5vw, 78px);
    color: var(--rk-white);
    background:
      radial-gradient(circle at 87% 15%, rgba(255, 190, 63, 0.5), transparent 21%),
      radial-gradient(circle at 78% 78%, rgba(40, 201, 218, 0.26), transparent 31%),
      linear-gradient(135deg, #0d2230 0%, #143b50 58%, #09627b 100%);
  }

  #rk-solar-guide .rk-solar-hero::before {
    content: "☀";
    position: absolute;
    z-index: -1;
    right: -50px;
    bottom: -135px;
    color: rgba(255, 255, 255, 0.05);
    font-size: clamp(17rem, 38vw, 32rem);
    font-weight: 950;
    line-height: 1;
    pointer-events: none;
  }

  #rk-solar-guide .rk-solar-hero-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.16fr) minmax(285px, 0.84fr);
    gap: clamp(28px, 5vw, 62px);
    align-items: center;
  }

  #rk-solar-guide .rk-solar-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 23px;
    padding: 8px 15px;
    border: 1px solid rgba(255, 255, 255, 0.25);
    border-radius: 999px;
    color: #a3f4ff;
    background: rgba(255, 255, 255, 0.06);
    font-size: 0.75rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    line-height: 1.3;
    text-transform: uppercase;
  }

  #rk-solar-guide .rk-solar-eyebrow b {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--rk-yellow);
    box-shadow: 0 0 0 7px rgba(243, 189, 63, 0.17);
  }

  #rk-solar-guide .rk-solar-hero-title {
    max-width: 820px;
    margin: 0 0 24px;
    color: var(--rk-white);
    font-size: clamp(2.03rem, 5vw, 4rem);
    font-weight: 950;
    letter-spacing: -0.055em;
    line-height: 1.02;
  }

  #rk-solar-guide .rk-solar-hero-lead {
    max-width: 810px;
    margin-bottom: 26px;
    color: #dcecf4;
    font-size: clamp(1.02rem, 2.1vw, 1.24rem);
    line-height: 1.62;
  }

  #rk-solar-guide .rk-solar-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 11px 22px;
    color: #c9dce5;
    font-size: 0.81rem;
    font-weight: 780;
  }

  #rk-solar-guide .rk-solar-meta span {
    display: inline-flex;
    align-items: center;
    gap: 8px;
  }

  #rk-solar-guide .rk-solar-meta i {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--rk-orange);
  }

  #rk-solar-guide .rk-solar-hero-panel {
    padding: 25px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 24px;
    background: rgba(255, 255, 255, 0.08);
    box-shadow: 0 18px 45px rgba(0, 0, 0, 0.12);
    backdrop-filter: blur(7px);
  }

  #rk-solar-guide .rk-solar-hero-panel small {
    display: block;
    margin-bottom: 14px;
    color: #8df1fc;
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-solar-guide .rk-solar-hero-balance {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    gap: 9px;
    align-items: center;
  }

  #rk-solar-guide .rk-solar-hero-value {
    min-width: 0;
    padding: 16px 9px;
    border-radius: 16px;
    background: rgba(255, 255, 255, 0.09);
    text-align: center;
  }

  #rk-solar-guide .rk-solar-hero-value span {
    display: block;
    color: #c7dae4;
    font-size: 0.63rem;
    font-weight: 850;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-solar-guide .rk-solar-hero-value strong {
    display: block;
    margin-top: 5px;
    color: var(--rk-white);
    font-size: 1.35rem;
    font-weight: 950;
  }

  #rk-solar-guide .rk-solar-hero-symbol {
    color: var(--rk-yellow);
    font-size: 1.35rem;
    font-weight: 950;
  }

  #rk-solar-guide .rk-solar-hero-result {
    margin-top: 14px;
    padding: 14px;
    border-radius: 15px;
    color: var(--rk-white);
    background: rgba(40, 201, 218, 0.16);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 1rem;
    font-weight: 900;
    text-align: center;
  }

  #rk-solar-guide .rk-solar-nav {
    display: flex;
    gap: 9px;
    overflow-x: auto;
    padding: 15px clamp(20px, 5vw, 56px);
    border-bottom: 1px solid var(--rk-line);
    background: var(--rk-white);
    scrollbar-width: thin;
  }

  #rk-solar-guide .rk-solar-nav a {
    flex: 0 0 auto;
    padding: 8px 13px;
    border: 1px solid var(--rk-line);
    border-radius: 999px;
    color: var(--rk-dark);
    background: var(--rk-soft);
    font-size: 0.73rem;
    font-weight: 880;
    text-decoration: none;
    white-space: nowrap;
  }

  #rk-solar-guide .rk-solar-nav a:hover,
  #rk-solar-guide .rk-solar-nav a:focus-visible {
    color: var(--rk-white);
    border-color: var(--rk-blue);
    background: var(--rk-blue);
  }

  #rk-solar-guide .rk-solar-body {
    padding: clamp(28px, 6vw, 70px);
  }

  #rk-solar-guide .rk-solar-section {
    margin-bottom: clamp(56px, 8vw, 94px);
  }

  #rk-solar-guide .rk-solar-section:last-child {
    margin-bottom: 0;
  }

  #rk-solar-guide .rk-solar-kicker {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-orange);
    font-size: 0.72rem;
    font-weight: 930;
    letter-spacing: 0.095em;
    line-height: 1.4;
    text-transform: uppercase;
  }

  #rk-solar-guide .rk-solar-lead {
    max-width: 940px;
    font-size: 1.08rem;
    line-height: 1.82;
  }

  #rk-solar-guide .rk-solar-dropcap::first-letter {
    float: left;
    margin: 0.08em 0.12em 0 0;
    color: var(--rk-orange);
    font-size: 3.65rem;
    font-weight: 950;
    line-height: 0.82;
  }

  #rk-solar-guide .rk-solar-grid-2,
  #rk-solar-guide .rk-solar-grid-3,
  #rk-solar-guide .rk-solar-grid-4 {
    display: grid;
    gap: 17px;
  }

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

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

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

  #rk-solar-guide .rk-solar-card {
    min-width: 0;
    padding: 24px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-card-number {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 48px;
    height: 48px;
    margin-bottom: 16px;
    padding: 0 12px;
    border-radius: 14px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: 0.78rem;
    font-weight: 930;
  }

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

  #rk-solar-guide .rk-solar-answer {
    display: grid;
    grid-template-columns: minmax(0, 1.12fr) minmax(270px, 0.88fr);
    gap: 22px;
    align-items: stretch;
    margin-top: 27px;
  }

  #rk-solar-guide .rk-solar-answer-main {
    padding: clamp(25px, 4vw, 40px);
    border: 1px solid #bddce7;
    border-radius: 23px;
    background: var(--rk-cyan-soft);
  }

  #rk-solar-guide .rk-solar-answer-side {
    padding: clamp(25px, 4vw, 40px);
    border-radius: 23px;
    color: var(--rk-white);
    background: var(--rk-dark);
  }

  #rk-solar-guide .rk-solar-answer-side h3 {
    color: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-answer-side p {
    color: #d6e7ef;
  }

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

  #rk-solar-guide .rk-solar-note,
  #rk-solar-guide .rk-solar-warning,
  #rk-solar-guide .rk-solar-success,
  #rk-solar-guide .rk-solar-danger {
    margin-top: 22px;
    padding: 20px 22px;
    border-left: 6px solid var(--rk-blue);
    border-radius: 9px 17px 17px 9px;
    background: var(--rk-cyan-soft);
  }

  #rk-solar-guide .rk-solar-warning {
    border-left-color: var(--rk-orange);
    background: var(--rk-warm);
  }

  #rk-solar-guide .rk-solar-success {
    border-left-color: var(--rk-green);
    background: var(--rk-green-soft);
  }

  #rk-solar-guide .rk-solar-danger {
    border-left-color: var(--rk-red);
    background: #fff1ef;
  }

  #rk-solar-guide .rk-solar-note p:last-child,
  #rk-solar-guide .rk-solar-warning p:last-child,
  #rk-solar-guide .rk-solar-success p:last-child,
  #rk-solar-guide .rk-solar-danger p:last-child {
    margin-bottom: 0;
  }

  #rk-solar-guide .rk-solar-corrections {
    overflow: hidden;
    border: 1px solid #efc9b9;
    border-radius: 24px;
    background: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-corrections-head {
    padding: 27px clamp(25px, 5vw, 45px);
    background: var(--rk-warm);
  }

  #rk-solar-guide .rk-solar-corrections-head h2 {
    margin-bottom: 8px;
  }

  #rk-solar-guide .rk-solar-corrections-head p {
    margin-bottom: 0;
  }

  #rk-solar-guide .rk-solar-corrections-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1px;
    background: var(--rk-line);
  }

  #rk-solar-guide .rk-solar-correction {
    padding: 24px;
    background: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-correction b {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    margin-bottom: 13px;
    border-radius: 12px;
    color: var(--rk-white);
    background: var(--rk-orange);
    font-size: 0.75rem;
  }

  #rk-solar-guide .rk-solar-correction p:last-child {
    margin-bottom: 0;
  }

  #rk-solar-guide .rk-solar-flow {
    overflow: hidden;
    margin-top: 25px;
    border: 1px solid var(--rk-line);
    border-radius: 23px;
    background: linear-gradient(180deg, #f8fcfd, #eef8fb);
  }

  #rk-solar-guide .rk-solar-flow-head {
    padding: 23px 25px 0;
  }

  #rk-solar-guide .rk-solar-flow-head p {
    margin-bottom: 0;
  }

  #rk-solar-guide .rk-solar-flow svg {
    display: block;
    width: 100%;
    height: auto;
  }

  #rk-solar-guide .rk-solar-lab {
    overflow: hidden;
    border: 1px solid #b8dce7;
    border-radius: 28px;
    background: var(--rk-white);
    box-shadow: 0 24px 62px rgba(16, 37, 54, 0.12);
  }

  #rk-solar-guide .rk-solar-lab-head {
    padding: clamp(30px, 5vw, 54px);
    color: var(--rk-white);
    background:
      radial-gradient(circle at 90% 8%, rgba(243, 189, 63, 0.4), transparent 28%),
      linear-gradient(125deg, var(--rk-dark), #174b63);
  }

  #rk-solar-guide .rk-solar-lab-head h2 {
    max-width: 900px;
    margin-bottom: 13px;
    color: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-lab-head p {
    max-width: 920px;
    margin-bottom: 0;
    color: #d7e9f1;
  }

  #rk-solar-guide .rk-solar-lab-layout {
    display: grid;
    grid-template-columns: minmax(330px, 0.86fr) minmax(0, 1.14fr);
  }

  #rk-solar-guide .rk-solar-controls {
    padding: clamp(25px, 4vw, 40px);
    border-right: 1px solid var(--rk-line);
    background: var(--rk-soft);
  }

  #rk-solar-guide .rk-solar-control {
    margin-bottom: 21px;
  }

  #rk-solar-guide .rk-solar-control:last-child {
    margin-bottom: 0;
  }

  #rk-solar-guide .rk-solar-control-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 8px;
  }

  #rk-solar-guide .rk-solar-control label {
    color: var(--rk-dark);
    font-size: 0.8rem;
    font-weight: 880;
    line-height: 1.45;
  }

  #rk-solar-guide .rk-solar-output {
    flex: 0 0 auto;
    min-width: 70px;
    padding: 5px 9px;
    border-radius: 10px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: 0.72rem;
    font-weight: 900;
    line-height: 1.3;
    text-align: center;
  }

  #rk-solar-guide .rk-solar-control input[type="range"] {
    width: 100%;
    height: 8px;
    margin: 0;
    accent-color: var(--rk-orange);
    cursor: pointer;
  }

  #rk-solar-guide .rk-solar-control small {
    display: block;
    margin-top: 6px;
    color: var(--rk-muted);
    font-size: 0.68rem;
    line-height: 1.5;
  }

  #rk-solar-guide .rk-solar-results {
    min-width: 0;
    padding: clamp(25px, 4vw, 40px);
  }

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

  #rk-solar-guide .rk-solar-result-card {
    min-width: 0;
    padding: 17px;
    border: 1px solid var(--rk-line);
    border-radius: 17px;
    background: var(--rk-soft);
  }

  #rk-solar-guide .rk-solar-result-card.is-main {
    color: var(--rk-white);
    border-color: var(--rk-blue);
    background: var(--rk-blue);
  }

  #rk-solar-guide .rk-solar-result-card small {
    display: block;
    min-height: 2.8em;
    margin-bottom: 7px;
    color: var(--rk-muted);
    font-size: 0.65rem;
    font-weight: 820;
    line-height: 1.4;
  }

  #rk-solar-guide .rk-solar-result-card.is-main small {
    color: #d6f7fd;
  }

  #rk-solar-guide .rk-solar-result-number {
    overflow-wrap: anywhere;
    color: var(--rk-dark);
    font-size: clamp(1.05rem, 2.1vw, 1.45rem);
    font-weight: 950;
    letter-spacing: -0.035em;
    line-height: 1.15;
  }

  #rk-solar-guide .rk-solar-result-card.is-main .rk-solar-result-number {
    color: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-status {
    margin-top: 16px;
    padding: 19px 20px;
    border-left: 6px solid var(--rk-blue);
    border-radius: 10px 17px 17px 10px;
    background: var(--rk-cyan-soft);
  }

  #rk-solar-guide .rk-solar-status.is-warning {
    border-left-color: var(--rk-orange);
    background: var(--rk-warm);
  }

  #rk-solar-guide .rk-solar-status.is-danger {
    border-left-color: var(--rk-red);
    background: #fff1ef;
  }

  #rk-solar-guide .rk-solar-status.is-success {
    border-left-color: var(--rk-green);
    background: var(--rk-green-soft);
  }

  #rk-solar-guide .rk-solar-status strong,
  #rk-solar-guide .rk-solar-status span {
    display: block;
  }

  #rk-solar-guide .rk-solar-status span {
    margin-top: 4px;
    color: var(--rk-text);
    font-size: 0.78rem;
    line-height: 1.55;
  }

  #rk-solar-guide .rk-solar-chart {
    margin-top: 18px;
    padding: 21px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-soft);
  }

  #rk-solar-guide .rk-solar-chart h3 {
    margin-bottom: 5px;
    font-size: 1.03rem;
  }

  #rk-solar-guide .rk-solar-chart p {
    margin-bottom: 12px;
    font-size: 0.72rem;
  }

  #rk-solar-guide .rk-solar-chart svg {
    display: block;
    width: 100%;
    height: auto;
    overflow: visible;
  }

  #rk-solar-guide .rk-solar-chart-grid {
    stroke: #d6e4ea;
    stroke-width: 1;
  }

  #rk-solar-guide .rk-solar-chart-axis {
    stroke: #8196a3;
    stroke-width: 1.5;
  }

  #rk-solar-guide .rk-solar-chart-label {
    fill: #5b6f7c;
    font-size: 13px;
    font-weight: 700;
  }

  #rk-solar-guide .rk-solar-bar-loss {
    fill: var(--rk-red);
  }

  #rk-solar-guide .rk-solar-bar-sun {
    fill: var(--rk-yellow);
  }

  #rk-solar-guide .rk-solar-bar-internal {
    fill: var(--rk-green);
  }

  #rk-solar-guide .rk-solar-bar-floor {
    fill: var(--rk-blue);
  }

  #rk-solar-guide .rk-solar-chart-value {
    fill: var(--rk-dark);
    font-size: 14px;
    font-weight: 900;
  }

  #rk-solar-guide .rk-solar-inline-cta {
    padding: clamp(27px, 5vw, 45px);
    color: var(--rk-white);
    background: linear-gradient(125deg, var(--rk-dark), #17475e);
  }

  #rk-solar-guide .rk-solar-inline-cta h3 {
    max-width: 900px;
    margin-bottom: 12px;
    color: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-inline-cta p {
    max-width: 930px;
    color: #d6e8f0;
  }

  #rk-solar-guide .rk-solar-cta-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 54px;
    margin-top: 6px;
    padding: 14px 23px;
    border-radius: 15px;
    color: var(--rk-white);
    background: linear-gradient(90deg, var(--rk-orange), #f04434);
    box-shadow: 0 12px 28px rgba(227, 72, 55, 0.24);
    font-size: 0.83rem;
    font-weight: 920;
    line-height: 1.35;
    text-align: center;
    text-decoration: none;
    transition: transform 0.2s ease, background 0.2s ease;
  }

  #rk-solar-guide .rk-solar-cta-button:hover,
  #rk-solar-guide .rk-solar-cta-button:focus-visible {
    color: var(--rk-white);
    background: linear-gradient(90deg, var(--rk-red), var(--rk-orange));
    transform: translateY(-1px);
  }

  #rk-solar-guide .rk-solar-disclosure {
    display: block;
    margin-top: 11px;
    color: #bad0dc;
    font-size: 0.68rem;
    line-height: 1.5;
  }

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

  #rk-solar-guide .rk-solar-formula {
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-radius: 19px;
    background: var(--rk-soft);
  }

  #rk-solar-guide .rk-solar-formula span {
    display: block;
    margin-bottom: 8px;
    color: var(--rk-orange);
    font-size: 0.69rem;
    font-weight: 930;
    letter-spacing: 0.07em;
    text-transform: uppercase;
  }

  #rk-solar-guide .rk-solar-formula code {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-dark);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.88rem;
    font-weight: 850;
    line-height: 1.55;
    white-space: normal;
  }

  #rk-solar-guide .rk-solar-formula p {
    margin-bottom: 0;
    font-size: 0.78rem;
    line-height: 1.62;
  }

  #rk-solar-guide .rk-solar-selfreg {
    display: grid;
    grid-template-columns: minmax(0, 0.88fr) minmax(0, 1.12fr);
    gap: 22px;
    align-items: stretch;
    margin-top: 25px;
  }

  #rk-solar-guide .rk-solar-selfreg-visual {
    position: relative;
    overflow: hidden;
    min-height: 320px;
    padding: 30px;
    border-radius: 23px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 75% 20%, rgba(243, 189, 63, 0.35), transparent 24%),
      linear-gradient(145deg, var(--rk-dark), #184c64);
  }

  #rk-solar-guide .rk-solar-selfreg-visual h3 {
    color: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-selfreg-visual p {
    color: #d7e9f1;
  }

  #rk-solar-guide .rk-solar-selfreg-scale {
    display: grid;
    gap: 12px;
    margin-top: 25px;
  }

  #rk-solar-guide .rk-solar-selfreg-row {
    display: grid;
    grid-template-columns: 105px minmax(0, 1fr) 64px;
    gap: 10px;
    align-items: center;
    color: #d8eaf2;
    font-size: 0.72rem;
    font-weight: 800;
  }

  #rk-solar-guide .rk-solar-selfreg-track {
    height: 16px;
    overflow: hidden;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.1);
  }

  #rk-solar-guide .rk-solar-selfreg-fill {
    height: 100%;
    border-radius: inherit;
    background: linear-gradient(90deg, var(--rk-cyan), var(--rk-yellow));
  }

  #rk-solar-guide .rk-solar-selfreg-copy {
    padding: 29px;
    border: 1px solid var(--rk-line);
    border-radius: 23px;
    background: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-table-wrap {
    overflow: hidden;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
  }

  #rk-solar-guide table {
    width: 100%;
    margin: 0;
    border-collapse: collapse;
    table-layout: fixed;
  }

  #rk-solar-guide th,
  #rk-solar-guide td {
    padding: 15px 17px;
    border: 0;
    border-bottom: 1px solid var(--rk-line);
    color: var(--rk-text);
    text-align: left;
    vertical-align: top;
  }

  #rk-solar-guide th {
    color: var(--rk-white);
    background: var(--rk-dark);
    font-size: 0.73rem;
    font-weight: 900;
    line-height: 1.4;
  }

  #rk-solar-guide td {
    font-size: 0.82rem;
    line-height: 1.55;
  }

  #rk-solar-guide tbody tr:nth-child(even) td {
    background: var(--rk-soft);
  }

  #rk-solar-guide tbody tr:last-child td {
    border-bottom: 0;
  }

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

  #rk-solar-guide .rk-solar-strategy {
    overflow: hidden;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-strategy-head {
    min-height: 92px;
    padding: 20px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-solar-guide .rk-solar-strategy:nth-child(2) .rk-solar-strategy-head {
    background: var(--rk-orange);
  }

  #rk-solar-guide .rk-solar-strategy:nth-child(3) .rk-solar-strategy-head {
    background: var(--rk-green);
  }

  #rk-solar-guide .rk-solar-strategy-body {
    padding: 21px;
  }

  #rk-solar-guide .rk-solar-strategy-body p:last-child {
    margin-bottom: 0;
  }

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

  #rk-solar-guide .rk-solar-step {
    position: relative;
    min-width: 0;
    padding: 24px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-soft);
    counter-increment: rk-solar-step;
  }

  #rk-solar-guide .rk-solar-step::before {
    content: counter(rk-solar-step, decimal-leading-zero);
    display: inline-flex;
    width: 46px;
    height: 46px;
    align-items: center;
    justify-content: center;
    margin-bottom: 15px;
    border-radius: 14px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: 0.75rem;
    font-weight: 930;
  }

  #rk-solar-guide .rk-solar-step p:last-child {
    margin-bottom: 0;
  }

  #rk-solar-guide .rk-solar-checklist {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 13px;
    margin: 22px 0 0;
    padding: 0;
    list-style: none;
  }

  #rk-solar-guide .rk-solar-checklist li {
    position: relative;
    margin: 0;
    padding: 17px 18px 17px 52px;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    color: var(--rk-text);
    background: var(--rk-soft);
    font-size: 0.82rem;
    line-height: 1.6;
  }

  #rk-solar-guide .rk-solar-checklist li::before {
    content: "✓";
    position: absolute;
    top: 17px;
    left: 17px;
    display: inline-flex;
    width: 24px;
    height: 24px;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-green);
    font-size: 0.71rem;
    font-weight: 950;
  }

  #rk-solar-guide .rk-solar-faq {
    display: grid;
    gap: 12px;
  }

  #rk-solar-guide .rk-solar-faq details {
    overflow: hidden;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    background: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-faq summary {
    position: relative;
    padding: 18px 52px 18px 20px;
    color: var(--rk-dark);
    background: var(--rk-soft);
    font-weight: 880;
    line-height: 1.45;
    cursor: pointer;
    list-style: none;
  }

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

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

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

  #rk-solar-guide .rk-solar-faq-answer {
    padding: 18px 20px;
  }

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

  #rk-solar-guide .rk-solar-sources {
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: var(--rk-soft);
    font-size: 0.75rem;
    line-height: 1.65;
  }

  #rk-solar-guide .rk-solar-sources strong {
    display: block;
    margin-bottom: 7px;
  }

  #rk-solar-guide .rk-solar-author {
    overflow: hidden;
    margin-bottom: clamp(55px, 8vw, 90px);
    border: 1px solid #bdd9e5;
    border-radius: 27px;
    background: var(--rk-white);
    box-shadow: 0 22px 50px rgba(16, 37, 54, 0.09);
  }

  #rk-solar-guide .rk-solar-author > input {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    opacity: 0;
    pointer-events: none;
  }

  #rk-solar-guide .rk-solar-author-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    padding: 28px clamp(28px, 5vw, 50px);
    border-bottom: 6px solid var(--rk-cyan);
    color: var(--rk-white);
    background: var(--rk-dark);
  }

  #rk-solar-guide .rk-solar-author-head h2 {
    margin-bottom: 7px;
    color: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-author-head p {
    margin-bottom: 0;
    color: #d5e7ef;
  }

  #rk-solar-guide .rk-solar-author-mark {
    flex: 0 0 auto;
    padding: 10px 15px;
    border: 1px solid rgba(40, 201, 218, 0.38);
    border-radius: 15px;
    color: #6aefff;
    font-size: 0.74rem;
    font-weight: 950;
    letter-spacing: 0.08em;
    white-space: nowrap;
  }

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

  #rk-solar-guide .rk-solar-author-side {
    padding: 38px 28px;
    border-right: 1px solid var(--rk-line);
    background: #f2f8fa;
    text-align: center;
  }

  #rk-solar-guide .rk-solar-author-photo {
    width: 184px;
    height: 184px;
    margin: 0 auto 21px;
    overflow: hidden;
    border: 8px solid var(--rk-white);
    border-radius: 50%;
    box-shadow: 0 14px 34px rgba(16, 37, 54, 0.15);
  }

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

  #rk-solar-guide .rk-solar-author-name {
    color: var(--rk-dark);
    font-size: 1.35rem;
    font-weight: 950;
    letter-spacing: -0.035em;
  }

  #rk-solar-guide .rk-solar-author-role {
    margin-top: 6px;
    color: var(--rk-blue);
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.06em;
    line-height: 1.55;
    text-transform: uppercase;
  }

  #rk-solar-guide .rk-solar-author-main {
    min-width: 0;
    padding: 34px 38px 38px;
  }

  #rk-solar-guide .rk-solar-author-quote {
    margin: 0 0 26px;
    padding: 23px 25px 23px 72px;
    border: 0;
    border-radius: 19px;
    background: var(--rk-cyan-soft);
  }

  #rk-solar-guide .rk-solar-author-quote::before {
    content: "“";
    position: absolute;
    margin: -15px 0 0 -49px;
    color: var(--rk-cyan);
    font-size: 3.7rem;
    font-weight: 950;
    line-height: 1;
  }

  #rk-solar-guide .rk-solar-author-quote p {
    margin-bottom: 0;
    color: var(--rk-dark);
    font-style: italic;
    font-weight: 820;
  }

  #rk-solar-guide .rk-solar-author-tabs {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    overflow: hidden;
    border: 1px solid var(--rk-line);
    border-radius: 15px 15px 0 0;
  }

  #rk-solar-guide .rk-solar-author-tab {
    padding: 14px 10px;
    color: var(--rk-muted);
    background: var(--rk-soft);
    font-size: 0.72rem;
    font-weight: 900;
    line-height: 1.35;
    text-align: center;
    text-transform: uppercase;
    cursor: pointer;
  }

  #rk-solar-guide .rk-solar-author-tab + .rk-solar-author-tab {
    border-left: 1px solid var(--rk-line);
  }

  #rk-solar-guide .rk-solar-author-panel {
    display: none;
    min-height: 168px;
    padding: 25px;
    border: 1px solid var(--rk-line);
    border-top: 0;
    border-radius: 0 0 15px 15px;
  }

  #rk-solar-guide .rk-solar-author-panel p:last-child {
    margin-bottom: 0;
  }

  #rk-solar-author-about:checked ~ .rk-solar-author-layout .rk-solar-author-panel-about,
  #rk-solar-author-exp:checked ~ .rk-solar-author-layout .rk-solar-author-panel-exp,
  #rk-solar-author-sites:checked ~ .rk-solar-author-layout .rk-solar-author-panel-sites {
    display: block;
  }

  #rk-solar-author-about:checked ~ .rk-solar-author-layout label[for="rk-solar-author-about"],
  #rk-solar-author-exp:checked ~ .rk-solar-author-layout label[for="rk-solar-author-exp"],
  #rk-solar-author-sites:checked ~ .rk-solar-author-layout label[for="rk-solar-author-sites"] {
    color: var(--rk-blue);
    background: var(--rk-white);
    box-shadow: inset 0 -5px 0 var(--rk-blue);
  }

  #rk-solar-guide .rk-solar-site-links {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 14px;
  }

  #rk-solar-guide .rk-solar-site-links a {
    padding: 8px 13px;
    border: 1px solid #c6dbe4;
    border-radius: 999px;
    color: var(--rk-dark);
    background: var(--rk-white);
    font-size: 0.74rem;
    font-weight: 900;
    text-decoration: none;
  }

  #rk-solar-guide .rk-solar-site-links a:hover,
  #rk-solar-guide .rk-solar-site-links a:focus-visible {
    color: var(--rk-white);
    border-color: var(--rk-blue);
    background: var(--rk-blue);
  }

  #rk-solar-guide .rk-solar-final-cta {
    overflow: hidden;
    border-radius: 27px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 91% 16%, rgba(243, 189, 63, 0.38), transparent 27%),
      linear-gradient(125deg, var(--rk-dark), #15465e);
  }

  #rk-solar-guide .rk-solar-final-cta-content {
    padding: clamp(30px, 5vw, 53px);
  }

  #rk-solar-guide .rk-solar-final-cta h2 {
    max-width: 920px;
    margin-bottom: 13px;
    color: var(--rk-white);
  }

  #rk-solar-guide .rk-solar-final-cta p {
    max-width: 940px;
    color: #d8e9f1;
  }

  @media (max-width: 980px) {
    #rk-solar-guide .rk-solar-hero-grid,
    #rk-solar-guide .rk-solar-answer,
    #rk-solar-guide .rk-solar-lab-layout,
    #rk-solar-guide .rk-solar-selfreg,
    #rk-solar-guide .rk-solar-author-layout {
      grid-template-columns: 1fr;
    }

    #rk-solar-guide .rk-solar-controls,
    #rk-solar-guide .rk-solar-author-side {
      border-right: 0;
      border-bottom: 1px solid var(--rk-line);
    }

    #rk-solar-guide .rk-solar-grid-4,
    #rk-solar-guide .rk-solar-grid-3,
    #rk-solar-guide .rk-solar-strategy-grid,
    #rk-solar-guide .rk-solar-steps {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  @media (max-width: 720px) {
    #rk-solar-guide {
      margin-top: 20px;
      font-size: 16px;
    }

    #rk-solar-guide .rk-solar-shell {
      border-radius: 20px;
    }

    #rk-solar-guide .rk-solar-hero,
    #rk-solar-guide .rk-solar-body {
      padding-right: 21px;
      padding-left: 21px;
    }

    #rk-solar-guide .rk-solar-corrections-grid,
    #rk-solar-guide .rk-solar-grid-2,
    #rk-solar-guide .rk-solar-grid-3,
    #rk-solar-guide .rk-solar-grid-4,
    #rk-solar-guide .rk-solar-result-grid,
    #rk-solar-guide .rk-solar-formulas,
    #rk-solar-guide .rk-solar-strategy-grid,
    #rk-solar-guide .rk-solar-steps,
    #rk-solar-guide .rk-solar-checklist {
      grid-template-columns: 1fr;
    }

    #rk-solar-guide .rk-solar-author-head {
      align-items: flex-start;
      flex-direction: column;
    }

    #rk-solar-guide .rk-solar-author-main {
      padding: 25px 18px 28px;
    }

    #rk-solar-guide .rk-solar-author-quote {
      padding: 22px 20px 22px 57px;
    }

    #rk-solar-guide .rk-solar-author-tabs {
      grid-template-columns: 1fr;
    }

    #rk-solar-guide .rk-solar-author-tab + .rk-solar-author-tab {
      border-top: 1px solid var(--rk-line);
      border-left: 0;
    }

    #rk-solar-guide .rk-solar-cta-button {
      display: flex;
      width: 100%;
    }

    #rk-solar-guide .rk-solar-nav {
      display: flex;
      width: auto;
      margin: 18px 20px 0;
      padding: 20px;
      flex-wrap: wrap;
      gap: 10px;
      overflow: visible;
      border: 1px solid var(--rk-line);
      border-radius: 20px;
      background: var(--rk-soft);
      scrollbar-width: auto;
    }

    #rk-solar-guide .rk-solar-nav::before {
      content: "NA SKRÓTY";
      flex: 0 0 100%;
      margin-bottom: 4px;
      color: var(--rk-dark);
      font-size: 0.75rem;
      font-weight: 900;
      letter-spacing: 0.08em;
      line-height: 1.3;
    }

    #rk-solar-guide .rk-solar-nav a {
      flex: 0 1 auto;
      white-space: normal;
    }

    #rk-solar-guide table,
    #rk-solar-guide tbody,
    #rk-solar-guide tr,
    #rk-solar-guide th,
    #rk-solar-guide td {
      display: block;
      width: 100%;
    }

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

    #rk-solar-guide tbody tr {
      margin-bottom: 14px;
      overflow: hidden;
      border: 1px solid var(--rk-line);
      border-radius: 15px;
      background: var(--rk-white);
    }

    #rk-solar-guide td,
    #rk-solar-guide tbody tr:nth-child(even) td {
      display: grid;
      grid-template-columns: minmax(118px, 0.78fr) minmax(0, 1.22fr);
      gap: 12px;
      padding: 12px 14px;
      background: var(--rk-white);
    }

    #rk-solar-guide td::before {
      content: attr(data-label);
      color: var(--rk-dark);
      font-size: 0.71rem;
      font-weight: 900;
      line-height: 1.45;
    }
  }

  @media (max-width: 430px) {
    #rk-solar-guide .rk-solar-hero-balance {
      grid-template-columns: 1fr;
    }

    #rk-solar-guide .rk-solar-hero-symbol {
      text-align: center;
    }

    #rk-solar-guide .rk-solar-selfreg-row {
      grid-template-columns: 88px minmax(0, 1fr) 50px;
    }

    #rk-solar-guide td,
    #rk-solar-guide tbody tr:nth-child(even) td {
      grid-template-columns: 1fr;
      gap: 4px;
    }
  }

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

<article id="rk-solar-guide" data-rk-solar-version="2026-08-26" aria-label="Ogrzewanie podłogowe a pasywne zyski ciepła">
  <div class="rk-solar-shell">
    <div class="rk-solar-progress-track" aria-hidden="true"><div class="rk-solar-progress"></div></div>

    <header class="rk-solar-hero">
      <div class="rk-solar-hero-grid">
        <div>
          <span class="rk-solar-eyebrow"><b aria-hidden="true"></b> Fizyka budynku • analiza techniczna 2026</span>
          <div class="rk-solar-hero-title" role="heading" aria-level="2">Ogrzewanie podłogowe a pasywne zyski ciepła</div>
          <p class="rk-solar-hero-lead">Słońce wpadające przez duże przeszklenia może w ciągu kilkudziesięciu minut zmienić bilans salonu. Sprawdź, jak podłogówka reaguje na darmową energię, kiedy działa samoregulacja i co naprawdę ogranicza przegrzewanie.</p>
          <div class="rk-solar-meta">
            <span><i aria-hidden="true"></i> Autor: Robert Kucharski</span>
            <span><i aria-hidden="true"></i> Aktualizacja: 26 sierpnia 2026 r.</span>
            <span><i aria-hidden="true"></i> Czas czytania: ok. 18 minut</span>
          </div>
        </div>

        <aside class="rk-solar-hero-panel" aria-label="Przykład chwilowego bilansu zysków słonecznych">
          <small>Bilans chwilowy — nie moc projektowa</small>
          <div class="rk-solar-hero-balance">
            <div class="rk-solar-hero-value"><span>Aktualne straty</span><strong>1200 W</strong></div>
            <div class="rk-solar-hero-symbol" aria-hidden="true">−</div>
            <div class="rk-solar-hero-value"><span>Zyski słoneczne</span><strong>560 W</strong></div>
          </div>
          <div class="rk-solar-hero-result">Pozostaje chwilowo: 640 W</div>
        </aside>
      </div>
    </header>

    <nav class="rk-solar-nav" aria-label="Spis treści artykułu">
      <a href="#rk-solar-answer">Szybka odpowiedź</a>
      <a href="#rk-solar-corrections">Ważne korekty</a>
      <a href="#rk-solar-lab">Laboratorium</a>
      <a href="#rk-solar-physics">Samoregulacja</a>
      <a href="#rk-solar-design">Projektowanie</a>
      <a href="#rk-solar-control">Sterowanie</a>
      <a href="#rk-solar-heatpump">Pompa ciepła</a>
      <a href="#rk-solar-howto">Procedura</a>
      <a href="#rk-solar-faq">FAQ</a>
      <a href="#rk-solar-author">Autor</a>
    </nav>

    <div class="rk-solar-body">
      <section class="rk-solar-section" id="rk-solar-answer">
        <span class="rk-solar-kicker">Najkrótsza poprawna odpowiedź</span>
        <h2>Czy pasywne zyski ciepła przeszkadzają ogrzewaniu podłogowemu?</h2>
        <p class="rk-solar-lead rk-solar-dropcap"><strong>Ogrzewanie podłogowe a pasywne zyski ciepła</strong> mogą współpracować bardzo dobrze, ponieważ niska temperatura powierzchni sprzyja fizycznej samoregulacji emisji. Problem pojawia się wtedy, gdy duże przeszklenia, ciężka podłoga, zbyt wysoka temperatura zasilania i spóźnione sterowanie dostarczają do pomieszczenia więcej energii, niż może ono w danej chwili oddać. Słońce nie jest wadą podłogówki — jest zmiennym składnikiem bilansu, który trzeba przewidzieć.</p>

        <div class="rk-solar-answer">
          <div class="rk-solar-answer-main">
            <h3>Co dzieje się w słoneczny dzień?</h3>
            <p>Promieniowanie przenika przez szybę, ogrzewa podłogę, ściany i wyposażenie, a następnie podnosi temperaturę operacyjną wnętrza. W tym samym czasie aktywna podłoga nadal może oddawać energię zgromadzoną wcześniej w jastrychu.</p>
            <p><strong>Efekt końcowy zależy od czasu:</strong> chwilowego nasłonecznienia, ilości zakumulowanego ciepła, temperatury powierzchni, zacienienia i reakcji automatyki.</p>
          </div>
          <div class="rk-solar-answer-side">
            <h3>Najważniejszy wniosek</h3>
            <p>Nie wolno zmniejszać projektowej mocy pomieszczenia tylko dlatego, że ma okna od południa. W mroźny i pochmurny dzień zysk słoneczny może być bliski zeru.</p>
            <p>Projekt zapewnia moc w warunkach obliczeniowych, a sterowanie i zacienienie odpowiadają za pracę przy zmiennych zyskach.</p>
          </div>
        </div>

        <div class="rk-solar-grid-4" style="margin-top:22px">
          <article class="rk-solar-card"><span class="rk-solar-card-number">A<sub>gl</sub></span><h3>Powierzchnia szyb</h3><p>Liczy się przejrzysta część przeszklenia odbierająca promieniowanie, a nie wyłącznie wymiar całego otworu okiennego.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">g</span><h3>Współczynnik szyby</h3><p>Określa udział całkowitej energii słonecznej przedostającej się do wnętrza. Przyjmujemy dane konkretnego pakietu szybowego.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">F<sub>sh</sub></span><h3>Zacienienie</h3><p>Okap, balkon, żaluzje zewnętrzne, sąsiednie budynki i drzewa zmieniają rzeczywisty dopływ energii w ciągu dnia i roku.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">C</span><h3>Masa termiczna</h3><p>Jastrych i inne ciężkie powierzchnie mogą tłumić krótki szczyt, ale przejętą energię oddają później.</p></article>
        </div>
      </section>

      <section class="rk-solar-section" id="rk-solar-corrections">
        <div class="rk-solar-corrections">
          <div class="rk-solar-corrections-head">
            <span class="rk-solar-kicker">Pięć rozróżnień, które zmieniają ocenę instalacji</span>
            <h2>Projektowa moc grzewcza, chwilowy bilans i przegrzewanie to trzy różne zagadnienia</h2>
            <p>Najwięcej błędów wynika z mieszania parametrów obliczanych dla skrajnego mrozu z wynikiem obserwowanym podczas kilku słonecznych godzin.</p>
          </div>
          <div class="rk-solar-corrections-grid">
            <article class="rk-solar-correction"><b>01</b><h3>Moc projektowa nie zależy od obietnicy słońca</h3><p>Instalacja ma pokryć projektowe straty również wtedy, gdy jest zimno, pochmurno i nie występują użyteczne zyski. Zyski analizujemy dodatkowo jako zmienne obciążenie eksploatacyjne.</p></article>
            <article class="rk-solar-correction"><b>02</b><h3>Waty to nie kilowatogodziny</h3><p>Natężenie promieniowania `I` wyrażone w W/m² opisuje chwilową moc. Miesięczne lub roczne napromienienie jest energią i podaje się je między innymi w kWh/m².</p></article>
            <article class="rk-solar-correction"><b>03</b><h3>Masa nie tylko przegrzewa</h3><p>Ciężka konstrukcja pochłania energię, ogranicza szybkość wzrostu temperatury i przesuwa szczyt w czasie. Może jednak przedłużyć oddawanie ciepła po zaniku słońca.</p></article>
            <article class="rk-solar-correction"><b>04</b><h3>Termostat nie cofa energii z jastrychu</h3><p>Zamknięcie siłownika zatrzymuje dopływ nowej energii, ale podłoga nadal oddaje ciepło już zgromadzone. Dlatego liczy się niska temperatura zasilania i działanie wyprzedzające.</p></article>
            <article class="rk-solar-correction"><b>05</b><h3>Bufor nie jest obowiązkowy z definicji</h3><p>Przy pompie ciepła jego potrzebę ocenia się na podstawie minimalnego przepływu, pojemności wodnej, sposobu odszraniania, liczby zamykanych pętli i wymagań urządzenia.</p></article>
            <article class="rk-solar-correction"><b>06</b><h3>Strefa nie oznacza osobnego mieszacza</h3><p>Pomieszczenie zwykle jest regulowane siłownikiem odpowiedniej pętli lub grupy pętli. Zawór mieszający przygotowuje temperaturę dla obiegu, a nie dla każdego pokoju oddzielnie.</p></article>
          </div>
        </div>

        <div class="rk-solar-flow" aria-label="Schemat przepływu energii słonecznej i ciepła z ogrzewania podłogowego">
          <div class="rk-solar-flow-head"><h3>Dwa strumienie energii spotykają się w jednym pomieszczeniu</h3><p>O temperaturze decyduje ich suma, aktualne straty oraz zdolność konstrukcji do magazynowania i oddawania ciepła.</p></div>
          <svg viewBox="0 0 1040 330" role="img" aria-labelledby="rk-solar-flow-title rk-solar-flow-desc">
            <title id="rk-solar-flow-title">Przepływ energii słonecznej i ciepła z podłogówki</title>
            <desc id="rk-solar-flow-desc">Promieniowanie słoneczne przechodzi przez szybę, a woda przekazuje ciepło przez jastrych. Oba strumienie wpływają na temperaturę pomieszczenia i straty budynku.</desc>
            <defs>
              <linearGradient id="rkSolarSun" x1="0" x2="1"><stop offset="0" stop-color="#f3bd3f"></stop><stop offset="1" stop-color="#ff7438"></stop></linearGradient>
              <linearGradient id="rkSolarWater" x1="0" x2="1"><stop offset="0" stop-color="#28c9da"></stop><stop offset="1" stop-color="#078fbe"></stop></linearGradient>
              <marker id="rkSolarArrowWarm" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#ff7438"></path></marker>
              <marker id="rkSolarArrowCool" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 z" fill="#078fbe"></path></marker>
            </defs>
            <circle cx="92" cy="80" r="36" fill="url(#rkSolarSun)"></circle>
            <g stroke="#f3bd3f" stroke-width="5"><line x1="92" y1="22" x2="92" y2="5"></line><line x1="92" y1="155" x2="92" y2="138"></line><line x1="34" y1="80" x2="17" y2="80"></line><line x1="167" y1="80" x2="150" y2="80"></line><line x1="51" y1="39" x2="38" y2="26"></line><line x1="133" y1="121" x2="146" y2="134"></line></g>
            <text x="92" y="187" text-anchor="middle" fill="#14384d" font-size="17" font-weight="900">SŁOŃCE</text>
            <rect x="220" y="48" width="92" height="205" rx="12" fill="#dff7fb" stroke="#078fbe" stroke-width="3"></rect>
            <line x1="251" y1="50" x2="251" y2="252" stroke="#87dce8" stroke-width="2"></line><line x1="281" y1="50" x2="281" y2="252" stroke="#87dce8" stroke-width="2"></line>
            <text x="266" y="282" text-anchor="middle" fill="#14384d" font-size="16" font-weight="900">SZYBA: g + CIEŃ</text>
            <path d="M142 86 C175 86 187 86 215 86" fill="none" stroke="#ff7438" stroke-width="8" marker-end="url(#rkSolarArrowWarm)"></path>
            <path d="M318 98 C360 98 382 116 416 136" fill="none" stroke="#ff7438" stroke-width="8" marker-end="url(#rkSolarArrowWarm)"></path>
            <rect x="440" y="64" width="255" height="152" rx="24" fill="#ffffff" stroke="#c7dce5" stroke-width="3"></rect>
            <text x="568" y="115" text-anchor="middle" fill="#102536" font-size="21" font-weight="900">POMIESZCZENIE</text>
            <text x="568" y="147" text-anchor="middle" fill="#506674" font-size="16">powietrze + powierzchnie</text>
            <text x="568" y="179" text-anchor="middle" fill="#078fbe" font-size="16" font-weight="800">temperatura operacyjna</text>
            <rect x="420" y="252" width="295" height="34" rx="12" fill="#d7e2e7"></rect>
            <path d="M458 270 C483 227 510 227 535 270 C560 313 587 313 612 270 C637 227 664 227 689 270" fill="none" stroke="url(#rkSolarWater)" stroke-width="9"></path>
            <text x="568" y="318" text-anchor="middle" fill="#14384d" font-size="16" font-weight="900">WODA → JASTRYCH → PODŁOGA</text>
            <path d="M568 250 C568 238 568 231 568 220" fill="none" stroke="#078fbe" stroke-width="8" marker-end="url(#rkSolarArrowCool)"></path>
            <path d="M700 134 C759 134 778 104 820 104" fill="none" stroke="#ff7438" stroke-width="8" marker-end="url(#rkSolarArrowWarm)"></path>
            <rect x="838" y="54" width="164" height="105" rx="19" fill="#fff3eb" stroke="#ff7438" stroke-width="3"></rect>
            <text x="920" y="92" text-anchor="middle" fill="#102536" font-size="18" font-weight="900">STRATY</text>
            <text x="920" y="122" text-anchor="middle" fill="#506674" font-size="14">przenikanie</text>
            <text x="920" y="143" text-anchor="middle" fill="#506674" font-size="14">+ wentylacja</text>
            <text x="842" y="215" fill="#16876d" font-size="15" font-weight="900">SAMOREGULACJA:</text>
            <text x="842" y="241" fill="#506674" font-size="14">wyższa temperatura wnętrza</text>
            <text x="842" y="264" fill="#506674" font-size="14">→ mniejsza emisja podłogi</text>
          </svg>
        </div>
      </section>

      <section class="rk-solar-section" id="rk-solar-lab">
        <div class="rk-solar-lab">
          <div class="rk-solar-lab-head">
            <span class="rk-solar-kicker" style="color:#79f1ff">Interaktywne laboratorium bilansu chwilowego</span>
            <h2>Sprawdź, kiedy słońce przejmuje ogrzewanie pomieszczenia</h2>
            <p>Zmień straty, temperatury, powierzchnię szyb, współczynnik `g`, nasłonecznienie i zacienienie. Model zestawi chwilowe zyski z przybliżonym aktualnym zapotrzebowaniem oraz mocą nadal oddawaną przez podłogę.</p>
          </div>

          <div class="rk-solar-lab-layout">
            <form class="rk-solar-controls" id="rk-solar-form" aria-label="Dane do kalkulatora zysków słonecznych">
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-design-load">Projektowa strata pomieszczenia</label><output class="rk-solar-output" id="rk-solar-design-load-output">1200 W</output></div>
                <input id="rk-solar-design-load" type="range" min="300" max="5000" step="50" value="1200">
                <small>Moc potrzebna w projektowych warunkach zewnętrznych, przed dodawaniem przypadkowych zapasów.</small>
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-design-out">Projektowa temperatura zewnętrzna</label><output class="rk-solar-output" id="rk-solar-design-out-output">−20°C</output></div>
                <input id="rk-solar-design-out" type="range" min="-30" max="-10" step="1" value="-20">
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-current-out">Aktualna temperatura zewnętrzna</label><output class="rk-solar-output" id="rk-solar-current-out-output">0°C</output></div>
                <input id="rk-solar-current-out" type="range" min="-20" max="15" step="1" value="0">
                <small>Aktualne straty są szacowane proporcjonalnie do różnicy temperatur.</small>
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-indoor">Temperatura wewnętrzna</label><output class="rk-solar-output" id="rk-solar-indoor-output">21°C</output></div>
                <input id="rk-solar-indoor" type="range" min="18" max="25" step="0.5" value="21">
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-glass">Powierzchnia czynna przeszklenia</label><output class="rk-solar-output" id="rk-solar-glass-output">8,0 m²</output></div>
                <input id="rk-solar-glass" type="range" min="1" max="30" step="0.5" value="8">
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-gvalue">Współczynnik całkowitej przepuszczalności `g`</label><output class="rk-solar-output" id="rk-solar-gvalue-output">0,50</output></div>
                <input id="rk-solar-gvalue" type="range" min="0.25" max="0.75" step="0.01" value="0.50">
                <small>Wartość należy pobrać z dokumentacji konkretnego pakietu szybowego.</small>
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-irradiance">Promieniowanie padające na szybę</label><output class="rk-solar-output" id="rk-solar-irradiance-output">140 W/m²</output></div>
                <input id="rk-solar-irradiance" type="range" min="0" max="600" step="10" value="140">
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-shading">Energia pozostająca po zacienieniu</label><output class="rk-solar-output" id="rk-solar-shading-output">85%</output></div>
                <input id="rk-solar-shading" type="range" min="0" max="100" step="5" value="85">
                <small>100% oznacza brak redukcji, 20% — silne ograniczenie przez skuteczną osłonę.</small>
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-internal">Zyski od ludzi i urządzeń</label><output class="rk-solar-output" id="rk-solar-internal-output">120 W</output></div>
                <input id="rk-solar-internal" type="range" min="0" max="800" step="20" value="120">
              </div>
              <div class="rk-solar-control">
                <div class="rk-solar-control-head"><label for="rk-solar-active">Moc nadal oddawana przez podłogę</label><output class="rk-solar-output" id="rk-solar-active-output">600 W</output></div>
                <input id="rk-solar-active" type="range" min="0" max="5000" step="50" value="600">
                <small>To chwilowa moc aktywna, nie moc znamionowa pętli ani moc źródła ciepła.</small>
              </div>
            </form>

            <div class="rk-solar-results" aria-live="polite">
              <div class="rk-solar-result-grid">
                <div class="rk-solar-result-card"><small>Przybliżone aktualne straty</small><div class="rk-solar-result-number" id="rk-solar-result-loss">615 W</div></div>
                <div class="rk-solar-result-card"><small>Zyski słoneczne</small><div class="rk-solar-result-number" id="rk-solar-result-sun">476 W</div></div>
                <div class="rk-solar-result-card"><small>Łączne zyski pasywne i bytowe</small><div class="rk-solar-result-number" id="rk-solar-result-gains">596 W</div></div>
                <div class="rk-solar-result-card"><small>Moc aktywna nadal potrzebna</small><div class="rk-solar-result-number" id="rk-solar-result-required">19 W</div></div>
                <div class="rk-solar-result-card"><small>Pokrycie strat przez same zyski</small><div class="rk-solar-result-number" id="rk-solar-result-coverage">97%</div></div>
                <div class="rk-solar-result-card is-main"><small>Bilans po dodaniu ciepła podłogi</small><div class="rk-solar-result-number" id="rk-solar-result-balance">+581 W</div></div>
              </div>

              <div class="rk-solar-status is-danger" id="rk-solar-status">
                <strong id="rk-solar-status-title">Wyraźna chwilowa nadwyżka energii</strong>
                <span id="rk-solar-status-copy">Zyski niemal pokrywają straty, a podłoga nadal oddaje 600 W. Sterowanie może zatrzymać nowy dopływ, lecz nie usunie energii zgromadzonej w jastrychu.</span>
              </div>

              <div class="rk-solar-chart" aria-label="Wykres chwilowego bilansu cieplnego pomieszczenia">
                <h3>Straty i dopływy energii w tej samej chwili</h3>
                <p>Porównanie nie przewiduje temperatury za kilka godzin — do tego potrzebny jest model dynamiczny budynku.</p>
                <svg viewBox="0 0 720 345" role="img" aria-labelledby="rk-solar-chart-title rk-solar-chart-desc">
                  <title id="rk-solar-chart-title">Porównanie strat oraz zysków cieplnych</title>
                  <desc id="rk-solar-chart-desc">Cztery słupki przedstawiają aktualne straty, zyski słoneczne, zyski wewnętrzne oraz moc oddawaną przez podłogę.</desc>
                  <line class="rk-solar-chart-grid" x1="74" y1="45" x2="685" y2="45"></line>
                  <line class="rk-solar-chart-grid" x1="74" y1="100" x2="685" y2="100"></line>
                  <line class="rk-solar-chart-grid" x1="74" y1="155" x2="685" y2="155"></line>
                  <line class="rk-solar-chart-grid" x1="74" y1="210" x2="685" y2="210"></line>
                  <line class="rk-solar-chart-axis" x1="74" y1="265" x2="685" y2="265"></line>
                  <line class="rk-solar-chart-axis" x1="74" y1="45" x2="74" y2="265"></line>
                  <text class="rk-solar-chart-label" id="rk-solar-ymax" x="64" y="50" text-anchor="end">720</text>
                  <text class="rk-solar-chart-label" id="rk-solar-y75" x="64" y="105" text-anchor="end">540</text>
                  <text class="rk-solar-chart-label" id="rk-solar-y50" x="64" y="160" text-anchor="end">360</text>
                  <text class="rk-solar-chart-label" id="rk-solar-y25" x="64" y="215" text-anchor="end">180</text>
                  <text class="rk-solar-chart-label" x="64" y="270" text-anchor="end">0</text>
                  <text class="rk-solar-chart-label" x="17" y="160" text-anchor="middle" transform="rotate(-90 17 160)">moc [W]</text>
                  <rect class="rk-solar-bar-loss" id="rk-solar-bar-loss" x="115" y="77" width="90" height="188" rx="11"></rect>
                  <rect class="rk-solar-bar-sun" id="rk-solar-bar-sun" x="265" y="119" width="90" height="146" rx="11"></rect>
                  <rect class="rk-solar-bar-internal" id="rk-solar-bar-internal" x="415" y="228" width="90" height="37" rx="11"></rect>
                  <rect class="rk-solar-bar-floor" id="rk-solar-bar-floor" x="565" y="82" width="90" height="183" rx="11"></rect>
                  <text class="rk-solar-chart-value" id="rk-solar-bar-loss-value" x="160" y="69" text-anchor="middle">615 W</text>
                  <text class="rk-solar-chart-value" id="rk-solar-bar-sun-value" x="310" y="111" text-anchor="middle">476 W</text>
                  <text class="rk-solar-chart-value" id="rk-solar-bar-internal-value" x="460" y="220" text-anchor="middle">120 W</text>
                  <text class="rk-solar-chart-value" id="rk-solar-bar-floor-value" x="610" y="74" text-anchor="middle">600 W</text>
                  <text class="rk-solar-chart-label" x="160" y="294" text-anchor="middle">STRATY</text>
                  <text class="rk-solar-chart-label" x="310" y="294" text-anchor="middle">SŁOŃCE</text>
                  <text class="rk-solar-chart-label" x="460" y="294" text-anchor="middle">BYTOWE</text>
                  <text class="rk-solar-chart-label" x="610" y="294" text-anchor="middle">PODŁOGA</text>
                </svg>
              </div>
            </div>
          </div>

          <div class="rk-solar-inline-cta">
            <h3>Dwa pomieszczenia w tym samym domu mogą w tej samej chwili potrzebować zupełnie innej mocy</h3>
            <p>Kalkulator pokazuje chwilowy bilans. Projekt musi natomiast określić straty każdego pomieszczenia, moc podłogi bez zakładania stałego słońca, rozstaw i długość pętli, przepływy oraz sensowny podział na strefy. Dopiero te dane pozwalają przewidzieć reakcję salonu południowego bez pozbawiania mocy pokoi północnych.</p>
            <a class="rk-solar-cta-button rk-solar-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt z obliczeniami dla każdego pomieszczenia</a>
            <small class="rk-solar-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
          </div>
        </div>
      </section>

      <section class="rk-solar-section" id="rk-solar-physics">
        <span class="rk-solar-kicker">Fizyka zamiast prostych sloganów</span>
        <h2>Jak obliczyć pasywne zyski ciepła i dlaczego podłoga częściowo reguluje się sama?</h2>
        <p class="rk-solar-lead">Do wstępnej analizy można zestawić moc promieniowania przechodzącego przez przeszklenie z chwilowymi stratami pomieszczenia. Wynik pokazuje kierunek zmian, ale nie określa temperatury za dwie lub cztery godziny. Taką odpowiedź daje dopiero obliczenie dynamiczne uwzględniające pojemność cieplną, czas, położenie słońca i sterowanie.</p>

        <div class="rk-solar-formulas">
          <article class="rk-solar-formula">
            <span>Uproszczony zysk słoneczny</span>
            <code>Φ<sub>sol</sub> = A<sub>gl</sub> × g × I × F<sub>sh</sub></code>
            <p>A<sub>gl</sub> — czynna powierzchnia szyb, `g` — przepuszczalność energii całkowitej, `I` — chwilowe promieniowanie na płaszczyznę szyby, F<sub>sh</sub> — udział pozostający po zacienieniu.</p>
          </article>
          <article class="rk-solar-formula">
            <span>Przybliżenie aktualnych strat</span>
            <code>Φ<sub>loss,now</sub> ≈ Φ<sub>design</sub> × (T<sub>i</sub> − T<sub>e,now</sub>) / (T<sub>i</sub> − T<sub>e,design</sub>)</code>
            <p>Proporcjonalne skalowanie względem różnicy temperatur jest narzędziem edukacyjnym. Nie odtwarza osobno wentylacji, infiltracji, zmiennych współczynników ani zysków magazynowanych.</p>
          </article>
          <article class="rk-solar-formula">
            <span>Chwilowa moc aktywna</span>
            <code>Φ<sub>heat,now</sub> = max[0; Φ<sub>loss,now</sub> − Φ<sub>sol</sub> − Φ<sub>int</sub>]</code>
            <p>Jeżeli zyski przekraczają straty, chwilowe zapotrzebowanie aktywne spada do zera. Nie oznacza to, że można trwale zmniejszyć moc projektową pętli.</p>
          </article>
          <article class="rk-solar-formula">
            <span>Energia magazynowana w masie</span>
            <code>E = m × c × ΔT</code>
            <p>Masa `m`, ciepło właściwe `c` i zmiana temperatury określają teoretyczną ilość energii przejętej przez materiał. Rzeczywisty udział zależy od rozkładu temperatury oraz warunków brzegowych.</p>
          </article>
        </div>

        <div class="rk-solar-warning">
          <p><strong>To ważne dla interpretacji:</strong> współczynnik `g` nie jest współczynnikiem przenikania ciepła `U`. `U` opisuje straty przez przegrodę przy różnicy temperatur, a `g` udział energii słonecznej przechodzącej przez oszklenie. Dobre okno może mieć niskie `U`, a jednocześnie stosunkowo wysokie albo niskie `g`.</p>
        </div>

        <div class="rk-solar-selfreg">
          <div class="rk-solar-selfreg-visual">
            <span class="rk-solar-kicker" style="color:#79f1ff">Przykład powierzchni 25°C</span>
            <h3>Wzrost temperatury wnętrza zmniejsza oddawanie ciepła</h3>
            <p>Przy niezmienionej temperaturze powierzchni wielkość emisji jest w przybliżeniu związana z różnicą między podłogą a temperaturą operacyjną pomieszczenia.</p>
            <div class="rk-solar-selfreg-scale" aria-label="Względna emisja podłogi przy różnych temperaturach pomieszczenia">
              <div class="rk-solar-selfreg-row"><span>Pokój 20°C</span><span class="rk-solar-selfreg-track"><span class="rk-solar-selfreg-fill" style="width:100%"></span></span><strong style="color:#fff">100%</strong></div>
              <div class="rk-solar-selfreg-row"><span>Pokój 21°C</span><span class="rk-solar-selfreg-track"><span class="rk-solar-selfreg-fill" style="width:80%"></span></span><strong style="color:#fff">80%</strong></div>
              <div class="rk-solar-selfreg-row"><span>Pokój 22°C</span><span class="rk-solar-selfreg-track"><span class="rk-solar-selfreg-fill" style="width:60%"></span></span><strong style="color:#fff">60%</strong></div>
              <div class="rk-solar-selfreg-row"><span>Pokój 23°C</span><span class="rk-solar-selfreg-track"><span class="rk-solar-selfreg-fill" style="width:40%"></span></span><strong style="color:#fff">40%</strong></div>
              <div class="rk-solar-selfreg-row"><span>Pokój 24°C</span><span class="rk-solar-selfreg-track"><span class="rk-solar-selfreg-fill" style="width:20%"></span></span><strong style="color:#fff">20%</strong></div>
            </div>
          </div>
          <div class="rk-solar-selfreg-copy">
            <h3>Na czym polega samoregulacja ogrzewania podłogowego?</h3>
            <p>Jeżeli powierzchnia ma 25°C, a temperatura operacyjna wnętrza 20°C, różnica wynosi 5 K. Gdy słońce podniesie temperaturę wnętrza do 23°C, różnica spada do 2 K. Przy podobnym współczynniku wymiany ciepła emisja może spaść do około 40% wartości początkowej.</p>
            <p>To efekt fizyczny, bez termostatu i siłownika. Jest szczególnie zauważalny w systemach niskotemperaturowych, w których powierzchnia podłogi znajduje się tylko kilka kelwinów powyżej temperatury pomieszczenia.</p>
            <p><strong>Nie jest to jednak pełne zabezpieczenie.</strong> Temperatura powierzchni również zmienia się w czasie, a jastrych może zawierać energię zgromadzoną przed pojawieniem się słońca. Powyższe procenty pokazują zasadę, a nie prognozę konkretnego budynku.</p>
          </div>
        </div>

        <h3 style="margin-top:38px">Ile energii może przejąć jastrych?</h3>
        <p>Dla salonu o powierzchni 30 m², warstwy jastrychu 6,5 cm, gęstości 2100 kg/m³ i ciepła właściwego około 0,88 kJ/(kg·K) teoretyczna pojemność tej masy wynosi około <strong>1 kWh na każdy 1 K</strong> zmiany średniej temperatury. Nie oznacza to, że cała warstwa nagrzeje się równomiernie ani że cała energia będzie użyteczna, ale pokazuje skalę akumulacji.</p>

        <div class="rk-solar-grid-3" style="margin-top:22px">
          <article class="rk-solar-card"><span class="rk-solar-card-number">1</span><h3>Krótki impuls słońca</h3><p>Ciężka podłoga może pochłonąć część energii i ograniczyć szybki wzrost temperatury powietrza.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">2</span><h3>Długi słoneczny okres</h3><p>Po wypełnieniu zdolności do dalszego magazynowania rośnie temperatura powierzchni i zwiększa się ryzyko przegrzania.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">3</span><h3>Po zachodzie</h3><p>Nagrzane powierzchnie oddają energię do wnętrza. Czas i intensywność zależą od konstrukcji oraz strat budynku.</p></article>
        </div>

        <p style="margin-top:24px">Szersze omówienie tego zjawiska znajduje się w artykule <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">czym jest bezwładność cieplna w ogrzewaniu podłogowym</a>.</p>
      </section>

      <section class="rk-solar-section" id="rk-solar-design">
        <span class="rk-solar-kicker">Dwa obliczenia o różnych celach</span>
        <h2>Jak projektować podłogówkę przy dużych przeszkleniach?</h2>
        <p class="rk-solar-lead">Najpierw należy zapewnić wymaganą moc w warunkach projektowych. Dopiero później sprawdza się, jak zmienne zyski słoneczne wpływają na regulację, temperaturę operacyjną i ryzyko przegrzewania. Pominięcie pierwszego etapu grozi niedogrzaniem w pochmurny mróz, a pominięcie drugiego — dyskomfortem w słoneczne dni.</p>

        <div class="rk-solar-table-wrap">
          <table aria-label="Porównanie obliczenia projektowego i chwilowego bilansu zysków">
            <thead><tr><th>Element analizy</th><th>Obciążenie projektowe</th><th>Bilans chwilowy lub godzinowy</th></tr></thead>
            <tbody>
              <tr><td data-label="Element"><strong>Cel</strong></td><td data-label="Obciążenie projektowe">Dobór mocy ogrzewania dla obliczeniowych warunków zewnętrznych.</td><td data-label="Bilans chwilowy">Ocena reakcji wnętrza na zmienne słońce, ludzi, urządzenia i sterowanie.</td></tr>
              <tr><td data-label="Element"><strong>Warunki pogodowe</strong></td><td data-label="Obciążenie projektowe">Projektowa temperatura zewnętrzna i przyjęte warunki normowe.</td><td data-label="Bilans chwilowy">Temperatura, promieniowanie, zachmurzenie i zacienienie zmienne w czasie.</td></tr>
              <tr><td data-label="Element"><strong>Zyski słoneczne</strong></td><td data-label="Obciążenie projektowe">Nie mogą stanowić gwarantowanego źródła mocy dla każdej godziny mrozu.</td><td data-label="Bilans chwilowy">Są bezpośrednim składnikiem aktualnego bilansu i mogą chwilowo wyłączyć potrzebę grzania.</td></tr>
              <tr><td data-label="Element"><strong>Wynik</strong></td><td data-label="Obciążenie projektowe">Moc pomieszczenia, rozstaw, temperatura zasilania, długość i przepływ pętli.</td><td data-label="Bilans chwilowy">Wymagana redukcja mocy, ryzyko nadwyżki, potrzeba zacienienia i strategia sterowania.</td></tr>
              <tr><td data-label="Element"><strong>Metoda</strong></td><td data-label="Obciążenie projektowe">Obliczenia strat pomieszczenie po pomieszczeniu.</td><td data-label="Bilans chwilowy">Od uproszczonego modelu edukacyjnego do pełnej symulacji godzinowej.</td></tr>
            </tbody>
          </table>
        </div>

        <div class="rk-solar-danger">
          <p><strong>Nie zmniejszaj zagęszczenia rur wyłącznie ze względu na południowe okna.</strong> Jeżeli projektowana pętla nie pokryje strat bez słońca, automatyka nie odzyska brakującej mocy. Rozstaw rur powinien wynikać z obciążenia, temperatury zasilania, oporu okładziny i dopuszczalnej temperatury powierzchni.</p>
        </div>

        <h3 style="margin-top:38px">Co trzeba przeanalizować przy przeszkleniach południowych i zachodnich?</h3>
        <div class="rk-solar-grid-3">
          <article class="rk-solar-card"><span class="rk-solar-card-number">01</span><h3>Geometria i orientacja</h3><p>Powierzchnia szyby, azymut, wysokość nadproża, głębokość pomieszczenia oraz kąt padania słońca decydują o miejscu i czasie wystąpienia zysków.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">02</span><h3>Parametry oszklenia</h3><p>Do strat wykorzystuje się `U`, a do zysków `g`. Należy uwzględnić również udział ram, rzeczywistą powierzchnię szkła i dane producenta okna.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">03</span><h3>Zacienienie zewnętrzne</h3><p>Okap może dobrze działać dla wysokiego słońca letniego, ale przepuszczać niskie słońce zimowe. Żaluzja zewnętrzna reaguje elastycznie i zatrzymuje energię przed szybą.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">04</span><h3>Opór posadzki</h3><p>Płytki, drewno, winyl i dywan zmieniają moc powierzchniową oraz temperaturę wody potrzebną do pokrycia strat.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">05</span><h3>Podział hydrauliczny</h3><p>Strefy południowe i północne powinny mieć pętle pozwalające na niezależną reakcję. Jedna długa pętla przechodząca przez oba obszary utrudnia sterowanie.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">06</span><h3>Temperatura zasilania</h3><p>Im mniejsza nadwyżka temperatury podłogi nad wnętrzem, tym wyraźniejszy efekt samoregulacji i mniejsza energia zgromadzona ponad potrzebę.</p></article>
        </div>

        <p style="margin-top:24px">Szczegółowy dobór opisują również poradniki o <a href="https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/">rozstawie rur przy pompie ciepła</a>, <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/">strefie brzegowej ogrzewania podłogowego</a> i <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalnej temperaturze zasilania podłogówki</a>.</p>

        <h3 style="margin-top:38px">Cztery typowe pomieszczenia — cztery strategie</h3>
        <div class="rk-solar-table-wrap">
          <table aria-label="Strategie projektowe dla pomieszczeń o różnych zyskach słonecznych">
            <thead><tr><th>Pomieszczenie</th><th>Najważniejsze ryzyko</th><th>Decyzja projektowa</th><th>Sterowanie i ochrona</th></tr></thead>
            <tbody>
              <tr><td data-label="Pomieszczenie"><strong>Salon południowy</strong></td><td data-label="Ryzyko">Duży szczyt w środku dnia i energia pozostająca w jastrychu.</td><td data-label="Projekt">Osobne pętle strefy dziennej, moc pełna na dzień bez słońca, możliwie niska Tz.</td><td data-label="Sterowanie">Wpływ pomieszczenia, ograniczenie przegrzewania i skuteczne zacienienie zewnętrzne.</td></tr>
              <tr><td data-label="Pomieszczenie"><strong>Strefa zachodnia</strong></td><td data-label="Ryzyko">Późny zysk w chwili, gdy podłoga zawiera energię z całego dnia.</td><td data-label="Projekt">Oddzielenie od pomieszczeń północnych i analiza popołudniowego użytkowania.</td><td data-label="Sterowanie">Reakcja wyprzedzająca oraz żaluzje ograniczające niski kąt słońca.</td></tr>
              <tr><td data-label="Pomieszczenie"><strong>Sypialnia północna</strong></td><td data-label="Ryzyko">Niedogrzanie po zamknięciu całej instalacji przez czujnik w słonecznym salonie.</td><td data-label="Projekt">Własna pętla i przepływ wynikający z jej strat, bez uzależniania od salonu.</td><td data-label="Sterowanie">Czujnik reprezentatywny dla sypialni albo pozostawienie poprawnie zrównoważonego obwodu.</td></tr>
              <tr><td data-label="Pomieszczenie"><strong>Łazienka</strong></td><td data-label="Ryzyko">Inna temperatura zadana i potrzeba komfortu w określonych godzinach.</td><td data-label="Projekt">Osobna pętla, sprawdzenie mocy i temperatury powierzchni; ewentualne źródło uzupełniające.</td><td data-label="Sterowanie">Harmonogram dopasowany do użytkowania, bez przypadkowego uzależniania od salonu.</td></tr>
            </tbody>
          </table>
        </div>
      </section>

      <section class="rk-solar-section" id="rk-solar-control">
        <span class="rk-solar-kicker">Automatyka ma współpracować z fizyką</span>
        <h2>Jak sterować ogrzewaniem podłogowym przy zyskach słonecznych?</h2>
        <p class="rk-solar-lead">Najlepszy efekt zwykle daje połączenie poprawnie ustawionej niskiej temperatury zasilania, równoważenia hydraulicznego, rozsądnego wpływu temperatury pomieszczeń oraz zacienienia. Sam termostat działający dopiero po przekroczeniu zadanej temperatury może zareagować zbyt późno, ale rozbudowana automatyka również nie naprawi źle podzielonych pętli.</p>

        <div class="rk-solar-strategy-grid">
          <article class="rk-solar-strategy"><div class="rk-solar-strategy-head">1. Sterowanie pogodowe jako baza</div><div class="rk-solar-strategy-body"><p><a href="https://projekt-ogrzewania.pl/sterownik-regulator-pogodowy/">Regulator pogodowy</a> dopasowuje temperaturę zasilania do temperatury zewnętrznej. Ogranicza nadmierne ładowanie jastrychu, lecz sam czujnik zewnętrzny nie widzi słońca wpadającego przez konkretne okno.</p></div></article>
          <article class="rk-solar-strategy"><div class="rk-solar-strategy-head">2. Wpływ pomieszczenia lub sterowanie strefowe</div><div class="rk-solar-strategy-body"><p>Czujnik powietrza albo temperatury operacyjnej może skorygować pracę strefy południowej. Siłownik zamyka przepływ w odpowiednich pętlach, ale nie usuwa ciepła już zawartego w podłodze.</p></div></article>
          <article class="rk-solar-strategy"><div class="rk-solar-strategy-head">3. Zacienienie ogranicza problem u źródła</div><div class="rk-solar-strategy-body"><p>Osłona zewnętrzna zatrzymuje część promieniowania przed wejściem do wnętrza. W sezonie letnim często ma większe znaczenie niż jakakolwiek korekta instalacji grzewczej.</p></div></article>
        </div>

        <div class="rk-solar-note">
          <p><strong>Gdzie umieścić czujnik?</strong> Nie w bezpośrednim słońcu, nad rozgrzanym sprzętem ani przy drzwiach. Powinien mierzyć warunki reprezentatywne dla strefy. Jeden centralny termostat w nasłonecznionym salonie nie powinien odcinać ciepła sypialni znajdujących się po północnej stronie.</p>
        </div>

        <h3 style="margin-top:38px">Czy każda pętla musi mieć siłownik?</h3>
        <p>Nie. W budynku o małych, podobnych obciążeniach i dobrze ustawionej krzywej grzewczej część instalacji może pracować stabilnie bez ciągłego zamykania obwodów. Automatyka ma sens tam, gdzie występują rzeczywiście różne profile zysków, temperatur zadanych albo użytkowania. Szerzej omawia to poradnik <a href="https://projekt-ogrzewania.pl/czy-warto-montowac-sterowniki-do-ogrzewania-podlogowego/">czy warto montować sterowniki do ogrzewania podłogowego</a>.</p>

        <ul class="rk-solar-checklist">
          <li>Najpierw ustaw przepływy projektowe, dopiero później obserwuj reakcję stref.</li>
          <li>Nie stosuj głębokich, krótkich obniżeń temperatury dla ciężkiej podłogi.</li>
          <li>Ogranicz temperaturę zasilania do wartości wynikającej z obliczeń.</li>
          <li>Nie zamykaj wszystkich pętli bez sprawdzenia wymagań źródła ciepła.</li>
          <li>Zapisuj temperaturę wewnętrzną, zewnętrzną i nasłonecznienie przez kilka dni.</li>
          <li>Oddziel problem zimowych zysków od letniej ochrony przed przegrzewaniem.</li>
        </ul>
      </section>

      <section class="rk-solar-section" id="rk-solar-heatpump">
        <span class="rk-solar-kicker">Hydraulika przy zamykaniu stref</span>
        <h2>Pompa ciepła, pasywne zyski ciepła i minimalny przepływ</h2>
        <p class="rk-solar-lead">Gdy słońce ogrzewa salon, siłowniki mogą zamknąć kilka dużych pętli. Pozostałe pokoje nadal potrzebują energii, ale całkowity przepływ przez instalację spada. To moment, w którym strategia pokojowa spotyka się z wymaganiami pompy ciepła.</p>

        <div class="rk-solar-grid-3">
          <article class="rk-solar-card"><span class="rk-solar-card-number">V̇<sub>min</sub></span><h3>Minimalny przepływ urządzenia</h3><p>Trzeba zapewnić przepływ wymagany podczas grzania i odszraniania. Wartość pochodzi z dokumentacji konkretnej pompy ciepła.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">V</span><h3>Pojemność wodna</h3><p>Zbyt mała pojemność czynna po zamknięciu stref może skrócić cykle sprężarki i utrudnić odbiór energii.</p></article>
          <article class="rk-solar-card"><span class="rk-solar-card-number">Δp</span><h3>Zmiana oporów</h3><p>Zamykanie obwodów zmienia charakterystykę instalacji. Pompa obiegowa i zawory muszą zachować bezpieczny punkt pracy.</p></article>
        </div>

        <div class="rk-solar-warning">
          <p><strong>Bufor dobiera się do funkcji, a nie z przyzwyczajenia.</strong> Może stabilizować objętość i rozdzielić przepływy, ale może też zwiększyć straty postojowe lub pogorszyć temperaturę zasilania, jeżeli zostanie źle włączony. Najpierw sprawdza się układ bezpośredni, minimalny przepływ, aktywną pojemność i logikę odszraniania, a dopiero potem podejmuje decyzję. Zobacz również: <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła w ogrzewaniu podłogowym</a>.</p>
        </div>

        <p>Równie ważna jest modulacja źródła. Gdy większość zysków pokrywa salon, chwilowe zapotrzebowanie domu może spaść poniżej minimalnej mocy urządzenia. Sama automatyka pokojowa nie rozwiąże tego problemu — potrzebna jest koordynacja z krzywą grzewczą, przepływem i pojemnością instalacji. Więcej zależności opisuje techniczne opracowanie <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła i ogrzewanie niskotemperaturowe</a>.</p>
      </section>

      <section class="rk-solar-section" id="rk-solar-howto">
        <span class="rk-solar-kicker">Procedura projektowa krok po kroku</span>
        <h2>Jak uwzględnić pasywne zyski ciepła w projekcie ogrzewania podłogowego?</h2>
        <p class="rk-solar-lead">Prawidłowa kolejność chroni przed dwiema skrajnościami: niedowymiarowaniem ogrzewania z powodu optymistycznego założenia o słońcu oraz przegrzewaniem wynikającym z braku podziału i regulacji stref.</p>

        <div class="rk-solar-steps">
          <article class="rk-solar-step"><h3>Oblicz straty każdego pomieszczenia</h3><p>Uwzględnij przenikanie, wentylację, temperatury projektowe oraz rzeczywiste parametry przegród i stolarki.</p></article>
          <article class="rk-solar-step"><h3>Sprawdź orientację i przeszklenia</h3><p>Zapisz powierzchnię czynną szyb, azymut, współczynnik `g`, elementy zacieniające i sąsiednie przeszkody.</p></article>
          <article class="rk-solar-step"><h3>Dobierz podłogę bez gwarantowanego słońca</h3><p>Wyznacz temperaturę zasilania, rozstaw, długość i przepływ pętli tak, aby instalacja pokryła projektowe straty.</p></article>
          <article class="rk-solar-step"><h3>Podziel niezależne strefy</h3><p>Nie prowadź jednego obwodu przez obszary o skrajnie różnym nasłonecznieniu i sposobie użytkowania.</p></article>
          <article class="rk-solar-step"><h3>Zaprojektuj reakcję sterowania</h3><p>Połącz pogodową temperaturę zasilania, wpływ pomieszczenia, siłowniki tam, gdzie są potrzebne, oraz ochronę przeciwsłoneczną.</p></article>
          <article class="rk-solar-step"><h3>Sprawdź źródło przy zamykaniu pętli</h3><p>Zweryfikuj minimalny przepływ, moc minimalną, pojemność wodną, pracę pompy obiegowej i warunki odszraniania.</p></article>
        </div>

        <h3 style="margin-top:38px">Najczęstsze błędy w domu z dużymi oknami</h3>
        <ul class="rk-solar-checklist">
          <li>Odejmowanie zysków słonecznych od mocy pętli tak, jakby występowały w każdą mroźną godzinę.</li>
          <li>Łączenie salonu południowego i pokoju północnego jedną pętlą grzewczą.</li>
          <li>Ustawianie wysokiej temperatury zasilania, a następnie ratowanie komfortu częstym zamykaniem pętli.</li>
          <li>Montowanie termostatu w miejscu bezpośrednio nasłonecznionym.</li>
          <li>Mylenie wartości `U` okna ze współczynnikiem całkowitej przepuszczalności energii `g`.</li>
          <li>Traktowanie masy jastrychu wyłącznie jako problemu, bez oceny jej zdolności do tłumienia krótkich szczytów.</li>
          <li>Dodawanie bufora bez sprawdzenia minimalnego przepływu i funkcji, którą ma pełnić.</li>
          <li>Oczekiwanie, że termostat natychmiast zatrzyma ciepło zgromadzone wcześniej w podłodze.</li>
        </ul>
      </section>

      <section class="rk-solar-section" id="rk-solar-faq">
        <span class="rk-solar-kicker">Pytania inwestorów</span>
        <h2>FAQ: ogrzewanie podłogowe a pasywne zyski ciepła</h2>
        <div class="rk-solar-faq">
          <details>
            <summary>Czy ogrzewanie podłogowe może przegrzewać dom od słońca?</summary>
            <div class="rk-solar-faq-answer"><p>Tak, jeżeli zyski słoneczne pojawiają się wtedy, gdy jastrych nadal oddaje wcześniej zgromadzoną energię. Ryzyko rośnie przy dużych przeszkleniach, wysokiej temperaturze zasilania, braku zacienienia i niewłaściwym podziale stref.</p></div>
          </details>
          <details>
            <summary>Czy zyski słoneczne można odjąć od projektowej mocy ogrzewania?</summary>
            <div class="rk-solar-faq-answer"><p>Nie należy traktować ich jako stałej, gwarantowanej mocy. Ogrzewanie powinno pokryć projektowe straty również podczas mroźnej i pochmurnej pogody. Zyski słoneczne wykorzystuje się do analizy eksploatacji, sterowania i ryzyka przegrzewania.</p></div>
          </details>
          <details>
            <summary>Na czym polega samoregulacja ogrzewania podłogowego?</summary>
            <div class="rk-solar-faq-answer"><p>Gdy temperatura operacyjna pomieszczenia rośnie, maleje różnica między wnętrzem a powierzchnią podłogi, dlatego emisja ciepła z podłogi spada. Efekt jest silny w systemach niskotemperaturowych, ale nie usuwa energii zgromadzonej w jastrychu.</p></div>
          </details>
          <details>
            <summary>Czy przy dużych oknach trzeba zwiększyć rozstaw rur?</summary>
            <div class="rk-solar-faq-answer"><p>Nie można tego robić wyłącznie z powodu spodziewanych zysków słonecznych. Rozstaw wynika z projektowych strat pomieszczenia, temperatury zasilania, oporu posadzki i dopuszczalnej temperatury powierzchni.</p></div>
          </details>
          <details>
            <summary>Czy sterowanie pogodowe wystarczy przy południowych przeszkleniach?</summary>
            <div class="rk-solar-faq-answer"><p>Jest bardzo dobrą podstawą, ponieważ ogranicza temperaturę zasilania, ale czujnik zewnętrzny nie mierzy bezpośrednio słońca wpadającego do konkretnego salonu. Przy dużych i zmiennych zyskach pomocny może być wpływ pomieszczenia, podział stref oraz zacienienie.</p></div>
          </details>
          <details>
            <summary>Czy każdy pokój powinien mieć osobny termostat i siłownik?</summary>
            <div class="rk-solar-faq-answer"><p>Nie zawsze. Zależy to od różnic w nasłonecznieniu, temperaturach zadanych i sposobie użytkowania. Najważniejsze jest, aby pętle stref o różnych profilach zysków można było regulować niezależnie bez destabilizowania źródła ciepła.</p></div>
          </details>
          <details>
            <summary>Czy pompa ciepła potrzebuje bufora, gdy termostaty zamykają pętle?</summary>
            <div class="rk-solar-faq-answer"><p>Nie ma jednej odpowiedzi. Trzeba sprawdzić minimalny przepływ, pojemność wodną pozostającą w pracy, moc minimalną, sposób odszraniania i wymagania konkretnego urządzenia. Bufor jest jednym z rozwiązań, a nie automatycznym obowiązkiem.</p></div>
          </details>
          <details>
            <summary>Jak najlepiej ograniczyć przegrzewanie od słońca?</summary>
            <div class="rk-solar-faq-answer"><p>Najskuteczniejsze jest połączenie właściwego zacienienia zewnętrznego, niskiej temperatury zasilania, podziału stref, równoważenia hydraulicznego i sterowania uwzględniającego temperaturę pomieszczenia. Latem kluczowe jest zatrzymanie energii przed szybą.</p></div>
          </details>
        </div>
      </section>

      <section class="rk-solar-section" aria-label="Źródła techniczne">
        <div class="rk-solar-sources">
          <strong>Podstawa techniczna i źródła opracowania</strong>
          <p>Projektowe obciążenie cieplne: <a href="https://sklep.pkn.pl/pn-en-12831-1-2017-08e.html" target="_blank" rel="noopener nofollow">PN-EN 12831-1:2017-08 — Polski Komitet Normalizacyjny</a>. Obliczenia godzinowe energii, temperatur i obciążeń: <a href="https://www.iso.org/standard/65696.html" target="_blank" rel="noopener nofollow">ISO 52016-1:2017 — International Organization for Standardization</a>. Projektowanie i sterowanie systemami płaszczyznowymi oraz efekt samoregulacji: <a href="https://www.rehva.eu/rehva-journal/chapter/iso-11855-the-international-standard-on-the-design-dimensioning-installation-and-control-of-embedded-radiant-heating-and-cooling-systems" target="_blank" rel="noopener nofollow">opracowanie ISO 11855 — REHVA</a>. Wpływ masy termicznej na zmienne zyski słoneczne: <a href="https://www.energy.gov/cmei/buildings/zeb-technologies-passive-design-techniques" target="_blank" rel="noopener nofollow">Passive Design Techniques — U.S. Department of Energy</a>. Graniczne temperatury powierzchni systemów podłogowych: <a href="https://sklep.pkn.pl/pn-en-1264-2-2021-10e.html" target="_blank" rel="noopener nofollow">PN-EN 1264-2:2021-10 — PKN</a>. Dostęp do źródeł: 26 sierpnia 2026 r.</p>
          <p>Laboratorium przedstawia uproszczony bilans chwilowy i nie modeluje położenia słońca, udziału ram, wielokrotnych odbić, szczegółowej dynamiki przegród, wymiany między strefami ani działania konkretnego sterownika.</p>
        </div>
      </section>

      <section class="rk-solar-author" id="rk-solar-author" aria-label="Autor opracowania">
        <input type="radio" name="rk-solar-author-tabs" id="rk-solar-author-about" checked="">
        <input type="radio" name="rk-solar-author-tabs" id="rk-solar-author-exp">
        <input type="radio" name="rk-solar-author-tabs" id="rk-solar-author-sites">

        <div class="rk-solar-author-head">
          <div><h2>Autor opracowania</h2><p>Praktyka projektowa, fizyka budynku i parametry instalacji przedstawione bez skrótów myślowych.</p></div>
          <span class="rk-solar-author-mark">E‑E‑A‑T • HVAC</span>
        </div>

        <div class="rk-solar-author-layout">
          <aside class="rk-solar-author-side">
            <div class="rk-solar-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji ogrzewania podłogowego" width="360" height="360" loading="lazy" decoding="async"></div>
            <div class="rk-solar-author-name">Robert Kucharski</div>
            <div class="rk-solar-author-role">CEO portalu<br>Specjalista HVAC i ogrzewania podłogowego</div>
          </aside>

          <div class="rk-solar-author-main">
            <blockquote class="rk-solar-author-quote"><p>„Słońce nie powinno zastępować mocy projektowej pętli. Powinno natomiast wpływać na sposób podziału stref, temperaturę zasilania i sterowanie, bo to one decydują, czy darmowa energia poprawi bilans, czy przegrzeje salon.”</p></blockquote>

            <div class="rk-solar-author-tabs" role="tablist" aria-label="Informacje o autorze">
              <label class="rk-solar-author-tab" for="rk-solar-author-about" role="tab">O autorze</label>
              <label class="rk-solar-author-tab" for="rk-solar-author-exp" role="tab">Doświadczenie</label>
              <label class="rk-solar-author-tab" for="rk-solar-author-sites" role="tab">Portale</label>
            </div>

            <div class="rk-solar-author-panel rk-solar-author-panel-about">
              <p>Robert Kucharski projektuje wodne instalacje ogrzewania podłogowego i przygotowuje techniczne publikacje dotyczące hydrauliki, źródeł ciepła, automatyki, fizyki budynku oraz świadomego prowadzenia inwestycji. W opracowaniach rozdziela parametry służące do doboru instalacji od zmiennych warunków eksploatacyjnych.</p>
              <p><a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz profil i pozostałe opracowania autora</a>.</p>
            </div>

            <div class="rk-solar-author-panel rk-solar-author-panel-exp">
              <p>Doświadczenie autora obejmuje obliczenia obciążenia cieplnego pomieszczeń, dobór temperatury zasilania, rozstawu i długości pętli, przepływów oraz oporów hydraulicznych. Szczególną uwagę poświęca współpracy podłogówki z pompami ciepła, podziałowi na strefy i warunkom, które mogą prowadzić do przegrzewania albo taktowania źródła.</p>
            </div>

            <div class="rk-solar-author-panel rk-solar-author-panel-sites">
              <p>Autor jest właścicielem trzech serwisów poświęconych projektowaniu instalacji, budowie i remontom. Powiązanie portali jest podane jawnie, aby czytelnik znał autorstwo oraz kontekst linkowania.</p>
              <div class="rk-solar-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-solar-final-cta" aria-label="Projekt ogrzewania podłogowego dla domu z dużymi przeszkleniami">
        <div class="rk-solar-final-cta-content">
          <span class="rk-solar-kicker" style="color:#79f1ff">Projekt przed wykonaniem wylewki</span>
          <h2>Masz duże przeszklenia? Nie każ jednej pętli ogrzewać dwóch różnych światów</h2>
          <p>Projekt ogrzewania podłogowego określa straty każdego pomieszczenia, moc powierzchniową bez zakładania stałego słońca, rozstaw i długość pętli, przepływy, opory oraz podział stref. Dzięki temu salon może ograniczyć grzanie od nasłonecznienia, a północne pokoje nadal otrzymują potrzebną moc.</p>
          <a class="rk-solar-cta-button rk-solar-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
          <small class="rk-solar-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
        </div>
      </section>
    </div>
  </div>
</article>

<!-- RK_SOLAR_SCHEMA -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#article",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/",
      "headline": "Ogrzewanie podłogowe a pasywne zyski ciepła – jak uniknąć przegrzewania od słońca?",
      "description": "Ogrzewanie podłogowe a pasywne zyski ciepła: sprawdź wpływ słońca, okien i sterowania na komfort, zużycie energii oraz ryzyko przegrzewania wnętrz, także latem.",
      "dateModified": "2026-08-26",
      "inLanguage": "pl-PL",
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#webpage"
      },
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "reviewedBy": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "accountablePerson": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "copyrightHolder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "articleSection": [
        "Ogrzewanie podłogowe",
        "Projektowanie instalacji",
        "Fizyka budynku",
        "Sterowanie ogrzewaniem"
      ],
      "keywords": [
        "ogrzewanie podłogowe a pasywne zyski ciepła",
        "zyski słoneczne a ogrzewanie podłogowe",
        "przegrzewanie domu od słońca",
        "duże przeszklenia a podłogówka",
        "samoregulacja ogrzewania podłogowego",
        "bezwładność cieplna podłogówki",
        "sterowanie podłogówką w nasłonecznionym salonie",
        "pompa ciepła a zamykanie pętli"
      ],
      "about": [
        {
          "@type": "Thing",
          "name": "Pasywne zyski ciepła"
        },
        {
          "@type": "Thing",
          "name": "Wodne ogrzewanie podłogowe"
        },
        {
          "@type": "Thing",
          "name": "Zyski słoneczne przez przeszklenia"
        },
        {
          "@type": "Thing",
          "name": "Sterowanie strefowe"
        }
      ],
      "citation": [
        "https://sklep.pkn.pl/pn-en-12831-1-2017-08e.html",
        "https://www.iso.org/standard/65696.html",
        "https://www.rehva.eu/rehva-journal/chapter/iso-11855-the-international-standard-on-the-design-dimensioning-installation-and-control-of-embedded-radiant-heating-and-cooling-systems",
        "https://www.energy.gov/cmei/buildings/zeb-technologies-passive-design-techniques",
        "https://sklep.pkn.pl/pn-en-1264-2-2021-10e.html"
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#webpage",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/",
      "name": "Ogrzewanie podłogowe a pasywne zyski ciepła – jak uniknąć przegrzewania od słońca?",
      "description": "Ogrzewanie podłogowe a pasywne zyski ciepła: sprawdź wpływ słońca, okien i sterowania na komfort, zużycie energii oraz ryzyko przegrzewania wnętrz, także latem.",
      "dateModified": "2026-08-26",
      "inLanguage": "pl-PL",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#breadcrumb"
      },
      "mainEntity": [
        {
          "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#article"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#laboratorium"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#faq"
        }
      ],
      "about": {
        "@type": "Thing",
        "name": "Wpływ pasywnych zysków ciepła na ogrzewanie podłogowe"
      },
      "primaryImageOfPage": {
        "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#diagram"
      }
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Strona główna",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Ogrzewanie podłogowe",
          "item": "https://projekt-ogrzewania.pl/category/ogrzewanie-podlogowe/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Ogrzewanie podłogowe a pasywne zyski ciepła",
          "item": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/"
        }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#laboratorium",
      "name": "Laboratorium chwilowego bilansu zysków słonecznych",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#rk-solar-lab",
      "description": "Edukacyjny model porównujący przybliżone chwilowe straty pomieszczenia, zyski słoneczne, zyski wewnętrzne i moc nadal oddawaną przez ogrzewanie podłogowe.",
      "applicationCategory": "EducationalApplication",
      "applicationSubCategory": "Building energy balance simulator",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript oraz obsługa SVG",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "about": {
        "@type": "Thing",
        "name": "Chwilowy bilans cieplny nasłonecznionego pomieszczenia"
      },
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      }
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#howto",
      "name": "Jak zaprojektować ogrzewanie podłogowe w domu z dużymi przeszkleniami",
      "description": "Sześć etapów projektowania instalacji, która pokrywa straty w dzień bez słońca i reaguje na zmienne zyski w nasłonecznionych pomieszczeniach.",
      "inLanguage": "pl-PL",
      "totalTime": "P1D",
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Oblicz straty każdego pomieszczenia",
          "text": "Uwzględnij przenikanie, wentylację, temperatury projektowe oraz rzeczywiste parametry przegród i stolarki.",
          "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#rk-solar-howto"
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Sprawdź orientację i przeszklenia",
          "text": "Zapisz powierzchnię czynną szyb, azymut, współczynnik g, elementy zacieniające i sąsiednie przeszkody.",
          "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#rk-solar-howto"
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Dobierz podłogę bez gwarantowanego słońca",
          "text": "Wyznacz temperaturę zasilania, rozstaw, długość i przepływ pętli tak, aby instalacja pokryła projektowe straty.",
          "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#rk-solar-howto"
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Podziel niezależne strefy",
          "text": "Nie prowadź jednego obwodu przez obszary o skrajnie różnym nasłonecznieniu i sposobie użytkowania.",
          "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#rk-solar-howto"
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Zaprojektuj reakcję sterowania",
          "text": "Połącz pogodową temperaturę zasilania, wpływ pomieszczenia, siłowniki tam, gdzie są potrzebne, oraz ochronę przeciwsłoneczną.",
          "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#rk-solar-howto"
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Sprawdź źródło przy zamykaniu pętli",
          "text": "Zweryfikuj minimalny przepływ, moc minimalną, pojemność wodną, pracę pompy obiegowej i warunki odszraniania.",
          "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#rk-solar-howto"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Czy ogrzewanie podłogowe może przegrzewać dom od słońca?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Tak, jeżeli zyski słoneczne pojawiają się wtedy, gdy jastrych nadal oddaje wcześniej zgromadzoną energię. Ryzyko rośnie przy dużych przeszkleniach, wysokiej temperaturze zasilania, braku zacienienia i niewłaściwym podziale stref."
          }
        },
        {
          "@type": "Question",
          "name": "Czy zyski słoneczne można odjąć od projektowej mocy ogrzewania?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie należy traktować ich jako stałej, gwarantowanej mocy. Ogrzewanie powinno pokryć projektowe straty również podczas mroźnej i pochmurnej pogody. Zyski słoneczne wykorzystuje się do analizy eksploatacji, sterowania i ryzyka przegrzewania."
          }
        },
        {
          "@type": "Question",
          "name": "Na czym polega samoregulacja ogrzewania podłogowego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Gdy temperatura operacyjna pomieszczenia rośnie, maleje różnica między wnętrzem a powierzchnią podłogi, dlatego emisja ciepła z podłogi spada. Efekt jest silny w systemach niskotemperaturowych, ale nie usuwa energii zgromadzonej w jastrychu."
          }
        },
        {
          "@type": "Question",
          "name": "Czy przy dużych oknach trzeba zwiększyć rozstaw rur?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie można tego robić wyłącznie z powodu spodziewanych zysków słonecznych. Rozstaw wynika z projektowych strat pomieszczenia, temperatury zasilania, oporu posadzki i dopuszczalnej temperatury powierzchni."
          }
        },
        {
          "@type": "Question",
          "name": "Czy sterowanie pogodowe wystarczy przy południowych przeszkleniach?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Jest bardzo dobrą podstawą, ponieważ ogranicza temperaturę zasilania, ale czujnik zewnętrzny nie mierzy bezpośrednio słońca wpadającego do konkretnego salonu. Przy dużych i zmiennych zyskach pomocny może być wpływ pomieszczenia, podział stref oraz zacienienie."
          }
        },
        {
          "@type": "Question",
          "name": "Czy każdy pokój powinien mieć osobny termostat i siłownik?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie zawsze. Zależy to od różnic w nasłonecznieniu, temperaturach zadanych i sposobie użytkowania. Najważniejsze jest, aby pętle stref o różnych profilach zysków można było regulować niezależnie bez destabilizowania źródła ciepła."
          }
        },
        {
          "@type": "Question",
          "name": "Czy pompa ciepła potrzebuje bufora, gdy termostaty zamykają pętle?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie ma jednej odpowiedzi. Trzeba sprawdzić minimalny przepływ, pojemność wodną pozostającą w pracy, moc minimalną, sposób odszraniania i wymagania konkretnego urządzenia. Bufor jest jednym z rozwiązań, a nie automatycznym obowiązkiem."
          }
        },
        {
          "@type": "Question",
          "name": "Jak najlepiej ograniczyć przegrzewanie od słońca?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Najskuteczniejsze jest połączenie właściwego zacienienia zewnętrznego, niskiej temperatury zasilania, podziału stref, równoważenia hydraulicznego i sterowania uwzględniającego temperaturę pomieszczenia. Latem kluczowe jest zatrzymanie energii przed szybą."
          }
        }
      ]
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
        "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
        "width": 360,
        "height": 360
      },
      "jobTitle": "Projektant instalacji sanitarnych, specjalista HVAC i ogrzewania podłogowego",
      "description": "Projektant wodnych instalacji ogrzewania podłogowego i autor opracowań technicznych dotyczących hydrauliki, źródeł ciepła, automatyki oraz fizyki budynku. Właściciel serwisów Projekt-Ogrzewania.pl, Remont.biz.pl i Sobir.pl.",
      "knowsAbout": [
        "projektowanie ogrzewania podłogowego",
        "obliczenia obciążenia cieplnego",
        "hydraulika instalacji grzewczych",
        "pompy ciepła",
        "sterowanie pogodowe",
        "fizyka budynku",
        "pasywne zyski ciepła"
      ],
      "sameAs": [
        "https://projekt-ogrzewania.pl/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ],
      "owns": [
        {
          "@id": "https://projekt-ogrzewania.pl/#organization"
        },
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "description": "Serwis poświęcony projektowaniu wodnego ogrzewania podłogowego, należący do Roberta Kucharskiego.",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
        "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg"
      },
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "owner": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "description": "Serwis budowlano-remontowy należący do Roberta Kucharskiego.",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "owner": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "description": "Portal o budowie, instalacjach i technologii domu należący do Roberta Kucharskiego.",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "owner": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "description": "Projektowanie ogrzewania podłogowego i techniczna wiedza o instalacjach grzewczych.",
      "inLanguage": "pl-PL",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "copyrightHolder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/#diagram",
      "name": "Schemat chwilowego bilansu zysków słonecznych, strat i ogrzewania podłogowego",
      "caption": "Autorski schemat przepływu energii w nasłonecznionym pomieszczeniu z ogrzewaniem podłogowym.",
      "creator": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "creditText": "Robert Kucharski, Projekt-Ogrzewania.pl",
      "copyrightNotice": "Robert Kucharski"
    }
  ]
}
</script>

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

  function initializeSolarGuide() {
    var root = document.getElementById("rk-solar-guide");
    if (!root) {
      return false;
    }
    if (root.getAttribute("data-rk-solar-ready") === "1") {
      return true;
    }
    root.setAttribute("data-rk-solar-ready", "1");

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

    function clamp(value, minimum, maximum) {
      return Math.min(maximum, Math.max(minimum, value));
    }

    function numberFrom(id, fallback) {
      var element = byId(id);
      if (!element) {
        return fallback;
      }
      var parsed = Number(element.value);
      return Number.isFinite(parsed) ? parsed : fallback;
    }

    function formatNumber(value, digits) {
      return new Intl.NumberFormat("pl-PL", {
        minimumFractionDigits: digits,
        maximumFractionDigits: digits
      }).format(value);
    }

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

    function setAttribute(id, name, value) {
      var element = byId(id);
      if (element) {
        element.setAttribute(name, String(value));
      }
    }

    function watts(value) {
      return formatNumber(Math.round(value), 0) + " W";
    }

    function signedWatts(value) {
      var rounded = Math.round(value);
      if (rounded > 0) {
        return "+" + formatNumber(rounded, 0) + " W";
      }
      if (rounded < 0) {
        return "−" + formatNumber(Math.abs(rounded), 0) + " W";
      }
      return "0 W";
    }

    function updateBar(id, valueId, value, maximum) {
      var baseline = 265;
      var chartHeight = 220;
      var height = maximum > 0 ? value / maximum * chartHeight : 0;
      height = clamp(height, 0, chartHeight);
      var y = baseline - height;
      setAttribute(id, "y", y.toFixed(2));
      setAttribute(id, "height", height.toFixed(2));
      setAttribute(valueId, "y", Math.max(35, y - 8).toFixed(2));
      setText(valueId, watts(value));
    }

    function updateChart(loss, solarGain, internalGain, activePower) {
      var largest = Math.max(loss, solarGain, internalGain, activePower, 100);
      var maximum = Math.ceil(largest * 1.15 / 100) * 100;
      setText("rk-solar-ymax", formatNumber(maximum, 0));
      setText("rk-solar-y75", formatNumber(maximum * 0.75, 0));
      setText("rk-solar-y50", formatNumber(maximum * 0.5, 0));
      setText("rk-solar-y25", formatNumber(maximum * 0.25, 0));
      updateBar("rk-solar-bar-loss", "rk-solar-bar-loss-value", loss, maximum);
      updateBar("rk-solar-bar-sun", "rk-solar-bar-sun-value", solarGain, maximum);
      updateBar("rk-solar-bar-internal", "rk-solar-bar-internal-value", internalGain, maximum);
      updateBar("rk-solar-bar-floor", "rk-solar-bar-floor-value", activePower, maximum);
    }

    function updateStatus(currentOutside, indoor, currentLoss, gains, activePower, balance) {
      var status = byId("rk-solar-status");
      if (!status) {
        return;
      }

      var statusClass = "is-success";
      var title = "Bilans chwilowy jest zbliżony do równowagi";
      var copy = "Zyski i moc podłogi w przybliżeniu odpowiadają aktualnym stratom. To nadal fotografia jednej chwili, a nie prognoza temperatury po kilku godzinach.";
      var strongThreshold = Math.max(150, currentLoss * 0.25);
      var mildThreshold = Math.max(50, currentLoss * 0.08);

      if (currentOutside >= indoor) {
        if (activePower > 0) {
          statusClass = "is-danger";
          title = "Model nie wykazuje potrzeby grzania, a podłoga nadal oddaje energię";
          copy = "Temperatura zewnętrzna nie jest niższa od wewnętrznej, więc uproszczone straty wynoszą zero. Aktywne grzanie i zyski tworzą nadwyżkę, której termostat nie usunie z rozgrzanego jastrychu.";
        } else {
          statusClass = "is-warning";
          title = "Brak potrzeby aktywnego grzania w uproszczonym modelu";
          copy = "Przy tej temperaturze zewnętrznej model nie wyznacza strat przez różnicę temperatur. Zyski słoneczne i bytowe mogą nadal podnosić temperaturę wnętrza.";
        }
      } else if (balance > strongThreshold) {
        statusClass = "is-danger";
        title = "Wyraźna chwilowa nadwyżka energii";
        copy = "Zyski wynoszą " + watts(gains) + ", a podłoga nadal oddaje " + watts(activePower) + ". Sterowanie może zatrzymać nowy dopływ, lecz nie usunie energii zgromadzonej w jastrychu.";
      } else if (balance > mildThreshold) {
        statusClass = "is-warning";
        title = "Pojawia się umiarkowana chwilowa nadwyżka";
        copy = "Bilans wskazuje nadmiar około " + watts(balance) + ". Warto ograniczyć dalsze ładowanie podłogi i obserwować wpływ masy cieplnej oraz zacienienia.";
      } else if (balance < -strongThreshold) {
        statusClass = "is-warning";
        title = "Chwilowa moc jest wyraźnie niższa od przybliżonych strat";
        copy = "W tej chwili brakuje około " + watts(Math.abs(balance)) + ". Model nie rozstrzyga, czy różnicę pokrywa energia zgromadzona w przegrodach ani jak szybko zmieni się temperatura.";
      } else if (balance < -mildThreshold) {
        statusClass = "is-warning";
        title = "Niewielki chwilowy deficyt energii";
        copy = "Dopływy są nieco niższe od przybliżonych strat. Rzeczywista reakcja zależy od bezwładności budynku, sterowania i wcześniejszego przebiegu temperatur.";
      }

      status.className = "rk-solar-status " + statusClass;
      setText("rk-solar-status-title", title);
      setText("rk-solar-status-copy", copy);
    }

    function calculate() {
      var designLoad = numberFrom("rk-solar-design-load", 1200);
      var designOutside = numberFrom("rk-solar-design-out", -20);
      var currentOutside = numberFrom("rk-solar-current-out", 0);
      var indoor = numberFrom("rk-solar-indoor", 21);
      var glassArea = numberFrom("rk-solar-glass", 8);
      var gValue = numberFrom("rk-solar-gvalue", 0.5);
      var irradiance = numberFrom("rk-solar-irradiance", 140);
      var shading = numberFrom("rk-solar-shading", 85);
      var internalGain = numberFrom("rk-solar-internal", 120);
      var activePower = numberFrom("rk-solar-active", 600);

      var designDelta = Math.max(0.1, indoor - designOutside);
      var currentDelta = Math.max(0, indoor - currentOutside);
      var currentLoss = designLoad * currentDelta / designDelta;
      currentLoss = clamp(currentLoss, 0, designLoad * 1.5);

      var solarGain = glassArea * gValue * irradiance * shading / 100;
      var totalGains = solarGain + internalGain;
      var requiredActive = Math.max(0, currentLoss - totalGains);
      var balance = activePower + totalGains - currentLoss;
      var coverage = 0;
      if (currentLoss > 0.01) {
        coverage = totalGains / currentLoss * 100;
      } else if (totalGains > 0) {
        coverage = 999;
      }
      coverage = Math.min(999, coverage);

      setText("rk-solar-design-load-output", watts(designLoad));
      setText("rk-solar-design-out-output", formatNumber(designOutside, 0) + "°C");
      setText("rk-solar-current-out-output", formatNumber(currentOutside, 0) + "°C");
      setText("rk-solar-indoor-output", formatNumber(indoor, indoor % 1 === 0 ? 0 : 1) + "°C");
      setText("rk-solar-glass-output", formatNumber(glassArea, 1) + " m²");
      setText("rk-solar-gvalue-output", formatNumber(gValue, 2));
      setText("rk-solar-irradiance-output", formatNumber(irradiance, 0) + " W/m²");
      setText("rk-solar-shading-output", formatNumber(shading, 0) + "%");
      setText("rk-solar-internal-output", watts(internalGain));
      setText("rk-solar-active-output", watts(activePower));

      setText("rk-solar-result-loss", watts(currentLoss));
      setText("rk-solar-result-sun", watts(solarGain));
      setText("rk-solar-result-gains", watts(totalGains));
      setText("rk-solar-result-required", watts(requiredActive));
      setText("rk-solar-result-coverage", formatNumber(Math.round(coverage), 0) + "%");
      setText("rk-solar-result-balance", signedWatts(balance));

      updateStatus(currentOutside, indoor, currentLoss, totalGains, activePower, balance);
      updateChart(currentLoss, solarGain, internalGain, activePower);
    }

    var form = byId("rk-solar-form");
    if (form) {
      form.addEventListener("submit", function (event) {
        event.preventDefault();
      });
      var controls = form.querySelectorAll("input[type='range']");
      controls.forEach(function (control) {
        control.addEventListener("input", calculate);
        control.addEventListener("change", calculate);
      });
    }

    var navigationLinks = root.querySelectorAll(".rk-solar-nav a[href^='#']");
    navigationLinks.forEach(function (link) {
      link.addEventListener("click", function (event) {
        var targetId = link.getAttribute("href");
        if (!targetId) {
          return;
        }
        var target = root.querySelector(targetId);
        if (!target) {
          return;
        }
        event.preventDefault();
        var reducedMotion = false;
        if (window.matchMedia) {
          reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
        }
        target.scrollIntoView({
          behavior: reducedMotion ? "auto" : "smooth",
          block: "start"
        });
        if (window.history) {
          if (window.history.replaceState) {
            window.history.replaceState(null, "", targetId);
          }
        }
      });
    });

    var progress = root.querySelector(".rk-solar-progress");
    function updateProgress() {
      if (!progress) {
        return;
      }
      var rectangle = root.getBoundingClientRect();
      var available = root.offsetHeight - window.innerHeight;
      var passed = -rectangle.top;
      var ratio = available > 0 ? clamp(passed / available, 0, 1) : 0;
      progress.style.width = formatNumber(ratio * 100, 2).replace(",", ".") + "%";
    }

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

  function attemptInitialization() {
    initializeSolarGuide();
  }

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

  window.addEventListener("load", attemptInitialization);
  window.setTimeout(attemptInitialization, 250);
  window.setTimeout(attemptInitialization, 1200);
  window.setTimeout(attemptInitialization, 3000);

  if (window.MutationObserver) {
    var observer = new MutationObserver(function () {
      var root = document.getElementById("rk-solar-guide");
      if (root) {
        initializeSolarGuide();
        if (root.getAttribute("data-rk-solar-ready") === "1") {
          observer.disconnect();
        }
      }
    });
    observer.observe(document.documentElement, { childList: true, subtree: true });
  }
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">Ogrzewanie podłogowe a pasywne zyski ciepła.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kiedy najlepiej planować montaż ogrzewania podłogowego w nowym domu?</title>
		<link>https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 11 Mar 2025 08:50:26 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Harmonogram budowy]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Komfort cieplny]]></category>
		<category><![CDATA[Nowoczesne technologie grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Porady budowlane]]></category>
		<category><![CDATA[Projektowanie domu]]></category>
		<category><![CDATA[budowa domu]]></category>
		<category><![CDATA[dom pasywny]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[faza projektowa]]></category>
		<category><![CDATA[harmonogram budowy]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[koordynacja prac]]></category>
		<category><![CDATA[materiały grzewcze]]></category>
		<category><![CDATA[nowy dom]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[planowanie instalacji]]></category>
		<category><![CDATA[podłogówka]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[wylewka]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2395</guid>

					<description><![CDATA[<p>Budowa nowego domu to idealny moment, by zadbać o komfort cieplny na lata. W tym artykule znajdziesz praktyczne porady, jak zaplanować instalację ogrzewania podłogowego, aby uniknąć opóźnień i dodatkowych kosztów. Dowiesz się, dlaczego faza projektowa jest kluczowa, jak zsynchronizować prace z harmonogramem budowy i kiedy najlepiej planować montaż ogrzewania podłogowego w nowym domu. Poznaj kroki, przykłady i błędy do uniknięcia, by Twój system działał efektywnie!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/">Kiedy najlepiej planować montaż ogrzewania podłogowego w nowym domu?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-stage-guide {
    --rk-navy: #0c2739;
    --rk-navy-2: #12384c;
    --rk-navy-3: #1a4358;
    --rk-cyan: #29c5d6;
    --rk-cyan-dark: #0798bb;
    --rk-cyan-soft: #dff7fa;
    --rk-orange: #ff6845;
    --rk-orange-dark: #e64f31;
    --rk-yellow: #f1b42a;
    --rk-green: #42d6ad;
    --rk-red: #d9544d;
    --rk-purple: #6d65cf;
    --rk-ink: #10283a;
    --rk-copy: #385266;
    --rk-muted: #698092;
    --rk-line: #d4e2e8;
    --rk-bg: #f4f8fa;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: Arial, Helvetica, sans-serif;
    line-height: 1.62;
    margin: 0 auto;
    max-width: 1360px;
    overflow: hidden;
    width: 100%;
  }

  #rk-stage-guide,
  #rk-stage-guide * {
    box-sizing: border-box;
  }

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

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

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

  #rk-stage-guide button:focus-visible,
  #rk-stage-guide a:focus-visible,
  #rk-stage-guide summary:focus-visible,
  #rk-stage-guide input:focus-visible + span {
    outline: 3px solid rgba(41, 197, 214, 0.45);
    outline-offset: 3px;
  }

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

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

  #rk-stage-guide .rk-stg-hero {
    background:
      radial-gradient(circle at 88% 112%, rgba(41, 197, 214, 0.24) 0, rgba(41, 197, 214, 0.24) 17%, transparent 17.2%),
      linear-gradient(120deg, #0c2739 0%, #143e52 62%, #0d6577 100%);
    color: var(--rk-white);
    overflow: hidden;
    padding: 62px 58px 56px;
    position: relative;
  }

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

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

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

  #rk-stage-guide .rk-stg-hero-title {
    font-size: clamp(2.35rem, 6vw, 5.35rem);
    margin: 0;
    max-width: 1120px;
  }

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

  #rk-stage-guide .rk-stg-hero-lead {
    color: #e4f1f5;
    font-size: clamp(1.08rem, 2vw, 1.44rem);
    line-height: 1.55;
    margin: 27px 0 0;
    max-width: 1040px;
  }

  #rk-stage-guide .rk-stg-hero-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 30px;
  }

  #rk-stage-guide .rk-stg-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-stage-guide .rk-stg-meta {
    color: #c6d9df;
    display: flex;
    flex-wrap: wrap;
    font-size: 0.83rem;
    font-weight: 700;
    gap: 12px 24px;
    margin-top: 34px;
  }

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

  #rk-stage-guide .rk-stg-shortcuts {
    align-items: flex-start;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    padding: 22px 38px;
    position: static;
  }

  #rk-stage-guide .rk-stg-shortcuts-label {
    color: var(--rk-ink);
    flex: 0 0 auto;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.09em;
    padding: 9px 4px 9px 0;
    text-transform: uppercase;
  }

  #rk-stage-guide .rk-stg-shortcuts a {
    background: #f0f5f7;
    border-radius: 999px;
    color: var(--rk-ink);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    padding: 9px 13px;
    text-decoration: none;
  }

  #rk-stage-guide .rk-stg-shortcuts a:hover,
  #rk-stage-guide .rk-stg-shortcuts a:focus-visible {
    background: var(--rk-cyan);
    color: var(--rk-ink);
  }

  #rk-stage-guide .rk-stg-section {
    padding: 58px;
    scroll-margin-top: 24px;
  }

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

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

  #rk-stage-guide .rk-stg-section-dark {
    background: var(--rk-navy);
    color: #e5f0f4;
  }

  #rk-stage-guide .rk-stg-section-dark a {
    color: #73e4ee;
  }

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

  #rk-stage-guide .rk-stg-section-dark .rk-stg-eyebrow {
    color: #69e7f2;
  }

  #rk-stage-guide h2.rk-stg-section-title {
    color: var(--rk-ink);
    font-size: clamp(1.75rem, 3.8vw, 3.35rem);
    margin: 0 0 20px;
    max-width: 1040px;
  }

  #rk-stage-guide .rk-stg-section-dark h2.rk-stg-section-title {
    color: #ffffff;
  }

  #rk-stage-guide h3 {
    color: var(--rk-ink);
    font-size: clamp(1.18rem, 2vw, 1.55rem);
    font-weight: 900;
    letter-spacing: -0.02em;
    line-height: 1.24;
    margin: 32px 0 12px;
  }

  #rk-stage-guide .rk-stg-section-dark h3 {
    color: #ffffff;
  }

  #rk-stage-guide h4 {
    color: var(--rk-ink);
    font-size: 1.02rem;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 8px;
  }

  #rk-stage-guide p,
  #rk-stage-guide li {
    font-size: 1rem;
  }

  #rk-stage-guide .rk-stg-lead {
    color: var(--rk-copy);
    font-size: 1.09rem;
    margin: 0 0 28px;
    max-width: 1030px;
  }

  #rk-stage-guide .rk-stg-section-dark .rk-stg-lead {
    color: #c7dce4;
  }

  #rk-stage-guide .rk-stg-copy {
    color: var(--rk-copy);
    max-width: 1040px;
  }

  #rk-stage-guide .rk-stg-answer {
    background: linear-gradient(100deg, #e5f8fb 0%, #f5fbfc 100%);
    border: 1px solid #b7e3e9;
    border-left: 6px solid var(--rk-cyan-dark);
    border-radius: 16px;
    margin: 26px 0 30px;
    padding: 24px 26px;
  }

  #rk-stage-guide .rk-stg-answer strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.18rem;
    margin-bottom: 7px;
  }

  #rk-stage-guide .rk-stg-answer p {
    color: var(--rk-copy);
    margin: 0;
  }

  #rk-stage-guide .rk-stg-grid-2,
  #rk-stage-guide .rk-stg-grid-3,
  #rk-stage-guide .rk-stg-grid-4 {
    display: grid;
    gap: 18px;
  }

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

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

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

  #rk-stage-guide .rk-stg-card {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    min-width: 0;
    padding: 22px;
  }

  #rk-stage-guide .rk-stg-card-number {
    align-items: center;
    background: var(--rk-cyan);
    border-radius: 10px;
    color: var(--rk-ink);
    display: inline-flex;
    font-size: 0.84rem;
    font-weight: 900;
    height: 34px;
    justify-content: center;
    margin-bottom: 15px;
    width: 34px;
  }

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

  #rk-stage-guide .rk-stg-note {
    background: #eef8fa;
    border-left: 5px solid var(--rk-cyan-dark);
    border-radius: 12px;
    color: var(--rk-copy);
    margin: 25px 0;
    padding: 18px 21px;
  }

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

  #rk-stage-guide .rk-stg-note-warning {
    background: #fff5e0;
    border-left-color: var(--rk-yellow);
  }

  #rk-stage-guide .rk-stg-note-risk {
    background: #fff0ec;
    border-left-color: var(--rk-orange);
  }

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

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

  #rk-stage-guide .rk-stg-list li + li {
    margin-top: 9px;
  }

  #rk-stage-guide .rk-stg-table-wrap {
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    margin: 28px 0;
    overflow: hidden;
  }

  #rk-stage-guide table {
    border-collapse: collapse;
    margin: 0;
    width: 100%;
  }

  #rk-stage-guide th,
  #rk-stage-guide td {
    border: 0;
    border-bottom: 1px solid var(--rk-line);
    padding: 15px 17px;
    text-align: left;
    vertical-align: top;
  }

  #rk-stage-guide th {
    background: var(--rk-navy-2);
    color: #ffffff;
    font-size: 0.78rem;
    font-weight: 900;
    letter-spacing: 0.04em;
    text-transform: uppercase;
  }

  #rk-stage-guide td {
    color: var(--rk-copy);
  }

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

  #rk-stage-guide tbody tr:nth-child(even) td {
    background: #f7fafb;
  }

  #rk-stage-guide .rk-stg-analyzer {
    background: #102f43;
    border: 1px solid #31586a;
    border-radius: 22px;
    margin-top: 30px;
    overflow: hidden;
  }

  #rk-stage-guide .rk-stg-analyzer-head {
    background: linear-gradient(100deg, #143e52, #176477);
    padding: 27px 29px;
  }

  #rk-stage-guide .rk-stg-analyzer-head h3 {
    margin: 0 0 8px;
  }

  #rk-stage-guide .rk-stg-analyzer-head p {
    color: #c7dce4;
    margin: 0;
  }

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

  #rk-stage-guide .rk-stg-step-label {
    align-items: center;
    color: #ffffff;
    display: flex;
    font-size: 1.05rem;
    font-weight: 900;
    gap: 10px;
    margin-bottom: 15px;
  }

  #rk-stage-guide .rk-stg-step-label span {
    align-items: center;
    background: var(--rk-cyan);
    border-radius: 8px;
    color: var(--rk-ink);
    display: inline-flex;
    font-size: 0.78rem;
    height: 31px;
    justify-content: center;
    width: 31px;
  }

  #rk-stage-guide .rk-stg-stage-buttons {
    display: grid;
    gap: 10px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-stage-guide .rk-stg-stage-button,
  #rk-stage-guide .rk-stg-scenario-button {
    appearance: none;
    background: #173b50;
    border: 1px solid #3c6477;
    border-radius: 12px;
    color: #ffffff;
    cursor: pointer;
    font-weight: 800;
    line-height: 1.25;
    min-height: 56px;
    padding: 12px 14px;
    text-align: center;
    transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
  }

  #rk-stage-guide .rk-stg-stage-button:hover,
  #rk-stage-guide .rk-stg-scenario-button:hover {
    border-color: var(--rk-cyan);
    transform: translateY(-1px);
  }

  #rk-stage-guide .rk-stg-stage-button[aria-pressed="true"],
  #rk-stage-guide .rk-stg-scenario-button[aria-pressed="true"] {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    color: var(--rk-ink);
  }

  #rk-stage-guide .rk-stg-check-wrap {
    border-top: 1px solid #31586a;
    margin-top: 27px;
    padding-top: 27px;
  }

  #rk-stage-guide .rk-stg-check-grid {
    display: grid;
    gap: 10px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  #rk-stage-guide .rk-stg-check {
    cursor: pointer;
    display: block;
    min-width: 0;
  }

  #rk-stage-guide .rk-stg-check input {
    height: 1px;
    opacity: 0;
    position: absolute;
    width: 1px;
  }

  #rk-stage-guide .rk-stg-check span {
    align-items: center;
    background: #173b50;
    border: 1px solid #3c6477;
    border-radius: 12px;
    color: #d7e7ec;
    display: flex;
    font-size: 0.84rem;
    font-weight: 700;
    gap: 10px;
    min-height: 62px;
    padding: 12px 13px;
  }

  #rk-stage-guide .rk-stg-check span::before {
    align-items: center;
    border: 2px solid #79a4b5;
    border-radius: 5px;
    color: var(--rk-ink);
    content: "";
    display: inline-flex;
    flex: 0 0 21px;
    font-size: 0.78rem;
    font-weight: 900;
    height: 21px;
    justify-content: center;
  }

  #rk-stage-guide .rk-stg-check input:checked + span {
    background: #164657;
    border-color: var(--rk-cyan);
    color: #ffffff;
  }

  #rk-stage-guide .rk-stg-check input:checked + span::before {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    content: "✓";
  }

  #rk-stage-guide .rk-stg-readiness {
    background: #0c2637;
    border: 1px solid #31586a;
    border-radius: 14px;
    margin-top: 22px;
    padding: 15px 17px;
  }

  #rk-stage-guide .rk-stg-readiness-head {
    color: #d8e8ed;
    display: flex;
    font-size: 0.8rem;
    font-weight: 800;
    justify-content: space-between;
    margin-bottom: 9px;
  }

  #rk-stage-guide .rk-stg-readiness-track {
    background: #294b5d;
    border-radius: 999px;
    height: 11px;
    overflow: hidden;
  }

  #rk-stage-guide .rk-stg-readiness-fill {
    background: linear-gradient(90deg, var(--rk-orange), var(--rk-yellow), var(--rk-green));
    border-radius: inherit;
    display: block;
    height: 100%;
    transition: width 0.25s ease;
    width: 0;
  }

  #rk-stage-guide .rk-stg-analyzer-results {
    display: grid;
    gap: 12px;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-top: 24px;
  }

  #rk-stage-guide .rk-stg-analyzer-result {
    background: #173b50;
    border: 1px solid #3c6477;
    border-radius: 14px;
    min-width: 0;
    padding: 16px;
  }

  #rk-stage-guide .rk-stg-analyzer-result span {
    color: #9fc3cf;
    display: block;
    font-size: 0.66rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-bottom: 7px;
    text-transform: uppercase;
  }

  #rk-stage-guide .rk-stg-analyzer-result strong {
    color: #ffffff;
    display: block;
    font-size: 1rem;
    line-height: 1.28;
    overflow-wrap: anywhere;
  }

  #rk-stage-guide .rk-stg-analyzer-message {
    background: #153e50;
    border-left: 5px solid var(--rk-cyan);
    border-radius: 12px;
    color: #e5f1f4;
    margin-top: 18px;
    padding: 18px 20px;
  }

  #rk-stage-guide .rk-stg-analyzer-message.is-warning {
    background: #4a3c24;
    border-left-color: var(--rk-yellow);
  }

  #rk-stage-guide .rk-stg-analyzer-message.is-risk {
    background: #4b2e2c;
    border-left-color: var(--rk-orange);
  }

  #rk-stage-guide .rk-stg-analyzer-message strong {
    color: #ffffff;
  }

  #rk-stage-guide .rk-stg-analyzer-message p {
    margin: 6px 0 0;
  }

  #rk-stage-guide .rk-stg-missing {
    color: #bad1d9;
    font-size: 0.8rem;
    margin: 13px 0 0;
  }

  #rk-stage-guide .rk-stg-timeline {
    display: grid;
    gap: 13px;
    margin-top: 30px;
  }

  #rk-stage-guide .rk-stg-timeline-item {
    align-items: start;
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    display: grid;
    gap: 17px;
    grid-template-columns: 58px minmax(0, 1fr) minmax(180px, 0.35fr);
    padding: 18px;
  }

  #rk-stage-guide .rk-stg-timeline-number {
    align-items: center;
    background: var(--rk-navy-2);
    border-radius: 12px;
    color: #ffffff;
    display: flex;
    font-size: 0.8rem;
    font-weight: 900;
    height: 46px;
    justify-content: center;
    width: 46px;
  }

  #rk-stage-guide .rk-stg-timeline-copy strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.02rem;
    margin-bottom: 4px;
  }

  #rk-stage-guide .rk-stg-timeline-copy p {
    color: var(--rk-copy);
    margin: 0;
  }

  #rk-stage-guide .rk-stg-timeline-owner {
    background: #eef7f9;
    border-radius: 10px;
    color: var(--rk-copy);
    font-size: 0.77rem;
    font-weight: 800;
    padding: 9px 11px;
  }

  #rk-stage-guide .rk-stg-cta {
    background:
      radial-gradient(circle at 100% 120%, rgba(41, 197, 214, 0.22) 0, rgba(41, 197, 214, 0.22) 22%, transparent 22.2%),
      linear-gradient(120deg, #0d293b 0%, #16495d 100%);
    border-radius: 22px;
    color: #ffffff;
    margin-top: 36px;
    overflow: hidden;
    padding: 38px;
    position: relative;
  }

  #rk-stage-guide .rk-stg-cta-title {
    font-size: clamp(1.55rem, 3vw, 2.55rem);
    margin: 0;
    max-width: 850px;
  }

  #rk-stage-guide .rk-stg-cta p {
    color: #d4e6ec;
    margin: 16px 0 22px;
    max-width: 920px;
  }

  #rk-stage-guide .rk-stg-cta-button {
    background: var(--rk-orange);
    border-radius: 12px;
    box-shadow: 0 12px 28px rgba(255, 104, 69, 0.24);
    color: #ffffff !important;
    display: inline-flex;
    font-weight: 900;
    justify-content: center;
    line-height: 1.25;
    padding: 14px 20px;
    text-align: center;
    text-decoration: none !important;
  }

  #rk-stage-guide .rk-stg-cta-button:hover,
  #rk-stage-guide .rk-stg-cta-button:focus-visible {
    background: #ff7b5d;
    color: #ffffff;
    transform: translateY(-1px);
  }

  #rk-stage-guide .rk-stg-scenario {
    background: var(--rk-navy);
    border-radius: 22px;
    margin-top: 30px;
    padding: 28px;
  }

  #rk-stage-guide .rk-stg-scenario-head h3 {
    margin-top: 0;
  }

  #rk-stage-guide .rk-stg-scenario-head p {
    color: #bfd5dd;
    margin: 0;
  }

  #rk-stage-guide .rk-stg-scenario-buttons {
    display: grid;
    gap: 12px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin: 22px 0;
  }

  #rk-stage-guide .rk-stg-floor-panel {
    background: #173b50;
    border: 1px solid #3c6477;
    border-radius: 18px;
    padding: 20px;
  }

  #rk-stage-guide .rk-stg-floor-panel h4 {
    color: #ffffff;
  }

  #rk-stage-guide .rk-stg-floor-panel > p {
    color: #bfd5dd;
    margin: 0 0 17px;
  }

  #rk-stage-guide .rk-stg-floor-diagram {
    background: #f7fbfc;
    border-radius: 14px;
    overflow: hidden;
    padding: 18px;
  }

  #rk-stage-guide .rk-stg-diagram-status {
    align-items: center;
    background: #e6f6f8;
    border: 1px solid #bfdee4;
    border-radius: 10px;
    color: var(--rk-ink);
    display: flex;
    font-size: 0.82rem;
    font-weight: 900;
    justify-content: space-between;
    margin-bottom: 14px;
    padding: 11px 13px;
  }

  #rk-stage-guide .rk-stg-floor-diagram[data-state="late"] .rk-stg-diagram-status {
    background: #fff0ec;
    border-color: #f2b9aa;
  }

  #rk-stage-guide .rk-stg-floor-stack {
    border: 1px solid #c4d9e0;
    border-radius: 12px;
    overflow: hidden;
  }

  #rk-stage-guide .rk-stg-layer {
    align-items: stretch;
    background: #ffffff;
    border-bottom: 1px solid #d1e0e5;
    display: grid;
    grid-template-columns: minmax(130px, 0.28fr) minmax(0, 1fr);
    min-height: 54px;
  }

  #rk-stage-guide .rk-stg-layer:last-child {
    border-bottom: 0;
  }

  #rk-stage-guide .rk-stg-layer-label {
    align-items: center;
    color: var(--rk-ink);
    display: flex;
    font-size: 0.78rem;
    font-weight: 900;
    padding: 11px 13px;
  }

  #rk-stage-guide .rk-stg-layer-field {
    align-items: center;
    background: #edf4f6;
    display: flex;
    min-width: 0;
    padding: 8px 10px;
  }

  #rk-stage-guide .rk-stg-layer-fill {
    align-items: center;
    border-radius: 8px;
    color: var(--rk-ink);
    display: flex;
    font-size: 0.76rem;
    font-weight: 800;
    height: 100%;
    min-height: 34px;
    overflow-wrap: anywhere;
    padding: 8px 11px;
    transition: width 0.25s ease, background 0.25s ease;
    width: 96%;
  }

  #rk-stage-guide .rk-stg-layer-finish .rk-stg-layer-fill {
    background: #d2dce0;
  }

  #rk-stage-guide .rk-stg-layer-screed .rk-stg-layer-fill {
    background: #e7cfb6;
  }

  #rk-stage-guide .rk-stg-layer-heating .rk-stg-layer-fill {
    background: #ffb69f;
  }

  #rk-stage-guide .rk-stg-layer-insulation .rk-stg-layer-fill {
    background: #c7edf2;
  }

  #rk-stage-guide .rk-stg-layer-base .rk-stg-layer-fill {
    background: #aab8bf;
  }

  #rk-stage-guide .rk-stg-floor-diagram[data-state="late"] .rk-stg-layer-insulation .rk-stg-layer-fill {
    background: #ffd77b;
    width: 58%;
  }

  #rk-stage-guide .rk-stg-floor-diagram[data-state="late"] .rk-stg-layer-screed .rk-stg-layer-fill {
    background: #ff9b79;
    width: 78%;
  }

  #rk-stage-guide .rk-stg-floor-diagram[data-state="late"] .rk-stg-layer-heating .rk-stg-layer-fill {
    background: #f5846b;
    width: 82%;
  }

  #rk-stage-guide .rk-stg-scenario-results {
    display: grid;
    gap: 12px;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-top: 16px;
  }

  #rk-stage-guide .rk-stg-scenario-result {
    background: #173b50;
    border: 1px solid #3c6477;
    border-radius: 13px;
    min-width: 0;
    padding: 15px;
  }

  #rk-stage-guide .rk-stg-scenario-result span {
    color: #9fc3cf;
    display: block;
    font-size: 0.65rem;
    font-weight: 900;
    letter-spacing: 0.07em;
    margin-bottom: 6px;
    text-transform: uppercase;
  }

  #rk-stage-guide .rk-stg-scenario-result strong {
    color: #ffffff;
    display: block;
    font-size: 0.96rem;
    line-height: 1.28;
    overflow-wrap: anywhere;
  }

  #rk-stage-guide .rk-stg-icon-list {
    display: grid;
    gap: 13px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 25px;
  }

  #rk-stage-guide .rk-stg-icon-item {
    align-items: flex-start;
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    display: flex;
    gap: 13px;
    min-width: 0;
    padding: 17px;
  }

  #rk-stage-guide .rk-stg-icon-item::before {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 50%;
    color: var(--rk-cyan-dark);
    content: "✓";
    display: inline-flex;
    flex: 0 0 29px;
    font-size: 0.78rem;
    font-weight: 900;
    height: 29px;
    justify-content: center;
  }

  #rk-stage-guide .rk-stg-icon-item strong {
    color: var(--rk-ink);
    display: block;
    margin-bottom: 3px;
  }

  #rk-stage-guide .rk-stg-icon-item p {
    color: var(--rk-copy);
    font-size: 0.9rem;
    margin: 0;
  }

  #rk-stage-guide .rk-stg-error-grid {
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 26px;
  }

  #rk-stage-guide .rk-stg-error {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-top: 5px solid var(--rk-orange);
    border-radius: 14px;
    padding: 20px;
  }

  #rk-stage-guide .rk-stg-error span {
    color: var(--rk-orange-dark);
    display: block;
    font-size: 0.67rem;
    font-weight: 900;
    letter-spacing: 0.09em;
    margin-bottom: 9px;
    text-transform: uppercase;
  }

  #rk-stage-guide .rk-stg-error p {
    color: var(--rk-copy);
    margin: 0;
  }

  #rk-stage-guide .rk-stg-author {
    background: #f2f7f9;
    border-top: 1px solid var(--rk-line);
    padding: 58px;
    scroll-margin-top: 24px;
  }

  #rk-stage-guide .rk-stg-author-layout {
    display: grid;
    gap: 28px;
    grid-template-columns: 280px minmax(0, 1fr);
  }

  #rk-stage-guide .rk-stg-author-side {
    background: var(--rk-navy);
    border-radius: 20px;
    color: #ffffff;
    padding: 26px;
    text-align: center;
  }

  #rk-stage-guide .rk-stg-author-photo {
    background: #ffffff;
    border: 6px solid rgba(255, 255, 255, 0.16);
    border-radius: 50%;
    height: 150px;
    margin: 0 auto 18px;
    overflow: hidden;
    width: 150px;
  }

  #rk-stage-guide .rk-stg-author-photo img {
    height: 100%;
    object-fit: cover;
    width: 100%;
  }

  #rk-stage-guide .rk-stg-author-name a {
    color: #ffffff;
    font-size: 1.2rem;
    font-weight: 900;
    text-decoration: none;
  }

  #rk-stage-guide .rk-stg-author-role {
    color: #b9d1da;
    font-size: 0.82rem;
    margin: 8px 0 18px;
  }

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

  #rk-stage-guide .rk-stg-author-social a {
    align-items: center;
    border: 1px solid #41677a;
    border-radius: 50%;
    color: #ffffff;
    display: inline-flex;
    font-size: 0.76rem;
    font-weight: 900;
    height: 38px;
    justify-content: center;
    text-decoration: none;
    width: 38px;
  }

  #rk-stage-guide .rk-stg-author-main {
    min-width: 0;
  }

  #rk-stage-guide h2.rk-stg-author-title {
    color: var(--rk-ink);
    font-size: clamp(1.75rem, 3.5vw, 3rem);
    margin: 0 0 18px;
  }

  #rk-stage-guide .rk-stg-author-quote {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    color: var(--rk-ink);
    font-size: 1.05rem;
    font-weight: 800;
    margin-bottom: 19px;
    padding: 21px 23px;
  }

  #rk-stage-guide .rk-stg-author-main > p {
    color: var(--rk-copy);
  }

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

  #rk-stage-guide .rk-stg-author-fact {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 12px;
    color: var(--rk-copy);
    font-size: 0.83rem;
    padding: 13px;
  }

  #rk-stage-guide .rk-stg-author-fact strong {
    color: var(--rk-ink);
    display: block;
    margin-bottom: 3px;
  }

  #rk-stage-guide .rk-stg-faq {
    display: grid;
    gap: 12px;
    margin-top: 27px;
  }

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

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

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

  #rk-stage-guide .rk-stg-faq summary::after {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 50%;
    color: var(--rk-cyan-dark);
    content: "+";
    display: flex;
    font-size: 1.1rem;
    height: 29px;
    justify-content: center;
    position: absolute;
    right: 16px;
    top: 15px;
    width: 29px;
  }

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

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

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

  #rk-stage-guide .rk-stg-final {
    background: var(--rk-navy);
    color: #ffffff;
  }

  #rk-stage-guide .rk-stg-final .rk-stg-section-title {
    color: #ffffff;
  }

  #rk-stage-guide .rk-stg-final .rk-stg-lead {
    color: #c7dce4;
  }

  #rk-stage-guide .rk-stg-final .rk-stg-cta {
    border: 1px solid #3e697b;
    margin-top: 28px;
  }

  #rk-stage-guide .rk-stg-source-note {
    color: var(--rk-muted);
    font-size: 0.8rem;
    margin-top: 24px;
  }

  #rk-stage-guide .rk-stg-source-grid {
    display: grid;
    gap: 14px;
    margin-top: 26px;
  }

  #rk-stage-guide .rk-stg-source-card {
    background: #f4f8fa;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    padding: 20px 22px;
  }

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

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

  #rk-stage-guide .rk-stg-responsibility {
    background: #fff0eb;
    border-left: 4px solid var(--rk-orange);
    border-radius: 12px;
    color: var(--rk-copy);
    margin-top: 20px;
    padding: 18px 20px;
  }

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

  #rk-stage-guide .rk-stg-responsibility strong {
    color: var(--rk-ink);
  }

  #rk-stage-guide .rk-stg-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: 980px) {
    #rk-stage-guide .rk-stg-grid-4,
    #rk-stage-guide .rk-stg-analyzer-results,
    #rk-stage-guide .rk-stg-scenario-results {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-stage-guide .rk-stg-grid-3,
    #rk-stage-guide .rk-stg-stage-buttons,
    #rk-stage-guide .rk-stg-check-grid,
    #rk-stage-guide .rk-stg-error-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

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

    #rk-stage-guide .rk-stg-author-facts {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 760px) {
    #rk-stage-guide .rk-stg-hero {
      padding: 50px 23px 40px;
    }

    #rk-stage-guide .rk-stg-hero::before {
      left: 23px;
      top: 34px;
    }

    #rk-stage-guide .rk-stg-kicker {
      font-size: 0.67rem;
      margin-left: 25px;
    }

    #rk-stage-guide .rk-stg-shortcuts {
      gap: 8px;
      padding: 18px 16px;
    }

    #rk-stage-guide .rk-stg-shortcuts-label {
      flex: 0 0 100%;
      padding: 0 0 3px;
    }

    #rk-stage-guide .rk-stg-shortcuts a {
      font-size: 0.7rem;
      padding: 8px 10px;
    }

    #rk-stage-guide .rk-stg-section,
    #rk-stage-guide .rk-stg-author {
      padding: 39px 20px;
    }

    #rk-stage-guide .rk-stg-grid-2,
    #rk-stage-guide .rk-stg-grid-3,
    #rk-stage-guide .rk-stg-grid-4,
    #rk-stage-guide .rk-stg-stage-buttons,
    #rk-stage-guide .rk-stg-check-grid,
    #rk-stage-guide .rk-stg-analyzer-results,
    #rk-stage-guide .rk-stg-scenario-buttons,
    #rk-stage-guide .rk-stg-scenario-results,
    #rk-stage-guide .rk-stg-icon-list,
    #rk-stage-guide .rk-stg-error-grid,
    #rk-stage-guide .rk-stg-author-layout {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-stage-guide .rk-stg-analyzer-body,
    #rk-stage-guide .rk-stg-analyzer-head,
    #rk-stage-guide .rk-stg-scenario {
      padding: 20px;
    }

    #rk-stage-guide .rk-stg-stage-button {
      min-height: 50px;
      text-align: left;
    }

    #rk-stage-guide .rk-stg-timeline-item {
      grid-template-columns: 45px minmax(0, 1fr);
    }

    #rk-stage-guide .rk-stg-timeline-owner {
      grid-column: 2;
    }

    #rk-stage-guide .rk-stg-layer {
      grid-template-columns: minmax(92px, 0.34fr) minmax(0, 1fr);
    }

    #rk-stage-guide .rk-stg-layer-label,
    #rk-stage-guide .rk-stg-layer-fill {
      font-size: 0.68rem;
      padding: 8px;
    }

    #rk-stage-guide .rk-stg-cta {
      padding: 28px 22px;
    }

    #rk-stage-guide .rk-stg-cta-button {
      display: flex;
      width: 100%;
    }

    #rk-stage-guide .rk-stg-author-side {
      padding: 23px;
    }

    #rk-stage-guide .rk-stg-table-wrap {
      border: 0;
      overflow: visible;
    }

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

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

    #rk-stage-guide tbody {
      display: grid;
      gap: 12px;
    }

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

    #rk-stage-guide td,
    #rk-stage-guide tbody tr:nth-child(even) td {
      background: #ffffff;
      border-bottom: 1px solid var(--rk-line);
      padding: 12px 14px;
    }

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

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

  @media (max-width: 420px) {
    #rk-stage-guide .rk-stg-hero-title {
      font-size: 2.12rem;
    }

    #rk-stage-guide .rk-stg-analyzer-results,
    #rk-stage-guide .rk-stg-scenario-results {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-stage-guide .rk-stg-floor-diagram {
      padding: 10px;
    }

    #rk-stage-guide .rk-stg-diagram-status {
      align-items: flex-start;
      flex-direction: column;
      gap: 3px;
    }
  }

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

  @media print {
    #rk-stage-guide .rk-stg-shortcuts,
    #rk-stage-guide .rk-stg-stage-buttons,
    #rk-stage-guide .rk-stg-check-wrap,
    #rk-stage-guide .rk-stg-scenario-buttons,
    #rk-stage-guide .rk-stg-cta-button {
      display: none !important;
    }

    #rk-stage-guide .rk-stg-shell {
      border: 0;
      box-shadow: none;
    }
  }
</style>

<article id="rk-stage-guide">
  <div class="rk-stg-shell">
    <header class="rk-stg-hero">
      <span class="rk-stg-kicker">Harmonogram budowy · aktualizacja 2026</span>
      <div class="rk-stg-hero-title">Podłogówkę planuje się wcześnie — <span>rury układa we właściwym momencie</span></div>
      <p class="rk-stg-hero-lead">Najlepszy moment na decyzje projektowe przypada podczas adaptacji domu i ustalania warstw podłogi. Sam montaż rur wykonuje się znacznie później: po koordynacji instalacji i prac mogących je uszkodzić, ale przed jastrychem.</p>
      <div class="rk-stg-hero-tags" aria-label="Zakres przewodnika">
        <span>planowanie a montaż</span>
        <span>kolejność ekip</span>
        <span>tynki i instalacje</span>
        <span>próba szczelności</span>
        <span>jastrych i wygrzewanie</span>
      </div>
      <div class="rk-stg-meta">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 22 minuty</strong></span>
        <span>Aktualizacja techniczna: <strong>9 września 2026 r.</strong></span>
      </div>
    </header>

    <nav class="rk-stg-shortcuts" aria-label="Nawigacja po artykule">
      <span class="rk-stg-shortcuts-label">Na skróty</span>
      <a href="#rk-stg-answer">Szybka odpowiedź</a>
      <a href="#rk-stg-three">Trzy momenty</a>
      <a href="#rk-stg-analyzer-section">Analizator etapu</a>
      <a href="#rk-stg-sequence">Kolejność prac</a>
      <a href="#rk-stg-data">Dane do projektu</a>
      <a href="#rk-stg-plaster">Przed czy po tynkach</a>
      <a href="#rk-stg-layers">Warstwy podłogi</a>
      <a href="#rk-stg-installation">Dzień montażu</a>
      <a href="#rk-stg-screed">Jastrych i wygrzewanie</a>
      <a href="#rk-stg-season">Pora roku</a>
      <a href="#rk-stg-late">Spóźniona decyzja</a>
      <a href="#rk-stg-mistakes">Błędy</a>
      <a href="#rk-stg-example">Przykładowy harmonogram</a>
      <a href="#rk-stg-sources">Źródła oficjalne</a>
      <a href="#rk-stg-author">Autor</a>
      <a href="#rk-stg-faq">FAQ</a>
      <a href="#rk-stg-summary">Podsumowanie</a>
    </nav>

    <main>
      <section class="rk-stg-section" id="rk-stg-answer">
        <span class="rk-stg-eyebrow">Odpowiedź w 30 sekund</span>
        <h2 class="rk-stg-section-title">Kiedy najlepiej planować montaż ogrzewania podłogowego w nowym domu?</h2>
        <div class="rk-stg-answer">
          <strong>Projektuj możliwie wcześnie, montuj dopiero po przygotowaniu budynku.</strong>
          <p>System warto uwzględnić już podczas adaptacji projektu, ponieważ wpływa na wysokość podłogi, progi, źródło ciepła, lokalizację rozdzielaczy i przebieg innych instalacji. Kompletny projekt wykonuje się po ustaleniu danych budynku, natomiast rury najczęściej układa się w stanie surowym zamkniętym, po tynkach i instalacjach prowadzonych w warstwach podłogi, bezpośrednio przed wykonaniem jastrychu.</p>
        </div>
        <p class="rk-stg-copy">Nie należy mylić daty podjęcia decyzji z datą wejścia instalatora. Zbyt późne planowanie może wymusić kompromisy, lecz samo wybudowanie ścian nie oznacza jeszcze, że na prawidłowy projekt jest za późno. Kluczowe jest to, czy można nadal skoordynować poziomy podłóg, przegrody, stałą zabudowę, trasy instalacji i parametry źródła ciepła.</p>

        <div class="rk-stg-table-wrap">
          <table>
            <thead>
              <tr>
                <th>Moment</th>
                <th>Co wtedy robimy</th>
                <th>Dlaczego właśnie wtedy</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td data-label="Moment"><strong>Planowanie</strong></td>
                <td data-label="Co robimy">Ustalamy system, konstrukcję podłogi, źródło ciepła i lokalizacje techniczne.</td>
                <td data-label="Dlaczego">Można jeszcze bez kosztownych przeróbek zmienić poziomy, progi i układ pomieszczeń.</td>
              </tr>
              <tr>
                <td data-label="Moment"><strong>Projekt wykonawczy</strong></td>
                <td data-label="Co robimy">Liczymy obciążenia pomieszczeń, dobieramy rozstawy, pętle, przepływy i nastawy.</td>
                <td data-label="Dlaczego">Dane architektoniczne, warstwy i okładziny powinny być już wystarczająco stabilne.</td>
              </tr>
              <tr>
                <td data-label="Moment"><strong>Montaż rur</strong></td>
                <td data-label="Co robimy">Układamy izolację, system mocowania, obwody i podłączamy rozdzielacze.</td>
                <td data-label="Dlaczego">Budynek jest zabezpieczony, a wcześniejsze branże nie powinny już niszczyć rur.</td>
              </tr>
              <tr>
                <td data-label="Moment"><strong>Uruchomienie</strong></td>
                <td data-label="Co robimy">Przeprowadzamy wygrzewanie funkcjonalne oraz regulację zgodnie z dokumentacją.</td>
                <td data-label="Dlaczego">Jastrych musi wcześniej osiągnąć stan wymagany przez jego producenta.</td>
              </tr>
            </tbody>
          </table>
        </div>
      </section>

      <section class="rk-stg-section rk-stg-section-soft" id="rk-stg-three">
        <span class="rk-stg-eyebrow">Najważniejsze rozróżnienie</span>
        <h2 class="rk-stg-section-title">Planowanie, projekt i montaż to trzy różne momenty</h2>
        <p class="rk-stg-lead">Dobra instalacja powstaje etapami. Im wcześniej zapadną decyzje wpływające na architekturę, tym mniej kompromisów pozostanie wykonawcy przed wylewką.</p>
        <div class="rk-stg-grid-3">
          <article class="rk-stg-card">
            <span class="rk-stg-card-number">01</span>
            <h3>Etap koncepcji i adaptacji</h3>
            <p>Rezerwujemy miejsce na warstwy podłogi, ustalamy rzędne, progi, piony, pomieszczenie techniczne i przewidywane źródło ciepła. To najlepszy moment na decyzje, które dotykają konstrukcji budynku.</p>
          </article>
          <article class="rk-stg-card">
            <span class="rk-stg-card-number">02</span>
            <h3>Etap projektu wykonawczego</h3>
            <p>Potrzebne są aktualne rzuty, parametry przegród, okładziny, stała zabudowa i założenia temperaturowe. Na tej podstawie powstaje obliczenie pomieszczenie po pomieszczeniu oraz hydraulika obwodów.</p>
          </article>
          <article class="rk-stg-card">
            <span class="rk-stg-card-number">03</span>
            <h3>Etap wykonawczy</h3>
            <p>Podłoże musi być przygotowane, budynek zabezpieczony, a kolizje z innymi instalacjami rozwiązane. Instalator realizuje dokumentację, wykonuje próbę i przekazuje układ ekipie jastrychowej.</p>
          </article>
        </div>
        <div class="rk-stg-note rk-stg-note-good">
          <p><strong>Praktyczna zasada:</strong> projekt powinien wyprzedzać instalatora na tyle, aby zostało miejsce na sprawdzenie rzutu, uzgodnienia i korekty. Nie zamawiaj dokumentacji w dniu, w którym na budowę wjeżdża styropian.</p>
        </div>
      </section>

      <section class="rk-stg-section rk-stg-section-dark" id="rk-stg-analyzer-section">
        <span class="rk-stg-eyebrow">Narzędzie decyzyjne</span>
        <h2 class="rk-stg-section-title">Na jakim etapie budowy jesteś? Sprawdź, co zrobić teraz</h2>
        <p class="rk-stg-lead">Analizator nie wylicza rozstawu rur ani mocy instalacji. Porządkuje decyzje, które trzeba zamknąć na Twoim aktualnym etapie budowy.</p>

        <div class="rk-stg-analyzer" id="rk-stg-analyzer">
          <div class="rk-stg-analyzer-head">
            <h3>Planer gotowości do projektu i montażu</h3>
            <p>Wybierz etap budowy i zaznacz dane, które są już ustalone. Wynik zmieni się automatycznie.</p>
          </div>
          <div class="rk-stg-analyzer-body">
            <div class="rk-stg-step-label"><span>1</span> Wybierz aktualny etap budowy</div>
            <div class="rk-stg-stage-buttons" role="group" aria-label="Aktualny etap budowy">
              <button class="rk-stg-stage-button" type="button" data-rk-stage="concept" aria-pressed="false">Projekt lub adaptacja</button>
              <button class="rk-stg-stage-button" type="button" data-rk-stage="foundations" aria-pressed="false">Fundamenty lub płyta</button>
              <button class="rk-stg-stage-button" type="button" data-rk-stage="open" aria-pressed="false">Stan surowy otwarty</button>
              <button class="rk-stg-stage-button is-active" type="button" data-rk-stage="closed" aria-pressed="true">Stan surowy zamknięty</button>
              <button class="rk-stg-stage-button" type="button" data-rk-stage="prescreed" aria-pressed="false">Tuż przed wylewką</button>
              <button class="rk-stg-stage-button" type="button" data-rk-stage="afterscreed" aria-pressed="false">Wylewka już wykonana</button>
            </div>

            <div class="rk-stg-check-wrap">
              <div class="rk-stg-step-label"><span>2</span> Zaznacz ustalone dane</div>
              <div class="rk-stg-check-grid">
                <label class="rk-stg-check"><input type="checkbox" data-rk-check="" data-short="rzutów pomieszczeń"><span>Aktualne rzuty i funkcje pomieszczeń</span></label>
                <label class="rk-stg-check"><input type="checkbox" data-rk-check="" data-short="warstw podłogi"><span>Grubości oraz materiały warstw podłogi</span></label>
                <label class="rk-stg-check"><input type="checkbox" data-rk-check="" data-short="okładzin"><span>Planowane okładziny w pomieszczeniach</span></label>
                <label class="rk-stg-check"><input type="checkbox" data-rk-check="" data-short="źródła ciepła"><span>Źródło ciepła i parametry instalacji</span></label>
                <label class="rk-stg-check"><input type="checkbox" data-rk-check="" data-short="stałej zabudowy"><span>Stała zabudowa i wyłączone powierzchnie</span></label>
                <label class="rk-stg-check"><input type="checkbox" data-rk-check="" data-short="rozdzielaczy"><span>Lokalizacja rozdzielaczy i trasy zasilania</span></label>
              </div>
              <div class="rk-stg-readiness">
                <div class="rk-stg-readiness-head"><span>Kompletność danych wejściowych</span><output id="rk-stg-readiness-output">0 z 6</output></div>
                <div class="rk-stg-readiness-track" role="img" aria-label="Kompletność danych wejściowych"><span class="rk-stg-readiness-fill" id="rk-stg-readiness-fill"></span></div>
              </div>
            </div>

            <div class="rk-stg-analyzer-results" aria-live="polite">
              <div class="rk-stg-analyzer-result"><span>Twój etap</span><strong id="rk-stg-result-stage">Stan surowy zamknięty</strong></div>
              <div class="rk-stg-analyzer-result"><span>Status decyzji</span><strong id="rk-stg-result-status">Dobry moment na finalizację</strong></div>
              <div class="rk-stg-analyzer-result"><span>Najbliższy krok</span><strong id="rk-stg-result-next">Skompletuj dane do projektu</strong></div>
              <div class="rk-stg-analyzer-result"><span>Zakres zmian</span><strong id="rk-stg-result-scope">Nadal szeroki</strong></div>
            </div>

            <div class="rk-stg-analyzer-message" id="rk-stg-analyzer-message" aria-live="polite">
              <strong id="rk-stg-message-title">To właściwy moment na zamknięcie projektu</strong>
              <p id="rk-stg-message-text">Można zweryfikować warstwy podłogi, lokalizację rozdzielaczy, powierzchnie czynne i kolizje przed wejściem ekip wykonawczych.</p>
            </div>
            <p class="rk-stg-missing" id="rk-stg-missing">Do uzupełnienia: rzuty pomieszczeń, warstwy podłogi, okładziny, źródło ciepła, stała zabudowa, rozdzielacze.</p>
          </div>
        </div>
      </section>

      <section class="rk-stg-section" id="rk-stg-sequence">
        <span class="rk-stg-eyebrow">Od koncepcji do posadzki</span>
        <h2 class="rk-stg-section-title">Prawidłowa kolejność prac przed uruchomieniem podłogówki</h2>
        <p class="rk-stg-lead">Kolejność może być dopasowana do technologii domu i wybranego systemu, ale nie wolno pomijać zależności pomiędzy projektem, przygotowaniem podłoża, próbą instalacji i pracami jastrychowymi.</p>

        <div class="rk-stg-timeline">
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">01</span>
            <div class="rk-stg-timeline-copy"><strong>Ustal konstrukcję i rzędne podłogi</strong><p>Sprawdź miejsce na izolację, system grzewczy, jastrych, klej, podkład i okładzinę. Skoordynuj progi, schody, drzwi tarasowe oraz wysokości pomiędzy pomieszczeniami.</p></div>
            <span class="rk-stg-timeline-owner">Architekt · konstruktor · projektant instalacji</span>
          </article>
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">02</span>
            <div class="rk-stg-timeline-copy"><strong>Zamknij dane energetyczne i funkcjonalne</strong><p>Potrzebne są parametry przegród, temperatury projektowe, wentylacja, planowane okładziny oraz rzeczywista powierzchnia dostępna dla ogrzewania.</p></div>
            <span class="rk-stg-timeline-owner">Projektant ogrzewania</span>
          </article>
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">03</span>
            <div class="rk-stg-timeline-copy"><strong>Wykonaj projekt cieplny i hydrauliczny</strong><p>Obciążenia poszczególnych pomieszczeń trzeba zestawić z mocą podłogi. Następnie wyznacza się obwody, długości, przepływy, rozdzielacze i wymagane ciśnienie dyspozycyjne.</p></div>
            <span class="rk-stg-timeline-owner">Projektant ogrzewania</span>
          </article>
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">04</span>
            <div class="rk-stg-timeline-copy"><strong>Zamknij budynek i zakończ wcześniejsze branże</strong><p>Okna i drzwi zewnętrzne powinny chronić wnętrze. Instalacje biegnące w podłodze, bruzdy, przejścia oraz prace mogące zabrudzić lub przebić rury trzeba wykonać wcześniej.</p></div>
            <span class="rk-stg-timeline-owner">Kierownik budowy · wykonawcy branżowi</span>
          </article>
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">05</span>
            <div class="rk-stg-timeline-copy"><strong>Przygotuj i odbierz podłoże</strong><p>Podłoże ma być stabilne, czyste, suche i odpowiednio równe. Przed przykryciem trzeba udokumentować trasy ukrytych instalacji oraz usunąć kolizje.</p></div>
            <span class="rk-stg-timeline-owner">Kierownik budowy · instalator</span>
          </article>
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">06</span>
            <div class="rk-stg-timeline-copy"><strong>Ułóż warstwy systemu i obwody grzewcze</strong><p>Izolacja, taśmy brzegowe, system mocowania, rury i rozdzielacze powinny zostać wykonane zgodnie z projektem oraz instrukcją zastosowanego systemu.</p></div>
            <span class="rk-stg-timeline-owner">Instalator ogrzewania</span>
          </article>
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">07</span>
            <div class="rk-stg-timeline-copy"><strong>Wykonaj próbę, odbiór i dokumentację zdjęciową</strong><p>Przed zakryciem instalacji sprawdza się szczelność, oznaczenie pętli, zgodność z rzutem oraz stan mocowań. Wynik próby powinien zostać zapisany w protokole.</p></div>
            <span class="rk-stg-timeline-owner">Instalator · inwestor · kierownik</span>
          </article>
          <article class="rk-stg-timeline-item">
            <span class="rk-stg-timeline-number">08</span>
            <div class="rk-stg-timeline-copy"><strong>Wykonaj jastrych i przeprowadź procedury odbiorowe</strong><p>Warunki wykonania, stan ciśnienia w rurach, czas dojrzewania, wygrzewanie funkcjonalne i badanie wilgotności wynikają z dokumentacji systemu oraz jastrychu.</p></div>
            <span class="rk-stg-timeline-owner">Posadzkarz · instalator · wykonawca okładziny</span>
          </article>
        </div>

        <div class="rk-stg-note">
          <p>Przed wykonaniem konstrukcji podłogi budynek powinien być zabezpieczony oknami i drzwiami zewnętrznymi, a tynki ścienne oraz wcześniejsze instalacje techniczne zakończone. Szczegółową kolejność zawsze trzeba zestawić z projektem, technologią budynku i dokumentacją zastosowanego systemu.</p>
        </div>
        <p class="rk-stg-copy">Przed zamówieniem materiałów warto osobno zweryfikować <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/">rurę z barierą antydyfuzyjną EVOH</a> oraz dobrać kompletny <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-ogrzewania-podlogowego-mosiezny-czy-ze-stali-nierdzewnej/">rozdzielacz ogrzewania podłogowego</a>. Te decyzje powinny wynikać z parametrów projektu, a nie wyłącznie z dostępności zestawu u sprzedawcy.</p>
      </section>

      <section class="rk-stg-section rk-stg-section-soft" id="rk-stg-data">
        <span class="rk-stg-eyebrow">Zanim powstanie rzut pętli</span>
        <h2 class="rk-stg-section-title">Jakie dane trzeba ustalić przed przygotowaniem projektu?</h2>
        <p class="rk-stg-lead">Projekt nie zaczyna się od wyboru rozstawu. Najpierw trzeba opisać budynek, warunki obliczeniowe i ograniczenia wykonawcze.</p>
        <div class="rk-stg-icon-list">
          <div class="rk-stg-icon-item"><div><strong>Aktualny rzut architektoniczny</strong><p>Wymiary pomieszczeń, ściany, drzwi, duże przeszklenia, schody i podział na kondygnacje.</p></div></div>
          <div class="rk-stg-icon-item"><div><strong>Parametry przegród i wentylacji</strong><p>Budowa ścian, dachu, podłogi, okna oraz sposób wymiany powietrza potrzebny do obliczenia strat.</p></div></div>
          <div class="rk-stg-icon-item"><div><strong>Warstwy podłogi</strong><p>Izolacja, system mocowania, jastrych i okładzina razem z podkładem lub klejem.</p></div></div>
          <div class="rk-stg-icon-item"><div><strong>Stała zabudowa</strong><p>Wanny, brodziki, wyspy, zabudowy stolarskie i inne powierzchnie, pod którymi nie planuje się rur.</p></div></div>
          <div class="rk-stg-icon-item"><div><strong>Źródło ciepła</strong><p>Rodzaj urządzenia, zakładana temperatura pracy, układ hydrauliczny i wymagania producenta.</p></div></div>
          <div class="rk-stg-icon-item"><div><strong>Lokalizacja rozdzielaczy</strong><p>Dostęp serwisowy, długość dobiegów, trasy magistral i możliwość odpowietrzenia instalacji.</p></div></div>
          <div class="rk-stg-icon-item"><div><strong>Temperatury pomieszczeń</strong><p>Inne założenia mogą obowiązywać w łazience, sypialni, garażu lub pomieszczeniu technicznym.</p></div></div>
          <div class="rk-stg-icon-item"><div><strong>Plan dylatacji i okładzin</strong><p>Geometria pól jastrychu oraz szczeliny muszą zostać skoordynowane z trasami pętli i posadzką.</p></div></div>
        </div>
        <p class="rk-stg-copy">Punktem wyjścia jest obciążenie cieplne pomieszczeń, a nie wskaźnik przypisany do całego domu. Zobacz, <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty cieplne budynku</a>, oraz sprawdź edukacyjny <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">kalkulator strat ciepła</a>. Kalkulator pomaga zrozumieć składniki bilansu, ale nie zastępuje obliczeń projektowych pomieszczenie po pomieszczeniu.</p>

        <aside class="rk-stg-cta" aria-label="Projekt ogrzewania podłogowego przed wylewką">
          <span class="rk-stg-eyebrow" style="color:#70e5ef">Masz już dane budynku?</span>
          <div class="rk-stg-cta-title">To właściwy moment, żeby zamienić założenia w projekt wykonawczy</div>
          <p>Jeżeli znasz układ pomieszczeń, konstrukcję podłogi, planowane okładziny i źródło ciepła, można obliczyć straty, rozrysować obwody oraz przygotować długości pętli, przepływy i nastawy rozdzielacza — zanim instalator rozpocznie prace.</p>
          <a class="rk-stg-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego przed wylewką</a>
        </aside>
      </section>

      <section class="rk-stg-section" id="rk-stg-plaster">
        <span class="rk-stg-eyebrow">Kolejność mokrych robót</span>
        <h2 class="rk-stg-section-title">Czy ogrzewanie podłogowe układa się przed czy po tynkach?</h2>
        <div class="rk-stg-answer">
          <strong>Najbezpieczniejszym punktem wyjścia jest wykonanie tynków przed układaniem rur podłogówki.</strong>
          <p>Odsłonięte rury nie są wtedy narażone na rusztowania, spadającą zaprawę, ruch ekip i punktowe obciążenia. Jednocześnie przejścia przez ściany, bruzdy oraz instalacje prowadzone w podłodze powinny być wcześniej uzgodnione i zakończone.</p>
        </div>
        <div class="rk-stg-grid-2">
          <article class="rk-stg-card">
            <h3>Dlaczego tynki zwykle wykonuje się wcześniej?</h3>
            <ul class="rk-stg-list">
              <li>zmniejsza się ryzyko mechanicznego uszkodzenia rur,</li>
              <li>taśma brzegowa i jastrych dochodzą do gotowej powierzchni ściany,</li>
              <li>łatwiej przygotować czyste i równe podłoże,</li>
              <li>nie trzeba stawiać rusztowań na gotowych obwodach grzewczych.</li>
            </ul>
          </article>
          <article class="rk-stg-card">
            <h3>Kiedy kolejność może być inna?</h3>
            <p>Technologia budynku, rodzaj tynku, system suchej zabudowy lub organizacja konkretnej inwestycji mogą wymagać innego scenariusza. Taka zmiana powinna być świadomą decyzją kierownika, projektanta i wykonawców, razem z planem zabezpieczenia instalacji.</p>
          </article>
        </div>
        <div class="rk-stg-note rk-stg-note-warning">
          <p><strong>Nie wystarczy hasło „hydraulika zrobiona”.</strong> Trzeba rozdzielić instalacje prowadzone w ścianach i warstwach wyrównawczych od właściwych pętli ogrzewania, które pozostają odsłonięte aż do wykonania jastrychu.</p>
        </div>
      </section>

      <section class="rk-stg-section rk-stg-section-soft" id="rk-stg-layers">
        <span class="rk-stg-eyebrow">Konflikt poziomów</span>
        <h2 class="rk-stg-section-title">Dlaczego warstwy podłogi trzeba zaplanować przed montażem?</h2>
        <p class="rk-stg-lead">Nie istnieje jedna obowiązkowa wysokość podłogówki dla każdego domu. Grubość zależy od konstrukcji, izolacji cieplnej i akustycznej, systemu mocowania, rodzaju jastrychu oraz wybranej okładziny.</p>

        <div class="rk-stg-scenario" id="rk-stg-scenario">
          <div class="rk-stg-scenario-head">
            <h3>Porównaj wczesne i spóźnione planowanie warstw</h3>
            <p>Rysunek pokazuje zakres decyzji, a nie gotowy przekrój konkretnego budynku. Nie odczytuj z niego grubości materiałów.</p>
          </div>
          <div class="rk-stg-scenario-buttons" role="group" aria-label="Wybierz scenariusz planowania warstw podłogi">
            <button class="rk-stg-scenario-button" type="button" data-rk-scenario="early" aria-pressed="true">Warstwy zaplanowane wcześnie</button>
            <button class="rk-stg-scenario-button" type="button" data-rk-scenario="late" aria-pressed="false">Decyzja tuż przed wylewką</button>
          </div>
          <div class="rk-stg-floor-panel">
            <h4>Modułowy przekrój warstw podłogi</h4>
            <p>Każda etykieta znajduje się w osobnym polu, dlatego schemat pozostaje czytelny również na telefonie.</p>
            <div class="rk-stg-floor-diagram" id="rk-stg-floor-diagram" data-state="early" role="img" aria-label="Poglądowe warstwy podłogi w wybranym scenariuszu planowania">
              <div class="rk-stg-diagram-status"><span>Relacja do ustalonego poziomu gotowej podłogi</span><strong id="rk-stg-diagram-status">Skoordynowana</strong></div>
              <div class="rk-stg-floor-stack">
                <div class="rk-stg-layer rk-stg-layer-finish"><span class="rk-stg-layer-label">Okładzina</span><div class="rk-stg-layer-field"><span class="rk-stg-layer-fill">znany materiał i opór warstw</span></div></div>
                <div class="rk-stg-layer rk-stg-layer-screed"><span class="rk-stg-layer-label">Jastrych</span><div class="rk-stg-layer-field"><span class="rk-stg-layer-fill">ustalony typ, grubość i dylatacje</span></div></div>
                <div class="rk-stg-layer rk-stg-layer-heating"><span class="rk-stg-layer-label">System grzewczy</span><div class="rk-stg-layer-field"><span class="rk-stg-layer-fill">rury oraz mocowanie zgodne z projektem</span></div></div>
                <div class="rk-stg-layer rk-stg-layer-insulation"><span class="rk-stg-layer-label">Izolacja</span><div class="rk-stg-layer-field"><span class="rk-stg-layer-fill">dobrana bez odchudzania pod presją wysokości</span></div></div>
                <div class="rk-stg-layer rk-stg-layer-base"><span class="rk-stg-layer-label">Podłoże</span><div class="rk-stg-layer-field"><span class="rk-stg-layer-fill">stabilne, równe i skoordynowane z progami</span></div></div>
              </div>
            </div>
          </div>
          <div class="rk-stg-scenario-results" aria-live="polite">
            <div class="rk-stg-scenario-result"><span>Izolacja</span><strong id="rk-stg-scenario-insulation">dobrana do przegrody</strong></div>
            <div class="rk-stg-scenario-result"><span>Progi i drzwi</span><strong id="rk-stg-scenario-thresholds">poziomy skoordynowane</strong></div>
            <div class="rk-stg-scenario-result"><span>Inne instalacje</span><strong id="rk-stg-scenario-routes">trasy uzgodnione</strong></div>
            <div class="rk-stg-scenario-result"><span>Zakres korekt</span><strong id="rk-stg-scenario-scope">pełny przed wykonaniem</strong></div>
          </div>
        </div>

        <p class="rk-stg-copy">Izolacji nie należy dobierać wyłącznie na podstawie liczby centymetrów. Znaczenie ma jej współczynnik przewodzenia, położenie przegrody i wymagany opór cieplny. Więcej przykładów znajdziesz w poradniku <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">ile styropianu zastosować pod ogrzewanie podłogowe</a>. Osobno trzeba ustalić parametry podkładu — zobacz przewodnik <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">wylewka na ogrzewanie podłogowe</a>.</p>
      </section>

      <section class="rk-stg-section" id="rk-stg-installation">
        <span class="rk-stg-eyebrow">Odbiór frontu robót</span>
        <h2 class="rk-stg-section-title">Co powinno być gotowe w dniu montażu podłogówki?</h2>
        <p class="rk-stg-lead">Instalator nie powinien na budowie zgadywać poziomów, przesuwać sanitariatów ani wybierać przypadkowych tras. Front robót trzeba odebrać przed rozłożeniem izolacji.</p>
        <div class="rk-stg-grid-3">
          <article class="rk-stg-card"><h3>Budynek</h3><ul class="rk-stg-list"><li>zamknięte otwory zewnętrzne,</li><li>brak przecieków i ryzyka zalania,</li><li>zakończone prace generujące ciężkie zabrudzenia,</li><li>zapewnione warunki wymagane przez materiały.</li></ul></article>
          <article class="rk-stg-card"><h3>Podłoże</h3><ul class="rk-stg-list"><li>oczyszczone i suche,</li><li>stabilne oraz odpowiednio równe,</li><li>bez nieopisanych przewodów i odpadów,</li><li>z gotową hydroizolacją tam, gdzie jest wymagana.</li></ul></article>
          <article class="rk-stg-card"><h3>Dokumentacja</h3><ul class="rk-stg-list"><li>zatwierdzony rzut pętli,</li><li>opisane rozdzielacze i obwody,</li><li>uzgodnione dylatacje,</li><li>znane poziomy oraz grubości wszystkich warstw.</li></ul></article>
        </div>
        <div class="rk-stg-note rk-stg-note-risk">
          <p><strong>Zmiana rzutu na budowie musi wrócić do obliczeń.</strong> Skrócenie jednej pętli i wydłużenie drugiej wpływa na opory, przepływy oraz późniejsze równoważenie. Granicznej długości nie wolno traktować jako celu dla wszystkich obwodów. Zobacz, od czego zależy <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalna długość pętli ogrzewania podłogowego</a>.</p>
        </div>
        <p class="rk-stg-copy">Podział powierzchni na obwody również trzeba ustalić przed montażem. Przykład większego pomieszczenia omawia poradnik <a href="https://projekt-ogrzewania.pl/salon-ile-petli-podlogowki/">ile pętli podłogówki zaplanować w salonie</a>, a zależność między obciążeniem, okładziną i geometrią wyjaśnia materiał <a href="https://projekt-ogrzewania.pl/jak-gesto-rozkladac-podlogowke/">jak gęsto rozkładać podłogówkę</a>.</p>
      </section>

      <section class="rk-stg-section rk-stg-section-soft" id="rk-stg-screed">
        <span class="rk-stg-eyebrow">Po ułożeniu rur</span>
        <h2 class="rk-stg-section-title">Próba szczelności, jastrych i pierwsze wygrzewanie</h2>
        <p class="rk-stg-lead">Zalanie rur nie kończy prac instalacyjnych. Pomiędzy montażem a ułożeniem okładziny są etapy kontrolne, których nie można zastąpić jednym terminem wpisanym w kalendarzu.</p>
        <div class="rk-stg-grid-4">
          <article class="rk-stg-card"><span class="rk-stg-card-number">01</span><h3>Próba</h3><p>Metodę, ciśnienie i czas próby dobiera się zgodnie z dokumentacją systemu. Wynik zapisuje się w protokole przed zakryciem rur.</p></article>
          <article class="rk-stg-card"><span class="rk-stg-card-number">02</span><h3>Jastrych</h3><p>Wykonawca posadzki musi znać rodzaj systemu, plan dylatacji i wymagania dotyczące stanu instalacji podczas wylewania.</p></article>
          <article class="rk-stg-card"><span class="rk-stg-card-number">03</span><h3>Wygrzewanie funkcjonalne</h3><p>Procedura potwierdza pracę układu i obciążenie podkładu temperaturą. Nie jest automatycznie równoznaczna z pełnym wysuszeniem.</p></article>
          <article class="rk-stg-card"><span class="rk-stg-card-number">04</span><h3>Gotowość pod okładzinę</h3><p>Wykonawca posadzki sprawdza wymaganą wilgotność odpowiednią metodą oraz zgodność z wymaganiami kleju, podkładu i okładziny.</p></article>
        </div>
        <p class="rk-stg-copy">Nie należy przyjmować jednego uniwersalnego terminu wygrzewania. Dla części konwencjonalnych jastrychów spotyka się rozpoczęcie procedury najwcześniej po 21 dniach w przypadku podkładu cementowego i po 7 dniach w przypadku podkładu na bazie siarczanu wapnia. Wiążące pozostają jednak receptura materiału, warunki dojrzewania oraz dokumentacja konkretnego jastrychu i systemu.</p>
        <div class="rk-stg-note rk-stg-note-warning">
          <p><strong>Wygrzewanie funkcjonalne nie jest pomiarem wilgotności.</strong> Nawet zakończona procedura nie zwalnia wykonawcy okładziny z oceny, czy podkład osiągnął wymagany stan.</p>
        </div>
        <p class="rk-stg-copy">Jeszcze przed próbą trzeba ustalić medium i sposób przygotowania układu. Pomagają w tym poradniki <a href="https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/">czym napełnić instalację ogrzewania podłogowego</a> oraz jak dobrać i zamontować <a href="https://projekt-ogrzewania.pl/separator-zanieczyszczen-i-powietrza-w-ogrzewaniu-podlogowym-dobor-schemat-montazu-spadek-cisnienia-i-normy/">separator zanieczyszczeń i powietrza</a>.</p>
      </section>

      <section class="rk-stg-section" id="rk-stg-season">
        <span class="rk-stg-eyebrow">Warunki zamiast miesiąca</span>
        <h2 class="rk-stg-section-title">Czy pora roku decyduje o terminie montażu podłogówki?</h2>
        <p class="rk-stg-lead">Nie ma jednego najlepszego miesiąca dla każdej budowy. O powodzeniu prac decydują warunki w budynku oraz możliwość ich utrzymania, a nie nazwa pory roku.</p>
        <div class="rk-stg-grid-2">
          <article class="rk-stg-card">
            <h3>Co trzeba rzeczywiście sprawdzić?</h3>
            <ul class="rk-stg-list">
              <li>temperaturę podłoża i powietrza wymaganą przez materiały,</li>
              <li>ochronę instalacji przed zamarznięciem po próbie wodnej,</li>
              <li>możliwość kontrolowanego wietrzenia i usuwania wilgoci,</li>
              <li>dostępność źródła ciepła potrzebnego do procedury wygrzewania,</li>
              <li>brak przeciągów, zalania lub bezpośredniego nasłonecznienia świeżego podkładu.</li>
            </ul>
          </article>
          <article class="rk-stg-card">
            <h3>Dlaczego suwak temperatury byłby mylący?</h3>
            <p>Ta sama temperatura zewnętrzna może oznaczać zupełnie inne warunki w budynku zamkniętym, ogrzewanym, wentylowanym albo zawilgoconym. Bez informacji o jastrychu, wilgotności, wentylacji i instrukcji materiału nie można wiarygodnie wyliczyć czasu gotowości posadzki.</p>
          </article>
        </div>
        <div class="rk-stg-note rk-stg-note-good">
          <p><strong>Wniosek:</strong> zimą można prowadzić prace, jeżeli budynek i materiały mają zapewnione wymagane warunki. Latem również można popełnić błąd przez zbyt szybkie wysychanie, przeciąg lub przegrzanie powierzchni.</p>
        </div>
      </section>

      <section class="rk-stg-section rk-stg-section-soft" id="rk-stg-late">
        <span class="rk-stg-eyebrow">Plan naprawczy</span>
        <h2 class="rk-stg-section-title">Co zrobić, jeśli decyzja o podłogówce zapadła za późno?</h2>
        <p class="rk-stg-lead">Spóźniona decyzja nie zawsze przekreśla inwestycję, ale zmniejsza zakres swobodnych zmian. Najpierw trzeba sprawdzić stan faktyczny, a dopiero później wybierać system.</p>
        <div class="rk-stg-table-wrap">
          <table>
            <thead><tr><th>Aktualny stan</th><th>Co można jeszcze zrobić</th><th>Najważniejsze ryzyko</th></tr></thead>
            <tbody>
              <tr><td data-label="Aktualny stan"><strong>Ściany już stoją</strong></td><td data-label="Co można zrobić">Zaktualizować obliczenia, powierzchnie czynne, rozdzielacze i przebieg magistral.</td><td data-label="Ryzyko">Zmiany funkcji pomieszczeń mogą wpływać na obciążenie i liczbę pętli.</td></tr>
              <tr><td data-label="Aktualny stan"><strong>Zamontowano okna i drzwi</strong></td><td data-label="Co można zrobić">Sprawdzić rzędne progów, całkowitą wysokość warstw i detale przy przeszkleniach.</td><td data-label="Ryzyko">Brak miejsca nie może być rozwiązywany przypadkowym odchudzeniem izolacji.</td></tr>
              <tr><td data-label="Aktualny stan"><strong>Instalacje leżą na podłożu</strong></td><td data-label="Co można zrobić">Wykonać inwentaryzację, dokumentację zdjęciową i zaplanować warstwę wyrównawczą.</td><td data-label="Ryzyko">Skrzyżowania i spiętrzenia mogą utrudnić ciągłe ułożenie izolacji.</td></tr>
              <tr><td data-label="Aktualny stan"><strong>Wylewka została wykonana</strong></td><td data-label="Co można zrobić">Ocenić system niskoprofilowy, ogrzewanie ścienne lub inny odbiornik po obliczeniu obciążenia.</td><td data-label="Ryzyko">Brak miejsca, dodatkowe obciążenie stropu i niezgodność z istniejącymi progami.</td></tr>
            </tbody>
          </table>
        </div>
        <p class="rk-stg-copy">W istniejącym lub przebudowywanym domu nie należy automatycznie kopiować układu z nowego budynku. Zobacz, jakie ograniczenia opisaliśmy w poradniku <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-remontowanym-budynku-czy-warto/">ogrzewanie podłogowe w remontowanym budynku</a>.</p>
      </section>

      <section class="rk-stg-section" id="rk-stg-mistakes">
        <span class="rk-stg-eyebrow">Błędy trudne do odwrócenia</span>
        <h2 class="rk-stg-section-title">Najczęstsze błędy w harmonogramie ogrzewania podłogowego</h2>
        <p class="rk-stg-lead">Większość problemów nie wynika z samej rury. Powstaje na styku branż, kiedy kolejne ekipy nie korzystają ze wspólnych rzędnych i dokumentacji.</p>
        <div class="rk-stg-error-grid">
          <article class="rk-stg-error"><span>Błąd 01</span><h3>Projekt po zakupie materiałów</h3><p>Średnica, ilość rury, rozdzielacz i pompa zostają narzucone przed wykonaniem obliczeń.</p></article>
          <article class="rk-stg-error"><span>Błąd 02</span><h3>Jeden rozstaw w całym domu</h3><p>Pomieszczenia mają różne obciążenia, temperatury, okładziny i powierzchnie czynne.</p></article>
          <article class="rk-stg-error"><span>Błąd 03</span><h3>Brak uzgodnionych poziomów</h3><p>Wykonawca próbuje zmieścić system kosztem izolacji, jastrychu albo prawidłowego progu.</p></article>
          <article class="rk-stg-error"><span>Błąd 04</span><h3>Rury przed ciężkimi pracami</h3><p>Tynkarze, rusztowania i kolejne branże poruszają się po nieosłoniętej instalacji.</p></article>
          <article class="rk-stg-error"><span>Błąd 05</span><h3>Brak odbioru przed jastrychem</h3><p>Nie ma protokołu, zdjęć tras, opisów pętli ani kontroli zgodności z projektem.</p></article>
          <article class="rk-stg-error"><span>Błąd 06</span><h3>Wygrzewanie według internetu</h3><p>Uniwersalny harmonogram zastępuje dokumentację konkretnego jastrychu i systemu.</p></article>
        </div>
        <p class="rk-stg-copy">Przed zmianą rozstawu warto zrozumieć jego zależność od obciążenia i konstrukcji podłogi. Pomagają w tym poradniki o <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawie rur w wodnym ogrzewaniu podłogowym</a> oraz o tym, <a href="https://projekt-ogrzewania.pl/ile-rury-na-m%C2%B2-ogrzewania-podlogowego/">ile rury przypada na metr kwadratowy</a>. Ilość materiału jest skutkiem projektu, a nie jego punktem wyjścia.</p>
        <p class="rk-stg-copy">Hydrauliki nie zamyka się samym rzutem pętli. Projekt powinien określić punkt pracy, dlatego warto sprawdzić <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">dobór pompy obiegowej do podłogówki</a>, zasadność zastosowania <a href="https://projekt-ogrzewania.pl/sprzeglo-hydrauliczne-w-instalacji-ogrzewania-podlogowego/">sprzęgła hydraulicznego</a> oraz <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">dopuszczalną temperaturę zasilania podłogówki</a>.</p>
      </section>

      <section class="rk-stg-section rk-stg-section-soft" id="rk-stg-example">
        <span class="rk-stg-eyebrow">Przykład modelowy</span>
        <h2 class="rk-stg-section-title">Przykładowy harmonogram podłogówki w nowym domu</h2>
        <p class="rk-stg-lead">Poniższy przykład pokazuje zależności, a nie uniwersalne terminy kalendarzowe. Czas poszczególnych prac zależy od projektu, technologii domu, materiałów i organizacji budowy.</p>
        <div class="rk-stg-table-wrap">
          <table>
            <thead><tr><th>Etap inwestycji</th><th>Decyzje dotyczące podłogówki</th><th>Dokument lub odbiór</th></tr></thead>
            <tbody>
              <tr><td data-label="Etap"><strong>Adaptacja projektu</strong></td><td data-label="Decyzje">Źródło ciepła, strefy, rozdzielacze, konstrukcja podłogi i założenia temperaturowe.</td><td data-label="Dokument">Uzgodnienia branżowe i rzędne podłóg.</td></tr>
              <tr><td data-label="Etap"><strong>Przed zamknięciem stanu surowego</strong></td><td data-label="Decyzje">Aktualizacja parametrów okien, izolacji, wentylacji oraz zmian w układzie pomieszczeń.</td><td data-label="Dokument">Komplet danych do obliczeń.</td></tr>
              <tr><td data-label="Etap"><strong>Przed tynkami i instalacjami</strong></td><td data-label="Decyzje">Przejścia, szafki rozdzielaczy, magistrale i kolizje z pozostałymi branżami.</td><td data-label="Dokument">Projekt wykonawczy i wytyczne koordynacyjne.</td></tr>
              <tr><td data-label="Etap"><strong>Po zakończeniu wcześniejszych robót</strong></td><td data-label="Decyzje">Odbiór podłoża, potwierdzenie dylatacji i zgodności rzutu z budową.</td><td data-label="Dokument">Protokół przygotowania frontu robót.</td></tr>
              <tr><td data-label="Etap"><strong>Montaż pętli</strong></td><td data-label="Decyzje">Realizacja tras, podłączenie i opisanie obwodów.</td><td data-label="Dokument">Zdjęcia powykonawcze i próba szczelności.</td></tr>
              <tr><td data-label="Etap"><strong>Po wykonaniu jastrychu</strong></td><td data-label="Decyzje">Procedura wygrzewania, kontrola wilgotności, nastawy i równoważenie.</td><td data-label="Dokument">Protokół wygrzewania oraz uruchomienia.</td></tr>
            </tbody>
          </table>
        </div>
        <div class="rk-stg-note">
          <p>Jeżeli planowana jest pompa ciepła, zależności trzeba sprawdzić wspólnie: moc podłogi, temperaturę zasilania, przepływy i charakterystykę urządzenia. 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>. Rodzaj okładziny również nie jest detalem — przeczytaj, <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">jak posadzka wpływa na wydajność podłogówki</a>.</p>
        </div>
        <p class="rk-stg-copy">Etap uruchomienia wymaga także zaplanowanej automatyki. Osobne poradniki wyjaśniają rolę <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">termostatu w ogrzewaniu podłogowym</a>, zastosowanie <a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/">czujnika podłogowego</a> oraz konfigurację <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowania pogodowego podłogówki</a>. Przewody i miejsca montażu tych elementów najlepiej przewidzieć przed wykończeniem ścian.</p>
      </section>

      <section class="rk-stg-section" id="rk-stg-sources" aria-labelledby="rk-stg-sources-title">
        <span class="rk-stg-eyebrow">Podstawa techniczna</span>
        <h2 class="rk-stg-section-title" id="rk-stg-sources-title">Źródła oficjalne i zakres odpowiedzialności</h2>
        <div class="rk-stg-source-grid">
          <article class="rk-stg-source-card">
            <a href="https://www.iso.org/standard/74682.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-1:2021 — definicje i kryteria komfortu</a>
            <p>Oficjalny zakres podstawowych pojęć, symboli oraz kryteriów komfortu dla wbudowanych systemów ogrzewania i chłodzenia płaszczyznowego.</p>
          </article>
          <article class="rk-stg-source-card">
            <a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 — wydajność powierzchni grzewczej</a>
            <p>Oficjalna metodyka wyznaczania wydajności cieplnej i chłodniczej wodnych systemów płaszczyznowych.</p>
          </article>
          <article class="rk-stg-source-card">
            <a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 — projektowanie i wymiarowanie</a>
            <p>Oficjalna metoda projektowania i wymiarowania zapewniająca wymaganą wydajność systemu ogrzewania lub chłodzenia płaszczyznowego.</p>
          </article>
          <article class="rk-stg-source-card">
            <a href="https://www.iso.org/standard/74685.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-5:2021 — wykonanie instalacji</a>
            <p>Oficjalne wymagania odnoszące się do instalowania wbudowanych wodnych systemów ogrzewania i chłodzenia płaszczyznowego.</p>
          </article>
        </div>
        <aside class="rk-stg-responsibility">
          <p><strong>Zakres poradnika:</strong> materiał porządkuje kolejność decyzji projektowych i robót w typowym nowym domu. Nie zastępuje indywidualnego projektu, odbioru frontu robót, instrukcji zastosowanych materiałów ani uzgodnień projektanta, kierownika budowy, instalatora i wykonawcy jastrychu.</p>
        </aside>
      </section>

      <section class="rk-stg-author" id="rk-stg-author" aria-label="Autor opracowania">
        <div class="rk-stg-author-layout">
          <aside class="rk-stg-author-side">
            <div class="rk-stg-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i ogrzewania podłogowego" width="300" height="300" loading="lazy" decoding="async"></div>
            <div class="rk-stg-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
            <p class="rk-stg-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
            <div class="rk-stg-author-social" aria-label="Profile autora">
              <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer" aria-label="LinkedIn Roberta Kucharskiego">in</a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer" aria-label="Facebook Projekt Ogrzewania">f</a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer" aria-label="Profil Projekt HVAC w serwisie X">X</a>
            </div>
          </aside>
          <div class="rk-stg-author-main">
            <span class="rk-stg-eyebrow">Wnioski z praktyki projektowej</span>
            <h2 class="rk-stg-author-title">Robert Kucharski: dobry harmonogram chroni projekt przed kompromisami na budowie</h2>
            <div class="rk-stg-author-quote">„Podłogówki nie projektuje się w dniu rozkładania rur. Instalator powinien wejść na przygotowane podłoże z zatwierdzonym rzutem, a nie podejmować decyzje o bilansie cieplnym pomieszczeń pomiędzy dostawą styropianu a przyjazdem posadzkarza.”</div>
            <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały techniczne dla inwestorów i wykonawców. W swojej pracy łączy obciążenie cieplne poszczególnych pomieszczeń z rzeczywistą powierzchnią czynną podłogi, konstrukcją posadzki, parametrami źródła ciepła oraz oporami obwodów.</p>
            <p>W projekcie określa się nie tylko przebieg rur. Dokumentacja powinna pozwalać wykonawcy odtworzyć założenia: rozstawy, długości pętli, przepływy, lokalizację rozdzielaczy, ograniczenia powierzchniowe i wymagane nastawy. Dzięki temu zmiany na budowie można ocenić technicznie, zamiast zatwierdzać je „na oko”.</p>
            <p>Autor rozwija także serwisy <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> oraz <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>, w których łączy zagadnienia instalacyjne z technologią budowy, modernizacją i koordynacją prac. Dzięki temu harmonogram podłogówki jest analizowany nie jako odizolowany etap, lecz jako część całej inwestycji.</p>
            <div class="rk-stg-author-facts">
              <div class="rk-stg-author-fact"><strong>Zakres</strong>Obliczenia cieplne, hydraulika i dokumentacja wykonawcza.</div>
              <div class="rk-stg-author-fact"><strong>Metoda</strong>Analiza pomieszczenie po pomieszczeniu, bez uniwersalnego rozstawu.</div>
              <div class="rk-stg-author-fact"><strong>Cel</strong>Instalacja możliwa do wykonania, regulacji i późniejszego serwisowania.</div>
            </div>
          </div>
        </div>
      </section>

      <section class="rk-stg-section" id="rk-stg-faq">
        <span class="rk-stg-eyebrow">Pytania inwestorów</span>
        <h2 class="rk-stg-section-title">FAQ: planowanie i montaż podłogówki w nowym domu</h2>
        <div class="rk-stg-faq">
          <details>
            <summary>Kiedy najwcześniej warto zdecydować się na ogrzewanie podłogowe?</summary>
            <div class="rk-stg-faq-answer"><p>Najlepiej podczas wyboru lub adaptacji projektu domu. Pozwala to od razu skoordynować grubość podłogi, progi, źródło ciepła, rozdzielacze i trasy instalacyjne. Szczegółowy projekt wykonawczy może powstać później, gdy dane budynku będą ustalone.</p></div>
          </details>
          <details>
            <summary>Czy po wybudowaniu ścian jest już za późno na projekt podłogówki?</summary>
            <div class="rk-stg-faq-answer"><p>Nie. Zwykle nadal można wykonać prawidłowe obliczenia i projekt. Trzeba jednak zweryfikować aktualne wymiary, okna, konstrukcję podłogi, stałą zabudowę i lokalizację rozdzielaczy. Im bliżej wylewki, tym mniej czasu pozostaje na korekty.</p></div>
          </details>
          <details>
            <summary>Co najpierw: tynki czy ogrzewanie podłogowe?</summary>
            <div class="rk-stg-faq-answer"><p>W typowym domu najbezpieczniej zakończyć tynki i inne prace mogące uszkodzić rury przed ułożeniem właściwych pętli. Wyjątek może wynikać z technologii budynku lub uzgodnionej organizacji robót, ale instalacja musi wtedy zostać skutecznie zabezpieczona.</p></div>
          </details>
          <details>
            <summary>Czy budynek powinien mieć zamontowane okna przed montażem?</summary>
            <div class="rk-stg-faq-answer"><p>Takie przygotowanie jest zalecanym punktem wyjścia dla systemów mokrych. Zamknięty budynek chroni materiały i rury przed opadami, promieniowaniem UV, zanieczyszczeniem oraz zamarznięciem czynnika po próbie wodnej.</p></div>
          </details>
          <details>
            <summary>Czy lato jest jedynym dobrym terminem na montaż i wylewkę?</summary>
            <div class="rk-stg-faq-answer"><p>Nie. Znaczenie mają rzeczywiste warunki w budynku: temperatura materiałów i podłoża, wentylacja, wilgotność, ochrona przed mrozem i wymagania producenta jastrychu. Prawidłowe warunki można zapewnić także poza latem.</p></div>
          </details>
          <details>
            <summary>Kiedy można rozpocząć wygrzewanie jastrychu?</summary>
            <div class="rk-stg-faq-answer"><p>Termin zależy od rodzaju i receptury jastrychu oraz instrukcji producenta. Dla typowych rozwiązań dokumentacje systemowe często wskazują nie wcześniej niż 21 dni dla jastrychu cementowego i 7 dni dla siarczanowo-wapniowego, ale systemy specjalne mogą mieć inne wymagania.</p></div>
          </details>
          <details>
            <summary>Czy można zmienić rozstaw rur bez poprawiania projektu?</summary>
            <div class="rk-stg-faq-answer"><p>Zmiana rozstawu wpływa na długość pętli, moc powierzchni, przepływ i opory hydrauliczne. Powinna zostać sprawdzona przez projektanta, zwłaszcza gdy jednocześnie zmienia się powierzchnia czynna albo okładzina.</p></div>
          </details>
          <details>
            <summary>Czy sam rzut pętli wystarczy instalatorowi?</summary>
            <div class="rk-stg-faq-answer"><p>Nie. Potrzebne są również długości obwodów, oznaczenia, przepływy, nastawy, parametry pracy, lokalizacje rozdzielaczy i założenia dotyczące warstw podłogi. Po montażu warto zachować zdjęcia oraz dokumentację powykonawczą.</p></div>
          </details>
        </div>
        <p class="rk-stg-copy">Przed ułożeniem rur warto również przeanalizować powierzchnie wyłączone z ogrzewania. Osobny poradnik wyjaśnia, <a href="https://projekt-ogrzewania.pl/gdzie-nie-ukladac-ogrzewania-podlogowego/">gdzie nie układać ogrzewania podłogowego</a>. Jeżeli rozważasz wykonanie prac bez instalatora, sprawdź też materiał <a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-czy-warto-robic-to-samemu/">czy warto samodzielnie wykonywać podłogówkę</a>.</p>
      </section>

      <section class="rk-stg-section rk-stg-final" id="rk-stg-summary">
        <span class="rk-stg-eyebrow">Najważniejszy wniosek</span>
        <h2 class="rk-stg-section-title">Projekt musi być gotowy przed rurami, a rury przed jastrychem</h2>
        <p class="rk-stg-lead">Najlepszy termin nie jest jedną datą. Najpierw rezerwujesz miejsce i koordynujesz instalacje, następnie zamykasz dane oraz projekt, a dopiero na przygotowanym podłożu układasz pętle. Próba, jastrych, wygrzewanie i regulacja są kolejnymi osobnymi etapami.</p>
        <div class="rk-stg-cta" aria-label="Indywidualny projekt ogrzewania podłogowego">
          <span class="rk-stg-eyebrow" style="color:#70e5ef">Zanim instalacja zniknie pod posadzką</span>
          <div class="rk-stg-cta-title">Zamknij projekt, zanim wykonawca zacznie układać rury</div>
          <p>Otrzymasz rozstaw rur naniesiony na rzut, podział na pętle, długości obwodów, obliczone przepływy, nastawy rozdzielaczy i wytyczne potrzebne do wykonania instalacji zgodnie z rzeczywistym bilansem budynku.</p>
          <a class="rk-stg-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów indywidualny projekt ogrzewania podłogowego</a>
        </div>
        <p class="rk-stg-source-note">Materiał ma charakter edukacyjny. Ostateczna kolejność, parametry próby, wymagania dotyczące jastrychu i sposób uruchomienia należy ustalić dla zastosowanego systemu, materiałów oraz warunków konkretnej budowy.</p>
      </section>
    </main>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/",
      "url": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/",
      "name": "Kiedy najlepiej planować montaż ogrzewania podłogowego w nowym domu?",
      "description": "Praktyczny harmonogram planowania, projektowania, montażu, próby, wykonania jastrychu i uruchomienia wodnego ogrzewania podłogowego w nowym domu.",
      "datePublished": "2025-03-11T08:50:26+00:00",
      "dateModified": "2026-09-09T08:00:00+00:00",
      "inLanguage": "pl-PL",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#breadcrumb"
      },
      "mainEntity": {
        "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#article"
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#article",
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "headline": "Kiedy najlepiej planować montaż ogrzewania podłogowego w nowym domu?",
      "description": "Praktyczny harmonogram planowania, projektowania, montażu, próby, wykonania jastrychu i uruchomienia wodnego ogrzewania podłogowego w nowym domu.",
      "datePublished": "2025-03-11T08:50:26+00:00",
      "dateModified": "2026-09-09T08:00:00+00:00",
      "inLanguage": "pl-PL",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "hasPart": [
        {
          "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#analyzer"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#howto"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#faq"
        }
      ],
      "about": [
        "ogrzewanie podłogowe",
        "harmonogram budowy",
        "projekt instalacji grzewczej",
        "jastrych grzewczy",
        "próba szczelności"
      ],
      "keywords": [
        "kiedy najlepiej planować montaż ogrzewania podłogowego",
        "na jakim etapie budowy robić podłogówkę",
        "ogrzewanie podłogowe przed czy po tynkach",
        "kiedy układać rury ogrzewania podłogowego",
        "próba szczelności ogrzewania przed wylewką",
        "kiedy wygrzewać jastrych",
        "montaż ogrzewania podłogowego zimą"
      ],
      "citation": [
        "https://www.iso.org/standard/74682.html",
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74684.html",
        "https://www.iso.org/standard/74685.html"
      ]
    },
    {
      "@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"
        },
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ],
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "obliczenia strat ciepła",
        "hydraulika instalacji grzewczych",
        "dobór przepływów",
        "równoważenie hydrauliczne",
        "koordynacja instalacji"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "owns": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt-Ogrzewania.pl",
      "inLanguage": "pl-PL",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      }
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#analyzer",
      "name": "Analizator etapu planowania ogrzewania podłogowego",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Any",
      "browserRequirements": "Przeglądarka z obsługą CSS i JavaScript",
      "isAccessibleForFree": true,
      "description": "Narzędzie porządkujące kolejne decyzje projektowe i wykonawcze zależnie od etapu budowy oraz kompletności danych wejściowych.",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#howto",
      "name": "Jak zaplanować montaż ogrzewania podłogowego w nowym domu",
      "description": "Kolejność od ustalenia warstw podłogi do wykonania próby, jastrychu i uruchomienia instalacji.",
      "step": [
        {"@type": "HowToStep", "position": 1, "name": "Ustal konstrukcję podłogi", "text": "Skoordynuj izolację, system grzewczy, jastrych, okładzinę, progi i rzędne."},
        {"@type": "HowToStep", "position": 2, "name": "Skompletuj dane budynku", "text": "Zbierz aktualne rzuty, parametry przegród, wentylację, temperatury i planowane okładziny."},
        {"@type": "HowToStep", "position": 3, "name": "Wykonaj projekt", "text": "Oblicz obciążenia pomieszczeń, rozstawy, długości pętli, przepływy i nastawy."},
        {"@type": "HowToStep", "position": 4, "name": "Zakończ wcześniejsze roboty", "text": "Zamknij budynek i wykonaj prace oraz instalacje mogące kolidować z konstrukcją podłogi."},
        {"@type": "HowToStep", "position": 5, "name": "Przygotuj podłoże", "text": "Oczyść, osusz, wyrównaj i odbierz podłoże przed rozłożeniem warstw systemu."},
        {"@type": "HowToStep", "position": 6, "name": "Ułóż pętle", "text": "Wykonaj izolację, mocowanie, obwody i podłączenia zgodnie z zatwierdzonym projektem."},
        {"@type": "HowToStep", "position": 7, "name": "Wykonaj próbę", "text": "Sprawdź szczelność, zgodność z projektem, opisy pętli i przygotuj protokół."},
        {"@type": "HowToStep", "position": 8, "name": "Wykonaj jastrych", "text": "Przekaż posadzkarzowi plan dylatacji oraz wymagania wybranego systemu i jastrychu."},
        {"@type": "HowToStep", "position": 9, "name": "Przeprowadź wygrzewanie", "text": "Zastosuj procedurę funkcjonalną zgodną z dokumentacją materiału i systemu."},
        {"@type": "HowToStep", "position": 10, "name": "Uruchom i wyreguluj", "text": "Po odbiorze podkładu ustaw przepływy, temperaturę i automatykę zgodnie z projektem."}
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Kiedy najwcześniej warto zdecydować się na ogrzewanie podłogowe?",
          "acceptedAnswer": {"@type": "Answer", "text": "Najlepiej podczas wyboru lub adaptacji projektu domu, aby skoordynować grubość podłogi, progi, źródło ciepła, rozdzielacze i trasy instalacyjne."}
        },
        {
          "@type": "Question",
          "name": "Czy po wybudowaniu ścian jest już za późno na projekt podłogówki?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie. Zwykle nadal można wykonać obliczenia i projekt, ale trzeba zweryfikować aktualne wymiary, warstwy, okładziny, zabudowę i lokalizację rozdzielaczy."}
        },
        {
          "@type": "Question",
          "name": "Co najpierw: tynki czy ogrzewanie podłogowe?",
          "acceptedAnswer": {"@type": "Answer", "text": "W typowym domu najbezpieczniej zakończyć tynki i prace mogące uszkodzić rury przed ułożeniem właściwych pętli ogrzewania podłogowego."}
        },
        {
          "@type": "Question",
          "name": "Czy budynek powinien mieć zamontowane okna przed montażem?",
          "acceptedAnswer": {"@type": "Answer", "text": "Zamknięcie budynku jest zalecanym punktem wyjścia, ponieważ chroni materiały i instalację przed opadami, promieniowaniem UV, zabrudzeniem oraz zamarznięciem czynnika."}
        },
        {
          "@type": "Question",
          "name": "Czy lato jest jedynym dobrym terminem na montaż i wylewkę?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie. Decydują rzeczywiste warunki w budynku, wymagania materiałów, wentylacja, wilgotność oraz ochrona instalacji przed zamarznięciem."}
        },
        {
          "@type": "Question",
          "name": "Kiedy można rozpocząć wygrzewanie jastrychu?",
          "acceptedAnswer": {"@type": "Answer", "text": "Termin zależy od rodzaju jastrychu i instrukcji producenta. Typowe dokumentacje wskazują różne terminy dla jastrychów cementowych, siarczanowo-wapniowych i systemów specjalnych."}
        },
        {
          "@type": "Question",
          "name": "Czy można zmienić rozstaw rur bez poprawiania projektu?",
          "acceptedAnswer": {"@type": "Answer", "text": "Zmiana rozstawu wpływa na długość pętli, moc powierzchni, przepływ i opory hydrauliczne, dlatego powinna zostać sprawdzona przez projektanta."}
        },
        {
          "@type": "Question",
          "name": "Czy sam rzut pętli wystarczy instalatorowi?",
          "acceptedAnswer": {"@type": "Answer", "text": "Nie. Potrzebne są także długości obwodów, przepływy, nastawy, parametry pracy, lokalizacje rozdzielaczy i założenia dotyczące warstw podłogi."}
        }
      ]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/#breadcrumb",
      "itemListElement": [
        {"@type": "ListItem", "position": 1, "name": "Projekt Ogrzewania", "item": "https://projekt-ogrzewania.pl/"},
        {"@type": "ListItem", "position": 2, "name": "Poradniki", "item": "https://projekt-ogrzewania.pl/porady/"},
        {"@type": "ListItem", "position": 3, "name": "Kiedy planować montaż ogrzewania podłogowego", "item": "https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/"}
      ]
    }
  ]
}
</script>

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

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

  var stageButtons = root.querySelectorAll("[data-rk-stage]");
  var checkboxes = root.querySelectorAll("[data-rk-check]");
  var readinessFill = document.getElementById("rk-stg-readiness-fill");
  var readinessOutput = document.getElementById("rk-stg-readiness-output");
  var resultStage = document.getElementById("rk-stg-result-stage");
  var resultStatus = document.getElementById("rk-stg-result-status");
  var resultNext = document.getElementById("rk-stg-result-next");
  var resultScope = document.getElementById("rk-stg-result-scope");
  var message = document.getElementById("rk-stg-analyzer-message");
  var messageTitle = document.getElementById("rk-stg-message-title");
  var messageText = document.getElementById("rk-stg-message-text");
  var missingText = document.getElementById("rk-stg-missing");
  var currentStage = "closed";

  var stages = {
    concept: {
      label: "Projekt lub adaptacja",
      status: "Moment optymalny",
      next: "Ustal warstwy i założenia",
      scope: "Pełny",
      className: "rk-stg-analyzer-message",
      title: "Najlepszy etap na decyzje architektoniczne",
      text: "Można jeszcze swobodnie skoordynować poziomy, progi, piony, rozdzielacze, źródło ciepła i konstrukcję podłogi bez przerabiania gotowych elementów."
    },
    foundations: {
      label: "Fundamenty lub płyta",
      status: "Nadal bardzo dobry",
      next: "Potwierdź rzędne i izolację",
      scope: "Bardzo szeroki",
      className: "rk-stg-analyzer-message",
      title: "Zamknij poziomy zanim powstaną kolejne elementy",
      text: "Sprawdź całkowitą wysokość podłogi, detale progów, przebieg instalacji podposadzkowych oraz miejsce na szafki rozdzielaczy."
    },
    open: {
      label: "Stan surowy otwarty",
      status: "Dobry moment na projekt",
      next: "Zaktualizuj dane budynku",
      scope: "Szeroki",
      className: "rk-stg-analyzer-message",
      title: "Projekt może już opierać się na konkretnym budynku",
      text: "Zweryfikuj zmiany wykonane względem projektu architektonicznego, parametry okien, wentylację i układ pomieszczeń przed finalnymi obliczeniami."
    },
    closed: {
      label: "Stan surowy zamknięty",
      status: "Dobry moment na finalizację",
      next: "Skompletuj dane do projektu",
      scope: "Nadal szeroki",
      className: "rk-stg-analyzer-message",
      title: "To właściwy moment na zamknięcie projektu",
      text: "Można zweryfikować warstwy podłogi, lokalizację rozdzielaczy, powierzchnie czynne i kolizje przed wejściem ekip wykonawczych."
    },
    prescreed: {
      label: "Tuż przed wylewką",
      status: "Tryb pilny",
      next: "Wstrzymaj układanie do odbioru",
      scope: "Ograniczony czasem",
      className: "rk-stg-analyzer-message is-warning",
      title: "To ostatni bezpieczny moment na sprawdzenie układu",
      text: "Nie pozwalaj wybierać rozstawów i długości pętli na miejscu. Najpierw sprawdź dane, projekt, podłoże, dylatacje oraz kolizje, a dopiero potem rozpoczynaj montaż."
    },
    afterscreed: {
      label: "Wylewka już wykonana",
      status: "Układ zatopiony lub brak miejsca",
      next: "Wykonaj inwentaryzację i analizę",
      scope: "Ograniczony",
      className: "rk-stg-analyzer-message is-risk",
      title: "Nie zakładaj, że każdy system zmieści się na gotowej podłodze",
      text: "Jeżeli rury nie zostały ułożone, trzeba sprawdzić dostępną wysokość, obciążenie stropu i alternatywne systemy. Jeżeli instalacja jest zatopiona, pozostaje odbiór, dokumentacja i ocena hydrauliki."
    }
  };

  function getCheckedData() {
    var count = 0;
    var missing = [];
    var index;
    for (index = 0; index < checkboxes.length; index += 1) {
      if (checkboxes[index].checked) {
        count += 1;
      } else {
        missing.push(checkboxes[index].getAttribute("data-short"));
      }
    }
    return { count: count, missing: missing };
  }

  function renderAnalyzer() {
    var config = stages[currentStage];
    var data = getCheckedData();
    var total = checkboxes.length;
    var percent = Math.round((data.count / total) * 100);
    var index;

    resultStage.textContent = config.label;
    resultStatus.textContent = config.status;
    resultNext.textContent = config.next;
    resultScope.textContent = config.scope;
    message.className = config.className;
    messageTitle.textContent = config.title;
    messageText.textContent = config.text;
    readinessFill.style.width = percent + "%";
    readinessOutput.textContent = data.count + " z " + total;

    if (data.missing.length === 0) {
      missingText.textContent = "Dane wejściowe oznaczone jako ustalone. Przed wykonaniem projektu trzeba jeszcze sprawdzić ich aktualność i kompletność dokumentów.";
    } else {
      missingText.textContent = "Do uzupełnienia: " + data.missing.join(", ") + ".";
    }

    for (index = 0; index < stageButtons.length; index += 1) {
      var active = stageButtons[index].getAttribute("data-rk-stage") === currentStage;
      stageButtons[index].setAttribute("aria-pressed", active ? "true" : "false");
    }
  }

  var stageIndex;
  for (stageIndex = 0; stageIndex < stageButtons.length; stageIndex += 1) {
    stageButtons[stageIndex].addEventListener("click", function () {
      currentStage = this.getAttribute("data-rk-stage");
      renderAnalyzer();
    });
  }

  var checkIndex;
  for (checkIndex = 0; checkIndex < checkboxes.length; checkIndex += 1) {
    checkboxes[checkIndex].addEventListener("change", renderAnalyzer);
  }

  var scenarioButtons = root.querySelectorAll("[data-rk-scenario]");
  var floorDiagram = document.getElementById("rk-stg-floor-diagram");
  var diagramStatus = document.getElementById("rk-stg-diagram-status");
  var scenarioInsulation = document.getElementById("rk-stg-scenario-insulation");
  var scenarioThresholds = document.getElementById("rk-stg-scenario-thresholds");
  var scenarioRoutes = document.getElementById("rk-stg-scenario-routes");
  var scenarioScope = document.getElementById("rk-stg-scenario-scope");

  var scenarios = {
    early: {
      status: "Skoordynowana",
      insulation: "dobrana do przegrody",
      thresholds: "poziomy skoordynowane",
      routes: "trasy uzgodnione",
      scope: "pełny przed wykonaniem"
    },
    late: {
      status: "Ryzyko konfliktu poziomów",
      insulation: "presja na zmniejszenie",
      thresholds: "możliwa kolizja",
      routes: "spiętrzenia i krzyżowania",
      scope: "korekty ograniczone"
    }
  };

  function renderScenario(name) {
    var config = scenarios[name];
    var index;
    floorDiagram.setAttribute("data-state", name);
    diagramStatus.textContent = config.status;
    scenarioInsulation.textContent = config.insulation;
    scenarioThresholds.textContent = config.thresholds;
    scenarioRoutes.textContent = config.routes;
    scenarioScope.textContent = config.scope;

    for (index = 0; index < scenarioButtons.length; index += 1) {
      var active = scenarioButtons[index].getAttribute("data-rk-scenario") === name;
      scenarioButtons[index].setAttribute("aria-pressed", active ? "true" : "false");
    }
  }

  var scenarioIndex;
  for (scenarioIndex = 0; scenarioIndex < scenarioButtons.length; scenarioIndex += 1) {
    scenarioButtons[scenarioIndex].addEventListener("click", function () {
      renderScenario(this.getAttribute("data-rk-scenario"));
    });
  }

  renderAnalyzer();
  renderScenario("early");
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/">Kiedy najlepiej planować montaż ogrzewania podłogowego w nowym domu?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projektowanie ogrzewania podłogowego w domach pasywnych.</title>
		<link>https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 05 Mar 2025 13:06:27 +0000</pubDate>
				<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Ekologiczne rozwiązania grzewcze]]></category>
		<category><![CDATA[Izolacja termiczna]]></category>
		<category><![CDATA[Materiały budowlane]]></category>
		<category><![CDATA[Odnawialne źródła energii]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Systemy niskotemperaturowe]]></category>
		<category><![CDATA[Technologie grzewcze]]></category>
		<category><![CDATA[domy pasywne]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[ekologia]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[niskotemperaturowe ogrzewanie]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[OZE]]></category>
		<category><![CDATA[pompy ciepła]]></category>
		<category><![CDATA[projektowanie instalacji]]></category>
		<category><![CDATA[systemy grzewcze]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2350</guid>

					<description><![CDATA[<p>Projektowanie ogrzewania podłogowego w domach pasywnych to wyzwanie, które wymaga precyzji i wiedzy technicznej. Domy pasywne, charakteryzujące się minimalnym zużyciem energii, potrzebują systemów grzewczych doskonale zintegrowanych z ich konstrukcją. W artykule omawiamy specyfikę takich instalacji, najlepsze praktyki oraz pokazujemy, jak połączyć komfort cieplny z ekologią. Dowiesz się, jak dobrać optymalny rozstaw rur, wybrać materiały o niskiej bezwładności cieplnej oraz zintegrować ogrzewanie z odnawialnymi źródłami energii.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/">Projektowanie ogrzewania podłogowego w domach pasywnych.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #1e293b;
    --rk-intro-blue: #0284c7;
    --rk-intro-blue-light: #e0f2fe;
    --rk-intro-accent: #0ea5e9;
    --rk-intro-passive: #10b981; /* Zielony dla pasywnego */
    --rk-intro-standard: #f97316; /* Pomarańczowy dla standardu */
    --rk-intro-bg: #ffffff;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #475569;
}

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

/* Sekcja Opisowa Wstępu */
.rk-intro-content {
    padding: 45px 45px 30px;
    background: linear-gradient(to bottom, #f8fafc, #ffffff);
}

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

.rk-intro-text-body {
    font-size: 17px;
    line-height: 1.7;
    color: var(--rk-intro-text);
    margin: 0;
}

.rk-intro-text-body a {
    color: var(--rk-intro-blue);
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    transition: color 0.3s;
}

.rk-intro-text-body a:hover {
    color: var(--rk-intro-accent);
}

.rk-intro-highlight {
    display: inline-block;
    background: var(--rk-intro-blue-light);
    color: var(--rk-intro-blue);
    padding: 4px 10px;
    border-radius: 6px;
    font-weight: 800;
    font-size: 15px;
    margin-top: 15px;
    border: 1px solid rgba(2, 132, 199, 0.2);
}

/* Symulator Suwakowy */
.rk-intro-sim {
    padding: 0 45px 45px;
}

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

/* Custom Slider */
.rk-slider-container {
    background: #f1f5f9;
    padding: 25px;
    border-radius: 16px;
    border: 1px solid var(--rk-intro-border);
    margin-bottom: 30px;
}

.rk-slider-labels {
    display: flex;
    justify-content: space-between;
    margin-bottom: 15px;
    font-size: 13px;
    font-weight: 700;
    color: #64748b;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: linear-gradient(to right, var(--rk-intro-passive) 0%, #cbd5e1 50%, var(--rk-intro-standard) 100%);
    outline: none;
    transition: opacity .2s;
}

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

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

/* Wizualizacja SVG i Dane */
.rk-sim-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    align-items: center;
}

.rk-svg-house {
    width: 100%;
    max-width: 180px;
    margin: 0 auto;
    display: block;
}

.anim-heat-loss {
    transition: opacity 0.3s, transform 0.3s;
}

.anim-wall {
    transition: stroke-width 0.3s, stroke 0.3s;
}

.anim-floor-heat {
    transition: fill 0.3s;
}

/* Kafelki parametrów */
.rk-metrics-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

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

.rk-metric-box h4 {
    margin: 0 0 5px 0;
    font-size: 12px;
    text-transform: uppercase;
    color: #94a3b8;
    font-weight: 700;
    letter-spacing: 0.5px;
}

.rk-metric-value {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    margin-bottom: 2px;
}

.rk-metric-unit {
    font-size: 12px;
    color: #64748b;
    font-weight: 600;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-intro-content, .rk-intro-sim { padding: 30px 20px; }
    .rk-sim-dashboard { grid-template-columns: 1fr; gap: 20px; text-align: center; }
    .rk-metrics-grid { grid-template-columns: 1fr 1fr; }
    .rk-svg-house { max-width: 150px; }
}
@media (max-width: 480px) {
    .rk-metrics-grid { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Inżynieryjny fundament: OZC i skrajnie niskie zapotrzebowanie na energię w domu pasywnym",
    "description": "Projektowanie instalacji dla domów pasywnych (zapotrzebowanie poniżej 15 kWh/(m²·rok)) wymaga idealnego zbilansowania mocy, przepływów i zasilania. Tu nie ma miejsca na błędy.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-ozc",
    "name": "Zestawienie Zapotrzebowania Energetycznego: Standard vs Dom Pasywny",
    "description": "Porównanie skrajnych wartości projektowego obciążenia cieplnego (OZC) dla budownictwa tradycyjnego oraz standardu pasywnego poniżej 15 kWh.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne OZC",
      "ogrzewanie podłogowe dom pasywny",
      "zapotrzebowanie na energię 15 kWh",
      "temperatura czynnika grzewczego",
      "bezwładność cieplna budynku"
    ],
    "measurementTechnique": "Dynamiczna interpolacja algorytmiczna określająca zapotrzebowanie (W/m²), przepływ i temperaturę zasilania w zależności od współczynnika izolacyjności budynku.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dom Pasywny (<15 kWh): Wymaga zasilania 28°C i mocy grzewczej rzędu 10 W/m².",
        "Dom Standardowy: Wymaga zasilania >35°C i mocy rzędu 40-50 W/m²."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-ozc",
    "name": "Symulator Projektowego Obciążenia Cieplnego (OZC)",
    "description": "Interaktywny suwak pozwalający obserwować w czasie rzeczywistym spadek wymaganej mocy grzewczej oraz temperatury zasilania wraz ze wzrostem izolacyjności przegród.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5 SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-intro-wrap" id="ozc-intro-app">
    
    <!-- Opis Inżynieryjny -->
    <div class="rk-intro-content">
        <h2>Od teorii do fizyki budowli: Czym różni się projekt pasywny?</h2>
        <p class="rk-intro-text-body">
            Projektowanie ogrzewania podłogowego w domach pasywnych to proces inżynieryjny polegający na precyzyjnym obliczeniu <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowego obciążenia cieplnego (OZC)</a> dla budynku o ekstremalnie niskim zapotrzebowaniu na energię (poniżej <strong>15 kWh/(m²·rok)</strong>) oraz <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">doborze parametrów instalacji hydraulicznej</a> w taki sposób, aby system pracował efektywnie przy skrajnie niskich temperaturach czynnika grzewczego. W standardzie pasywnym kluczowe jest zapewnienie stabilności termicznej przy jednoczesnym uniknięciu przegrzewania pomieszczeń, co wymaga uwzględnienia <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności cieplnej przegród</a> oraz <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">integracji z systemem wentylacji mechanicznej z odzyskiem ciepła</a>.
        </p>
        <div class="rk-intro-highlight">
            Tu nie ma miejsca na &#8222;dobór na oko&#8221; – liczy się każdy wat mocy i litr przepływu.
        </div>
    </div>

    <!-- Symulator OZC -->
    <div class="rk-intro-sim">
        <div class="rk-sim-header">
            <h3>Symulacja OZC: Wpływ izolacji na podłogówkę</h3>
        </div>

        <div class="rk-slider-container">
            <div class="rk-slider-labels">
                <span style="color: var(--rk-intro-passive);">Dom Pasywny</span>
                <span>Energooszczędny</span>
                <span style="color: var(--rk-intro-standard);">Standard (WT2021)</span>
            </div>
            <!-- Suwak: od 1 (Pasywny) do 100 (Standard) -->
            <input type="range" min="1" max="100" value="1" class="rk-range-input" id="ozc-slider" aria-label="Wybierz standard energetyczny budynku">
        </div>

        <div class="rk-sim-dashboard">
            <!-- Animowana grafika domku -->
            <div class="rk-svg-display">
                <svg class="rk-svg-house" viewBox="0 0 200 200">
                    <!-- Fale uciekającego ciepła (animowane opacity) -->
                    <g id="heat-loss-waves" stroke="var(--rk-intro-standard)" stroke-width="3" fill="none" stroke-linecap="round" opacity="0.1">
                        <path d="M 30 70 Q 20 40 40 10" />
                        <path d="M 170 70 Q 180 40 160 10" />
                        <path d="M 100 30 Q 110 10 90 -10" />
                    </g>
                    <!-- Dach i Ściany -->
                    <path class="anim-wall" id="house-walls" d="M 40 160 L 40 90 L 100 40 L 160 90 L 160 160 Z" fill="none" stroke="#64748b" stroke-width="12" stroke-linejoin="round" />
                    <!-- Podłoga (Wylewka) -->
                    <rect x="25" y="160" width="150" height="20" fill="#cbd5e1" rx="2" />
                    <!-- Rury podłogówki -->
                    <g id="floor-pipes" fill="var(--rk-intro-passive)">
                        <circle cx="50" cy="170" r="5" />
                        <circle cx="80" cy="170" r="5" />
                        <circle cx="110" cy="170" r="5" />
                        <circle cx="140" cy="170" r="5" />
                    </g>
                    <!-- Centralna ikona temperatury -->
                    <text x="100" y="125" text-anchor="middle" font-size="28" font-weight="900" fill="var(--rk-intro-dark)" font-family="sans-serif">20°C</text>
                </svg>
            </div>

            <!-- Dynamiczne parametry OZC -->
            <div class="rk-metrics-grid">
                <div class="rk-metric-box">
                    <h4>Zapotrzebowanie EUco</h4>
                    <div class="rk-metric-value" id="val-euco" style="color: var(--rk-intro-passive);">15</div>
                    <div class="rk-metric-unit">kWh/(m²·rok)</div>
                </div>
                <div class="rk-metric-box">
                    <h4>Moc z podłogi (q)</h4>
                    <div class="rk-metric-value" id="val-q">10</div>
                    <div class="rk-metric-unit">W/m²</div>
                </div>
                <div class="rk-metric-box">
                    <h4>Max Temp. Zasilania</h4>
                    <div class="rk-metric-value" id="val-temp" style="color: var(--rk-intro-passive);">28°C</div>
                    <div class="rk-metric-unit">przy mrozie -20°C</div>
                </div>
                <div class="rk-metric-box">
                    <h4>Praca Pompy Ciepła</h4>
                    <div class="rk-metric-value" id="val-cop" style="color: var(--rk-intro-passive);">COP Maksymalne</div>
                    <div class="rk-metric-unit">Stabilność układu</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H2/H3
    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-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #1e293b; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">⚠️</div>
                    <div style="font-size: 18px; font-weight: bold; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Nieautoryzowane Użycie Kodu</div>
                    <div style="color: #cbd5e1; font-size: 14px; line-height: 1.6;">
                        Ten kalkulator OZC oraz struktura Schema.org stanowią własność portalu Projekt-Ogrzewania.pl. 
                        Skrypt zablokował renderowanie na obcej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Suwaka (Interpolacja OZC)
    const slider = document.getElementById('ozc-slider');
    
    // Elementy UI
    const valEuco = document.getElementById('val-euco');
    const valQ = document.getElementById('val-q');
    const valTemp = document.getElementById('val-temp');
    const valCop = document.getElementById('val-cop');
    
    // Elementy SVG
    const heatLossWaves = document.getElementById('heat-loss-waves');
    const houseWalls = document.getElementById('house-walls');
    const floorPipes = document.getElementById('floor-pipes');

    // Kolory do płynnego przejścia
    const colorPassive = [16, 185, 129]; // #10b981
    const colorStandard = [249, 115, 22]; // #f97316

    function interpolateColor(color1, color2, factor) {
        let result = color1.slice();
        for (let i = 0; i < 3; i++) {
            result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));
        }
        return `rgb(${result[0]}, ${result[1]}, ${result[2]})`;
    }

    function updateSimulation() {
        const factor = (slider.value - 1) / 99; // 0 (Pasywny) do 1 (Standard)

        // Obliczenia wartości
        const euco = Math.round(15 + factor * (65 - 15)); // od 15 do 65 kWh
        const q = Math.round(10 + factor * (45 - 10)); // od 10 do 45 W/m2
        const tempZasilania = Math.round(28 + factor * (38 - 28)); // od 28 do 38 C
        
        // Kolor stanu
        const currentColor = interpolateColor(colorPassive, colorStandard, factor);

        // Aktualizacja HTML
        valEuco.textContent = euco;
        valEuco.style.color = currentColor;
        
        valQ.textContent = q;
        valQ.style.color = currentColor;
        
        valTemp.textContent = tempZasilania + '°C';
        valTemp.style.color = currentColor;

        if (factor < 0.33) {
            valCop.textContent = "COP Maksymalne";
            valCop.style.color = "var(--rk-intro-passive)";
        } else if (factor < 0.66) {
            valCop.textContent = "COP Standardowe";
            valCop.style.color = "#64748b";
        } else {
            valCop.textContent = "Ryzyko Spadku COP";
            valCop.style.color = "var(--rk-intro-standard)";
        }

        // Animacja SVG
        // Grubosć ścian maleje im gorszy standard (więcej strat)
        const wallThickness = 14 - (factor * 8); // od 14px do 6px
        houseWalls.style.strokeWidth = wallThickness;
        houseWalls.style.stroke = factor < 0.5 ? '#64748b' : '#94a3b8';

        // Intensywność fal uciekającego ciepła rośnie
        heatLossWaves.style.opacity = 0.1 + (factor * 0.9); // od 0.1 do 1.0

        // Kolor rur podłogówki robi się coraz "gorętszy"
        floorPipes.setAttribute('fill', currentColor);
    }

    // Nasłuchiwanie zdarzeń
    slider.addEventListener('input', updateSimulation);
    
    // Inicjalizacja
    updateSimulation();
});
</script>



<style>
:root {
    --rk-pwr-dark: #1e293b;
    --rk-pwr-blue: #0284c7;
    --rk-pwr-blue-light: #f0f9ff;
    --rk-pwr-green: #10b981;
    --rk-pwr-green-bg: #ecfdf5;
    --rk-pwr-red: #ef4444;
    --rk-pwr-red-bg: #fef2f2;
    --rk-pwr-gray: #64748b;
    --rk-pwr-border: #e2e8f0;
    --rk-pwr-bg: #ffffff;
}

.rk-pwr-container {
    max-width: 900px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-pwr-bg);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(2, 132, 199, 0.12);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Sekcja Treści */
.rk-pwr-content {
    padding: 40px 40px 25px;
    background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-pwr-border);
}

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

.rk-pwr-text {
    font-size: 16px;
    line-height: 1.7;
    color: #475569;
    margin: 0 0 15px 0;
}

.rk-pwr-text a {
    color: var(--rk-pwr-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-pwr-text a:hover {
    background: var(--rk-pwr-blue-light);
    border-color: var(--rk-pwr-blue);
}

/* Interfejs Symulatora */
.rk-pwr-interactive {
    padding: 30px 40px 40px;
}

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

/* Slider / Suwak */
.rk-pwr-slider-box {
    background: #f8fafc;
    padding: 25px 30px;
    border-radius: 16px;
    border: 1px solid var(--rk-pwr-border);
    margin-bottom: 35px;
}

.rk-slider-labels {
    display: flex;
    justify-content: space-between;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 15px;
}

.rk-slider-input {
    -webkit-appearance: none;
    width: 100%;
    height: 10px;
    border-radius: 5px;
    background: linear-gradient(90deg, var(--rk-pwr-green) 0%, #cbd5e1 50%, var(--rk-pwr-red) 100%);
    outline: none;
}

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

.rk-slider-input::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

/* Wyświetlacz: SVG + Kafelki */
.rk-pwr-dashboard {
    display: grid;
    grid-template-columns: 220px 1fr;
    gap: 30px;
    align-items: center;
}

.rk-pwr-svg-wrap {
    text-align: center;
}

.rk-svg-heat {
    width: 100%;
    max-width: 180px;
}

.anim-heat-wave {
    fill: none;
    stroke-width: 5;
    stroke-linecap: round;
    transition: stroke 0.3s, transform 0.3s;
}

/* Kafelki parametrów */
.rk-pwr-metrics {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-pwr-card {
    background: #ffffff;
    border: 1px solid var(--rk-pwr-border);
    padding: 20px;
    border-radius: 14px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
    transition: all 0.3s;
}

.rk-pwr-card h4 {
    margin: 0 0 8px 0;
    font-size: 12px;
    text-transform: uppercase;
    color: var(--rk-pwr-gray);
    letter-spacing: 0.5px;
}

.rk-pwr-value {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-pwr-dark);
    line-height: 1.1;
    margin-bottom: 4px;
}

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

.status-badge {
    display: inline-block;
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    margin-top: 10px;
}

.badge-ok { background: var(--rk-pwr-green-bg); color: var(--rk-pwr-green); border: 1px solid #a7f3d0; }
.badge-warn { background: var(--rk-pwr-red-bg); color: var(--rk-pwr-red); border: 1px solid #fecaca; }

@media (max-width: 768px) {
    .rk-pwr-content, .rk-pwr-interactive { padding: 25px; }
    .rk-pwr-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-pwr-svg-wrap { margin-bottom: 10px; }
    .rk-svg-heat { max-width: 140px; }
}

@media (max-width: 480px) {
    .rk-pwr-metrics { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-moc-grzewcza",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Maksymalna moc grzewcza ogrzewania podłogowego w domu pasywnym",
    "description": "Zrozumienie różnicy w mocy grzewczej między budownictwem tradycyjnym (60-80 W/m2) a pasywnym (10-20 W/m2). Wpływ na temperaturę podłogi według 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": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-moc",
    "name": "Zestawienie Mocy Grzewczej: Dom Pasywny vs Tradycyjny",
    "description": "Porównanie parametrów obciążenia cieplnego dla salonu 35 m2 w zależności od standardu izolacji budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "maksymalna moc grzewcza podłogówki",
      "obciążenie cieplne W/m2",
      "temperatura powierzchni podłogi 29°C",
      "przegrzewanie domu pasywnego",
      "norma PN-EN 12831"
    ],
    "measurementTechnique": "Dynamiczna estymacja mocy i temperatury podłogi w oparciu o wytyczne norm PN-EN 12831 (obliczanie strat) oraz PN-EN 1264 (parametry podłogówki).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dom Pasywny: Zapotrzebowanie ~10-20 W/m2, moc całkowita salonu 35m2 ~400W, temperatura podłogi 24-25°C.",
        "Budownictwo Tradycyjne: Zapotrzebowanie ~60-80 W/m2, ryzyko przekroczenia normatywnych 29°C w domach wysoce izolowanych przy błędnym projekcie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-moc",
    "name": "Symulator Przegrzewania Podłogi",
    "description": "Aplikacja internetowa wizualizująca ryzyko przegrzania pomieszczenia pasywnego w przypadku zastosowania mocy grzewczej właściwej dla starego budownictwa.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-pwr-container" id="pwr-sim-app">
    
    <div class="rk-pwr-content">
        <h2>Jaka jest maksymalna moc grzewcza w domu pasywnym?</h2>
        <p class="rk-pwr-text">
            Moc grzewcza w domu pasywnym nie powinna przekraczać <strong>10–20 W/m²</strong> przy parametrach obliczeniowych dla danej strefy klimatycznej, zgodnie z <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">normą PN-EN 12831</a>. W tradycyjnym budownictwie wartości te sięgają 60–80 W/m², co w standardzie pasywnym doprowadziłoby do natychmiastowego przegrzania i dyskomfortu.
        </p>
        <p class="rk-pwr-text">
            W domach pasywnych <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">obliczenia strat ciepła</a> muszą być wykonane z dokładnością do 1 W. Przykładowo, dla salonu o powierzchni 35 m² projektowe obciążenie cieplne wynosi zaledwie 350–450 W. Zgodnie z <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">normą PN-EN 1264</a>, musimy tak dobrać rozstaw i temperaturę, aby nie przekroczyć granicy 29°C. Prawidłowo zaprojektowana <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/">optymalna temperatura podłogi</a> w domu pasywnym rzadko przekracza jednak 24–25°C.
        </p>
    </div>

    <div class="rk-pwr-interactive">
        <h3>Symulator Salonu 35 m²: Ryzyko Przegrzania</h3>
        
        <div class="rk-pwr-slider-box">
            <div class="rk-slider-labels">
                <span style="color: var(--rk-pwr-green);">Dom Pasywny</span>
                <span style="color: var(--rk-pwr-red);">Stare Budownictwo</span>
            </div>
            <input type="range" min="1" max="100" value="10" class="rk-slider-input" id="rk-pwr-slider" aria-label="Symulacja obciążenia cieplnego budynku">
        </div>

        <div class="rk-pwr-dashboard">
            <!-- Animacja SVG -->
            <div class="rk-pwr-svg-wrap">
                <svg class="rk-svg-heat" viewBox="0 0 200 200">
                    <!-- Fale promieniowania -->
                    <g id="heat-waves" stroke="var(--rk-pwr-green)">
                        <path class="anim-heat-wave" id="wave1" d="M 50 140 Q 60 90 50 40" />
                        <path class="anim-heat-wave" id="wave2" d="M 100 140 Q 110 90 100 40" />
                        <path class="anim-heat-wave" id="wave3" d="M 150 140 Q 160 90 150 40" />
                    </g>
                    <!-- Przekrój podłogi -->
                    <rect x="20" y="160" width="160" height="24" fill="#cbd5e1" rx="4" />
                    <!-- Rury grzewcze -->
                    <g id="floor-pipes" fill="var(--rk-pwr-green)">
                        <circle cx="50" cy="172" r="6" />
                        <circle cx="83" cy="172" r="6" />
                        <circle cx="116" cy="172" r="6" />
                        <circle cx="150" cy="172" r="6" />
                    </g>
                </svg>
            </div>

            <!-- Karty Danych -->
            <div class="rk-pwr-metrics">
                <div class="rk-pwr-card">
                    <h4>Moc z 1 m² (q)</h4>
                    <div class="rk-pwr-value" id="val-wm2">12</div>
                    <div class="rk-pwr-unit">W/m²</div>
                    <div class="status-badge badge-ok" id="badge-wm2">Zgodnie z normą</div>
                </div>
                <div class="rk-pwr-card">
                    <h4>Moc Całkowita Salonu</h4>
                    <div class="rk-pwr-value" id="val-total">420</div>
                    <div class="rk-pwr-unit">Watów (W)</div>
                </div>
                <div class="rk-pwr-card">
                    <h4>Temp. Powierzchni</h4>
                    <div class="rk-pwr-value" id="val-temp">24.5</div>
                    <div class="rk-pwr-unit">°C</div>
                    <div class="status-badge badge-ok" id="badge-temp">Komfortowa</div>
                </div>
                <div class="rk-pwr-card">
                    <h4>Zasilanie Pętli</h4>
                    <div class="rk-pwr-value" id="val-supply">30</div>
                    <div class="rk-pwr-unit">°C</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H2/H3
    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('pwr-sim-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #1e293b; border: 2px solid #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 16px; font-weight: bold; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano</div>
                    <div style="color: #cbd5e1; font-size: 13px; line-height: 1.5;">
                        Kod kalkulatora mocy grzewczej oraz dane ustrukturyzowane Schema.org są chronione. Uruchamianie na nieautoryzowanej domenie zostało przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Suwaka
    const slider = document.getElementById('rk-pwr-slider');
    
    // Elementy DOM
    const valWm2 = document.getElementById('val-wm2');
    const valTotal = document.getElementById('val-total');
    const valTemp = document.getElementById('val-temp');
    const valSupply = document.getElementById('val-supply');
    
    const badgeWm2 = document.getElementById('badge-wm2');
    const badgeTemp = document.getElementById('badge-temp');
    
    // SVG
    const heatWaves = document.getElementById('heat-waves');
    const floorPipes = document.getElementById('floor-pipes');
    const wavePaths = document.querySelectorAll('.anim-heat-wave');

    const AREA = 35; // Powierzchnia salonu stała = 35 m2

    function interpolateColor(color1, color2, factor) {
        let result = color1.slice();
        for (let i = 0; i < 3; i++) {
            result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));
        }
        return `rgb(${result[0]}, ${result[1]}, ${result[2]})`;
    }

    const rgbGreen = [16, 185, 129]; // #10b981
    const rgbRed = [239, 68, 68];    // #ef4444

    function updateSim() {
        const factor = (slider.value - 1) / 99; // 0.0 to 1.0

        // Obliczenia
        const powerPerSqm = Math.round(10 + factor * (80 - 10)); // 10 do 80 W/m2
        const totalPower = powerPerSqm * AREA;
        const surfaceTemp = (24 + factor * (33 - 24)).toFixed(1); // 24.0 do 33.0 °C
        const supplyTemp = Math.round(28 + factor * (45 - 28)); // 28 do 45 °C

        const currentColor = interpolateColor(rgbGreen, rgbRed, factor);

        // Aktualizacja Wartości
        valWm2.textContent = powerPerSqm;
        valWm2.style.color = currentColor;
        
        valTotal.textContent = totalPower;
        
        valTemp.textContent = surfaceTemp;
        valTemp.style.color = currentColor;
        
        valSupply.textContent = supplyTemp;

        // Logika Odznak (Badges)
        if (powerPerSqm <= 20) {
            badgeWm2.className = 'status-badge badge-ok';
            badgeWm2.textContent = 'Standard Pasywny';
        } else {
            badgeWm2.className = 'status-badge badge-warn';
            badgeWm2.textContent = 'Straty Tradycyjne';
        }

        if (surfaceTemp <= 29) {
            badgeTemp.className = 'status-badge badge-ok';
            badgeTemp.textContent = 'Norma zachowana';
        } else {
            badgeTemp.className = 'status-badge badge-warn';
            badgeTemp.textContent = 'Przegrzewanie (>29°C)';
        }

        // Animacja SVG
        heatWaves.setAttribute('stroke', currentColor);
        floorPipes.setAttribute('fill', currentColor);

        // Intensywność fal na podstawie mocy (wymuszenie ruchu)
        const waveOffset = factor * 20;
        wavePaths[0].setAttribute('d', `M 50 140 Q ${60 + waveOffset} 90 50 40`);
        wavePaths[1].setAttribute('d', `M 100 140 Q ${110 - waveOffset} 90 100 40`);
        wavePaths[2].setAttribute('d', `M 150 140 Q ${160 + waveOffset} 90 150 40`);
        
        heatWaves.style.opacity = 0.4 + (factor * 0.6); // Zwiększa widoczność ciepła
    }

    slider.addEventListener('input', updateSim);
    updateSim(); // Init
});
</script>




<style>
:root {
    --rk-therm-dark: #1e293b;
    --rk-therm-brand: #0ea5e9;
    --rk-therm-sun: #fbbf24;
    --rk-therm-heat: #ef4444;
    --rk-therm-cool: #3b82f6;
    --rk-therm-bg: #ffffff;
    --rk-therm-panel: #f8fafc;
    --rk-therm-border: #e2e8f0;
    --rk-therm-text: #475569;
}

.rk-therm-wrap {
    max-width: 920px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-therm-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(14, 165, 233, 0.15);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Sekcja Treści */
.rk-therm-content {
    padding: 45px 50px 30px;
    background: linear-gradient(180deg, #f0f9ff 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-therm-border);
}

.rk-therm-content h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-therm-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
    letter-spacing: -0.5px;
}

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

.rk-therm-text a {
    color: #0284c7;
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-therm-text a:hover {
    background: #e0f2fe;
    border-color: #0284c7;
}

.rk-highlight-box {
    background: #fffbeb;
    border-left: 4px solid var(--rk-therm-sun);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    margin: 25px 0;
    font-size: 15px;
    color: #92400e;
    font-weight: 600;
}

/* Symulator Samoregulacji */
.rk-therm-interactive {
    padding: 40px 50px;
}

.rk-therm-interactive h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-therm-dark);
    margin: 0 0 30px 0;
}

/* Unikalny Kontroler - Suwak Słoneczny */
.rk-sun-controller {
    background: var(--rk-therm-panel);
    border: 1px solid var(--rk-therm-border);
    padding: 25px 35px;
    border-radius: 16px;
    margin-bottom: 40px;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);
}

.rk-sun-labels {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
    font-weight: 800;
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #64748b;
}

.rk-sun-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 12px;
    border-radius: 6px;
    background: linear-gradient(90deg, #cbd5e1 0%, var(--rk-therm-sun) 100%);
    outline: none;
}

.rk-sun-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: #ffffff;
    border: 4px solid var(--rk-therm-sun);
    cursor: pointer;
    box-shadow: 0 4px 10px rgba(251, 191, 36, 0.4);
    transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-sun-slider::-webkit-slider-thumb:hover {
    transform: scale(1.15);
}

/* Dashboard: SVG + Dane (Układ zintegrowany) */
.rk-therm-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
}

/* Wizualizacja interaktywna SVG */
.rk-svg-stage {
    background: #ffffff;
    border-radius: 20px;
    padding: 20px;
    border: 1px solid var(--rk-therm-border);
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.05);
    position: relative;
}

.rk-anim-sun-rays {
    transition: opacity 0.3s ease;
}

.rk-anim-therm-fill {
    transition: y 0.3s ease, height 0.3s ease, fill 0.3s ease;
}

.rk-anim-pipe {
    transition: fill 0.4s ease;
}

/* Kafelki Danych (H4) */
.rk-metrics-grid {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-metric-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #ffffff;
    border: 1px solid var(--rk-therm-border);
    padding: 16px 24px;
    border-radius: 14px;
    transition: all 0.3s;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-metric-row:hover {
    border-color: #bae6fd;
    transform: translateX(5px);
}

.rk-metric-info h4 {
    margin: 0 0 4px 0;
    font-size: 13px;
    text-transform: uppercase;
    color: var(--rk-therm-text);
    letter-spacing: 0.5px;
}

.rk-metric-info p {
    margin: 0;
    font-size: 11px;
    color: #94a3b8;
}

.rk-metric-value {
    font-size: 26px;
    font-weight: 900;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.rk-metric-value span {
    font-size: 13px;
    font-weight: 700;
    margin-left: 2px;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-therm-content, .rk-therm-interactive { padding: 30px 25px; }
    .rk-therm-dashboard { grid-template-columns: 1fr; gap: 30px; }
    .rk-metric-row { padding: 15px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/"
    },
    "headline": "Optymalna temperatura zasilania pompy ciepła i efekt samoregulacji podłogówki",
    "description": "Dlaczego temperatura zasilania 28°C-32°C to ideał dla pomp ciepła? Poznaj efekt samoregulacji instalacji według normy ISO 10508 i wpływ pasywnych zysków ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#dataset",
    "name": "Analiza Efektu Samoregulacji Ogrzewania Podłogowego",
    "description": "Zestawienie spadku mocy grzewczej podłogi w funkcji wzrostu temperatury wewnętrznej pomieszczenia wywołanej pasywnymi zyskami słonecznymi.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "temperatura zasilania pompy ciepła",
      "współczynnik COP pompy ciepła",
      "samoregulacja ogrzewania podłogowego",
      "pasywne zyski słoneczne dom pasywny",
      "norma ISO 10508 podłogówka"
    ],
    "measurementTechnique": "Algorytmiczna interpolacja liniowa odwzorowująca spadek gęstości strumienia cieplnego przy zmniejszającej się różnicy temperatur między podłogą a powietrzem.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Stan bazowy: Temp. pokoju 20.0°C, moc podłogi 100%, zasilanie 30°C.",
        "Efekt samoregulacji: Wzrost temp. pokoju do 22.0°C od słońca automatycznie dławi oddawanie ciepła przez podłogę o 30%, redukując zużycie prądu przez pompę."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#webapp",
    "name": "Symulator Samoregulacji Termicznej Płyty Grzewczej",
    "description": "Narzędzie interaktywne ilustrujące zjawisko fizyczne, w którym podłoga przestaje oddawać ciepło pod wpływem nasłonecznienia zewnętrznego, bez ingerencji termostatów.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-therm-wrap" id="samoregulacja-app">
    
    <div class="rk-therm-content">
        <h2>Jaka temperatura zasilania jest idealna dla pompy ciepła w standardzie pasywnym?</h2>
        <p class="rk-therm-text">
            Idealna temperatura zasilania (T_z) w domu pasywnym oscyluje w granicach <strong>28°C – 32°C</strong> przy temperaturze zewnętrznej -20°C. Obniżenie temperatury zasilania o każdy 1°C zwiększa <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">współczynnik COP pompy ciepła</a> o około 2-3%, co w skali roku generuje wymierne oszczędności na rachunkach za prąd.
        </p>
        <p class="rk-therm-text">
            Projektując układ, dążymy do tzw. "grzania ciągłego" o bardzo niskiej mocy. <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">Norma EN 1264</a> oraz ISO 10508 klasyfikują takie systemy w Klasie 4 (niskotemperaturowe <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">wodne ogrzewanie podłogowe</a>). Przy zasilaniu 30°C i powrocie 25°C (spadek temperatury Delta T = 5K), średnia temperatura jastrychu wynosi zaledwie 27,5°C.
        </p>
        
        <div class="rk-highlight-box">
            Przy temperaturze docelowej w pomieszczeniu 20°C, różnica między powietrzem a podłogą to tylko 7,5K. Uruchamia to zjawisko fizycznej samoregulacji.
        </div>
        
        <p class="rk-therm-text">
            To sprawia, że system dławi się samoczynnie. Jeśli <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">pasywne zyski ciepła od nasłonecznienia</a> podniosą temperaturę w salonie o 2°C, moc oddawana przez podłogę spadnie automatycznie o blisko <strong>30%</strong>, bez jakiejkolwiek ingerencji elektroniki sterującej!
        </p>
    </div>

    <div class="rk-therm-interactive">
        <h3>Przetestuj zjawisko: Symulator Samoregulacji</h3>
        
        <div class="rk-sun-controller">
            <div class="rk-sun-labels">
                <span style="color: #94a3b8;">Brak słońca (Zima/Noc)</span>
                <span style="color: var(--rk-therm-sun);">Duże zyski przez okna (Dzień)</span>
            </div>
            <input type="range" min="0" max="100" value="0" class="rk-sun-slider" id="rk-sun-input" aria-label="Poziom nasłonecznienia pomieszczenia">
        </div>

        <div class="rk-therm-dashboard">
            <!-- Grafika Pokoju, Słońca i Termometru -->
            <div class="rk-svg-stage">
                <svg viewBox="0 0 300 200" width="100%" height="auto">
                    <!-- Słońce (animowane) -->
                    <g id="svg-sun" opacity="0.3">
                        <circle cx="50" cy="50" r="20" fill="var(--rk-therm-sun)" />
                        <g class="rk-anim-sun-rays" id="sun-rays">
                            <line x1="50" y1="15" x2="50" y2="5" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="50" y1="85" x2="50" y2="95" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="15" y1="50" x2="5" y2="50" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="85" y1="50" x2="95" y2="50" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="25" y1="25" x2="18" y2="18" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="75" y1="75" x2="82" y2="82" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="25" y1="75" x2="18" y2="82" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                            <line x1="75" y1="25" x2="82" y2="18" stroke="var(--rk-therm-sun)" stroke-width="4" stroke-linecap="round"/>
                        </g>
                    </g>
                    
                    <!-- Termometr -->
                    <rect x="220" y="30" width="20" height="120" rx="10" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="2"/>
                    <rect x="224" y="80" width="12" height="70" rx="6" fill="#ef4444" id="therm-fill" class="rk-anim-therm-fill"/>
                    <circle cx="230" cy="150" r="14" fill="#ef4444" id="therm-bulb" class="rk-anim-therm-fill"/>
                    <!-- Skala -->
                    <path d="M 245 50 L 255 50 M 245 70 L 255 70 M 245 90 L 255 90 M 245 110 L 255 110 M 245 130 L 255 130" stroke="#94a3b8" stroke-width="1.5"/>

                    <!-- Podłoga i Rury (animowane) -->
                    <rect x="20" y="170" width="260" height="20" fill="#e2e8f0" rx="4"/>
                    <g id="floor-pipes">
                        <circle cx="50" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="90" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="130" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="170" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="210" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                        <circle cx="250" cy="180" r="6" class="rk-anim-pipe" fill="var(--rk-therm-heat)"/>
                    </g>
                </svg>
            </div>

            <!-- Parametry Dynamiczne -->
            <div class="rk-metrics-grid">
                <div class="rk-metric-row">
                    <div class="rk-metric-info">
                        <h4>Zyski Słoneczne</h4>
                        <p>Dodatkowa darmowa energia</p>
                    </div>
                    <div class="rk-metric-value" style="color: var(--rk-therm-sun);">
                        <span id="val-sun" style="font-size: 26px;">0</span><span>%</span>
                    </div>
                </div>

                <div class="rk-metric-row">
                    <div class="rk-metric-info">
                        <h4>Temperatura w salonie</h4>
                        <p>Baza: 20°C (różnica 7,5K do podłogi)</p>
                    </div>
                    <div class="rk-metric-value" style="color: var(--rk-therm-dark);">
                        <span id="val-room" style="font-size: 26px;">20.0</span><span>°C</span>
                    </div>
                </div>

                <div class="rk-metric-row" style="border-left: 4px solid var(--rk-therm-brand);">
                    <div class="rk-metric-info">
                        <h4>Moc grzewcza podłogi</h4>
                        <p>Efekt automatycznego dławienia</p>
                    </div>
                    <div class="rk-metric-value" style="color: var(--rk-therm-heat);" id="color-power">
                        <span id="val-power" style="font-size: 26px;">100</span><span>%</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('samoregulacja-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 25px; text-align: center; background: #fffbeb; border: 2px solid #f59e0b; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 10px;">🛑</div>
                    <div style="font-size: 15px; font-weight: bold; color: #b45309; margin-bottom: 8px;">Blokada Własności Intelektualnej</div>
                    <div style="color: #92400e; font-size: 13px; line-height: 1.5;">
                        Moduł symulacji samoregulacji oraz kod strukturalny zostały zablokowane. Wykryto próbę uruchomienia skryptu Projekt-Ogrzewania.pl na innej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Efekt Samoregulacji)
    const slider = document.getElementById('rk-sun-input');
    
    // UI Elements
    const valSun = document.getElementById('val-sun');
    const valRoom = document.getElementById('val-room');
    const valPower = document.getElementById('val-power');
    const colorPower = document.getElementById('color-power');
    
    // SVG Elements
    const sunGroup = document.getElementById('svg-sun');
    const thermFill = document.getElementById('therm-fill');
    const pipes = document.querySelectorAll('.rk-anim-pipe');

    // Kolory interpolacji dla rur (od gorącego czerwonego do chłodnego niebieskawego)
    const colorHot = [239, 68, 68]; // #ef4444 (100% mocy)
    const colorCool = [148, 163, 184]; // #94a3b8 (70% mocy, uśpienie)

    function interpolateColor(c1, c2, factor) {
        let result = [];
        for (let i = 0; i < 3; i++) {
            result[i] = Math.round(c1[i] + factor * (c2[i] - c1[i]));
        }
        return `rgb(${result[0]}, ${result[1]}, ${result[2]})`;
    }

    function updateSimulation() {
        const factor = slider.value / 100; // 0.0 do 1.0

        // Obliczenia parametrów fizycznych
        // Zyski rosną od 0 do 100%
        valSun.textContent = Math.round(factor * 100);
        
        // Temperatura wzrasta od 20.0 do 22.0 °C
        const currentTemp = 20.0 + (factor * 2.0);
        valRoom.textContent = currentTemp.toFixed(1);
        
        // Moc podłogi spada od 100% do 70% (dławienie o 30%)
        const currentPower = 100 - (factor * 30);
        valPower.textContent = Math.round(currentPower);

        // --- Aktualizacja Wizualna SVG ---
        
        // Słońce rozjaśnia się bez transformacji promieni
        sunGroup.setAttribute('opacity', 0.2 + (factor * 0.8));

        // Termometr idzie do góry (y maleje, height rośnie)
        // Baza y=80, h=70 (20 st). Max y=40, h=110 (22 st)
        const newY = 80 - (factor * 40);
        const newH = 70 + (factor * 40);
        thermFill.setAttribute('y', newY);
        thermFill.setAttribute('height', newH);
        
        // Zmiana koloru termometru i rur w miarę samoregulacji
        // Termometr staje się cieplejszy (pomarańcz) od słońca, a rury stygną
        const pipeColor = interpolateColor(colorHot, colorCool, factor);
        
        pipes.forEach(pipe => {
            pipe.setAttribute('fill', pipeColor);
        });
        
        colorPower.style.color = pipeColor;
    }

    // Inicjalizacja nasłuchiwania
    slider.addEventListener('input', updateSimulation);
    
    // Uruchomienie stanu zero
    updateSimulation();
});
</script>



<style>
:root {
    --rk-sp-dark: #0f172a;
    --rk-sp-brand: #0284c7;
    --rk-sp-brand-light: #f0f9ff;
    --rk-sp-accent: #38bdf8;
    --rk-sp-eco: #10b981;
    --rk-sp-warn: #f59e0b;
    --rk-sp-text: #475569;
    --rk-sp-border: #e2e8f0;
    --rk-sp-bg: #ffffff;
}

.rk-sp-wrap {
    max-width: 920px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-sp-bg);
    border-radius: 28px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.12);
    border: 1px solid #bae6fd;
    overflow: hidden;
}

/* Header */
.rk-sp-header {
    padding: 45px 50px 35px;
    background: linear-gradient(180deg, #f0f9ff 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-sp-border);
}

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

.rk-sp-formula {
    background: var(--rk-sp-dark);
    color: #cbd5e1;
    padding: 22px 25px;
    border-radius: 16px;
    font-family: 'JetBrains Mono', monospace;
    font-size: 14px;
    border-left: 5px solid var(--rk-sp-brand);
    margin-top: 20px;
}

.rk-sp-formula .hl { color: var(--rk-sp-eco); font-weight: 800; }

/* Dashboard */
.rk-sp-dashboard {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-sp-selector {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-bottom: 35px;
}

.rk-sp-card {
    background: #ffffff;
    border: 2px solid var(--rk-sp-border);
    padding: 20px;
    border-radius: 20px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-sp-card.active {
    border-color: var(--rk-sp-brand);
    background: var(--rk-sp-brand-light);
    box-shadow: 0 10px 15px -3px rgba(2, 132, 199, 0.15);
}

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

.rk-sp-grid {
    display: grid;
    grid-template-columns: 1.3fr 1fr;
    gap: 30px;
    align-items: start;
}

/* SVG Visualization */
.rk-sp-visual {
    background: #ffffff;
    border: 1px solid var(--rk-sp-border);
    border-radius: 24px;
    padding: 35px;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);
}

.rk-svg-main { width: 100%; height: auto; display: block; }
.layer-text { font-size: 8px; font-weight: 700; fill: #94a3b8; text-transform: uppercase; }
.pipe-anim { transition: opacity 0.4s ease; }

/* Stats */
.rk-sp-stats {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-stat-row {
    background: #ffffff;
    border: 1px solid var(--rk-sp-border);
    padding: 18px 22px;
    border-radius: 16px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s ease;
}

.rk-stat-row:hover { border-color: var(--rk-sp-accent); transform: translateX(5px); }

.rk-stat-info h4 { margin: 0; font-size: 12px; color: #64748b; text-transform: uppercase; letter-spacing: 0.5px; }
.rk-stat-info p { margin: 4px 0 0 0; font-size: 11px; color: #94a3b8; }
.rk-stat-num { font-size: 24px; font-weight: 900; color: var(--rk-sp-dark); display: block; }

@media (max-width: 850px) {
    .rk-sp-grid { grid-template-columns: 1fr; }
    .rk-sp-selector { grid-template-columns: 1fr; }
}
</style>

<div class="rk-sp-wrap" id="rk-spacing-app">
    
    <div class="rk-sp-header">
        <h2>Jaki rozstaw rur jest optymalny przy niskim zapotrzebowaniu na ciepło?</h2>
        <p>W domach pasywnych (10-15 W/m²) optymalny rozstaw to <strong>15 cm lub 20 cm</strong>. Zapewnia to idealne przepływy dla pompy ciepła i eliminuje zbędne koszty materiału.</p>
        <div class="rk-sp-formula">
            // Bilans hydrauliczny pętli 15 m²<br>
            Moc (Q) = 225 W | Przepływ (m) = <span class="hl">0,64 l/min</span>
        </div>
    </div>

    <div class="rk-sp-dashboard">
        <div class="rk-sp-selector">
            <div class="rk-sp-card active" data-mode="1">
                <span class="rk-sp-label">Standard WT2021</span>
                <span class="rk-sp-val">co 10 cm</span>
            </div>
            <div class="rk-sp-card" data-mode="2">
                <span class="rk-sp-label">Energooszczędny</span>
                <span class="rk-sp-val">co 15 cm</span>
            </div>
            <div class="rk-sp-card" data-mode="3">
                <span class="rk-sp-label">Standard Pasywny</span>
                <span class="rk-sp-val">co 20 cm</span>
            </div>
        </div>

        <div class="rk-sp-grid">
            <div class="rk-sp-visual">
                <svg class="rk-svg-main" viewBox="0 0 240 160">
                    <defs>
                        <linearGradient id="g-pipe" x1="0%" y1="0%" x2="0%" y2="100%">
                            <stop offset="0%" style="stop-color:#38bdf8" />
                            <stop offset="100%" style="stop-color:#0284c7" />
                        </linearGradient>
                    </defs>
                    <rect x="10" y="40" width="220" height="60" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/>
                    <text x="20" y="55" class="layer-text">Wylewka Anhydrytowa (60mm)</text>
                    <rect x="10" y="100" width="220" height="50" fill="#e2e8f0" stroke="#cbd5e1" stroke-width="1"/>
                    <text x="20" y="115" class="layer-text">Izolacja EPS 200 (200mm)</text>

                    <g id="pipes">
                        <circle cx="30" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2"/>
                        <circle cx="65" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p10"/>
                        <circle cx="100" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p15"/>
                        <circle cx="135" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p10"/>
                        <!-- Ta rura (170) jest kluczowa dla widoku 20cm -->
                        <circle cx="170" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p15 p20"/>
                        <circle cx="205" cy="85" r="8" fill="url(#g-pipe)" stroke="#fff" stroke-width="2" class="pipe-anim p10"/>
                    </g>
                    
                    <path d="M 30 35 L 65 35 M 30 30 L 30 40 M 65 30 L 65 40" stroke="#94a3b8" stroke-width="1.5" id="m-line"/>
                    <text x="47.5" y="25" text-anchor="middle" font-size="10" font-weight="900" fill="#0284c7" id="m-text">10 cm</text>
                </svg>
            </div>

            <div class="rk-sp-stats">
                <div class="rk-stat-row">
                    <div class="rk-stat-info"><h4>Długość rur</h4><p>Dom 150 m²</p></div>
                    <div class="rk-stat-value"><span class="rk-stat-num" id="s-meters">1500</span><span class="rk-stat-unit">mb</span></div>
                </div>
                <div class="rk-stat-row" style="border-left: 5px solid var(--rk-sp-eco);">
                    <div class="rk-stat-info"><h4>Koszt materiału</h4><p id="s-label">Baza porównawcza</p></div>
                    <div class="rk-stat-value"><span class="rk-stat-num" id="s-price">6750</span><span class="rk-stat-unit">PLN</span></div>
                </div>
                <div class="rk-stat-row">
                    <div class="rk-stat-info"><h4>Opory</h4><p>Hydraulika</p></div>
                    <div class="rk-stat-value"><span class="rk-stat-num" id="s-hydro" style="font-size:18px;color:var(--rk-sp-warn)">Wysokie</span></div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    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-spacing-app').innerHTML = '<div style="padding:40px;text-align:center;background:#0f172a;color:#ef4444;border-radius:20px;font-weight:900;">🛡️ MODUŁ CHRONIONY</div>';
        return;
    }

    const cards = document.querySelectorAll('.rk-sp-card');
    const p10 = document.querySelectorAll('.p10'), p15 = document.querySelectorAll('.p15'), p20 = document.querySelectorAll('.p20');
    const mLine = document.getElementById('m-line'), mText = document.getElementById('m-text');
    const sMeters = document.getElementById('s-meters'), sPrice = document.getElementById('s-price'), sHydro = document.getElementById('s-hydro'), sLabel = document.getElementById('s-label');

    cards.forEach(card => {
        card.addEventListener('click', function() {
            cards.forEach(c => c.classList.remove('active'));
            this.classList.add('active');
            const mode = this.getAttribute('data-mode');

            if (mode === '1') {
                p10.forEach(p => p.style.opacity = '1'); p15.forEach(p => p.style.opacity = '1');
                mLine.setAttribute('d', 'M 30 35 L 65 35 M 30 30 L 30 40 M 65 30 L 65 40');
                mText.textContent = '10 cm'; mText.setAttribute('x', '47.5');
                update('1500', '6750', 'Wysokie', '#f59e0b', 'Baza porównawcza');
            } else if (mode === '2') {
                p10.forEach(p => p.style.opacity = '0'); p15.forEach(p => p.style.opacity = '1');
                mLine.setAttribute('d', 'M 30 35 L 100 35 M 30 30 L 30 40 M 100 30 L 100 40');
                mText.textContent = '15 cm'; mText.setAttribute('x', '65');
                update('1000', '4500', 'Optymalne', '#0284c7', 'Oszczędzasz 2250 PLN');
            } else {
                p10.forEach(p => p.style.opacity = '0'); p15.forEach(p => p.style.opacity = '0');
                p20.forEach(p => p.style.opacity = '1'); // Pokazuje rurę na 20 cm
                mLine.setAttribute('d', 'M 30 35 L 170 35 M 30 30 L 30 40 M 170 30 L 170 40');
                mText.textContent = '20 cm'; mText.setAttribute('x', '100');
                update('900', '4050', 'Minimalne', '#10b981', 'Oszczędzasz 2700 PLN');
            }
        });
    });

    function update(m, p, h, c, l) {
        sMeters.textContent = m; sPrice.textContent = p; sHydro.textContent = h; sHydro.style.color = c; sLabel.textContent = l;
    }
});
</script>



<style>
:root {
    --rk-sys-dark: #0f172a;
    --rk-sys-wet: #f97316;     /* Pomarańcz - akumulacja, ciepło */
    --rk-sys-wet-light: #fff7ed;
    --rk-sys-dry: #06b6d4;     /* Cyjan - szybkość, aluminium */
    --rk-sys-dry-light: #ecfeff;
    --rk-sys-text: #334155;
    --rk-sys-muted: #64748b;
    --rk-sys-border: #cbd5e1;
    --rk-sys-bg: #ffffff;
}

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

/* Sekcja Treści - Akapit */
.rk-sys-content {
    padding: 40px 45px 30px;
    background: linear-gradient(to bottom right, #f8fafc, #ffffff);
    border-bottom: 1px solid var(--rk-sys-border);
}

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

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

.rk-sys-text a {
    color: #2563eb;
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bfdbfe;
    transition: all 0.3s;
}

.rk-sys-text a:hover {
    background: #dbeafe;
    border-color: #2563eb;
}

.rk-sys-note {
    background: #f1f5f9;
    border-left: 4px solid var(--rk-sys-dark);
    padding: 15px 20px;
    margin: 20px 0;
    border-radius: 0 12px 12px 0;
    font-size: 14px;
    color: var(--rk-sys-dark);
    font-weight: 600;
}

/* Interaktywny Symulator */
.rk-sys-interactive {
    padding: 40px 45px;
}

.rk-sys-interactive h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-sys-dark);
    margin: 0 0 30px 0;
}

/* Unikalny Przełącznik (Toggle) */
.rk-toggle-station {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    background: #f8fafc;
    padding: 20px;
    border-radius: 100px;
    border: 1px solid var(--rk-sys-border);
    margin-bottom: 40px;
}

.rk-toggle-label {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--rk-sys-muted);
    transition: color 0.3s;
    cursor: pointer;
}

.rk-toggle-label.active-wet { color: var(--rk-sys-wet); }
.rk-toggle-label.active-dry { color: var(--rk-sys-dry); }

.rk-main-switch {
    position: relative;
    width: 80px;
    height: 40px;
    background: var(--rk-sys-wet);
    border-radius: 40px;
    cursor: pointer;
    transition: background 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
}

.rk-main-switch.mode-dry {
    background: var(--rk-sys-dry);
}

.rk-switch-knob {
    position: absolute;
    top: 4px;
    left: 4px;
    width: 32px;
    height: 32px;
    background: #ffffff;
    border-radius: 50%;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-main-switch.mode-dry .rk-switch-knob {
    transform: translateX(40px);
}

/* Dashboard SVG + Kafelki */
.rk-sys-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: stretch;
}

/* Kontener SVG */
.rk-svg-box {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-sys-border);
    padding: 25px;
    display: flex;
    justify-content: center;
    align-items: center;
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.05);
}

.rk-svg-cross-section {
    width: 100%;
    max-width: 250px;
}

/* Warstwy SVG */
.layer-screed { transition: opacity 0.4s; }
.layer-lamella { transition: opacity 0.4s; }
.wave-heat { fill: none; stroke-linecap: round; }

/* Animacje Bezwładności */
.state-wet .wave-heat { 
    stroke: var(--rk-sys-wet); 
    stroke-width: 6; 
    animation: flowUp 3s infinite linear; 
}
.state-dry .wave-heat { 
    stroke: var(--rk-sys-dry); 
    stroke-width: 3; 
    animation: flowUp 0.8s infinite linear; 
}

@keyframes flowUp {
    0% { transform: translateY(10px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(-30px); opacity: 0; }
}

/* Kafelki Danych (Grid) */
.rk-sys-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

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

.rk-tile h4 {
    margin: 0 0 5px 0;
    font-size: 11px;
    text-transform: uppercase;
    color: var(--rk-sys-muted);
    letter-spacing: 0.5px;
}

.rk-tile .val {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-sys-dark);
    margin-bottom: 2px;
    line-height: 1.2;
}

.rk-tile .desc {
    font-size: 12px;
    color: var(--rk-sys-text);
}

/* Mobilna responsywność */
@media (max-width: 768px) {
    .rk-sys-content, .rk-sys-interactive { padding: 25px 20px; }
    .rk-toggle-station { flex-direction: column; gap: 15px; border-radius: 20px; padding: 15px; }
    .rk-sys-dashboard { grid-template-columns: 1fr; }
    .rk-sys-tiles { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/"
    },
    "headline": "System mokry czy suchy – co wybrać do domu pasywnym?",
    "description": "Porównanie systemów ogrzewania podłogowego. System mokry (anhydryt, wysoka bezwładność, domy murowane) kontra system suchy (lamele aluminiowe, niska bezwładność, domy szkieletowe). Wymagania izolacji EPS.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#dataset",
    "name": "Parametry Techniczne: Wylewka Anhydrytowa vs Sucha Zabudowa",
    "description": "Tabela porównawcza parametrów przewodzenia ciepła, grubości wylewki oraz izolacji wymaganej w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wylewka anhydrytowa ogrzewanie podłogowe",
      "system suchy podłogówki",
      "bezwładność cieplna wylewki",
      "grubość styropianu dom pasywny",
      "lamele aluminiowe system suchy"
    ],
    "measurementTechnique": "Analiza współczynnika przewodzenia ciepła lambda (W/mK) oraz oporu cieplnego R dla jastrychów i izolacji EPS na gruncie.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Anhydryt (System Mokry): Lambda 1,6–1,8 W/(m·K), grubość 35-45 mm nad rurą, wysoka akumulacja.",
        "System Suchy (Lamele): Błyskawiczna reakcja, dedykowane do domów szkieletowych.",
        "Izolacja dom pasywny: 20-25 cm EPS 100/200, Lambda = 0,031 W/(m·K), Opór R = 6,0-8,0 (m²·K)/W."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#webapp",
    "name": "Symulator Bezwładności Termicznej Posadzki",
    "description": "Interaktywna animacja SVG obrazująca różnicę w prędkości przekazywania ciepła (reakcji na zyski słoneczne) pomiędzy ciężkim systemem mokrym a lekkim systemem suchym.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-sys-container" id="sys-simulator-app">
    
    <div class="rk-sys-content">
        <h2>System mokry czy suchy – co wybrać do domu pasywnego?</h2>
        <p class="rk-sys-text">
            W domach pasywnych o konstrukcji ciężkiej (murowanej) zalecam <a href="https://projekt-ogrzewania.pl/czym-jest-system-mokry-w-wodnym-ogrzewaniu-podlogowym/">system mokry</a> z <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">wylewką anhydrytową</a> o grubości 35–45 mm nad rurą, natomiast w <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-domu-szkieletowym-kluczowe-roznice-i-pulapki/">budownictwie szkieletowym</a> jedynym rozsądnym wyborem jest <a href="https://projekt-ogrzewania.pl/czym-jest-system-suchy-w-wodnym-ogrzewaniu-podlogowym/">system suchy</a> o niskiej bezwładności. Wylewka anhydrytowa ma współczynnik przewodzenia ciepła lambda 1,6–1,8 W/(m·K), co jest wartością znacznie lepszą niż w przypadku jastrychu cementowego lambda 1,1–1,2 W/(m·K).
        </p>
        <p class="rk-sys-text">
            Niska <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplna</a> systemu suchego (płyty systemowe z lamelami aluminiowymi) pozwala na szybszą reakcję na zyski ciepła od słońca, co w domach pasywnych z dużymi przeszkleniami od południa jest kluczowe. System mokry z kolei działa jak akumulator energii.
        </p>
        <div class="rk-sys-note">
            <strong>Parametry techniczne izolacji:</strong> Pod ogrzewaniem podłogowym na gruncie w domu pasywnym wymagane jest minimum <strong>20–25 cm <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/" style="color:var(--rk-sys-dark); text-decoration:underline;">styropianu EPS 100 lub EPS 200</a></strong> o współczynniku lambda = 0,031 W/(m·K), aby opór cieplny izolacji R wynosił minimum 6,0–8,0 (m²·K)/W.
        </div>
    </div>

    <div class="rk-sys-interactive">
        <h3>Symulator Bezwładności Termicznej</h3>
        
        <div class="rk-toggle-station">
            <div class="rk-toggle-label active-wet" id="lbl-wet" onclick="document.getElementById('rk-mode-switch').click()">
                System Mokry (Anhydryt)
            </div>
            <div class="rk-main-switch" id="rk-mode-switch">
                <div class="rk-switch-knob"></div>
            </div>
            <div class="rk-toggle-label" id="lbl-dry" onclick="document.getElementById('rk-mode-switch').click()">
                System Suchy (Lamele)
            </div>
        </div>

        <div class="rk-sys-dashboard">
            <!-- Animacja SVG Przekroju -->
            <div class="rk-svg-box state-wet" id="svg-anim-state">
                <svg class="rk-svg-cross-section" viewBox="0 0 200 150">
                    <!-- Baza: Izolacja EPS 200 (Zawsze widoczna) -->
                    <rect x="20" y="100" width="160" height="40" fill="#e2e8f0" rx="4"/>
                    <text x="100" y="125" text-anchor="middle" fill="#64748b" font-size="12" font-weight="bold">EPS 200 (Izolacja)</text>

                    <!-- System Mokry (Wylewka Anhydrytowa) -->
                    <g class="layer-screed" id="svg-screed">
                        <rect x="20" y="40" width="160" height="60" fill="#cbd5e1" rx="4"/>
                    </g>

                    <!-- System Suchy (Płyta z Lamelem) -->
                    <g class="layer-lamella" id="svg-lamella" opacity="0">
                        <rect x="20" y="70" width="160" height="30" fill="#f8fafc" rx="4" stroke="#cbd5e1" stroke-width="2"/>
                        <!-- Aluminiowe Lamele -->
                        <path d="M 20 70 L 180 70 M 20 75 L 180 75" stroke="#06b6d4" stroke-width="3"/>
                    </g>

                    <!-- Rury Grzewcze -->
                    <g fill="#ef4444">
                        <circle cx="50" cy="85" r="8"/>
                        <circle cx="100" cy="85" r="8"/>
                        <circle cx="150" cy="85" r="8"/>
                    </g>

                    <!-- Fale Ciepła (Animacja CSS definiuje prędkość) -->
                    <path class="wave-heat" d="M 50 70 Q 60 40 50 10" />
                    <path class="wave-heat" d="M 100 70 Q 110 40 100 10" style="animation-delay: 0.3s;" />
                    <path class="wave-heat" d="M 150 70 Q 160 40 150 10" style="animation-delay: 0.6s;" />
                </svg>
            </div>

            <!-- Dynamiczne Kafelki Danych -->
            <div class="rk-sys-tiles">
                <div class="rk-tile" id="tile-lambda">
                    <h4>Przewodzenie (Lambda)</h4>
                    <div class="val" style="color: var(--rk-sys-wet);">1,6 - 1,8</div>
                    <div class="desc">W/(m·K) - Anhydryt</div>
                </div>
                <div class="rk-tile" id="tile-inertia">
                    <h4>Bezwładność Cieplna</h4>
                    <div class="val" style="color: var(--rk-sys-wet);">Wysoka</div>
                    <div class="desc">Działa jak akumulator</div>
                </div>
                <div class="rk-tile" id="tile-thick">
                    <h4>Wysokość Zabudowy</h4>
                    <div class="val">35 - 45 mm</div>
                    <div class="desc">Zalewane nad rurą</div>
                </div>
                <div class="rk-tile" id="tile-build">
                    <h4>Konstrukcja Budynku</h4>
                    <div class="val">Murowana</div>
                    <div class="desc">Wysoka nośność stropu</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('sys-simulator-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 25px; text-align: center; background: #f8fafc; border: 2px solid #ef4444; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 15px; font-weight: bold; color: #dc2626; margin-bottom: 8px;">Blokada Praw Autorskich</div>
                    <div style="color: #475569; font-size: 13px; line-height: 1.5;">
                        Interaktywny kalkulator systemów (mokry/suchy) został zablokowany, ponieważ domena nie posiada licencji na renderowanie kodu Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Przełącznika i Aktualizacji Danych
    const switchBtn = document.getElementById('rk-mode-switch');
    const lblWet = document.getElementById('lbl-wet');
    const lblDry = document.getElementById('lbl-dry');
    const svgState = document.getElementById('svg-anim-state');
    
    // Warstwy SVG
    const svgScreed = document.getElementById('svg-screed');
    const svgLamella = document.getElementById('svg-lamella');

    // Kafelki
    const tileLambda = document.getElementById('tile-lambda');
    const tileInertia = document.getElementById('tile-inertia');
    const tileThick = document.getElementById('tile-thick');
    const tileBuild = document.getElementById('tile-build');

    let isDry = false;

    function updateCard(card, valText, descText, color = 'var(--rk-sys-dark)') {
        const valEl = card.querySelector('.val');
        const descEl = card.querySelector('.desc');
        
        valEl.style.opacity = 0;
        descEl.style.opacity = 0;
        
        setTimeout(() => {
            valEl.textContent = valText;
            valEl.style.color = color;
            descEl.textContent = descText;
            
            valEl.style.opacity = 1;
            descEl.style.opacity = 1;
        }, 150);
    }

    switchBtn.addEventListener('click', () => {
        isDry = !isDry;

        if (isDry) {
            // Przejście na System Suchy
            switchBtn.classList.add('mode-dry');
            lblWet.classList.remove('active-wet');
            lblDry.classList.add('active-dry');
            
            // Zmiana animacji SVG
            svgState.classList.remove('state-wet');
            svgState.classList.add('state-dry');
            svgScreed.style.opacity = 0;
            svgLamella.style.opacity = 1;

            // Aktualizacja Danych
            updateCard(tileLambda, 'Aluminium', 'Doskonałe przewodzenie', 'var(--rk-sys-dry)');
            updateCard(tileInertia, 'Niska', 'Błyskawiczna reakcja', 'var(--rk-sys-dry)');
            updateCard(tileThick, 'Minimalna', 'Tylko grubość płyty', 'var(--rk-sys-dark)');
            updateCard(tileBuild, 'Szkieletowa', 'Lekka konstrukcja', 'var(--rk-sys-dark)');
            
        } else {
            // Powrót do Systemu Mokrego
            switchBtn.classList.remove('mode-dry');
            lblDry.classList.remove('active-dry');
            lblWet.classList.add('active-wet');

            // Zmiana animacji SVG
            svgState.classList.remove('state-dry');
            svgState.classList.add('state-wet');
            svgLamella.style.opacity = 0;
            svgScreed.style.opacity = 1;

            // Aktualizacja Danych
            updateCard(tileLambda, '1,6 - 1,8', 'W/(m·K) - Anhydryt', 'var(--rk-sys-wet)');
            updateCard(tileInertia, 'Wysoka', 'Działa jak akumulator', 'var(--rk-sys-wet)');
            updateCard(tileThick, '35 - 45 mm', 'Zalewane nad rurą', 'var(--rk-sys-dark)');
            updateCard(tileBuild, 'Murowana', 'Wysoka nośność stropu', 'var(--rk-sys-dark)');
        }
    });
});
</script>



<style>
:root {
    --rk-comp-dark: #1e293b;
    --rk-comp-brand: #3b82f6;
    --rk-comp-wet: #8b5cf6;     /* Fiolet dla Anhydrytu (masa, pojemność) */
    --rk-comp-wet-light: #f5f3ff;
    --rk-comp-dry: #10b981;     /* Zielony dla Suchego (lekkość, eko) */
    --rk-comp-dry-light: #ecfdf5;
    --rk-comp-text: #475569;
    --rk-comp-border: #e2e8f0;
    --rk-comp-bg: #ffffff;
}

.rk-comp-wrap {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-comp-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(59, 130, 246, 0.1);
    border: 1px solid #bfdbfe;
    overflow: hidden;
}

/* Nagłówek i Tekst SEO */
.rk-comp-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-comp-border);
}

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

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

.rk-comp-text a {
    color: var(--rk-comp-brand);
    font-weight: 700;
    text-decoration: none;
    box-shadow: inset 0 -2px 0 #bfdbfe;
    transition: background 0.3s, box-shadow 0.3s;
}

.rk-comp-text a:hover {
    background: #dbeafe;
    box-shadow: inset 0 -10px 0 #bfdbfe;
}

/* Interaktywny Komparator */
.rk-comp-interactive {
    padding: 40px 45px;
}

.rk-comp-interactive h3 {
    text-align: center;
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-comp-dark);
    margin: 0 0 30px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* Przełącznik Systemów (Taby) */
.rk-comp-tabs {
    display: flex;
    background: #f1f5f9;
    padding: 8px;
    border-radius: 16px;
    margin-bottom: 40px;
    gap: 8px;
}

.rk-comp-tab {
    flex: 1;
    text-align: center;
    padding: 16px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-comp-tab.active[data-system="wet"] {
    background: #ffffff;
    color: var(--rk-comp-wet);
    box-shadow: 0 4px 10px rgba(139, 92, 246, 0.15);
}

.rk-comp-tab.active[data-system="dry"] {
    background: #ffffff;
    color: var(--rk-comp-dry);
    box-shadow: 0 4px 10px rgba(16, 185, 129, 0.15);
}

.rk-tab-icon {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #e2e8f0;
    color: #fff;
    transition: background 0.3s;
}

.rk-comp-tab.active[data-system="wet"] .rk-tab-icon { background: var(--rk-comp-wet); }
.rk-comp-tab.active[data-system="dry"] .rk-tab-icon { background: var(--rk-comp-dry); }

/* Dashboard: SVG i Kafelki Parametrów */
.rk-comp-dashboard {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 30px;
    align-items: start;
}

/* SVG Wizualizacja */
.rk-svg-panel {
    background: #ffffff;
    border: 1px solid var(--rk-comp-border);
    border-radius: 16px;
    padding: 20px;
    text-align: center;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-svg-stage {
    width: 100%;
    max-width: 180px;
}

.anim-thickness { transition: height 0.4s ease, y 0.4s ease, fill 0.4s ease; }
.anim-weight-text { transition: opacity 0.3s; }
.anim-scale { transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); transform-origin: 100px 150px; }

/* Grid Kafelków (Zastępstwo Tabeli) */
.rk-comp-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

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

.rk-param-card h4 {
    margin: 0 0 6px 0;
    font-size: 11px;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 0.5px;
}

.rk-param-val {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-comp-dark);
    margin-bottom: 4px;
    transition: color 0.3s;
}

.rk-param-norm {
    font-size: 11px;
    color: #64748b;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 4px;
}

.rk-param-norm::before {
    content: '';
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: #cbd5e1;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-comp-header, .rk-comp-interactive { padding: 30px 25px; }
    .rk-comp-dashboard { grid-template-columns: 1fr; }
    .rk-comp-tabs { flex-direction: column; }
    .rk-svg-panel { margin-bottom: 20px; }
}
@media (max-width: 480px) {
    .rk-comp-grid { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#article-porownanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/"
    },
    "headline": "Porównanie parametrów systemów podłogowych w domu pasywnym",
    "description": "Szczegółowe zestawienie parametrów technicznych: wylewka anhydrytowa kontra system suchy. Analiza przewodności cieplnej, grubości zabudowy i wagi stropu.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#dataset-porownanie",
    "name": "Zestawienie Parametrów: System Mokry vs System Suchy",
    "description": "Tabela analityczna zestawiająca kluczowe różnice fizyczne pomiędzy systemami grzewczymi stosowanymi w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wylewka anhydrytowa ogrzewanie podłogowe",
      "system suchy ogrzewania podłogowego",
      "przewodność cieplna lambda",
      "bezwładność cieplna posadzki",
      "waga systemu ogrzewania podłogowego"
    ],
    "measurementTechnique": "Kompilacja danych laboratoryjnych ITB, wytycznych producentów oraz normy europejskiej PN-EN 1264 w odniesieniu do wydajności termicznej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "System Mokry (Anhydryt): Przewodność 1,8 W/(mK), Waga ~120 kg/m2, Grubość 55-65 mm, Bezwładność wysoka (3-5 h).",
        "System Suchy (Lekki): Przewodność 0,4-0,5 W/(mK), Waga ~30 kg/m2, Grubość 25-30 mm, Bezwładność niska (30-60 min)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/#webapp-porownanie",
    "name": "Interaktywny Komparator Systemów Podłogowych",
    "description": "Cyfrowe narzędzie pozwalające inwestorom na wizualne i techniczne porównanie wagi, grubości i bezwładności wylewki mokrej względem lekkiej suchej zabudowy.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript, SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-comp-wrap" id="komparator-app">
    
    <div class="rk-comp-header">
        <h2>Porównanie parametrów systemów w domu pasywnym</h2>
        <p class="rk-comp-text">
            Zrozumienie różnic fizycznych między <a href="https://projekt-ogrzewania.pl/czym-jest-system-mokry-w-wodnym-ogrzewaniu-podlogowym/">systemem mokrym (wylewka anhydrytowa)</a> a <a href="https://projekt-ogrzewania.pl/czym-jest-system-suchy-w-wodnym-ogrzewaniu-podlogowym/">systemem suchym (lekka zabudowa)</a> jest fundamentem poprawnego zaprojektowania ogrzewania dla domu pasywnego. Poniższy interaktywny komparator obrazuje, jak masa, <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplna</a> oraz grubość wpływają na parametry pracy instalacji w świetle normy PN-EN 1264.
        </p>
    </div>

    <div class="rk-comp-interactive">
        <h3>Zestawienie Technologiczne</h3>
        
        <!-- Przełącznik -->
        <div class="rk-comp-tabs" id="rk-tabs">
            <div class="rk-comp-tab active" data-system="wet">
                <div class="rk-tab-icon">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"/></svg>
                </div>
                System Mokry (Anhydryt)
            </div>
            <div class="rk-comp-tab" data-system="dry">
                <div class="rk-tab-icon">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>
                </div>
                System Suchy (Lekki)
            </div>
        </div>

        <div class="rk-comp-dashboard">
            <!-- SVG Wizualizacja Grubości i Wagi -->
            <div class="rk-svg-panel">
                <svg class="rk-svg-stage" viewBox="0 0 200 200">
                    <!-- Szala Wagi -->
                    <path d="M 100 150 L 100 190 M 60 190 L 140 190" stroke="#94a3b8" stroke-width="4" stroke-linecap="round"/>
                    
                    <g class="anim-scale" id="svg-scale">
                        <!-- Podstawa szali -->
                        <path d="M 20 150 L 180 150" stroke="#64748b" stroke-width="4" stroke-linecap="round"/>
                        
                        <!-- Przekrój posadzki na szali -->
                        <rect x="50" y="80" width="100" height="60" fill="var(--rk-comp-wet)" rx="4" id="svg-floor-layer" class="anim-thickness" />
                        
                        <!-- Rury -->
                        <circle cx="70" cy="120" r="6" fill="#ffffff" />
                        <circle cx="100" cy="120" r="6" fill="#ffffff" />
                        <circle cx="130" cy="120" r="6" fill="#ffffff" />

                        <!-- Etykieta wagi -->
                        <rect x="75" y="40" width="50" height="24" rx="12" fill="#1e293b" />
                        <text x="100" y="56" text-anchor="middle" fill="#ffffff" font-size="12" font-weight="bold" id="svg-weight-text">120 kg</text>
                        <!-- Linia wskazująca -->
                        <line x1="100" y1="64" x2="100" y2="80" stroke="#1e293b" stroke-width="2" />
                    </g>
                </svg>
            </div>

            <!-- Karty Danych (Zastępują Tabelę) -->
            <div class="rk-comp-grid">
                <div class="rk-param-card">
                    <h4>Przewodność cieplna (λ)</h4>
                    <div class="rk-param-val" id="val-lambda" style="color: var(--rk-comp-wet);">1,8 W/(m·K)</div>
                    <div class="rk-param-norm">PN-EN 1264-4</div>
                </div>
                <div class="rk-param-card">
                    <h4>Wysokość zabudowy</h4>
                    <div class="rk-param-val" id="val-height">55–65 mm</div>
                    <div class="rk-param-norm">Dane producenta</div>
                </div>
                <div class="rk-param-card">
                    <h4>Bezwładność cieplna</h4>
                    <div class="rk-param-val" id="val-inertia">Wysoka (3-5 h)</div>
                    <div class="rk-param-norm">Badania ITB</div>
                </div>
                <div class="rk-param-card">
                    <h4>Waga systemu</h4>
                    <div class="rk-param-val" id="val-weight">~100–120 kg/m²</div>
                    <div class="rk-param-norm">Obciążenia stropu</div>
                </div>
                <div class="rk-param-card" style="grid-column: 1 / -1;">
                    <h4>Max. Temp. Zasilania</h4>
                    <div class="rk-param-val" id="val-temp" style="color: #ef4444;">55°C (niezalecana)</div>
                    <div class="rk-param-norm">PN-EN 1264</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe bez tagów H
    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('komparator-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 16px; font-weight: 900; color: #ef4444; margin-bottom: 10px; text-transform: uppercase;">Zablokowano Renderowanie</div>
                    <div style="color: #cbd5e1; font-size: 14px; line-height: 1.6;">
                        Interaktywna tabela porównawcza jest objęta prawami autorskimi serwisu Projekt-Ogrzewania.pl. Uruchomienie na nieautoryzowanej domenie zostało przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Komparatora
    const tabs = document.querySelectorAll('.rk-comp-tab');
    
    // SVG Elements
    const svgLayer = document.getElementById('svg-floor-layer');
    const svgWeight = document.getElementById('svg-weight-text');
    const svgScale = document.getElementById('svg-scale');

    // DOM Cards
    const valLambda = document.getElementById('val-lambda');
    const valHeight = document.getElementById('val-height');
    const valInertia = document.getElementById('val-inertia');
    const valWeight = document.getElementById('val-weight');
    const valTemp = document.getElementById('val-temp');

    function updateCard(element, htmlContent, color = 'var(--rk-comp-dark)') {
        element.style.opacity = '0';
        setTimeout(() => {
            element.innerHTML = htmlContent;
            element.style.color = color;
            element.style.opacity = '1';
        }, 150);
    }

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            // Reset active state
            tabs.forEach(t => t.classList.remove('active'));
            this.classList.add('active');

            const system = this.getAttribute('data-system');

            if (system === 'wet') {
                // SVG Update (Ciężki/Mokry)
                svgLayer.setAttribute('height', '60');
                svgLayer.setAttribute('y', '80');
                svgLayer.setAttribute('fill', 'var(--rk-comp-wet)');
                svgScale.style.transform = 'rotate(5deg) translateY(5px)';
                
                svgWeight.style.opacity = '0';
                setTimeout(() => {
                    svgWeight.textContent = '120 kg';
                    svgWeight.style.opacity = '1';
                }, 150);

                // Cards Update
                updateCard(valLambda, '1,8 W/(m·K)', 'var(--rk-comp-wet)');
                updateCard(valHeight, '55–65 mm');
                updateCard(valInertia, 'Wysoka (3-5 h)');
                updateCard(valWeight, '~100–120 kg/m²');
                updateCard(valTemp, '55°C (niezalecana)', '#ef4444');
                
            } else {
                // SVG Update (Lekki/Suchy)
                svgLayer.setAttribute('height', '30');
                svgLayer.setAttribute('y', '110'); // Obniżamy żeby rury były w środku
                svgLayer.setAttribute('fill', 'var(--rk-comp-dry)');
                svgScale.style.transform = 'rotate(-5deg) translateY(-5px)';
                
                svgWeight.style.opacity = '0';
                setTimeout(() => {
                    svgWeight.textContent = '30 kg';
                    svgWeight.style.opacity = '1';
                }, 150);

                // Cards Update
                updateCard(valLambda, '0,4–0,5 W/(m·K)', 'var(--rk-comp-dry)');
                updateCard(valHeight, '25–30 mm');
                updateCard(valInertia, 'Niska (30-60 min)');
                updateCard(valWeight, '~25–30 kg/m²');
                updateCard(valTemp, '45°C', 'var(--rk-comp-dry)');
            }
        });
    });

    // Inicjalizacja wizualna szali
    setTimeout(() => {
        svgScale.style.transform = 'rotate(5deg) translateY(5px)';
    }, 100);
});
</script>



<style>
:root {
    --rk-algo-dark: #0f172a;
    --rk-algo-brand: #0284c7;
    --rk-algo-brand-light: #e0f2fe;
    --rk-algo-accent: #0ea5e9;
    --rk-algo-blueprint: #1e293b; /* Tło projektu inżynierskiego */
    --rk-algo-line: #38bdf8; /* Kreska na projekcie */
    --rk-algo-text: #475569;
    --rk-algo-border: #cbd5e1;
    --rk-algo-bg: #ffffff;
}

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

/* Część Tekstowa - Algorytm */
.rk-algo-content {
    padding: 45px 50px 20px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-algo-border);
}

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

.rk-algo-desc {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-algo-text);
    margin: 0 0 25px 0;
}

.rk-algo-desc a {
    color: var(--rk-algo-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-algo-desc a:hover {
    background: var(--rk-algo-brand-light);
    border-color: var(--rk-algo-brand);
}

/* Stylizowane kroki algorytmu */
.rk-algo-steps {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
    margin-bottom: 25px;
}

.rk-step-card {
    background: #ffffff;
    border: 1px solid var(--rk-algo-border);
    border-radius: 12px;
    padding: 16px 20px;
    position: relative;
    padding-left: 55px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    transition: transform 0.3s, border-color 0.3s;
}

.rk-step-card:hover {
    transform: translateY(-2px);
    border-color: var(--rk-algo-accent);
}

.rk-step-num {
    position: absolute;
    left: 15px;
    top: 15px;
    width: 28px;
    height: 28px;
    background: var(--rk-algo-brand-light);
    color: var(--rk-algo-brand);
    font-weight: 900;
    font-size: 14px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-step-card h4 {
    margin: 0 0 5px 0;
    font-size: 14px;
    color: var(--rk-algo-dark);
    font-weight: 800;
}

.rk-step-card p {
    margin: 0;
    font-size: 12.5px;
    color: var(--rk-algo-text);
    line-height: 1.5;
}

.rk-math {
    display: inline-block;
    background: #f1f5f9;
    padding: 2px 6px;
    border-radius: 4px;
    font-family: 'Courier New', Courier, monospace;
    font-weight: 600;
    color: var(--rk-algo-dark);
    border: 1px solid #e2e8f0;
}

/* Sekcja Interaktywna - Blueprint */
.rk-algo-interactive {
    padding: 0;
    display: grid;
    grid-template-columns: 320px 1fr;
}

/* Panel Kontrolny */
.rk-controls-panel {
    background: #f8fafc;
    padding: 35px 30px;
    border-right: 1px solid var(--rk-algo-border);
}

.rk-controls-panel h3 {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-algo-dark);
    margin: 0 0 25px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-control-group {
    margin-bottom: 25px;
}

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

.rk-control-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-algo-text);
    text-transform: uppercase;
}

.rk-control-value {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-algo-brand);
}

.rk-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 6px;
    border-radius: 3px;
    background: #cbd5e1;
    outline: none;
}

.rk-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-algo-brand);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.15);
    transition: transform 0.1s;
}

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

/* Wyniki Obliczeń w panelu */
.rk-result-box {
    background: #ffffff;
    border: 1px solid var(--rk-algo-border);
    border-radius: 12px;
    padding: 15px;
    margin-top: 30px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-result-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}
.rk-result-item:last-child { margin-bottom: 0; padding-top: 10px; border-top: 1px dashed var(--rk-algo-border); }

.rk-result-title { font-size: 12px; color: var(--rk-algo-text); font-weight: 700; }
.rk-result-val { font-size: 18px; font-weight: 900; color: var(--rk-algo-dark); }
.rk-result-val.highlight { color: var(--rk-algo-brand); font-size: 22px; }

/* SVG Blueprint */
.rk-blueprint-panel {
    background: var(--rk-algo-blueprint);
    position: relative;
    padding: 30px;
    display: flex;
    justify-content: center;
    align-items: center;
    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-svg-blueprint {
    width: 100%;
    max-width: 350px;
    height: auto;
    filter: drop-shadow(0 10px 15px rgba(0,0,0,0.3));
}

@keyframes drawPipe {
    to { stroke-dashoffset: 0; }
}

.blueprint-text {
    fill: #94a3b8;
    font-family: monospace;
    font-size: 10px;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-algo-content { padding: 30px 25px; }
    .rk-algo-steps { grid-template-columns: 1fr; }
    .rk-algo-interactive { grid-template-columns: 1fr; }
    .rk-controls-panel { border-right: none; border-bottom: 1px solid var(--rk-algo-border); }
    .rk-blueprint-panel { padding: 40px 20px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Kalkulator algorytmu doboru rozstawu rur w domu pasywnym",
    "description": "Profesjonalny 6-etapowy algorytm obliczania gęstości strumienia cieplnego (q) i doboru rozstawu rur podłogowych na podstawie 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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-algorytm",
    "name": "Zmienne Obliczeniowe Algorytmu Doboru Rozstawu Rur",
    "description": "Zestawienie zmiennych fizycznych wykorzystywanych w procesie projektowania instalacji płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne W",
      "gęstość strumienia cieplnego q",
      "temperatura zasilania T_z",
      "rozstaw rur dobór",
      "algorytm projektowania ogrzewania"
    ],
    "measurementTechnique": "Algorytm oparty o wzór Q = q * F_g oraz wytyczne strumienia z normy PN-EN 1264 z zachowaniem optymalnej różnicy temperatur Delta T = 5K.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Wskazanie standardu izolacji budynku q (W/m2).",
        "Krok 2: Wskazanie powierzchni grzewczej pomieszczenia.",
        "Krok 3: Obliczenie całkowitej mocy projektowej (Q_obl).",
        "Krok 4: Wyznaczenie rozstawu (b) na podstawie gęstości strumienia cieplnego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-algorytm",
    "name": "Interaktywny Symulator Projektowy (Blueprint)",
    "description": "Aplikacja webowa symulująca pracę inżyniera. Po wprowadzeniu standardu energetycznego i powierzchni (m2), system wylicza moc (W) i wykreśla układ pętli grzewczych na wirtualnym planie pokoju.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript, SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-algo-container" id="algorytm-app">
    
    <div class="rk-algo-content">
        <h2>Kalkulator algorytmu doboru rozstawu rur</h2>
        <p class="rk-algo-desc">
            Aby poprawnie zaprojektować instalację w domu pasywnym, nie możesz opierać się na intuicji. Podążaj za poniższym ścisłym algorytmem, który stosuję w moich projektach, bazując na wytycznych normatywnych oraz <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">charakterystyce zasilania pomp ciepła</a>.
        </p>
        
        <div class="rk-algo-steps">
            <div class="rk-step-card">
                <div class="rk-step-num">1</div>
                <h4>Zapotrzebowanie (q)</h4>
                <p>Wyznacz standard izolacji budynku <span class="rk-math">q [W/m²]</span> na podstawie normy <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">PN-EN 12831</a>. Dla domów pasywnych to zazwyczaj 10-15 W/m².</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">2</div>
                <h4>Obciążenie całkowite (Q_obl)</h4>
                <p>Pomnóż wskaźnik przez powierzchnię grzejną: <span class="rk-math">Q = q · F_g</span>. Wynik podajemy w Watach [W].</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">3</div>
                <h4>Różnica temperatur (Delta T)</h4>
                <p>Przyjmij różnicę między zasilaniem a powrotem. Dla pomp ciepła optymalnie <span class="rk-math">Delta T = 5K</span>.</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">4</div>
                <h4>Średnia temp. wody (t_m)</h4>
                <p>Oblicz na wzorze: <span class="rk-math">t_m = T_z - (Delta T / 2)</span>, gdzie T_z to temp. zasilania.</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">5</div>
                <h4>Weryfikacja strumienia</h4>
                <p>Skorzystaj ze wzoru <span class="rk-math">q = B · a_i · Delta t_ln</span> sprawdzając współczynnik przejmowania ciepła.</p>
            </div>
            <div class="rk-step-card">
                <div class="rk-step-num">6</div>
                <h4>Dobór rozstawu (b)</h4>
                <p>Na podstawie <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">oporu cieplnego okładziny</a> (np. R = 0,02 dla płytek) i wartości <i>q</i>, dobierz rozstaw rur <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">z katalogu</a>.</p>
            </div>
        </div>
    </div>

    <div class="rk-algo-interactive">
        <!-- Lewy Panel Kontrolny -->
        <div class="rk-controls-panel">
            <h3>Wprowadź dane</h3>
            
            <div class="rk-control-group">
                <div class="rk-control-header">
                    <span class="rk-control-label">Standard budynku (q)</span>
                    <span class="rk-control-value"><span id="val-in-q-unit">15</span> W/m²</span>
                </div>
                <input type="range" min="10" max="60" step="1" value="15" class="rk-slider" id="slider-q-unit" aria-label="Wskaźnik zapotrzebowania cieplnego budynku">
            </div>

            <div class="rk-control-group">
                <div class="rk-control-header">
                    <span class="rk-control-label">Powierzchnia (F_g)</span>
                    <span class="rk-control-value"><span id="val-in-area">20</span> m²</span>
                </div>
                <input type="range" min="10" max="50" step="1" value="20" class="rk-slider" id="slider-area" aria-label="Powierzchnia pomieszczenia">
            </div>

            <div class="rk-result-box">
                <div class="rk-result-item">
                    <span class="rk-result-title">Delta T (złożenie):</span>
                    <span class="rk-result-val">5K</span>
                </div>
                <div class="rk-result-item">
                    <span class="rk-result-title">Całkowita moc (Q_obl):</span>
                    <span class="rk-result-val"><span id="out-q-total">300</span> W</span>
                </div>
                <div class="rk-result-item">
                    <span class="rk-result-title">Sugerowany rozstaw:</span>
                    <span class="rk-result-val highlight" id="out-spacing">co 20 cm</span>
                </div>
            </div>
        </div>

        <!-- Prawy Panel SVG Blueprint -->
        <div class="rk-blueprint-panel">
            <svg class="rk-svg-blueprint" viewBox="0 0 300 300" id="svg-blueprint">
                <!-- Zarys pokoju z wymiarami -->
                <rect x="30" y="30" width="240" height="240" fill="none" stroke="#475569" stroke-width="3"/>
                <text x="150" y="20" class="blueprint-text" text-anchor="middle">WYMIAR: <tspan id="svg-text-area">20</tspan> m2</text>
                
                <!-- Grupa na dynamiczne rysowanie rur -->
                <g id="svg-pipe-layer" fill="none" stroke="var(--rk-algo-line)" stroke-width="4" stroke-linejoin="round" stroke-linecap="round">
                    <!-- Rury wygeneruje JS -->
                </g>

                <!-- Legenda w rogu -->
                <rect x="160" y="230" width="100" height="30" fill="rgba(15,23,42,0.8)" rx="4"/>
                <text x="210" y="249" class="blueprint-text" text-anchor="middle" fill="#38bdf8" font-weight="bold">Q = <tspan id="svg-text-q-total">300</tspan> W</text>
            </svg>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('algorytm-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #38bdf8; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #38bdf8;">[ SYSTEM BLOCKED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        ERROR: Unauthorized Domain Execution.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Moduł "Blueprint Algorithm" jest własnością intelektualną serwisu Projekt-Ogrzewania.pl.<br>Wykonanie skryptów zostało przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Kalkulatora i Rysowania
    const sliderQUnit = document.getElementById('slider-q-unit');
    const sliderArea = document.getElementById('slider-area');
    
    const valInQUnit = document.getElementById('val-in-q-unit');
    const valInArea = document.getElementById('val-in-area');
    
    const outQTotal = document.getElementById('out-q-total');
    const outSpacing = document.getElementById('out-spacing');
    
    const svgLayer = document.getElementById('svg-pipe-layer');
    const svgTextArea = document.getElementById('svg-text-area');
    const svgTextQTotal = document.getElementById('svg-text-q-total');

    // Funkcja generująca ścieżkę meandrową dla SVG
    // density = ilość pętli w pionie
    function generateMeanderPath(density) {
        const startX = 50;
        const startY = 50;
        const width = 200;
        const height = 200;
        const step = height / density;
        
        let path = `M ${startX} ${startY}`;
        
        for(let i=0; i<density; i++) {
            const currentY = startY + (i * step);
            // Kreska w prawo lub w lewo
            if(i % 2 === 0) {
                path += ` L ${startX + width} ${currentY}`;
                if(i < density -1) path += ` L ${startX + width} ${currentY + step}`;
            } else {
                path += ` L ${startX} ${currentY}`;
                if(i < density -1) path += ` L ${startX} ${currentY + step}`;
            }
        }
        return path;
    }

    function updateBlueprint() {
        const qUnit = parseInt(sliderQUnit.value);
        const area = parseInt(sliderArea.value);
        
        // Aktualizacja inputów DOM
        valInQUnit.textContent = qUnit;
        valInArea.textContent = area;
        svgTextArea.textContent = area;

        // Obliczenie Całkowitej Mocy Q = q * F_g
        const qTotal = qUnit * area;
        outQTotal.textContent = qTotal;
        svgTextQTotal.textContent = qTotal;

        // Logika doboru rozstawu uzależniona od standardu budynku (q)
        let spacingText = "";
        let pipeLines = 5;

        if (qUnit <= 18) {
            spacingText = "co 20 cm";
            pipeLines = 6;
            outSpacing.style.color = "var(--rk-algo-brand)";
        } else if (qUnit > 18 && qUnit <= 35) {
            spacingText = "co 15 cm";
            pipeLines = 10;
            outSpacing.style.color = "#8b5cf6"; // Fiolet
        } else {
            spacingText = "co 10 cm";
            pipeLines = 16;
            outSpacing.style.color = "#ef4444"; // Czerwony - gęsty rozstaw
        }

        outSpacing.textContent = spacingText;

        // Rysowanie animowanej ścieżki SVG z resetem animacji
        const newPath = generateMeanderPath(pipeLines);
        
        // Dodanie stylu inline wewnątrz SVG z wymuszeniem dłuższego dasharray chroni przed urywaniem gęstych ścieżek
        svgLayer.innerHTML = `<path d="${newPath}" stroke-dasharray="6000" stroke-dashoffset="6000" style="animation: drawPipe 2s ease-out forwards;"/>`;
    }

    // Nasłuchiwacze
    sliderQUnit.addEventListener('input', updateBlueprint);
    sliderArea.addEventListener('input', updateBlueprint);

    // Init
    updateBlueprint();
});
</script>



<style>
:root {
    --rk-err-dark: #0f172a;
    --rk-err-red: #ef4444;       /* Kolor awarii */
    --rk-err-red-bg: #fef2f2;
    --rk-err-warn: #f59e0b;      /* Ostrzeżenie / Ciepło */
    --rk-err-cold: #3b82f6;      /* Mostki cieplne */
    --rk-err-border: #cbd5e1;
    --rk-err-text: #475569;
    --rk-err-bg: #ffffff;
    --rk-err-panel: #f8fafc;
}

.rk-err-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-err-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(239, 68, 68, 0.15);
    border: 1px solid #fca5a5;
    overflow: hidden;
}

/* Sekcja Treści */
.rk-err-content {
    padding: 45px 50px 25px;
    background: linear-gradient(135deg, #fef2f2 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-err-border);
}

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

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

.rk-err-desc a {
    color: var(--rk-err-red);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #fecaca;
    transition: all 0.3s;
}

.rk-err-desc a:hover {
    background: var(--rk-err-red-bg);
    border-color: var(--rk-err-red);
}

/* Interaktywny Skaner Błędów */
.rk-err-interactive {
    display: grid;
    grid-template-columns: 350px 1fr;
    background: var(--rk-err-bg);
}

/* Menu Błędów (Lewy panel) */
.rk-err-menu {
    background: var(--rk-err-panel);
    padding: 30px;
    border-right: 1px solid var(--rk-err-border);
}

.rk-err-menu h3 {
    font-size: 14px;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1px;
    margin: 0 0 20px 0;
    font-weight: 800;
}

.rk-err-btn {
    display: flex;
    align-items: flex-start;
    gap: 15px;
    width: 100%;
    background: #ffffff;
    border: 1px solid var(--rk-err-border);
    padding: 16px;
    border-radius: 12px;
    margin-bottom: 12px;
    cursor: pointer;
    text-align: left;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-err-btn:hover {
    border-color: #fca5a5;
    box-shadow: 0 4px 6px rgba(239, 68, 68, 0.05);
}

.rk-err-btn.active {
    background: var(--rk-err-red-bg);
    border-color: var(--rk-err-red);
    box-shadow: 0 4px 12px rgba(239, 68, 68, 0.15);
}

.rk-err-num {
    width: 28px;
    height: 28px;
    flex-shrink: 0;
    background: #e2e8f0;
    color: #64748b;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 900;
    font-size: 14px;
    transition: all 0.3s;
}

.rk-err-btn.active .rk-err-num {
    background: var(--rk-err-red);
    color: #ffffff;
}

.rk-err-title {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-err-dark);
    margin: 0;
    line-height: 1.4;
}

/* Prawy Panel - Diagnoza i SEO Tekst */
.rk-err-dashboard {
    padding: 30px;
    display: flex;
    flex-direction: column;
}

.rk-diag-card {
    background: #ffffff;
    border-radius: 16px;
    padding: 30px;
    border: 1px solid var(--rk-err-red);
    box-shadow: 0 10px 15px -3px rgba(239, 68, 68, 0.1);
    height: 100%;
    display: flex;
    flex-direction: column;
}

.rk-diag-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 1px solid #f1f5f9;
}

.rk-diag-tag {
    background: var(--rk-err-red);
    color: #ffffff;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-diag-cost {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-err-dark);
}

.rk-diag-text {
    font-size: 16px;
    color: var(--rk-err-dark);
    font-weight: 700;
    line-height: 1.6;
    margin: 0 0 20px 0;
}

/* Nowa sekcja pod długi ogon SEO */
.rk-diag-seo-box {
    background: #f8fafc;
    border-radius: 12px;
    padding: 20px;
    border: 1px solid var(--rk-err-border);
    flex-grow: 1;
}

.rk-diag-subtitle {
    font-size: 13px;
    text-transform: uppercase;
    color: #64748b;
    font-weight: 800;
    letter-spacing: 0.5px;
    margin: 0 0 10px 0;
}

.rk-diag-seo-text {
    font-size: 14.5px;
    color: var(--rk-err-text);
    line-height: 1.7;
    margin: 0;
}

.rk-diag-seo-text strong {
    color: var(--rk-err-dark);
}

/* Ochrona przed skokami podczas animacji JS */
.anim-wrapper {
    transition: opacity 0.3s ease;
}

/* Responsywność */
@media (max-width: 768px) {
    .rk-err-content { padding: 30px 25px; }
    .rk-err-interactive { grid-template-columns: 1fr; }
    .rk-err-menu { border-right: none; border-bottom: 1px solid var(--rk-err-border); padding: 25px; }
    .rk-err-dashboard { padding: 25px; }
    .rk-diag-header { flex-direction: column; align-items: flex-start; gap: 10px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#article-bledy-pasywne",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/"
    },
    "headline": "Najczęstsze błędy w projektowaniu ogrzewania dla domów pasywnych",
    "description": "Zestawienie 6 kosztownych błędów w instalacjach płaszczyznowych: przewymiarowanie pomp ciepła, brak projektów hydraulicznych, mostki termiczne, błędna krzywa grzewcza, zła izolacja na gruncie i niewłaściwe panele.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#dataset-bledy",
    "name": "Szczegółowa Analiza 6 Krytycznych Błędów Projektowych",
    "description": "Baza danych analizująca skutki finansowe i termodynamiczne w przypadku odstępstw od normy projektowej w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jak uniknąć taktowania pompy ciepła",
      "przewymiarowanie ogrzewania podłogowego skutki",
      "brak projektu podłogówki konsekwencje",
      "jak poprawnie wykonać izolację brzegową dylatację",
      "za wysoka temperatura na piecu do podłogówki",
      "ile styropianu pod ogrzewanie podłogowe na gruncie",
      "jakie panele na ogrzewanie podłogowe w domu pasywnym"
    ],
    "measurementTechnique": "Analiza awaryjności systemów hydraulicznych (szumy, taktowanie sprężarki) oraz termowizyjna detekcja strat ciepła na dylatacjach brzegowych i posadzkach na gruncie.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Błąd 1: Pompa 8 kW zamiast 3 kW. Skutek: Taktowanie i zniszczenie sprężarki.",
        "Błąd 2: Układanie rur co 10 cm na oko. Skutek: Brak możliwości rotametrowania i szumy w instalacji.",
        "Błąd 3: Brak dylatacji brzegowej. Skutek: Liniowe mostki termiczne i utrata 15-20% energii.",
        "Błąd 4: Krzywa grzewcza 35-40°C. Skutek: Ekstremalne przegrzewanie i dyskomfort termiczny.",
        "Błąd 5: Zbyt cienki styropian na gruncie (np. 10 cm). Skutek: Ucieczka energii do gruntu.",
        "Błąd 6: Panele o wysokim oporze cieplnym. Skutek: Blokada termiczna i konieczność podnoszenia zasilania pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/#webapp-bledy",
    "name": "Wizualizator Awarii i Błędów (Karta Diagnostyczna)",
    "description": "Interaktywna aplikacja diagnostyczna szczegółowo analizująca skutki 6 najczęstszych błędów instalacyjnych w domach pasywnych wraz z zaleceniami optymalizacyjnymi długiego ogona.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-err-container" id="error-scanner-app">
    
    <div class="rk-err-content">
        <h2>Najczęstsze błędy w projektowaniu dla domów pasywnych</h2>
        <p class="rk-err-desc">
            Błędy w standardzie pasywnym są bezlitośnie kosztowne, ponieważ tak zaizolowany budynek nie "wybacza" nadmiaru energii. Od <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">braku dokumentacji technicznej</a> po zły dobór mocy źródła ciepła – poznaj sześć pułapek, które mogą zrujnować Twoją inwestycję i komfort życia.
        </p>
    </div>

    <div class="rk-err-interactive">
        
        <!-- Panel Wyboru Błędów -->
        <div class="rk-err-menu">
            <h3>Skaner Diagnostyczny</h3>
            
            <button class="rk-err-btn active" data-err="1">
                <div class="rk-err-num">1</div>
                <div class="rk-err-title">Przewymiarowanie pompy ciepła</div>
            </button>
            
            <button class="rk-err-btn" data-err="2">
                <div class="rk-err-num">2</div>
                <div class="rk-err-title">Brak projektu hydraulicznego</div>
            </button>
            
            <button class="rk-err-btn" data-err="3">
                <div class="rk-err-num">3</div>
                <div class="rk-err-title">Niewłaściwa izolacja krawędziowa</div>
            </button>
            
            <button class="rk-err-btn" data-err="4">
                <div class="rk-err-num">4</div>
                <div class="rk-err-title">Zbyt wysoka temperatura zasilania</div>
            </button>

            <!-- Nowe buttony (Długi Ogon SEO) -->
            <button class="rk-err-btn" data-err="5">
                <div class="rk-err-num">5</div>
                <div class="rk-err-title">Zbyt cienka izolacja na gruncie</div>
            </button>

            <button class="rk-err-btn" data-err="6">
                <div class="rk-err-num">6</div>
                <div class="rk-err-title">Niewłaściwy dobór okładziny podłogowej</div>
            </button>
        </div>

        <!-- Prawy Panel - Zoptymalizowany pod Tekst / SEO -->
        <div class="rk-err-dashboard">
            <div class="rk-diag-card">
                <div class="anim-wrapper" id="diag-wrapper">
                    <div class="rk-diag-header">
                        <div class="rk-diag-tag" id="diag-tag">ZAGROŻENIE AWARIĄ</div>
                        <div class="rk-diag-cost" id="diag-cost">Straty: 15 000 PLN+</div>
                    </div>
                    
                    <p class="rk-diag-text" id="diag-text">
                        Montaż <a href='https://projekt-ogrzewania.pl/pompa-ciepla/' style='color:var(--rk-err-red); text-decoration:underline;'>pompy ciepła</a> o mocy 8 kW w domu potrzebującym zaledwie 3 kW prowadzi do taktowania sprężarki i jej zniszczenia w ciągu 3-4 lat.
                    </p>

                    <div class="rk-diag-seo-box">
                        <h4 class="rk-diag-subtitle">Analiza techniczna i skutki</h4>
                        <p class="rk-diag-seo-text" id="diag-seo-text">
                            Zastanawiasz się <strong>jak uniknąć taktowania pompy ciepła</strong>? Kluczem jest rzetelne przeliczenie OZC. Skutki przewymiarowania pompy ciepła w domu pasywnym są fatalne – urządzenie generuje za dużo energii w zbyt krótkim czasie, co zmusza automatykę do ciągłego odcinania zasilania. Precyzyjny <strong>dobór mocy pompy do OZC</strong> eliminuje ten problem, wydłużając żywotność sprężarki i drastycznie obniżając roczne koszty rachunków za prąd.
                        </p>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft) bez H-tagów
    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('error-scanner-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #ef4444;">[ SYSTEM SECURED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Błąd licencji: Nieautoryzowana domena.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Kod Skanera Błędów Instalacyjnych należy do Projekt-Ogrzewania.pl.<br>Kopiowanie i wykorzystywanie bez zgody jest zabronione.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Baza danych błędów z tekstami pod długi ogon (SEO)
    const errorData = {
        "1": {
            tag: "ZAGROŻENIE AWARIĄ",
            cost: "Koszty: 15 000 PLN+",
            text: "Montaż <a href='https://projekt-ogrzewania.pl/pompa-ciepla/' style='color:var(--rk-err-red); text-decoration:underline;'>pompy ciepła</a> o mocy 8 kW w domu potrzebującym zaledwie 3 kW prowadzi do taktowania sprężarki i jej zniszczenia w ciągu 3-4 lat.",
            seoText: "Zastanawiasz się <strong>jak uniknąć taktowania pompy ciepła</strong>? Kluczem jest rzetelne przeliczenie OZC. Skutki przewymiarowania pompy ciepła w domu pasywnym są fatalne – urządzenie generuje za dużo energii w zbyt krótkim czasie, co zmusza automatykę do ciągłego odcinania zasilania. Precyzyjny <strong>dobór mocy pompy do OZC</strong> eliminuje ten problem, wydłużając żywotność sprężarki i drastycznie obniżając roczne koszty rachunków za prąd."
        },
        "2": {
            tag: "BŁĄD HYDRAULICZNY",
            cost: "Szumy i dyskomfort",
            text: "Brak projektu sprawia, że instalatorzy kładą rury \"na oko\" (najczęściej co 10 cm wszędzie). Skutkuje to ogromnymi oporami i brakiem możliwości regulacji na rozdzielaczu.",
            seoText: "Jakie są główne <strong>konsekwencje braku projektu ogrzewania podłogowego</strong>? Inwestorzy często pytają, <strong>dlaczego podłogówka szumi</strong>. Wynika to z faktu, że zbyt gęsty rozstaw rur co 10 cm w małych pomieszczeniach wymusza stosowanie dławienia, a to zaburza hydraulikę całego układu. Brak projektu uniemożliwia wyliczenie oporów, przez co nie wiesz, <strong>jak zrównoważyć przepływy na rotametrach</strong>. Efektem jest przegrzana sypialnia i niedogrzana łazienka."
        },
        "3": {
            tag: "MOSTKI TERMICZNE",
            cost: "Straty energii: 15-20%",
            text: "Brak lub złe wykonanie izolacji brzegowej przy ścianach zewnętrznych w domu pasywnym generuje potężne liniowe mostki termiczne.",
            seoText: "Brak wiedzy o tym, <strong>jak poprawnie wykonać dylatację brzegową</strong> podłogówki, to prosta droga do wyrzucania pieniędzy w błoto. Płyta grzewcza musi pracować pracować swobodnie. Zbyt cienka <strong>pianka brzegowa do podłogówki</strong> sprawia, że wylewka dotyka muru, co tworzy <strong>mostki termiczne przy ścianach zewnętrznych</strong>. Ciepło z posadzki ucieka wprost w fundamenty, drastycznie podnosząc straty energetyczne budynku i niwecząc cały nakład pracy na ocieplenie pasywne."
        },
        "4": {
            tag: "KRYTYCZNE PRZEGRZEWANIE",
            cost: "Dyskomfort termiczny",
            text: "Ustawienie krzywej grzewczej na poziomie typowym dla budynków starszych (np. 35-40°C) powoduje, że podłoga staje się gorąca i nieprzyjemna.",
            seoText: "W budownictwie energooszczędnym <strong>za wysoka temperatura zasilania podłogówki</strong> daje natychmiastowe objawy – podłoga wręcz parzy, a powietrze staje się przesuszone. Kluczowe jest pytanie, <strong>jaka krzywa grzewcza do domu pasywnego</strong> jest odpowiednia? Prawidłowo zaprojektowany system powinien pracować na parametrach nie wyższych niż 28-32°C. Jeśli ignorujemy te wartości, <strong>przegrzewanie pomieszczeń z pompą ciepła</strong> staje się codziennością, a nasza instalacja działa ze zrujnowanym współczynnikiem wydajności COP."
        },
        "5": {
            tag: "STRATY DO GRUNTU",
            cost: "Ciągła ucieczka energii",
            text: "Zastosowanie standardowych 10-15 cm styropianu pod wylewką na gruncie w domu pasywnym powoduje stałą ucieczkę ciepła w dół, zamiast do wnętrza budynku.",
            seoText: "Błędem o nieodwracalnych skutkach na etapie stanu surowego jest ignorowanie tego, <strong>ile styropianu pod ogrzewanie podłogowe na gruncie</strong> należy ułożyć w standardzie energooszczędnym. W domach pasywnych absolutnym minimum jest 20-25 cm izolacji o bardzo niskim współczynniku przewodzenia ciepła. Zbyt cienki <strong>styropian podłogowy EPS 100 lub EPS 200</strong> sprawia, że pompa ciepła zamiast w pełni ogrzewać salon, bezproduktywnie ogrzewa fundamenty i ziemię pod budynkiem. To bezpośrednio przekłada się na wyższe <strong>koszty ogrzewania pompą ciepła zimą</strong>."
        },
        "6": {
            tag: "BLOKADA TERMICZNA",
            cost: "Spadek wydajności układu",
            text: "Położenie grubych paneli z podkładem o wysokim oporze cieplnym w domu pasywnym sprawia, że przy zasilaniu rzędu 30°C ciepło nie przebije się efektywnie do pomieszczenia.",
            seoText: "Wybierając materiały wykończeniowe do salonu czy sypialni, inwestorzy często pytają, <strong>jakie panele na ogrzewanie podłogowe w domu pasywnym</strong> będą najlepsze. Zastosowanie okładziny o łącznym oporze cieplnym powyżej 0,15 (m²·K)/W drastycznie obniża efektywność całego systemu hydraulicznego. Aby zachować niską temperaturę zasilania pompy ciepła (co warunkuje jej najwyższy wskaźnik COP), należy wybierać <strong>panele winylowe SPC na podłogówkę</strong> lub klasyczne płytki ceramiczne. Zbyt gruby, gąbczasty <strong>podkład pod panele na ogrzewanie podłogowe</strong> zadziała jak niechciany izolator, zmuszając pompę do nieekonomicznej pracy na wyższych parametrach i zwiększając zużycie prądu."
        }
    };

    // 3. Logika zmiany treści
    const btns = document.querySelectorAll('.rk-err-btn');
    const diagWrapper = document.getElementById('diag-wrapper');
    const diagTag = document.getElementById('diag-tag');
    const diagCost = document.getElementById('diag-cost');
    const diagText = document.getElementById('diag-text');
    const diagSeoText = document.getElementById('diag-seo-text');

    function updateDashboard(errId) {
        // Płynne zniknięcie sekcji
        diagWrapper.style.opacity = '0';

        setTimeout(() => {
            // Podmiana danych
            const data = errorData[errId];
            diagTag.textContent = data.tag;
            diagCost.textContent = data.cost;
            diagText.innerHTML = data.text;
            diagSeoText.innerHTML = data.seoText;

            // Pojawienie się tekstu
            diagWrapper.style.opacity = '1';
        }, 200);
    }

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Unikaj przeładowania, jeśli kliknięto w ten sam przycisk
            if(this.classList.contains('active')) return;

            // Zmiana stanu przycisków
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // Aktualizacja
            const errId = this.getAttribute('data-err');
            updateDashboard(errId);
        });
    });
});
</script>



<style>
:root {
    --rk-imp-dark: #0f172a;
    --rk-imp-brand: #0284c7;
    --rk-imp-brand-light: #f0f9ff;
    --rk-imp-accent: #38bdf8;
    --rk-imp-warn: #f59e0b;
    --rk-imp-eco: #10b981;
    --rk-imp-red: #ef4444;
    --rk-imp-border: #e2e8f0;
    --rk-imp-text: #475569;
    --rk-imp-bg: #ffffff;
}

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

/* Część Tekstowa / SEO */
.rk-imp-content {
    padding: 45px 50px 30px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-imp-border);
}

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

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

.rk-imp-desc strong {
    color: var(--rk-imp-dark);
}

.rk-imp-desc a {
    color: var(--rk-imp-brand);
    font-weight: 700;
    text-decoration: none;
    box-shadow: inset 0 -2px 0 #bae6fd;
    transition: all 0.3s;
}

.rk-imp-desc a:hover {
    background: var(--rk-imp-brand-light);
    box-shadow: inset 0 -10px 0 #bae6fd;
}

.rk-imp-grid-text {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 25px;
    margin-top: 30px;
}

.rk-imp-box {
    background: #f8fafc;
    border: 1px solid var(--rk-imp-border);
    padding: 20px;
    border-radius: 12px;
}

.rk-imp-box h4 {
    margin: 0 0 10px 0;
    color: var(--rk-imp-brand);
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-imp-box p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-imp-text);
}

/* Interaktywny Symulator */
.rk-imp-interactive {
    padding: 40px 50px;
    display: grid;
    grid-template-columns: 320px 1fr;
    gap: 40px;
    background: #ffffff;
}

/* Panel Kontrolny */
.rk-imp-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-imp-controls h3 {
    margin: 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-imp-dark);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-ctrl-group {
    background: #f8fafc;
    border: 1px solid var(--rk-imp-border);
    padding: 20px;
    border-radius: 16px;
}

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

.rk-ctrl-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-imp-text);
}

.rk-ctrl-val {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-imp-warn);
}

/* Suwaki i Toggla */
.rk-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #cbd5e1;
    outline: none;
}
.rk-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: #ffffff;
    border: 4px solid var(--rk-imp-warn);
    cursor: pointer;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    transition: transform 0.1s;
}
.rk-slider::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Switch Toggle */
.rk-switch-wrap {
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.rk-switch {
    position: relative;
    width: 56px;
    height: 30px;
    background: #cbd5e1;
    border-radius: 30px;
    cursor: pointer;
    transition: background 0.3s;
}
.rk-switch.active { background: var(--rk-imp-warn); }
.rk-switch-knob {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 24px;
    height: 24px;
    background: #fff;
    border-radius: 50%;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}
.rk-switch.active .rk-switch-knob { transform: translateX(26px); }

/* Dashboard SVG + Wyniki */
.rk-imp-dashboard {
    display: flex;
    gap: 30px;
}

.rk-svg-room {
    flex: 1;
    background: #f1f5f9;
    border-radius: 16px;
    border: 1px dashed var(--rk-imp-border);
    padding: 20px;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
}

.rk-svg-rotameter {
    width: 100px;
    background: #ffffff;
    border: 1px solid var(--rk-imp-border);
    border-radius: 16px;
    padding: 15px;
    display: flex;
    flex-direction: column;
    align-items: center;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-rota-title {
    font-size: 10px;
    font-weight: 800;
    color: var(--rk-imp-text);
    text-transform: uppercase;
    margin-bottom: 10px;
    text-align: center;
}

/* Animacje SVG */
.anim-person { transition: opacity 0.3s ease; }
.anim-tv { transition: fill 0.3s ease, filter 0.3s ease; }
.anim-heat-glow { transition: opacity 0.3s ease, r 0.3s ease; }
.anim-float { transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); }

/* Kafelki Wynikowe */
.rk-result-metrics {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-top: 20px;
}

.rk-metric-card {
    background: #ffffff;
    border: 1px solid var(--rk-imp-border);
    padding: 15px;
    border-radius: 12px;
}
.rk-metric-card.highlight {
    border-color: var(--rk-imp-eco);
    background: #ecfdf5;
}

.rk-metric-card h5 { margin: 0 0 5px 0; font-size: 11px; color: var(--rk-imp-text); text-transform: uppercase; }
.rk-metric-card .val { font-size: 22px; font-weight: 900; color: var(--rk-imp-dark); }
.rk-metric-card.highlight .val { color: var(--rk-imp-eco); }

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

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

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

.rk-btn-massive {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    background: var(--rk-imp-brand);
    color: #ffffff !important;
    padding: 18px 36px;
    border-radius: 14px;
    font-size: 18px;
    font-weight: 800;
    text-decoration: none !important;
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.5);
    transition: all 0.3s;
    border: 2px solid transparent;
}

.rk-btn-massive:hover {
    background: #0369a1;
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(2, 132, 199, 0.6);
    border-color: #7dd3fc;
}

@media (max-width: 768px) {
    .rk-imp-content, .rk-imp-interactive, .rk-imp-cta-box { padding: 30px 25px; }
    .rk-imp-grid-text { grid-template-columns: 1fr; }
    .rk-imp-interactive { grid-template-columns: 1fr; gap: 30px; }
    .rk-imp-dashboard { flex-direction: column; }
    .rk-svg-rotameter { width: 100%; flex-direction: row; justify-content: space-around; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-wplyw",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Jak dom pasywny wpływa na projekt ogrzewania podłogowego i OZC?",
    "description": "Dlaczego wskaźniki W/m2 'z sufitu' niszczą instalację. Analiza zysków bytowych, precyzyjnych przepływomierzy i doboru energooszczędnej pompy obiegowej.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-wplyw",
    "name": "Zestawienie Zysków Bytowych i Oporów Hydraulicznych",
    "description": "Baza danych określająca wpływ aktywności domowników na realne obciążenie cieplne oraz wymagany przepływ czynnika grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie na ciepło dla każdego pomieszczenia",
      "zyski ciepła od nasłonecznienia dom pasywny",
      "precyzyjne przepływomierze podłogówki",
      "kalkulator doboru pompy obiegowej",
      "obliczenia OZC dla podłogówki"
    ],
    "measurementTechnique": "Dynamiczna estymacja spadku zapotrzebowania grzewczego (W) w oparciu o sumowanie zysków od ludzi (100W/osoba) i elektroniki domowej, redukująca wymagany przepływ na rotametrach.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "OZC: W domu pasywnym 3 osoby i telewizor generują ~500W, pokrywając do 50% zapotrzebowania.",
        "Hydraulika: Niskie zapotrzebowanie wymusza rotametry o małym zakresie 0,5–2,5 l/min.",
        "Pompa obiegowa: Konieczność precyzyjnego doboru, aby zużycie prądu P < 20-30 W."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-wplyw",
    "name": "Symulator Bilansu Pasywnego i Hydrauliki",
    "description": "Interaktywne narzędzie wizualizujące, jak zyski ciepła od ludzi i elektroniki automatycznie dławią potrzebę grzewczą podłogi i obniżają przepływ wskaźnika na rotametrze.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript, SVG",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-imp-container" id="impact-simulator-app">
    
    <div class="rk-imp-content">
        <h2>Jak to wpływa na projekt ogrzewania podłogowego?</h2>
        <p class="rk-imp-desc">
            Projektowanie dla domu pasywnego wymusza całkowitą zmianę podejścia do OZC. Nie można posługiwać się wskaźnikami W/m² wyciągniętymi "z sufitu". Projektant musi otrzymać <strong>wyniki obliczeń <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">zapotrzebowania na ciepło dla każdego pomieszczenia</a> z osobna</strong>. W przeciwnym razie system będzie skazany na porażkę.
        </p>

        <div class="rk-imp-grid-text">
            <div class="rk-imp-box">
                <h4>Zyski Bytowe w OZC</h4>
                <p>W <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">obliczeniach OZC</a> musimy uwzględniać zyski od nasłonecznienia i urządzeń. W domu pasywnym 3 osoby i włączony telewizor to już ~500 W darmowej mocy grzewczej, co może pokryć nawet 50% zapotrzebowania w danym momencie!</p>
            </div>
            <div class="rk-imp-box">
                <h4>Precyzja Hydrauliczna</h4>
                <p>Niska moc to mały przepływ. Projektant musi wyliczyć opory tak, aby stosować <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">precyzyjne przepływomierze podłogówki</a> (zakres 0,5–2,5 l/min). Niezbędny jest też ścisły <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulator doboru pompy obiegowej</a>, by jej pobór prądu nie przekraczał 20-30 W.</p>
            </div>
        </div>
    </div>

    <div class="rk-imp-interactive">
        
        <!-- Panel Kontrolny -->
        <div class="rk-imp-controls">
            <h3>Symuluj Zyski Pasywne</h3>
            
            <div class="rk-ctrl-group">
                <div class="rk-ctrl-header">
                    <span class="rk-ctrl-label">Liczba osób w salonie</span>
                    <span class="rk-ctrl-val"><span id="val-people">0</span></span>
                </div>
                <input type="range" min="0" max="4" step="1" value="0" class="rk-slider" id="slider-people">
                <div style="font-size:11px; color:#94a3b8; margin-top:8px;">1 osoba = ~100W zysku</div>
            </div>

            <div class="rk-ctrl-group">
                <div class="rk-ctrl-header">
                    <span class="rk-ctrl-label">Telewizor / Elektronika</span>
                    <span class="rk-ctrl-val" id="val-tv-text" style="color:#94a3b8;">Wyłączone</span>
                </div>
                <div class="rk-switch-wrap">
                    <span style="font-size:12px; color:#64748b;">(~200W zysku)</span>
                    <div class="rk-switch" id="toggle-tv">
                        <div class="rk-switch-knob"></div>
                    </div>
                </div>
            </div>

            <div class="rk-result-metrics">
                <div class="rk-metric-card highlight">
                    <h5>Darmowe Zyski</h5>
                    <div class="val">+<span id="out-gains">0</span> W</div>
                </div>
                <div class="rk-metric-card">
                    <h5>Wymagana Moc Posadzki</h5>
                    <div class="val"><span id="out-power">1000</span> W</div>
                </div>
            </div>
        </div>

        <!-- Dashboard SVG -->
        <div class="rk-imp-dashboard">
            <!-- Pokój SVG -->
            <div class="rk-svg-room">
                <svg viewBox="0 0 200 200" style="width:100%; height:auto;">
                    <!-- Pokój -->
                    <rect x="10" y="10" width="180" height="180" fill="none" stroke="#cbd5e1" stroke-width="4" rx="8"/>
                    <!-- Łuna ciepła -->
                    <circle cx="100" cy="100" r="0" fill="rgba(245, 158, 11, 0.15)" id="svg-heat-glow" class="anim-heat-glow"/>
                    
                    <!-- Telewizor -->
                    <rect x="70" y="20" width="60" height="10" fill="#475569" rx="2"/>
                    <rect x="60" y="30" width="80" height="40" fill="#94a3b8" rx="4" id="svg-tv" class="anim-tv"/>
                    
                    <!-- Ludziki (4 sztuki ukryte domyślnie) -->
                    <g fill="#475569" id="person-1" class="anim-person" opacity="0">
                        <circle cx="50" cy="130" r="10"/>
                        <rect x="40" y="145" width="20" height="30" rx="4"/>
                    </g>
                    <g fill="#475569" id="person-2" class="anim-person" opacity="0">
                        <circle cx="85" cy="140" r="10"/>
                        <rect x="75" y="155" width="20" height="30" rx="4"/>
                    </g>
                    <g fill="#475569" id="person-3" class="anim-person" opacity="0">
                        <circle cx="120" cy="135" r="10"/>
                        <rect x="110" y="150" width="20" height="30" rx="4"/>
                    </g>
                    <g fill="#475569" id="person-4" class="anim-person" opacity="0">
                        <circle cx="155" cy="145" r="10"/>
                        <rect x="145" y="160" width="20" height="30" rx="4"/>
                    </g>
                </svg>
            </div>

            <!-- Rotametr SVG -->
            <div class="rk-svg-rotameter">
                <div class="rk-rota-title">Rotametr<br>(Przepływ)</div>
                <svg viewBox="0 0 60 160" style="height:140px;">
                    <!-- Rurka -->
                    <path d="M 20 20 L 40 20 L 35 140 L 25 140 Z" fill="#f1f5f9" stroke="#94a3b8" stroke-width="2"/>
                    <!-- Skala -->
                    <line x1="15" y1="30" x2="20" y2="30" stroke="#64748b" stroke-width="1.5"/>
                    <line x1="15" y1="60" x2="20" y2="60" stroke="#64748b" stroke-width="1.5"/>
                    <line x1="15" y1="90" x2="20" y2="90" stroke="#64748b" stroke-width="1.5"/>
                    <line x1="15" y1="120" x2="20" y2="120" stroke="#64748b" stroke-width="1.5"/>
                    <text x="5" y="34" font-size="10" fill="#64748b">2.5</text>
                    <text x="5" y="124" font-size="10" fill="#64748b">0.5</text>
                    
                    <!-- Pływak -->
                    <g id="svg-float" class="anim-float" transform="translate(0, 0)">
                        <polygon points="22,30 38,30 35,40 25,40" fill="#ef4444"/>
                    </g>
                </svg>
                <div style="font-size:14px; font-weight:900; color:var(--rk-imp-dark); margin-top:10px;">
                    <span id="out-flow">2.5</span> <span style="font-size:10px;">l/min</span>
                </div>
            </div>
        </div>
    </div>

    <!-- MOCNE CTA -->
    <div class="rk-imp-cta-box">
        <h3>Nie zgaduj. Powierz OZC inżynierom.</h3>
        <p>
            Błędy w obliczeniach zapotrzebowania i hydrauliki kosztują dziesiątki tysięcy złotych po wylaniu posadzki. Wybierz rozwiązanie, które gwarantuje bezpieczeństwo i najwyższy współczynnik COP dla Twojej pompy ciepła.
        </p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-btn-massive">
            ZAMÓW PROFESJONALNY PROJEKT OGRZEWANIA
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
        </a>
    </div>

</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe bez tagów H
    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('impact-simulator-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #ef4444;">[ SYSTEM SECURED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Błąd licencji: Nieautoryzowana domena.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Kod Symulatora Bilansu należy do Projekt-Ogrzewania.pl. Wykonanie przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora
    const sliderPeople = document.getElementById('slider-people');
    const toggleTv = document.getElementById('toggle-tv');
    
    // UI Values
    const valPeople = document.getElementById('val-people');
    const valTvText = document.getElementById('val-tv-text');
    const outGains = document.getElementById('out-gains');
    const outPower = document.getElementById('out-power');
    const outFlow = document.getElementById('out-flow');
    
    // SVG Elements
    const svgTv = document.getElementById('svg-tv');
    const svgHeatGlow = document.getElementById('svg-heat-glow');
    const svgFloat = document.getElementById('svg-float');
    const persons = [
        document.getElementById('person-1'),
        document.getElementById('person-2'),
        document.getElementById('person-3'),
        document.getElementById('person-4')
    ];

    let isTvOn = false;
    const basePower = 1000; // Bazowe zapotrzebowanie salonu W
    const maxFlow = 2.5; // Max l/min
    const minFlow = 0.5; // Min l/min

    function updateSimulation() {
        const peopleCount = parseInt(sliderPeople.value);
        valPeople.textContent = peopleCount;

        // Obliczanie zysków
        const peopleGain = peopleCount * 100; // 100W na osobę
        const tvGain = isTvOn ? 200 : 0; // 200W z TV
        const totalGain = peopleGain + tvGain;

        // Zapotrzebowanie (nie mniej niż 0)
        let reqPower = basePower - totalGain;
        if (reqPower < 0) reqPower = 0;

        outGains.textContent = totalGain;
        outPower.textContent = reqPower;

        // Obliczanie Przepływu (Liniowa interpolacja)
        // Jeśli reqPower = 1000 -> 2.5 l/min
        // Jeśli reqPower = 0 -> 0.0 l/min (ale dla rotametru min to 0.5)
        let flow = (reqPower / basePower) * maxFlow;
        if (flow < minFlow) flow = minFlow;
        outFlow.textContent = flow.toFixed(1);

        // --- Aktualizacja SVG ---
        
        // 1. Ludzie (pojawiają się)
        persons.forEach((p, index) => {
            p.style.opacity = index < peopleCount ? '1' : '0';
            p.style.fill = index < peopleCount ? 'var(--rk-imp-warn)' : '#475569';
        });

        // 2. TV
        if (isTvOn) {
            svgTv.style.fill = '#fde047'; // Jasny ekran
            svgTv.style.filter = 'drop-shadow(0 0 10px rgba(253, 224, 71, 0.8))';
            valTvText.textContent = "Włączone";
            valTvText.style.color = "var(--rk-imp-warn)";
        } else {
            svgTv.style.fill = '#94a3b8'; // Zgaszony
            svgTv.style.filter = 'none';
            valTvText.textContent = "Wyłączone";
            valTvText.style.color = "#94a3b8";
        }

        // 3. Łuna ciepła
        // R zależy od totalGain (max 600W)
        const glowRadius = (totalGain / 600) * 100;
        svgHeatGlow.setAttribute('r', glowRadius);
        svgHeatGlow.style.opacity = glowRadius > 0 ? '1' : '0';

        // 4. Rotametr (Pływak)
        // translateY: 0 to góra (2.5 l/min), 90 to dół (0.5 l/min)
        // Odwrócona proporcja
        const flowPercent = (flow - minFlow) / (maxFlow - minFlow); // 1.0 = max, 0.0 = min
        const floatY = (1 - flowPercent) * 90; // max Y = 90
        svgFloat.style.transform = `translateY(${floatY}px)`;
    }

    // Nasłuchiwacze
    sliderPeople.addEventListener('input', updateSimulation);
    
    toggleTv.addEventListener('click', () => {
        isTvOn = !isTvOn;
        toggleTv.classList.toggle('active', isTvOn);
        updateSimulation();
    });

    // Init
    updateSimulation();
});
</script>



<style>
:root {
    --rk-quote-primary: #0f172a;
    --rk-quote-accent: #0284c7;
    --rk-quote-accent-light: #e0f2fe;
    --rk-quote-danger: #ef4444;
    --rk-quote-passive: #10b981;
    --rk-quote-bg: #f8fafc;
    --rk-quote-border: #e2e8f0;
}

.rk-expert-wrapper {
    max-width: 950px;
    margin: 50px auto 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
}

.rk-expert-header {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin-bottom: 25px;
}

.rk-expert-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-quote-primary);
    margin: 0;
}

.rk-expert-container {
    background: #ffffff;
    border-radius: 24px;
    padding: 35px 40px;
    display: flex;
    gap: 30px;
    align-items: flex-start;
    border: 1px solid var(--rk-quote-border);
    box-shadow: 0 20px 40px -15px rgba(2, 132, 199, 0.1);
    position: relative;
    overflow: hidden;
}

/* Dekoracyjne tło */
.rk-expert-container::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 6px; height: 100%;
    background: linear-gradient(to bottom, var(--rk-quote-accent), #38bdf8);
}

.rk-expert-container::after {
    content: '”';
    position: absolute;
    top: -20px;
    right: 20px;
    font-family: serif;
    font-size: 140px;
    color: var(--rk-quote-bg);
    line-height: 1;
    z-index: 0;
}

/* Animowane zdjęcie */
.rk-expert-photo-wrap {
    flex-shrink: 0;
    width: 110px;
    height: 110px;
    position: relative;
    z-index: 1;
}

.rk-expert-photo-ring {
    position: absolute;
    top: -5px; left: -5px; right: -5px; bottom: -5px;
    border-radius: 50%;
    border: 2px dashed var(--rk-quote-accent);
    animation: spinRing 12s linear infinite;
}

@keyframes spinRing {
    100% { transform: rotate(360deg); }
}

.rk-expert-photo {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    object-position: center top;
    border: 4px solid #ffffff;
    box-shadow: 0 8px 15px rgba(0,0,0,0.1);
    position: relative;
    z-index: 2;
}

.rk-expert-badge-icon {
    position: absolute;
    bottom: -5px;
    right: -5px;
    background: var(--rk-quote-accent);
    color: #ffffff;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.4);
    z-index: 3;
}

/* Treść cytatu */
.rk-expert-content {
    flex-grow: 1;
    position: relative;
    z-index: 1;
}

.rk-expert-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-quote-accent);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 12px;
    background: var(--rk-quote-accent-light);
    padding: 4px 12px;
    border-radius: 20px;
}

.rk-expert-text {
    font-size: 17px;
    line-height: 1.7;
    color: var(--rk-quote-primary);
    font-style: italic;
    margin: 0 0 15px 0;
    font-weight: 500;
}

.rk-expert-text strong {
    color: var(--rk-quote-accent);
    font-weight: 800;
}

.rk-expert-text a {
    color: var(--rk-quote-primary);
    text-decoration: underline;
    text-decoration-color: var(--rk-quote-accent);
    text-underline-offset: 3px;
    font-weight: 700;
    transition: color 0.3s;
}

.rk-expert-text a:hover {
    color: var(--rk-quote-accent);
}

.rk-expert-signature {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: #64748b;
    border-top: 1px solid var(--rk-quote-border);
    padding-top: 15px;
    margin-top: 15px;
}

/* Interaktywny Panel Ukryty */
.rk-expert-interactive {
    margin-top: 20px;
}

.rk-expert-btn {
    background: #ffffff;
    border: 2px solid var(--rk-quote-border);
    color: var(--rk-quote-primary);
    padding: 10px 20px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    transition: all 0.3s ease;
}

.rk-expert-btn:hover {
    border-color: var(--rk-quote-accent);
    color: var(--rk-quote-accent);
    background: var(--rk-quote-accent-light);
}

.rk-expert-btn svg {
    transition: transform 0.3s;
}

.rk-expert-btn.active svg {
    transform: rotate(180deg);
}

.rk-expert-data-panel {
    display: none;
    margin-top: 15px;
    padding: 20px;
    background: var(--rk-quote-bg);
    border-radius: 12px;
    border: 1px dashed var(--rk-quote-border);
    animation: fadeInDown 0.4s ease forwards;
}

.rk-expert-data-panel.active {
    display: grid;
    grid-template-columns: 100px 1fr 1fr 1fr;
    gap: 15px;
    align-items: center;
}

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

.rk-data-svg-box {
    display: flex;
    justify-content: center;
    align-items: center;
}

.rk-data-svg {
    width: 60px;
    height: 60px;
    filter: drop-shadow(0 4px 6px rgba(16, 185, 129, 0.2));
}

.anim-pulse-target {
    transform-origin: center;
    animation: targetPulse 2s infinite alternate ease-in-out;
}

@keyframes targetPulse {
    0% { transform: scale(0.9); opacity: 0.8; stroke: var(--rk-quote-accent); }
    100% { transform: scale(1.1); opacity: 1; stroke: var(--rk-quote-passive); }
}

.rk-data-stat {
    text-align: center;
    background: #ffffff;
    padding: 15px;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    border: 1px solid transparent;
    transition: border-color 0.3s;
}

.rk-data-stat:hover {
    border-color: var(--rk-quote-accent-light);
}

.rk-data-val {
    display: block;
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-quote-accent);
    margin-bottom: 5px;
}

.rk-data-lab {
    font-size: 11px;
    color: #64748b;
    text-transform: uppercase;
    font-weight: 700;
}

@media (max-width: 768px) {
    .rk-expert-container { flex-direction: column; text-align: center; padding: 30px 25px; align-items: center; }
    .rk-expert-header h2 { font-size: 22px; text-align: center; }
    .rk-expert-container::before { width: 100%; height: 6px; }
    .rk-expert-data-panel.active { grid-template-columns: 1fr; }
    .rk-data-svg-box { display: none; /* Hide icon on small mobile to save space */ }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-cytat",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Ekspercki punkt widzenia: Precyzja w standardzie pasywnym",
    "description": "Opinia inżyniera HVAC na temat konsekwencji braku rzetelnych obliczeń OZC i projektowania instalacji ogrzewania podłogowego na oko w budownictwie pasywnym.",
    "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": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Budownictwo pasywne nie wybacza inżynierskiej arogancji. Kopiowanie schematów ze starych domów i układanie rur 'na oko' to absolutna gwarancja przegrzewania pomieszczeń oraz morderczego taktowania pompy ciepła. Jeśli opierasz się na zgadywaniu, zamiast zamówić rzetelny projekt, niszczysz cały sens finansowy energooszczędnej inwestycji.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "Inżynier HVAC & Projektant",
      "url": "https://projekt-ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ],
      "worksFor": {
        "@type": "Organization",
        "name": "Projekt-Ogrzewania.pl"
      }
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-cytat",
    "name": "Krytyczne parametry projektowe dla podłogówki pasywnej",
    "description": "Zestawienie inżynierskich wartości bazowych wymaganych do zachowania stabilności termicznej w budownictwie o ekstremalnie niskim zapotrzebowaniu na energię.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie cieplne domu pasywnego W/m2",
      "skutki braku projektu ogrzewania podłogowego",
      "projekt z obliczeniami OZC a projekt z głowy",
      "taktowanie pompy ciepła w nowym domu",
      "optymalny rozstaw rur 15-20 cm"
    ],
    "measurementTechnique": "Określenie krytycznych limitów mocy i przepływu zapobiegających przegrzewaniu izolowanych brył budynków.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zapotrzebowanie (q): Poniżej 15 W/m2",
        "Rozstaw rur bazowy: Od 15 cm do 20 cm",
        "Temperatura zasilania: Maksymalnie 28 - 32°C"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-cytat",
    "name": "Interaktywny Panel Ekspercki: Parametry Pasywne",
    "description": "Interfejs rozwijany przez użytkownika wyświetlający twarde dane liczbowe wynikające z norm i obliczeń OZC przytoczonych przez inżyniera.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-expert-wrapper" id="rk-expert-quote-app">
    <div class="rk-expert-header">
        <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="var(--rk-quote-accent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
        <h3>Ekspercki punkt widzenia</h3>
    </div>
    
    <div class="rk-expert-container">
        <div class="rk-expert-photo-wrap">
            <div class="rk-expert-photo-ring"></div>
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski, Inżynier HVAC" class="rk-expert-photo" loading="lazy">
            <div class="rk-expert-badge-icon">
                <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 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            </div>
        </div>
        
        <div class="rk-expert-content">
            <span class="rk-expert-label">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
                Ostrzeżenie przed "Instalatorską Intuicją"
            </span>
            <p class="rk-expert-text">
                "Budownictwo pasywne nie wybacza inżynierskiej arogancji. Kopiowanie schematów ze starych domów i układanie rur w gęstym rozstawie to absolutna gwarancja nieznośnego przegrzewania pomieszczeń oraz morderczego taktowania pompy ciepła. Zastanawiasz się, <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-glowy-vs-projekt-z-obliczeniami-ile-mozesz-stracic-na-bledach/">ile możesz stracić na błędach robiąc projekt z głowy</a>? Jeśli nie opierasz swojego systemu na <a href="https://projekt-ogrzewania.pl/czy-do-ogrzewania-podlogowego-potrzebny-jest-projekt/">rzetelnym projekcie ogrzewania z wyliczeniem OZC</a> do jednego Wata, niszczysz cały finansowy i technologiczny sens energooszczędnej inwestycji."
            </p>
            <span class="rk-expert-signature">— Robert Kucharski, Inżynier HVAC Projekt-Ogrzewania.pl</span>
            
            <div class="rk-expert-interactive">
                <button class="rk-expert-btn" id="toggleDataBtn">
                    Rozwiń parametry krytyczne
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </button>
                
                <div class="rk-expert-data-panel" id="expertDataPanel">
                    <div class="rk-data-svg-box">
                        <svg class="rk-data-svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
                            <circle cx="12" cy="12" r="10" class="anim-pulse-target"></circle>
                            <circle cx="12" cy="12" r="6"></circle>
                            <circle cx="12" cy="12" r="2"></circle>
                        </svg>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val" style="color: var(--rk-quote-passive);">&lt; 15 W/m²</span>
                        <span class="rk-data-lab">Max. Zapotrzebowanie</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val">15 - 20 cm</span>
                        <span class="rk-data-lab">Optymalny Rozstaw</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val" style="color: var(--rk-quote-danger);">32 °C</span>
                        <span class="rk-data-lab">Krytyczne Zasilanie</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #f8fafc; border-radius: 16px; margin-top: 20px; font-family: sans-serif;">
            <p style="font-size: 14px; font-weight: bold; color: #0f172a; margin-top:0;">Parametry graniczne weryfikacji (Robert Kucharski):</p>
            <ul style="font-size: 14px; color: #475569; margin-bottom:0;">
                <li>Zapotrzebowanie na moc: Poniżej 15 W/m²</li>
                <li>Optymalny rozstaw rur: Od 15 cm do 20 cm</li>
                <li>Krytyczna maksymalna temperatura zasilania: 32 °C</li>
            </ul>
        </div>
    </noscript>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi - brak nagłówków H-tagów 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('rk-expert-quote-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fef2f2; color: #dc2626; border-radius: 20px; border: 2px dashed #ef4444;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Blokada bezpieczeństwa</div>
                    <div style="font-size: 14px; color: #7f1d1d;">Cytat inżynierski jest chroniony prawem autorskim serwisu Projekt-Ogrzewania.pl.</div>
                </div>
            `;
            // Usuwamy resztę styli z kontenera by nie zepsuć wyglądu komunikatu
            container.style.borderLeft = 'none';
            container.style.background = 'transparent';
            container.style.boxShadow = 'none';
            return;
        }
    }

    // 2. Interakcja z panelem danych
    const toggleBtn = document.getElementById('toggleDataBtn');
    const dataPanel = document.getElementById('expertDataPanel');

    if (toggleBtn && dataPanel) {
        toggleBtn.addEventListener('click', function() {
            this.classList.toggle('active');
            dataPanel.classList.toggle('active');
            
            if(this.classList.contains('active')) {
                this.innerHTML = `Zwiń parametry krytyczne <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            } else {
                this.innerHTML = `Rozwiń parametry krytyczne <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            }
        });
    }
});
</script>



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



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-brand: #0284c7;
    --rk-cs-accent: #38bdf8;
    --rk-cs-passive: #10b981; /* Kolor sukcesu/pasywny */
    --rk-cs-standard: #f59e0b; /* Kolor ostrzegawczy/standard */
    --rk-cs-cold: #3b82f6; /* Zima/Móz */
    --rk-cs-bg: #ffffff;
    --rk-cs-panel: #f8fafc;
    --rk-cs-border: #cbd5e1;
    --rk-cs-text: #475569;
}

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

.rk-cs-wrapper * {
    box-sizing: inherit;
}

/* ================= HEADER I METRYCZKA ================= */
.rk-cs-header {
    background: linear-gradient(135deg, var(--rk-cs-dark) 0%, #1e293b 100%);
    color: #ffffff;
    padding: 45px 50px 35px;
    position: relative;
}

.rk-cs-header::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background: radial-gradient(circle at 90% 10%, rgba(56, 189, 248, 0.15) 0%, transparent 50%);
    pointer-events: none;
}

.rk-cs-badge {
    display: inline-block;
    background: rgba(56, 189, 248, 0.15);
    border: 1px solid rgba(56, 189, 248, 0.3);
    color: var(--rk-cs-accent);
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 11px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
}

.rk-cs-header h2 {
    font-size: 30px;
    font-weight: 900;
    margin: 0 0 30px 0;
    line-height: 1.2;
    letter-spacing: -0.5px;
}

.rk-cs-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.rk-cs-stat-item {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 18px 20px;
    border-radius: 14px;
    backdrop-filter: blur(8px);
    display: flex;
    flex-direction: column;
}

.rk-cs-stat-item span.label {
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 800;
    margin-bottom: 6px;
    letter-spacing: 0.5px;
}

.rk-cs-stat-item span.value {
    font-size: 18px;
    font-weight: 900;
    color: #ffffff;
}

/* ================= OPIS WYZWANIA ================= */
.rk-cs-body {
    padding: 40px 50px 10px;
    background: #ffffff;
}

.rk-cs-story {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-cs-text);
    margin: 0 0 25px 0;
}

.rk-cs-story a {
    color: var(--rk-cs-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-cs-story a:hover {
    background: #e0f2fe;
    border-color: var(--rk-cs-brand);
}

.rk-cs-author {
    display: inline-flex;
    align-items: center;
    gap: 15px;
    background: #f8fafc;
    border: 1px solid var(--rk-cs-border);
    padding: 15px 25px;
    border-radius: 100px;
    margin-bottom: 30px;
}

.rk-cs-author img {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    object-fit: cover;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}

.rk-cs-author-info p {
    margin: 0;
    font-size: 13px;
    color: var(--rk-cs-text);
    line-height: 1.4;
}

.rk-cs-author-info strong {
    color: var(--rk-cs-dark);
    font-weight: 800;
    display: block;
    font-size: 15px;
}

/* ================= SYMULATOR INTERAKTYWNY ================= */
.rk-cs-interactive {
    padding: 0 50px 45px;
}

.rk-sim-box {
    background: var(--rk-cs-panel);
    border: 1px solid var(--rk-cs-border);
    border-radius: 20px;
    padding: 30px;
}

.rk-sim-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 30px;
    border-bottom: 1px solid #e2e8f0;
    padding-bottom: 20px;
}

.rk-sim-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-cs-dark);
    margin: 0;
}

/* Toggle App Style */
.rk-toggle-app {
    display: flex;
    background: #e2e8f0;
    border-radius: 12px;
    padding: 4px;
    position: relative;
    width: 300px; /* Sztywna szerokość dla stabilności */
}

.rk-toggle-btn {
    flex: 1;
    text-align: center;
    padding: 10px 15px;
    font-size: 12px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    z-index: 2;
    transition: color 0.3s;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    white-space: nowrap; /* Zabezpieczenie przed łamaniem tekstu */
}

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

.rk-toggle-slider {
    position: absolute;
    top: 4px;
    left: 4px;
    height: calc(100% - 8px);
    width: calc(50% - 4px);
    background: var(--rk-cs-passive);
    border-radius: 8px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background 0.4s;
    box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}

/* Dashboard SVG i Wyniki */
.rk-sim-dashboard {
    display: grid;
    grid-template-columns: minmax(240px, 1fr) 1.2fr;
    gap: 25px;
    align-items: stretch;
}

/* SVG Animacje */
.rk-svg-viewport {
    background: #ffffff;
    border: 1px solid var(--rk-cs-border);
    border-radius: 16px;
    padding: 20px;
    position: relative;
    overflow: hidden;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
    display: flex;
    justify-content: center;
    align-items: center;
}

.svg-snow { fill: #bae6fd; animation: snowfall linear infinite; }
.svg-heat-loss { fill: none; stroke-linecap: round; stroke-width: 4; transition: opacity 0.5s, stroke 0.5s; }

/* Stan: Pasywny */
.state-passive .svg-heat-loss { stroke: var(--rk-cs-passive); opacity: 0.2; animation: floatUp 3s infinite ease-in-out; }
.state-passive .svg-wall { stroke: var(--rk-cs-passive); stroke-width: 8; transition: stroke-width 0.5s; }
.state-passive .svg-therm-fill { fill: var(--rk-cs-passive); height: 60px; y: 40; transition: all 0.5s; }

/* Stan: Standard */
.state-standard .svg-heat-loss { stroke: var(--rk-cs-standard); opacity: 1; animation: floatUp 1s infinite ease-in-out; }
.state-standard .svg-wall { stroke: #94a3b8; stroke-width: 4; transition: stroke-width 0.5s; }
.state-standard .svg-therm-fill { fill: var(--rk-cs-standard); height: 90px; y: 10; transition: all 0.5s; }

@keyframes snowfall {
    0% { transform: translateY(-20px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(120px); opacity: 0; }
}

@keyframes floatUp {
    0% { transform: translateY(10px); }
    100% { transform: translateY(-20px); }
}

/* Wyniki (Kafelki) - PANZER CSS (Zabezpieczone przed globalnymi stylami motywu) */
.rk-sim-metrics {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-metric-card {
    background: #ffffff;
    border: 1px solid var(--rk-cs-border);
    padding: 16px 20px;
    border-radius: 14px;
    transition: border-color 0.3s;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    text-align: left;
}

.rk-metric-card h4 {
    margin: 0 0 6px 0;
    font-size: 11px;
    color: var(--rk-cs-text);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    line-height: 1.3;
    word-break: normal;
}

.rk-metric-val {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-cs-dark);
    margin: 0 0 4px 0;
    line-height: 1.1;
    white-space: nowrap; /* Zapobiega łamaniu wartości */
}

.rk-metric-sub {
    font-size: 12px;
    color: #94a3b8;
    font-weight: 600;
    margin: 0;
    line-height: 1.3;
}

.val-highlight { transition: color 0.3s; }
.state-passive .val-highlight { color: var(--rk-cs-passive); }
.state-standard .val-highlight { color: var(--rk-cs-standard); }

/* Responsywność */
@media (max-width: 768px) {
    .rk-cs-header { padding: 35px 25px; }
    .rk-cs-stats { grid-template-columns: 1fr 1fr; }
    .rk-cs-body { padding: 30px 25px 10px; }
    .rk-cs-interactive { padding: 0 25px 35px; }
    .rk-sim-box { padding: 20px; }
    .rk-sim-header { flex-direction: column; gap: 15px; align-items: stretch; text-align: center; }
    .rk-toggle-app { width: 100%; display: flex; }
    .rk-sim-dashboard { grid-template-columns: 1fr; gap: 20px; }
}
@media (max-width: 480px) {
    .rk-sim-metrics { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU"
    },
    "headline": "Case Study: Optymalizacja ogrzewania podłogowego w domu pasywnym (Zakopane)",
    "description": "Inżynieryjna analiza projektu instalacji podłogowej w domu pasywnym w Zakopanem. Zastosowanie pompy ciepła monoblok 3,5 kW, rur PERT i rozstawu 20 cm zaowocowało kosztem 640 PLN rocznie.",
    "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": "2025-03-05",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU#dataset-casestudy",
    "name": "Wyniki OZC i Koszty Eksploatacji - Dom Pasywny Zakopane 2025",
    "description": "Zestawienie parametrów wejściowych i wyników eksploatacyjnych dla budynku o pow. 162m2 zlokalizowanego w III strefie klimatycznej (-20°C).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "koszty ogrzewania pompą ciepła w górach",
      "projekt podłogówki do domu pasywnego",
      "średnia temperatura zasilania podłogówki",
      "rozstaw rur 20 cm ogrzewanie podłogowe",
      "pompa ciepła monoblok 3.5 kW"
    ],
    "measurementTechnique": "Monitoring rzeczywistego zużycia energii elektrycznej pompy ciepła w sezonie grzewczym 2025/2026 w odniesieniu do projektu OZC 1,94 kW.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zapotrzebowanie na moc (OZC): 1,94 kW przy -20°C na zewnątrz.",
        "System: Pompa ciepła monoblok 3,5 kW, rura PERT/AL/PERT 16x2,0 mm.",
        "Parametry zasilania: Średnia sezonowa temperatura Tz = 27,4°C.",
        "Roczny koszt ogrzewania: 640 PLN."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/URL-ARTYKULU#webapp-casestudy",
    "name": "Symulator Efektywności Termicznej (Pasywny vs Standard)",
    "description": "Interaktywny panel zestawiający wizualnie straty ciepła i roczne koszty ogrzewania w ekstremalnych warunkach zimowych dla dwóch standardów budowlanych.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-cs-wrapper" id="case-study-app">
    
    <div class="rk-cs-header">
        <div class="rk-cs-badge">Case Study z placu budowy</div>
        <h2>Inwestycja Stanisława, Zakopane</h2>
        
        <div class="rk-cs-stats">
            <div class="rk-cs-stat-item">
                <span class="label">Termin</span>
                <span class="value">Listopad 2025</span>
            </div>
            <div class="rk-cs-stat-item">
                <span class="label">Lokalizacja</span>
                <span class="value">Strefa III (-20°C)</span>
            </div>
            <div class="rk-cs-stat-item">
                <span class="label">Powierzchnia</span>
                <span class="value">162 m²</span>
            </div>
            <div class="rk-cs-stat-item">
                <span class="label">Wynikowy Koszt</span>
                <span class="value" style="color: var(--rk-cs-accent);">640 PLN / rok</span>
            </div>
        </div>
    </div>

    <div class="rk-cs-body">
        <div class="rk-cs-author">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" loading="lazy">
            <div class="rk-cs-author-info">
                <strong>Robert Kucharski</strong>
                <p>Nadzór Inżynierski HVAC</p>
            </div>
        </div>

        <p class="rk-cs-story">
            W listopadzie 2025 roku zakończyłem nadzór inżynierski nad <a href="https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/">projektem podłogówki do domu pasywnego</a> dla Pana Stanisława w Zakopanem. Wyzwaniem była wymagająca, III strefa klimatyczna. Budynek o powierzchni 162 m² został wykonany w rygorystycznej technologii (ściany U=0,09 W/(m²·K)). Realne zapotrzebowanie na moc grzewczą w najzimniejszym dniu zimy (-20°C) wyniosło zaledwie <strong>1,94 kW</strong> dla całego obiektu.
        </p>
        <p class="rk-cs-story">
            Zastosowaliśmy <a href="https://projekt-ogrzewania.pl/rura-pert-do-ogrzewania-podlogowego/">rurę PERT/AL/PERT</a> 16x2,0 mm w rzadkim, ale tu idealnym <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawie rur 20 cm</a> w strefach bytowych. Zintegrowaliśmy to z automatyką pogodową i <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompą ciepła typu monoblok 3,5 kW</a>. Efekt? <strong>Średnia temperatura zasilania podłogówki</strong> w sezonie wyniosła zaledwie 27,4°C, co zagwarantowało <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/">koszty ogrzewania pompą ciepła w górach</a> na poziomie rewelacyjnych 640 PLN rocznie.
        </p>
    </div>

    <div class="rk-cs-interactive">
        <div class="rk-sim-box state-passive" id="rk-sim-container">
            
            <div class="rk-sim-header">
                <h3 class="rk-sim-title">Symulator Efektywności Termicznej</h3>
                <div class="rk-toggle-app">
                    <div class="rk-toggle-slider" id="rk-toggle-slider"></div>
                    <div class="rk-toggle-btn active" id="btn-passive">Dom Pasywny</div>
                    <div class="rk-toggle-btn" id="btn-standard">Dom Standard</div>
                </div>
            </div>

            <div class="rk-sim-dashboard">
                
                <!-- Wizualizacja SVG (Zima) -->
                <div class="rk-svg-viewport">
                    <svg viewBox="0 0 200 150" style="width:100%; max-width:200px; height:auto;">
                        <!-- Tło / Śnieg (generowany w js) -->
                        <g id="snow-layer"></g>

                        <!-- Budynek -->
                        <path class="svg-wall" d="M 40 130 L 40 70 L 100 30 L 160 70 L 160 130 Z" fill="#f8fafc" stroke-linejoin="round"/>
                        
                        <!-- Rury Grzewcze -->
                        <circle cx="70" cy="120" r="5" fill="#ef4444"/>
                        <circle cx="100" cy="120" r="5" fill="#ef4444"/>
                        <circle cx="130" cy="120" r="5" fill="#ef4444"/>

                        <!-- Uciekające Ciepło -->
                        <path class="svg-heat-loss" d="M 100 80 Q 110 50 100 20"/>
                        <path class="svg-heat-loss" d="M 70 80 Q 80 50 70 20" style="animation-delay: 0.3s;"/>
                        <path class="svg-heat-loss" d="M 130 80 Q 140 50 130 20" style="animation-delay: 0.6s;"/>

                        <!-- Termometr Zewnętrzny (-20C) -->
                        <rect x="10" y="40" width="10" height="60" rx="5" fill="#e2e8f0" stroke="#cbd5e1"/>
                        <rect x="12" y="80" width="6" height="20" rx="3" fill="#3b82f6"/>
                        <text x="15" y="35" font-size="10" font-weight="bold" fill="#3b82f6" text-anchor="middle">-20°C</text>

                        <!-- Termometr Wewnętrzny -->
                        <rect x="175" y="40" width="10" height="60" rx="5" fill="#e2e8f0" stroke="#cbd5e1"/>
                        <rect x="177" y="40" width="6" height="60" rx="3" class="svg-therm-fill"/>
                        <text x="180" y="35" font-size="10" font-weight="bold" fill="#ef4444" text-anchor="middle">21°C</text>
                    </svg>
                </div>

                <!-- Kafelki Wyników z zabezpieczeniem (flex-direction: column) -->
                <div class="rk-sim-metrics">
                    <div class="rk-metric-card">
                        <h4>Moc Projektowa (OZC)</h4>
                        <div class="rk-metric-val val-highlight" id="val-ozc">1.94 kW</div>
                        <div class="rk-metric-sub">Zapotrzebowanie przy -20°C</div>
                    </div>
                    <div class="rk-metric-card">
                        <h4>Śr. Temp. Zasilania</h4>
                        <div class="rk-metric-val val-highlight" id="val-temp">27.4°C</div>
                        <div class="rk-metric-sub">Idealne dla pompy ciepła</div>
                    </div>
                    <div class="rk-metric-card">
                        <h4>Rozstaw Rur PEX/PERT</h4>
                        <div class="rk-metric-val val-highlight" id="val-spacing">co 20 cm</div>
                        <div class="rk-metric-sub">Oszczędność materiału</div>
                    </div>
                    <div class="rk-metric-card">
                        <h4>Roczny Koszt Ogrzewania</h4>
                        <div class="rk-metric-val val-highlight" id="val-cost">640 PLN</div>
                        <div class="rk-metric-sub">W rachunkach za prąd</div>
                    </div>
                </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Domain Lock
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('case-study-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #ef4444;">[ UNAUTHORIZED ACCESS ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Brak licencji na wyświetlanie zawartości.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Moduł Case Study stanowi własność intelektualną Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Generowanie śniegu w SVG
    const snowLayer = document.getElementById('snow-layer');
    let snowHtml = '';
    for(let i=0; i<15; i++) {
        const cx = Math.random() * 200;
        const delay = Math.random() * 3;
        const dur = 2 + Math.random() * 2;
        const r = 1 + Math.random() * 1.5;
        snowHtml += `<circle cx="${cx}" cy="-10" r="${r}" class="svg-snow" style="animation-delay: ${delay}s; animation-duration: ${dur}s;"/>`;
    }
    snowLayer.innerHTML = snowHtml;

    // 3. Logika Przełącznika
    const btnPassive = document.getElementById('btn-passive');
    const btnStandard = document.getElementById('btn-standard');
    const slider = document.getElementById('rk-toggle-slider');
    const container = document.getElementById('rk-sim-container');

    // Wartości DOM
    const valOzc = document.getElementById('val-ozc');
    const valTemp = document.getElementById('val-temp');
    const valSpacing = document.getElementById('val-spacing');
    const valCost = document.getElementById('val-cost');

    function animateValue(element, start, end, suffix, duration) {
        let startTimestamp = null;
        const step = (timestamp) => {
            if (!startTimestamp) startTimestamp = timestamp;
            const progress = Math.min((timestamp - startTimestamp) / duration, 1);
            const easeProgress = progress * (2 - progress);
            const current = start + (end - start) * easeProgress;
            
            if(Number.isInteger(end)) {
                element.textContent = Math.round(current) + suffix;
            } else {
                element.textContent = current.toFixed(2) + suffix;
            }
            
            if (progress < 1) {
                window.requestAnimationFrame(step);
            }
        };
        window.requestAnimationFrame(step);
    }

    btnPassive.addEventListener('click', () => {
        // UI Update
        btnStandard.classList.remove('active');
        btnPassive.classList.add('active');
        slider.style.transform = 'translateX(0)';
        slider.style.background = 'var(--rk-cs-passive)';
        
        container.classList.remove('state-standard');
        container.classList.add('state-passive');

        // Text & Animations
        valSpacing.textContent = 'co 20 cm';
        animateValue(valOzc, 8.5, 1.94, ' kW', 800);
        animateValue(valTemp, 38.0, 27.4, '°C', 800);
        animateValue(valCost, 3200, 640, ' PLN', 1000);
    });

    btnStandard.addEventListener('click', () => {
        // UI Update
        btnPassive.classList.remove('active');
        btnStandard.classList.add('active');
        slider.style.transform = 'translateX(100%)';
        slider.style.background = 'var(--rk-cs-standard)';
        
        container.classList.remove('state-passive');
        container.classList.add('state-standard');

        // Text & Animations
        valSpacing.textContent = 'co 10 cm';
        animateValue(valOzc, 1.94, 8.5, ' kW', 800);
        animateValue(valTemp, 27.4, 38.0, '°C', 800);
        animateValue(valCost, 640, 3200, ' PLN', 1000);
    });
});
</script>



<style>
:root {
    --rk-faq-dark: #0f172a;
    --rk-faq-brand: #0284c7;
    --rk-faq-brand-light: #f0f9ff;
    --rk-faq-accent: #38bdf8;
    --rk-faq-eco: #10b981;
    --rk-faq-warn: #f59e0b;
    --rk-faq-cold: #3b82f6;
    --rk-faq-border: #e2e8f0;
    --rk-faq-text: #475569;
    --rk-faq-bg: #ffffff;
    --rk-faq-panel: #f8fafc;
}

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

/* Nagłówek Sekcji */
.rk-faq-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, var(--rk-faq-dark) 0%, #1e293b 100%);
    text-align: center;
}

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

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

/* Interaktywny Akordeon */
.rk-faq-body {
    padding: 40px 45px;
    background: var(--rk-faq-panel);
}

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

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

/* Przycisk Pytania */
.rk-accordion-btn {
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 24px 30px;
    background: transparent;
    border: none;
    cursor: pointer;
    font-family: inherit;
    text-align: left;
}

.rk-accordion-title {
    font-size: 17px;
    font-weight: 800;
    color: var(--rk-faq-dark);
    line-height: 1.4;
    padding-right: 20px;
    transition: color 0.3s;
}

.rk-accordion-item.active .rk-accordion-title {
    color: var(--rk-faq-brand);
}

.rk-accordion-icon {
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--rk-faq-brand-light);
    color: var(--rk-faq-brand);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.rk-accordion-item.active .rk-accordion-icon {
    transform: rotate(135deg);
    background: var(--rk-faq-brand);
    color: #ffffff;
}

/* Rozwijana Treść */
.rk-accordion-content-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s ease-out;
}

.rk-accordion-item.active .rk-accordion-content-wrapper {
    grid-template-rows: 1fr;
}

.rk-accordion-content {
    overflow: hidden;
}

.rk-accordion-inner {
    padding: 0 30px 30px 30px;
    display: grid;
    grid-template-columns: 1fr 140px;
    gap: 30px;
    align-items: center;
    border-top: 1px dashed transparent;
    transition: border-color 0.4s;
}

.rk-accordion-item.active .rk-accordion-inner {
    border-color: var(--rk-faq-border);
    padding-top: 25px;
}

/* Tekst i Linki SEO */
.rk-faq-text {
    font-size: 15.5px;
    line-height: 1.8;
    color: var(--rk-faq-text);
    margin: 0;
}

.rk-faq-text strong {
    color: var(--rk-faq-dark);
}

.rk-faq-text a {
    color: var(--rk-faq-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    transition: all 0.3s;
}

.rk-faq-text a:hover {
    background: var(--rk-faq-brand-light);
    border-color: var(--rk-faq-brand);
}

/* Mini Infografiki SVG wewnątrz FAQ */
.rk-faq-svg-box {
    width: 100%;
    height: 120px;
    background: #f8fafc;
    border-radius: 12px;
    border: 1px solid var(--rk-faq-border);
    display: flex;
    justify-content: center;
    align-items: center;
}

.rk-faq-svg { width: 80%; height: auto; }

/* Animacje Q1, Q2, Q3 (Istniejące) */
.anim-heat-glow { opacity: 0; transform: translateY(10px); transition: all 0.8s ease; }
.rk-accordion-item.active .anim-heat-glow { opacity: 1; transform: translateY(0); animation: pulseHeat 2s infinite alternate; }

.anim-evoh { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 1s ease-in-out; }
.rk-accordion-item.active .anim-evoh { stroke-dashoffset: 0; }

.anim-panel { transform: translateY(-20px); opacity: 0; transition: all 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); }
.rk-accordion-item.active .anim-panel { transform: translateY(0); opacity: 1; }

/* Animacje Q4, Q5 (Nowe) */
.anim-reku-arrow { opacity: 0; transition: opacity 0.5s; }
.rk-accordion-item.active .anim-reku-arrow { opacity: 1; animation: flowReku 2s infinite linear; }
.anim-flake { transform-origin: center; opacity: 0; transition: opacity 0.5s; }
.rk-accordion-item.active .anim-flake { opacity: 1; animation: spinFlake 4s infinite linear; }

@keyframes pulseHeat {
    0% { filter: drop-shadow(0 -5px 5px rgba(245, 158, 11, 0.2)); }
    100% { filter: drop-shadow(0 -15px 15px rgba(245, 158, 11, 0.6)); }
}
@keyframes flowReku {
    0% { stroke-dashoffset: 20; }
    100% { stroke-dashoffset: 0; }
}
@keyframes spinFlake {
    100% { transform: rotate(360deg); }
}

@media (max-width: 768px) {
    .rk-faq-header, .rk-faq-body { padding: 30px 25px; }
    .rk-accordion-btn { padding: 20px; }
    .rk-accordion-inner { grid-template-columns: 1fr; padding: 0 20px 20px 20px; gap: 20px; }
    .rk-accordion-title { font-size: 15px; }
    .rk-faq-svg-box { height: 100px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Sekcja FAQ – Najczęstsze pytania o podłogówkę w domu pasywnym",
    "description": "Techniczne odpowiedzi eksperta: podłogówka jako jedyne źródło ciepła, rury PEX vs PERT, panele na ogrzewaniu, wpływ rekuperacji oraz chłodzenie płaszczyznowe.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy ogrzewanie podłogowe w domu pasywnym może być jedynym źródłem ciepła?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Absolutnie tak. Kluczem do sukcesu jest profesjonalnie wykonane projektowe obciążenie cieplne (OZC). W domach o ekstremalnie niskim zapotrzebowaniu energetycznym (często poniżej 15 kWh/(m2·rok)), prawidłowo zaprojektowana instalacja ogrzewania płaszczyznowego bez problemu pokryje straty ciepła, nawet gdy temperatura na zewnątrz spada poniżej -20°C."
        }
      },
      {
        "@type": "Question",
        "name": "Jaką rurę do ogrzewania podłogowego wybrać: PEX czy PERT?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "W przypadku domów pasywnych, gdzie zasilanie pompy ciepła oscyluje wokół 28-32°C, rura wielowarstwowa PERT/AL/PERT jest wyborem optymalnym i wystarczającym. Najważniejszym parametrem jest obecność bariery antydyfuzyjnej EVOH zgodnej z normą DIN 4726, która skutecznie blokuje przenikanie tlenu do zładu wody."
        }
      },
      {
        "@type": "Question",
        "name": "Czy można kłaść panele na ogrzewanie podłogowe w domu pasywnym?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Oczywiście, ale wymaga to precyzji projektowej. Całkowity opór cieplny okładziny (paneli wraz z podkładem) nie może przekraczać 0,15 (m2·K)/W. W praktyce najlepiej sprawdzają się cienkie panele winylowe SPC na podłogówkę oraz dedykowane podkłady o dużej gęstości."
        }
      },
      {
        "@type": "Question",
        "name": "Jak wentylacja mechaniczna z rekuperacją współpracuje z podłogówką?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "W budownictwie pasywnym rekuperacja jest niezbędna do prawidłowego działania podłogówki. Eliminując grawitacyjne straty ciepła, drastycznie obniża zapotrzebowanie energetyczne budynku. Pozwala to na obniżenie temperatury zasilania z pompy ciepła, co maksymalizuje współczynnik COP."
        }
      },
      {
        "@type": "Question",
        "name": "Czy ogrzewaniem podłogowym można chłodzić dom pasywny latem?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak, chłodzenie płaszczyznowe przy użyciu rewersyjnej pompy ciepła to świetne rozwiązanie. Wymaga jednak ścisłej kontroli tzw. punktu rosy w ogrzewaniu podłogowym. Automatyka musi dbać o to, by zbyt niska temperatura wody (ok. 18°C) nie wywołała kondensacji wilgoci na posadzce."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-faq",
    "name": "Baza Wiedzy: Parametry Techniczne Podłogówki w Budownictwie Pasywnym",
    "description": "Zestawienie wytycznych instalacyjnych obejmujące ogrzewanie, chłodzenie i współpracę z rekuperatorem.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podłogówka jedyne źródło ciepła zimą",
      "jaką rurę do ogrzewania podłogowego wybrać",
      "bariera antydyfuzyjna EVOH",
      "panele winylowe SPC na podłogówkę",
      "wpływ rekuperacji na ogrzewanie podłogowe",
      "chłodzenie płaszczyznowe podłogówką pompą ciepła",
      "punkt rosy w ogrzewaniu podłogowym"
    ],
    "measurementTechnique": "Weryfikacja parametrów projektowych OZC, wymagań dyfuzyjnych normy DIN 4726, oporu cieplnego R < 0,15 m2K/W oraz kontroli punktu kondensacji pary wodnej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wydajność: Samodzielne pokrycie OZC przy mrozach -20°C.",
        "Technologia rur: PERT vs PEX z warunkiem szczelności tlenowej EVOH.",
        "Rezystancja: Limit izolacyjności podłogi do 0,15 m2K/W.",
        "Efektywność: Obniżenie OZC przez odzysk ciepła z wentylacji.",
        "Chłodzenie: Ochrona okładziny przed wilgocią poprzez kontrolę punktu rosy."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp-faq",
    "name": "Interaktywny Przewodnik Techniczny (FAQ HVAC)",
    "description": "Aplikacja webowa typu akordeon, wzbogacona o dynamicznie renderowane grafiki wektorowe SVG, służąca do edukacji inwestorów w zakresie projektowania nowoczesnych instalacji HVAC.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-faq-container" id="faq-interactive-app">
    
    <div class="rk-faq-header">
        <h2>Sekcja FAQ – Najczęstsze pytania inwestorów</h2>
        <p>Wątpliwości na etapie stanu surowego to norma. Zobacz, jak inżynieria HVAC odpowiada na 5 najważniejszych pytań dotyczących standardu pasywnego.</p>
    </div>

    <div class="rk-faq-body">
        
        <!-- Pytanie 1 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Czy ogrzewanie podłogowe w domu pasywnym może być jedynym źródłem ciepła?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            Absolutnie tak. Kluczem do sukcesu jest profesjonalnie wyliczone <strong><a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne (OZC)</a></strong>. W domach o ekstremalnie niskim zapotrzebowaniu energetycznym (często poniżej 15 kWh na m2 rocznie), prawidłowo zaprojektowana <strong>instalacja ogrzewania płaszczyznowego</strong> bez problemu pokryje straty budynku, nawet gdy temperatura na zewnątrz spada poniżej -20°C. Podłogówka eliminuje konieczność montowania dodatkowych grzejników czy mat elektrycznych, co znacząco obniża koszty inwestycyjne.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <path d="M10 80 L 90 80" stroke="#cbd5e1" stroke-width="4" stroke-linecap="round"/>
                                <circle cx="30" cy="70" r="6" fill="#ef4444"/>
                                <circle cx="50" cy="70" r="6" fill="#ef4444"/>
                                <circle cx="70" cy="70" r="6" fill="#ef4444"/>
                                <!-- Animowana łuna ciepła -->
                                <path class="anim-heat-glow" d="M 20 60 Q 50 10 80 60" fill="none" stroke="#f59e0b" stroke-width="4" stroke-linecap="round"/>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 2 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Jaką rurę do ogrzewania podłogowego wybrać: PEX czy PERT?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            W przypadku domów pasywnych, gdzie zasilanie oscyluje wokół 28-32°C, <strong><a href="https://projekt-ogrzewania.pl/rura-pert-do-ogrzewania-podlogowego/">rura wielowarstwowa PERT/AL/PERT</a></strong> jest wyborem optymalnym. Jej największą zaletą jest wysoka elastyczność i łatwość układania gęstych pętli w porównaniu do sztywniejszych rur <strong><a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">PEX/AL/PEX</a></strong>. Najważniejszym parametrem, na który musisz zwrócić uwagę przed zakupem, jest obecność bariery antydyfuzyjnej EVOH. Zgodnie z normą <strong><a href="https://projekt-ogrzewania.pl/norma-din-4726-w-ogrzewaniu-podlogowym/">DIN 4726</a></strong>, warstwa ta skutecznie blokuje przenikanie cząsteczek tlenu do zładu wody, chroniąc pompę ciepła i stalowe rozdzielacze przed korozją.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <!-- Warstwy rury -->
                                <circle cx="50" cy="50" r="30" fill="none" stroke="#cbd5e1" stroke-width="6"/>
                                <circle cx="50" cy="50" r="24" fill="none" stroke="#94a3b8" stroke-width="4"/>
                                <circle cx="50" cy="50" r="20" fill="none" stroke="#10b981" stroke-width="4" class="anim-evoh"/>
                                <circle cx="50" cy="50" r="16" fill="none" stroke="#e2e8f0" stroke-width="4"/>
                                <text x="50" y="54" font-size="10" font-weight="bold" fill="#0f172a" text-anchor="middle">O2 STOP</text>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 3 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Czy można kłaść panele na ogrzewanie podłogowe w domu pasywnym?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            Oczywiście, ale wymaga to ogromnej precyzji projektowej. Zgodnie z inżynierskimi wytycznymi, całkowity <strong><a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">opór cieplny okładziny (R)</a></strong> (czyli suma oporu paneli i podkładu) nie może przekraczać 0,15 (m2·K)/W. W praktyce instalatorskiej najlepiej sprawdzają się cienkie <strong>panele winylowe SPC na podłogówkę</strong> oraz dedykowane podkłady mineralne o wysokiej gęstości. Pamiętaj, że <strong><a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">zastosowanie grubych paneli laminowanych</a></strong> wymusi podniesienie krzywej grzewczej na piecu o około 2 do 3°C względem płytek gresowych.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <!-- Beton z rurą -->
                                <rect x="10" y="70" width="80" height="20" fill="#cbd5e1" rx="2"/>
                                <circle cx="50" cy="80" r="5" fill="#ef4444"/>
                                <!-- Podkład i Panel -->
                                <g class="anim-panel">
                                    <rect x="10" y="55" width="80" height="6" fill="#f59e0b" opacity="0.8"/>
                                    <rect x="10" y="40" width="80" height="10" fill="#8b5cf6" rx="1"/>
                                    <path d="M 50 35 L 50 15 M 45 20 L 50 15 L 55 20" stroke="#8b5cf6" stroke-width="2" fill="none"/>
                                </g>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 4 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Jak wentylacja z rekuperacją współpracuje z podłogówką?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            W budownictwie pasywnym <strong>wentylacja mechaniczna z odzyskiem ciepła (rekuperacja)</strong> jest systemem nierozerwalnie związanym z niskotemperaturowym ogrzewaniem. Eliminując potężne grawitacyjne straty ciepła (tzw. wywiewanie ciepłego powietrza przez komin), rekuperator drastycznie obniża zapotrzebowanie budynku. Pozytywny <strong><a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">wpływ rekuperacji na ogrzewanie podłogowe</a></strong> polega na tym, że instalacja grzewcza może pracować stabilnie na bardzo niskich parametrach zasilania, co bezpośrednio maksymalizuje wydajność (COP) pompy ciepła.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <!-- Wymiennik -->
                                <polygon points="50,20 80,50 50,80 20,50" fill="none" stroke="#94a3b8" stroke-width="3"/>
                                <!-- Przepływ zimnego -> gorącego -->
                                <path class="anim-reku-arrow" d="M 20 50 L 80 50" stroke="#ef4444" stroke-width="4" stroke-linecap="round" stroke-dasharray="5 5"/>
                                <!-- Przepływ zużytego -> zimnego -->
                                <path class="anim-reku-arrow" d="M 50 20 L 50 80" stroke="#3b82f6" stroke-width="4" stroke-linecap="round" stroke-dasharray="5 5"/>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 5 -->
        <div class="rk-accordion-item">
            <button class="rk-accordion-btn" aria-expanded="false">
                <span class="rk-accordion-title">Czy ogrzewaniem podłogowym można skutecznie chłodzić dom latem?</span>
                <div class="rk-accordion-icon">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg>
                </div>
            </button>
            <div class="rk-accordion-content-wrapper">
                <div class="rk-accordion-content">
                    <div class="rk-accordion-inner">
                        <p class="rk-faq-text">
                            Tak, <strong>chłodzenie płaszczyznowe podłogówką</strong> przy użyciu rewersyjnej pompy ciepła to doskonałe, darmowe źródło komfortu na upalne dni. Instalacja tłoczy wtedy w posadzkę wodę o temperaturze około 18-20°C. Głównym wyzwaniem inżynieryjnym jest jednak ominięcie <strong><a href="https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/">punktu rosy w ogrzewaniu podłogowym</a></strong>. Zbyt niska temperatura czynnika doprowadzi do kondensacji i wytrącenia się kropel wody na posadzce. Wymaga to integracji odpowiednich termostatów ściennych z czujnikami wilgotności.
                        </p>
                        <div class="rk-faq-svg-box">
                            <svg class="rk-faq-svg" viewBox="0 0 100 100">
                                <rect x="10" y="80" width="80" height="10" fill="#cbd5e1" rx="2"/>
                                <circle cx="50" cy="85" r="3" fill="#3b82f6"/> <!-- Zimna woda -->
                                <!-- Płatek śniegu obracający się -->
                                <g class="anim-flake" stroke="#3b82f6" stroke-width="2" stroke-linecap="round">
                                    <line x1="50" y1="20" x2="50" y2="60" />
                                    <line x1="30" y1="40" x2="70" y2="40" />
                                    <line x1="35" y1="25" x2="65" y2="55" />
                                    <line x1="35" y1="55" x2="65" y2="25" />
                                </g>
                            </svg>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe bez użycia H-tagów
    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('faq-interactive-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; border: 2px solid #0284c7; border-radius: 16px; font-family: monospace;">
                    <div style="font-size: 32px; margin-bottom: 15px; color: #0284c7;">[ MODULE LOCKED ]</div>
                    <div style="font-size: 14px; font-weight: bold; color: #cbd5e1; margin-bottom: 10px;">
                        Autoryzacja domeny nie powiodła się.
                    </div>
                    <div style="color: #64748b; font-size: 12px; line-height: 1.5;">
                        Aplikacja interaktywnego FAQ jest przypisana do licencji Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Akordeonu (Z jednym otwartym na raz)
    const accordionItems = document.querySelectorAll('.rk-accordion-item');

    accordionItems.forEach(item => {
        const btn = item.querySelector('.rk-accordion-btn');
        
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');

            // Zamknij inne
            accordionItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.rk-accordion-btn').setAttribute('aria-expanded', 'false');
            });

            // Przełącz
            if (!isActive) {
                item.classList.add('active');
                btn.setAttribute('aria-expanded', 'true');
            }
        });
    });

    // Otwarcie pierwszego
    if(accordionItems.length > 0) {
        accordionItems[0].classList.add('active');
        accordionItems[0].querySelector('.rk-accordion-btn').setAttribute('aria-expanded', 'true');
    }
});
</script>



<style>
:root {
    --rk-pas-dark: #0f172a;
    --rk-pas-brand: #2563eb;
    --rk-pas-brand-light: #eff6ff;
    --rk-pas-eco: #059669;
    --rk-pas-eco-light: #ecfdf5;
    --rk-pas-warn: #dc2626;
    --rk-pas-warn-light: #fef2f2;
    --rk-pas-text: #334155;
    --rk-pas-border: #cbd5e1;
    --rk-pas-bg: #ffffff;
}

.rk-pas-container {
    max-width: 900px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, sans-serif;
    background: var(--rk-pas-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(37, 99, 235, 0.1);
    border: 1px solid #e2e8f0;
    overflow: hidden;
}

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

.rk-pas-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    color: #f8fafc;
    line-height: 1.3;
}

.rk-pas-quote {
    font-size: 18px;
    font-style: italic;
    color: #94a3b8;
    max-width: 700px;
    margin: 0 auto;
    line-height: 1.6;
}

.rk-pas-quote strong {
    color: #38bdf8;
    font-weight: 700;
}

/* Interfejs Przełącznika */
.rk-pas-interactive {
    padding: 40px 30px;
    background: #f8fafc;
    border-bottom: 1px solid var(--rk-pas-border);
}

.rk-pas-controls {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 20px;
    margin-bottom: 30px;
}

.rk-pas-controls h3 {
    margin: 0;
    font-size: 20px;
    color: var(--rk-pas-dark);
}

/* Toggle Switch w stylu App */
.rk-toggle-wrapper {
    display: flex;
    align-items: center;
    gap: 15px;
    background: #fff;
    padding: 10px 20px;
    border-radius: 99px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
    border: 1px solid var(--rk-pas-border);
}

.rk-toggle-label {
    font-weight: 700;
    font-size: 15px;
    color: #64748b;
    transition: color 0.3s;
}

.rk-toggle-label.active-warn { color: var(--rk-pas-warn); }
.rk-toggle-label.active-eco { color: var(--rk-pas-eco); }

.rk-switch {
    position: relative;
    width: 64px;
    height: 32px;
    background: var(--rk-pas-warn);
    border-radius: 32px;
    cursor: pointer;
    transition: background 0.4s;
}

.rk-switch.pro-mode {
    background: var(--rk-pas-eco);
}

.rk-switch-thumb {
    position: absolute;
    top: 4px;
    left: 4px;
    width: 24px;
    height: 24px;
    background: #fff;
    border-radius: 50%;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

.rk-switch.pro-mode .rk-switch-thumb {
    transform: translateX(32px);
}

/* Wyświetlacz i SVG */
.rk-pas-display {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: center;
    background: #fff;
    padding: 30px;
    border-radius: 16px;
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.05);
}

.rk-svg-stage {
    width: 100%;
    max-width: 250px;
    margin: 0 auto;
    display: block;
}

/* Animacje SVG */
.wave-path {
    fill: none;
    stroke-width: 4;
    stroke-linecap: round;
    transition: stroke 0.5s, transform 0.5s;
}

.state-error .wave-path { stroke: var(--rk-pas-warn); animation: overheat 0.8s infinite alternate; }
.state-pro .wave-path { stroke: var(--rk-pas-eco); animation: stableHeat 3s infinite linear; }

@keyframes overheat {
    0% { transform: translateY(0) scaleY(1); opacity: 0.8; }
    100% { transform: translateY(-10px) scaleY(1.2); opacity: 1; }
}

@keyframes stableHeat {
    0% { transform: translateY(0); opacity: 0.6; }
    50% { transform: translateY(-5px); opacity: 0.9; }
    100% { transform: translateY(0); opacity: 0.6; }
}

.house-outline {
    fill: none;
    stroke: var(--rk-pas-dark);
    stroke-width: 3;
    stroke-linejoin: round;
}

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

.rk-data-card {
    background: #f8fafc;
    border: 1px solid var(--rk-pas-border);
    padding: 15px;
    border-radius: 12px;
    text-align: center;
    transition: all 0.3s;
}

.rk-data-card h4 {
    margin: 0 0 5px 0;
    font-size: 13px;
    color: #64748b;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-data-card .rk-value {
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-pas-dark);
    margin-bottom: 5px;
}

.rk-data-card p {
    margin: 0;
    font-size: 12px;
    color: var(--rk-pas-text);
}

/* CTA */
.rk-pas-cta {
    padding: 40px 30px;
    text-align: center;
    background: #fff;
}

.rk-pas-cta p {
    font-size: 16px;
    color: var(--rk-pas-text);
    max-width: 650px;
    margin: 0 auto 25px;
    line-height: 1.6;
}

.rk-pas-cta a {
    color: var(--rk-pas-brand);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.rk-btn {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    background: var(--rk-pas-brand);
    color: #ffffff !important; /* Wymuszony biały kolor tekstu i ikony */
    padding: 16px 32px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 16px;
    text-decoration: none !important;
    transition: all 0.3s;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.4);
}

.rk-btn:hover {
    background: #1d4ed8;
    color: #ffffff !important; /* Zabezpieczenie przed zmianą koloru po najechaniu */
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(37, 99, 235, 0.5);
}

@media (max-width: 768px) {
    .rk-pas-display { grid-template-columns: 1fr; text-align: center; }
    .rk-data-grid { grid-template-columns: 1fr; }
    .rk-toggle-wrapper { flex-direction: column; gap: 10px; border-radius: 16px; padding: 15px; }
    .rk-switch { transform: rotate(90deg); margin: 10px 0; }
    .rk-pas-header h2 { font-size: 24px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Podsumowanie: Precyzja to Twój największy zysk w budownictwie pasywnym",
    "description": "Zrozum różnicę między intuicyjnym montażem a precyzyjnym inżynierskim projektem instalacji grzewczej. Optymalizacja rozstawu rur i izolacji EPS 200.",
    "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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset",
    "name": "Porównanie Parametrów: System Pasywny vs Błędy Wykonawcze",
    "description": "Baza danych przedstawiająca realne skutki przewymiarowania instalacji podłogowej, w tym nadmierne temperatury zasilania i koszty eksploatacyjne.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projekt ogrzewania podłogowego dom pasywny",
      "rozstaw rur 15 cm a 10 cm",
      "grubość styropianu EPS 200",
      "temperatura zasilania pompy ciepła",
      "obliczenia OZC dla podłogówki"
    ],
    "measurementTechnique": "Analiza symulacyjna oparta na normie PN-EN 12831 wykazująca różnice w temperaturze zasilania i stabilności cieplnej podłogi.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rozstaw rur 10 cm: Powoduje nadmiar mocy, przegrzewanie i niepotrzebne koszty rur.",
        "Rozstaw rur 15-20 cm: Wymaga projektu, zapewnia niskie zasilanie (do 32°C) i stabilną pracę pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#webapp",
    "name": "Interaktywny Symulator Komfortu Pasywnego",
    "description": "Narzędzie internetowe demonstrujące wpływ precyzyjnego inżynierskiego rozstawu rur i izolacji na parametry pracy instalacji ogrzewania podłogowego.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-pas-container" id="pasywny-sum-app">
    
    <div class="rk-pas-header">
        <h2>Efektywność wymaga inżynierskiej precyzji</h2>
        <p class="rk-pas-quote">
            W domu pasywnym instalacja grzewcza ma być niemal "niewidoczna" dla zmysłów i portfela. <strong>Zbyt gęsty rozstaw rur i wysoka temperatura zasilania to najszybsza droga do katastrofy termicznej.</strong>
        </p>
    </div>

    <div class="rk-pas-interactive">
        <div class="rk-pas-controls">
            <h3>Sprawdź wpływ projektu na działanie instalacji</h3>
            <div class="rk-toggle-wrapper">
                <span class="rk-toggle-label active-warn" id="lbl-amateur">Wykonawstwo "Na oko"</span>
                <div class="rk-switch" id="pas-toggle">
                    <div class="rk-switch-thumb"></div>
                </div>
                <span class="rk-toggle-label" id="lbl-pro">Projekt Inżynierski (OZC)</span>
            </div>
        </div>

        <div class="rk-pas-display">
            <!-- Animacja SVG -->
            <div class="rk-svg-container state-error" id="svg-state">
                <svg class="rk-svg-stage" viewBox="0 0 200 200">
                    <!-- Podstawa / Wylewka -->
                    <rect x="20" y="160" width="160" height="20" fill="#cbd5e1" rx="4"/>
                    <!-- Rury (dynamiczne wypełnienie w JS) -->
                    <g id="svg-pipes">
                        <circle cx="50" cy="170" r="6" fill="#ef4444"/>
                        <circle cx="80" cy="170" r="6" fill="#ef4444"/>
                        <circle cx="110" cy="170" r="6" fill="#ef4444"/>
                        <circle cx="140" cy="170" r="6" fill="#ef4444"/>
                    </g>
                    <!-- Fale Ciepła -->
                    <path class="wave-path" d="M 50 140 Q 60 100 50 60" />
                    <path class="wave-path" d="M 100 140 Q 110 100 100 60" style="animation-delay: 0.2s" />
                    <path class="wave-path" d="M 150 140 Q 160 100 150 60" style="animation-delay: 0.4s" />
                    <!-- Zarys Domu -->
                    <path class="house-outline" d="M 20 160 L 20 80 L 100 20 L 180 80 L 180 160" />
                </svg>
            </div>

            <!-- Dynamiczne Dane -->
            <div class="rk-data-grid">
                <div class="rk-data-card" id="card-spacing">
                    <h4>Rozstaw Rur</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">co 10 cm</div>
                    <p>Zbędny wydatek na materiał, trudne rotametrowanie.</p>
                </div>
                <div class="rk-data-card" id="card-temp">
                    <h4>Temp. Zasilania</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">> 40°C</div>
                    <p>Spadek COP pompy ciepła, przegrzewanie salonu.</p>
                </div>
                <div class="rk-data-card" id="card-eps">
                    <h4>Izolacja Posadzki</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">EPS 100</div>
                    <p>Niewystarczający opór cieplny do gruntu.</p>
                </div>
                <div class="rk-data-card" id="card-cost">
                    <h4>Koszty Roczne</h4>
                    <div class="rk-value" style="color: var(--rk-pas-warn);">Wyższe o 35%</div>
                    <p>Energia tracona przez niestabilność układu.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-pas-cta">
        <p>
            Decyzja o <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstawie rur co 10 czy 15 cm</a> oraz doborze grubości <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">styropianu EPS podłogowego</a> nie może być dziełem przypadku. W standardzie pasywnym nawet <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">niska temperatura zasilania (rzędu 30-35°C)</a> wymaga idealnego zbilansowania w dokumentacji.
        </p>
        <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/" class="rk-btn">
            ZAMÓW PROJEKT OGRZEWANIA DO DOMU PASYWNEGO
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
        </a>
    </div>

</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Anti-Theft)
    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('pasywny-sum-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 20px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 20px;">🛡️</div>
                    <div style="font-size: 20px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Ochrona Własności Intelektualnej</div>
                    <div style="font-size: 15px; color: #cbd5e1; max-width: 550px; margin: 0 auto; line-height: 1.6;">
                        Kontener interaktywny i warstwa JSON-LD należą do portalu Projekt-Ogrzewania.pl. Uruchomienie skryptu na tej domenie zostało zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Toggle)
    const toggle = document.getElementById('pas-toggle');
    const lblAmateur = document.getElementById('lbl-amateur');
    const lblPro = document.getElementById('lbl-pro');
    const svgState = document.getElementById('svg-state');
    const svgPipes = document.getElementById('svg-pipes');
    
    // Kafelki
    const cardSpacing = document.getElementById('card-spacing');
    const cardTemp = document.getElementById('card-temp');
    const cardEps = document.getElementById('card-eps');
    const cardCost = document.getElementById('card-cost');

    let isPro = false;

    toggle.addEventListener('click', () => {
        isPro = !isPro;
        
        if(isPro) {
            // Styl przełącznika
            toggle.classList.add('pro-mode');
            lblAmateur.classList.remove('active-warn');
            lblPro.classList.add('active-eco');
            
            // Styl SVG
            svgState.classList.remove('state-error');
            svgState.classList.add('state-pro');
            svgPipes.innerHTML = `
                <circle cx="60" cy="170" r="6" fill="#059669"/>
                <circle cx="100" cy="170" r="6" fill="#059669"/>
                <circle cx="140" cy="170" r="6" fill="#059669"/>
            `; // 3 rury zamiast 4 (szerszy rozstaw)

            // Aktualizacja Danych
            updateCard(cardSpacing, 'co 15-20 cm', 'var(--rk-pas-eco)', 'Idealny balans zysków ciepła i oporów.');
            updateCard(cardTemp, '28°C - 32°C', 'var(--rk-pas-eco)', 'Optymalny COP dla pomp ciepła i komfortu.');
            updateCard(cardEps, 'EPS 200', 'var(--rk-pas-eco)', 'Minimalne straty do gruntu (R > 6,0).');
            updateCard(cardCost, 'Zoptymalizowane', 'var(--rk-pas-eco)', 'Grzanie ciągłe, bez zjawiska taktowania sprężarki.');
            
        } else {
            // Styl przełącznika
            toggle.classList.remove('pro-mode');
            lblPro.classList.remove('active-eco');
            lblAmateur.classList.add('active-warn');

            // Styl SVG
            svgState.classList.remove('state-pro');
            svgState.classList.add('state-error');
            svgPipes.innerHTML = `
                <circle cx="50" cy="170" r="6" fill="#ef4444"/>
                <circle cx="80" cy="170" r="6" fill="#ef4444"/>
                <circle cx="110" cy="170" r="6" fill="#ef4444"/>
                <circle cx="140" cy="170" r="6" fill="#ef4444"/>
            `; // 4 rury (gęsty rozstaw)

            // Aktualizacja Danych
            updateCard(cardSpacing, 'co 10 cm', 'var(--rk-pas-warn)', 'Zbędny wydatek na materiał, trudne rotametrowanie.');
            updateCard(cardTemp, '> 40°C', 'var(--rk-pas-warn)', 'Spadek COP pompy ciepła, przegrzewanie salonu.');
            updateCard(cardEps, 'EPS 100', 'var(--rk-pas-warn)', 'Niewystarczający opór cieplny do gruntu.');
            updateCard(cardCost, 'Wyższe o 35%', 'var(--rk-pas-warn)', 'Energia tracona przez niestabilność układu.');
        }
    });

    function updateCard(card, valueText, color, descText) {
        const valElement = card.querySelector('.rk-value');
        const descElement = card.querySelector('p');
        
        valElement.style.opacity = '0';
        descElement.style.opacity = '0';
        
        setTimeout(() => {
            valElement.textContent = valueText;
            valElement.style.color = color;
            descElement.textContent = descText;
            
            valElement.style.opacity = '1';
            descElement.style.opacity = '1';
        }, 150);
    }
});
</script>



<style>
:root {
    --dl-pas-primary: #0f172a;
    --dl-pas-accent: #10b981; /* Szmaragdowa zieleń - Eco/Pasywny */
    --dl-pas-accent-dark: #047857;
    --dl-pas-bg: #f8fafc;
    --dl-pas-border: #e2e8f0;
    --dl-pas-text: #334155;
    --dl-pas-white: #ffffff;
    --dl-pas-muted: #64748b;
}

.rk-pas-dl-container {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--dl-pas-white);
    border-radius: 24px;
    border: 1px solid var(--dl-pas-border);
    box-shadow: 0 25px 50px -12px rgba(16, 185, 129, 0.15);
    overflow: hidden;
    box-sizing: border-box;
}

.rk-pas-dl-container * {
    box-sizing: inherit;
}

/* NAGŁÓWEK SEKCI */
.dl-pas-header {
    background: linear-gradient(135deg, var(--dl-pas-primary) 0%, #1e293b 100%);
    padding: 45px 50px;
    color: var(--dl-pas-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    overflow: hidden;
}

/* Subtelny wzór geometryczny w tle nagłówka */
.dl-pas-header::before {
    content: '';
    position: absolute;
    top: -50%; right: -10%;
    width: 300px; height: 300px;
    background: radial-gradient(circle, rgba(16, 185, 129, 0.15) 0%, transparent 70%);
    border-radius: 50%;
    pointer-events: none;
}

.dl-pas-header-content { position: relative; z-index: 2; max-width: 65%; }

.dl-pas-badge {
    display: inline-block;
    background: rgba(16, 185, 129, 0.2);
    border: 1px solid rgba(16, 185, 129, 0.4);
    color: #6ee7b7;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 11px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.dl-pas-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 12px 0;
    line-height: 1.2;
    letter-spacing: -0.5px;
}

.dl-pas-header p {
    font-size: 16px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.6;
}

/* WIZUALIZACJA PDF / IKONA */
.dl-pas-header-visual {
    position: relative;
    z-index: 2;
}

.dl-pas-pdf-icon {
    width: 90px;
    height: auto;
    filter: drop-shadow(0 15px 25px rgba(0,0,0,0.4));
    animation: floatPasIcon 3.5s infinite ease-in-out alternate;
}

@keyframes floatPasIcon {
    from { transform: translateY(0) rotate(0deg); }
    to { transform: translateY(-12px) rotate(-3deg); }
}

/* GŁÓWNY WORKSPACE */
.dl-pas-workspace {
    display: flex;
    padding: 40px 50px;
    gap: 40px;
    background: var(--dl-pas-white);
    align-items: center;
}

.dl-pas-preview {
    flex: 1;
    background: var(--dl-pas-bg);
    border: 1px solid var(--dl-pas-border);
    border-radius: 16px;
    padding: 12px;
    position: relative;
    cursor: zoom-in;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.4s;
}

.dl-pas-preview:hover {
    transform: scale(1.03) translateY(-5px);
    box-shadow: 0 20px 30px -10px rgba(16, 185, 129, 0.15);
}

.dl-pas-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}

.dl-pas-zoom-hint {
    position: absolute;
    bottom: 25px;
    right: 25px;
    background: rgba(15, 23, 42, 0.85);
    color: white;
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 700;
    backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    gap: 6px;
    pointer-events: none;
}

.dl-pas-info {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.dl-pas-list {
    list-style: none;
    padding: 0;
    margin: 0 0 35px 0;
}

.dl-pas-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 16px;
    font-size: 15px;
    font-weight: 600;
    color: var(--dl-pas-text);
    line-height: 1.5;
}

.dl-pas-check {
    width: 22px;
    height: 22px;
    color: var(--dl-pas-accent);
    flex-shrink: 0;
    margin-top: 2px;
}

/* PRZYCISK POBIERANIA */
.dl-pas-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--dl-pas-accent);
    color: var(--dl-pas-white) !important;
    text-decoration: none !important;
    padding: 18px 32px;
    border-radius: 14px;
    font-weight: 800;
    font-size: 16px;
    transition: all 0.3s;
    box-shadow: 0 10px 20px -5px rgba(16, 185, 129, 0.4);
    border: 2px solid transparent;
}

.dl-pas-btn:hover {
    background: var(--dl-pas-accent-dark);
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(16, 185, 129, 0.6);
    border-color: #6ee7b7;
}

.dl-pas-btn svg {
    transition: transform 0.3s;
}

.dl-pas-btn:hover svg {
    transform: translateY(3px);
}

/* STOPKA MODUŁU I SEO */
.dl-pas-footer {
    padding: 25px 50px;
    background: var(--dl-pas-bg);
    border-top: 1px solid var(--dl-pas-border);
}

.dl-pas-seo-text {
    font-size: 14px;
    color: var(--dl-pas-muted);
    line-height: 1.6;
    margin: 0 0 15px 0;
}

.dl-pas-seo-text strong {
    color: var(--dl-pas-primary);
}

.dl-pas-footer a {
    color: var(--dl-pas-accent-dark);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px solid transparent;
    transition: border-color 0.3s;
}

.dl-pas-footer a:hover {
    border-color: var(--dl-pas-accent-dark);
}

.dl-pas-copyright {
    font-size: 12px;
    color: #94a3b8;
    text-align: center;
    margin: 0;
    padding-top: 15px;
    border-top: 1px dashed #cbd5e1;
}

@media (max-width: 800px) {
    .dl-pas-header { flex-direction: column; text-align: center; padding: 35px 25px; }
    .dl-pas-header-content { max-width: 100%; margin-bottom: 30px; }
    .dl-pas-workspace { flex-direction: column; padding: 35px 25px; gap: 30px; }
    .dl-pas-footer { padding: 25px; }
    .dl-pas-btn { width: 100%; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/"
    },
    "headline": "Jak osiągnąć maksymalną efektywność energetyczną? Infografika dla domów pasywnych",
    "description": "Pobierz inżynierski schemat projektowania ogrzewania podłogowego. Dowiedz się, jak połączyć rekuperację z pompą ciepła i zredukować zużycie energii o 90%.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.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-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#dataset-pasywny",
    "name": "Parametry techniczne ogrzewania w standardzie pasywnym",
    "description": "Zestawienie zużycia energii, optymalnych temperatur zasilania pompy ciepła oraz krytycznych błędów projektowych w budownictwie pasywnym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "zapotrzebowanie na energię w domu pasywnym",
      "temperatura zasilania pompy ciepła w domu pasywnym",
      "współpraca podłogówki z rekuperacją",
      "błędy w projektowaniu ogrzewania podłogowego",
      "temperatura podłogi norma"
    ],
    "measurementTechnique": "Analiza porównawcza zużycia energii (kWh/m²) dla domów tradycyjnych i pasywnych oraz kalibracja krzywej grzewczej pompy ciepła.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zapotrzebowanie energetyczne: Spadek z 80-120 kWh/m² do 5-15 kWh/m² rocznie.",
        "Parametry zasilania: Optymalny zakres 26-32°C dla maksymalnego COP pompy ciepła.",
        "Krytyczne błędy: Przewymiarowanie mocy pompy, słaba izolacja krawędziowa, brak bilansu cieplnego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/#download-hub-pasywny",
    "name": "Centrum Pobierania: Standard Pasywny",
    "description": "Interaktywny moduł pozwalający na podgląd w wysokiej rozdzielczości oraz pobranie technicznej infografiki w formacie PDF.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-pas-dl-container" id="app-pas-dl">
    
    <div class="dl-pas-header">
        <div class="dl-pas-header-content">
            <div class="dl-pas-badge">Kompendium Inżynierskie</div>
            <h2>Ogrzewanie w Domu Pasywnym</h2>
            <p>Pobierz autorską infografikę i uniknij najdroższych błędów instalacyjnych. Poznaj parametry, które redukują koszty eksploatacji nawet o 90%.</p>
        </div>
        <div class="dl-pas-header-visual">
            <svg class="dl-pas-pdf-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M14 2H6C4.89543 2 4 2.89543 4 4V20C4 21.1046 4.89543 22 6 22H18C19.1046 22 20 21.1046 20 20V8L14 2Z" fill="#10b981" stroke="#ffffff" stroke-width="1.5"/>
                <path d="M14 2V8H20" fill="#6ee7b7" stroke="#ffffff" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
                <text x="6.5" y="17" fill="white" font-size="6" font-weight="900" font-family="sans-serif">PDF</text>
            </svg>
        </div>
    </div>

    <div class="dl-pas-workspace">
        
        <div class="dl-pas-preview" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.webp', '_blank')" role="button" aria-label="Powiększ infografikę">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.webp" alt="Infografika: Projektowanie ogrzewania podłogowego w domach pasywnych" class="dl-pas-img" loading="lazy">
            <div class="dl-pas-zoom-hint">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="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 grafikę
            </div>
        </div>

        <div class="dl-pas-info">
            <ul class="dl-pas-list">
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span>Analiza porównawcza zużycia energii: <strong>Dom Tradycyjny vs Pasywny</strong>.</span>
                </li>
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span>Zestawienie optymalnych temperatur (zasilanie: 26-32°C).</span>
                </li>
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span>Czarna lista: <strong>Krytyczne błędy</strong> (taktowanie pompy, słaba izolacja).</span>
                </li>
                <li class="dl-pas-item">
                    <svg class="dl-pas-check" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span>Wpływ rekuperacji na obniżenie kosztów eksploatacji.</span>
                </li>
            </ul>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowanie-ogrzewania-podlogowego-w-domach-pasywnych.pdf" class="dl-pas-btn" target="_blank" rel="noopener">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="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="dl-pas-footer">
        <p class="dl-pas-seo-text">
            Inwestorzy planujący nowoczesną budowę często pytają, jak wyeliminować błędy u samego źródła. Nasza infografika pokazuje, jak prawidłowo zestawić <strong>niskie zapotrzebowanie na energię w domu pasywnym</strong> (zaledwie 5-15 kWh/m² rocznie) z precyzyjną pracą systemu grzewczego. Dowiesz się z niej, dlaczego <strong>temperatura zasilania pompy ciepła w domu pasywnym</strong> nie powinna przekraczać 32°C oraz jak niezbędna jest <strong>współpraca podłogówki z rekuperacją</strong>.
        </p>
        <p class="dl-pas-seo-text">
            Chcesz uniknąć ryzyka, że Twoja pompa ciepła będzie ulegać taktowaniu? Zadbaj o precyzję przed rozpoczęciem prac. <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zleć profesjonalny projekt OZC i ogrzewania podłogowego</a> naszym inżynierom.
        </p>
        <p class="dl-pas-copyright">
            © 2026 Projekt-Ogrzewania.pl | Udostępnianie materiałów edukacyjnych dozwolone z zachowaniem linku do źródła.
        </p>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // --- OCHRONA DOMENOWA (Brak nagłówków H-tag w alercie) ---
    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-pas-dl');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fef2f2; border: 2px solid #ef4444; 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: #991b1b; margin-bottom: 10px; text-transform: uppercase;">Odmowa Dostępu</div>
                    <p style="color: #b91c1c; font-size: 14px; margin: 0; line-height: 1.5;">Moduł "Centrum Pobierania" oraz załączone pliki PDF są własnością intelektualną Projekt-Ogrzewania.pl. Uruchomienie na nieautoryzowanej domenie zostało zablokowane.</p>
                </div>
            `;
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowanie-ogrzewania-podlogowego-w-domach-pasywnych/">Projektowanie ogrzewania podłogowego w domach pasywnych.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Maksymalna długość pętli ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/</link>
					<comments>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 05 Feb 2025 20:55:07 +0000</pubDate>
				<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Hydraulika]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></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[Technologie budowlane]]></category>
		<category><![CDATA[długość pętli grzewczej]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[pętla ogrzewania podłogowego]]></category>
		<category><![CDATA[pex 16 mm]]></category>
		<category><![CDATA[pex 20 mm]]></category>
		<category><![CDATA[pompa obiegowa]]></category>
		<category><![CDATA[projektowanie ogrzewania]]></category>
		<category><![CDATA[równoważenie hydrauliczne]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2095</guid>

					<description><![CDATA[<p>Planujesz montaż ogrzewania podłogowego? Maksymalna długość pętli ogrzewania podłogowego to parametr, od którego zależy komfort cieplny i oszczędność energii. Zbyt długa pętla powoduje zimne strefy na podłodze, przeciąża pompę i zwiększa rachunki. W artykule wyjaśniamy, jak dobrać optymalną długość rur PEX 16 mm i 20 mm, jak obliczyć wydajność pompy oraz dlaczego izolacja podłogi jest kluczowa. Poznaj praktyczne przykłady, wzory i błędy, których warto uniknąć, by system działał sprawnie przez lata!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">Maksymalna długość pętli ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-loop-guide {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-navy-2: #0c2d40;
    --rk-blue: #078fbe;
    --rk-cyan: #27c8d9;
    --rk-cyan-soft: #e9fbff;
    --rk-orange: #ff6f3d;
    --rk-orange-soft: #fff1eb;
    --rk-green: #17846d;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #e7ad2f;
    --rk-yellow-soft: #fff8df;
    --rk-red: #d94b3d;
    --rk-red-soft: #fff0ee;
    --rk-purple: #695ac9;
    --rk-purple-soft: #f1efff;
    --rk-ink: #1f2c37;
    --rk-text: #475967;
    --rk-muted: #6b7e8a;
    --rk-line: #d5e4eb;
    --rk-soft: #f4f9fb;
    --rk-white: #ffffff;
    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-loop-guide,
  #rk-loop-guide * {
    box-sizing: border-box;
  }

  #rk-loop-guide img,
  #rk-loop-guide svg {
    max-width: 100%;
  }

  #rk-loop-guide a {
    color: var(--rk-blue);
    text-decoration-thickness: 1.5px;
    text-underline-offset: 3px;
  }

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

  #rk-loop-guide button,
  #rk-loop-guide input,
  #rk-loop-guide select,
  #rk-loop-guide label,
  #rk-loop-guide summary,
  #rk-loop-guide a {
    font: inherit;
  }

  #rk-loop-guide button,
  #rk-loop-guide input,
  #rk-loop-guide select,
  #rk-loop-guide summary,
  #rk-loop-guide a {
    outline-offset: 3px;
  }

  #rk-loop-guide .rk-loop-shell {
    overflow: hidden;
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-radius: 30px;
    box-shadow: 0 24px 70px rgba(16, 37, 54, 0.11);
  }

  #rk-loop-guide .rk-loop-hero {
    position: relative;
    overflow: hidden;
    padding: 68px 58px 62px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 88% 18%, rgba(39, 200, 217, 0.26) 0, rgba(39, 200, 217, 0) 34%),
      linear-gradient(135deg, var(--rk-dark) 0%, var(--rk-navy) 58%, #175269 100%);
  }

  #rk-loop-guide .rk-loop-hero::before,
  #rk-loop-guide .rk-loop-hero::after {
    position: absolute;
    border-radius: 999px;
    content: "";
    pointer-events: none;
  }

  #rk-loop-guide .rk-loop-hero::before {
    top: -110px;
    right: -85px;
    width: 330px;
    height: 330px;
    border: 34px solid rgba(255, 255, 255, 0.055);
  }

  #rk-loop-guide .rk-loop-hero::after {
    right: 80px;
    bottom: -145px;
    width: 290px;
    height: 290px;
    border: 2px solid rgba(39, 200, 217, 0.35);
  }

  #rk-loop-guide .rk-loop-hero-inner {
    position: relative;
    z-index: 1;
    max-width: 910px;
  }

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

  #rk-loop-guide .rk-loop-eyebrow {
    color: #8af2ff;
  }

  #rk-loop-guide .rk-loop-eyebrow b {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--rk-orange);
    box-shadow: 0 0 0 6px rgba(255, 111, 61, 0.14);
  }

  #rk-loop-guide .rk-loop-hero-title {
    max-width: 860px;
    margin: 0;
    color: var(--rk-white);
    font-size: clamp(2.15rem, 5vw, 4.15rem);
    font-weight: 920;
    letter-spacing: -0.055em;
    line-height: 1.02;
  }

  #rk-loop-guide .rk-loop-hero-lead {
    max-width: 820px;
    margin: 25px 0 0;
    color: #d8edf5;
    font-size: 1.12rem;
    line-height: 1.72;
  }

  #rk-loop-guide .rk-loop-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 12px 22px;
    margin-top: 29px;
    color: #b9d7e2;
    font-size: 0.84rem;
    font-weight: 700;
  }

  #rk-loop-guide .rk-loop-meta span {
    display: inline-flex;
    align-items: center;
    gap: 8px;
  }

  #rk-loop-guide .rk-loop-meta i {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--rk-cyan);
  }

  #rk-loop-guide .rk-loop-nav {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    padding: 22px 28px;
    background: var(--rk-white);
    border-bottom: 1px solid var(--rk-line);
  }

  #rk-loop-guide .rk-loop-nav strong {
    margin-right: 5px;
    color: var(--rk-dark);
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.07em;
    text-transform: uppercase;
  }

  #rk-loop-guide .rk-loop-nav a {
    display: inline-flex;
    align-items: center;
    min-height: 42px;
    padding: 9px 15px;
    color: var(--rk-navy);
    background: var(--rk-soft);
    border: 1px solid transparent;
    border-radius: 999px;
    font-size: 0.8rem;
    font-weight: 820;
    line-height: 1.25;
    text-decoration: none;
  }

  #rk-loop-guide .rk-loop-nav a:hover,
  #rk-loop-guide .rk-loop-nav a:focus-visible {
    color: var(--rk-dark);
    background: var(--rk-cyan-soft);
    border-color: #a9eaf1;
  }

  #rk-loop-guide .rk-loop-section {
    padding: 66px 58px;
    scroll-margin-top: 24px;
  }

  #rk-loop-guide .rk-loop-section:nth-of-type(even) {
    background: #fbfdfe;
  }

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

  #rk-loop-guide h2,
  #rk-loop-guide h3,
  #rk-loop-guide h4,
  #rk-loop-guide p {
    margin-top: 0;
  }

  #rk-loop-guide h2 {
    max-width: 900px;
    margin-bottom: 20px;
    color: var(--rk-dark);
    font-size: clamp(1.8rem, 3.5vw, 2.75rem);
    font-weight: 900;
    letter-spacing: -0.04em;
    line-height: 1.12;
  }

  #rk-loop-guide h3 {
    margin-bottom: 10px;
    color: var(--rk-navy);
    font-size: 1.2rem;
    font-weight: 850;
    letter-spacing: -0.02em;
    line-height: 1.28;
  }

  #rk-loop-guide h4 {
    margin-bottom: 8px;
    color: var(--rk-dark);
    font-size: 0.98rem;
    font-weight: 850;
    line-height: 1.35;
  }

  #rk-loop-guide p {
    margin-bottom: 18px;
    color: var(--rk-text);
  }

  #rk-loop-guide .rk-loop-intro {
    max-width: 940px;
    margin-bottom: 30px;
    color: #3e5361;
    font-size: 1.08rem;
    line-height: 1.78;
  }

  #rk-loop-guide .rk-loop-answer {
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(260px, 0.75fr);
    gap: 18px;
    margin: 30px 0;
  }

  #rk-loop-guide .rk-loop-answer-main,
  #rk-loop-guide .rk-loop-answer-side,
  #rk-loop-guide .rk-loop-card,
  #rk-loop-guide .rk-loop-note,
  #rk-loop-guide .rk-loop-step,
  #rk-loop-guide .rk-loop-error {
    border: 1px solid var(--rk-line);
    border-radius: 19px;
  }

  #rk-loop-guide .rk-loop-answer-main {
    padding: 28px;
    background: linear-gradient(135deg, var(--rk-cyan-soft), var(--rk-white));
    border-left: 5px solid var(--rk-cyan);
  }

  #rk-loop-guide .rk-loop-answer-side {
    padding: 28px;
    background: var(--rk-yellow-soft);
    border-left: 5px solid var(--rk-yellow);
  }

  #rk-loop-guide .rk-loop-answer p:last-child,
  #rk-loop-guide .rk-loop-card p:last-child,
  #rk-loop-guide .rk-loop-note p:last-child,
  #rk-loop-guide .rk-loop-step p:last-child,
  #rk-loop-guide .rk-loop-error p:last-child {
    margin-bottom: 0;
  }

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

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

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

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

  #rk-loop-guide .rk-loop-card {
    padding: 25px;
    background: var(--rk-white);
    box-shadow: 0 8px 25px rgba(16, 37, 54, 0.045);
  }

  #rk-loop-guide .rk-loop-card-number {
    display: inline-flex;
    margin-bottom: 13px;
    color: var(--rk-blue);
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.075em;
    text-transform: uppercase;
  }

  #rk-loop-guide .rk-loop-badge {
    display: inline-flex;
    align-items: center;
    padding: 5px 10px;
    margin: 0 4px 4px 0;
    color: var(--rk-dark);
    background: var(--rk-cyan-soft);
    border: 1px solid #a9eaf1;
    border-radius: 999px;
    font-size: 0.75rem;
    font-weight: 820;
  }

  #rk-loop-guide .rk-loop-formula {
    display: grid;
    gap: 7px;
    margin: 27px 0;
    padding: 23px 27px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-dark), var(--rk-navy));
    border-radius: 18px;
  }

  #rk-loop-guide .rk-loop-formula strong {
    overflow-wrap: anywhere;
    color: #8af2ff;
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
    font-size: 1.06rem;
    line-height: 1.55;
  }

  #rk-loop-guide .rk-loop-formula span {
    color: #c5dfe8;
    font-size: 0.83rem;
    line-height: 1.55;
  }

  #rk-loop-guide .rk-loop-note {
    margin: 25px 0;
    padding: 22px 25px;
    background: var(--rk-soft);
    border-left: 5px solid var(--rk-blue);
  }

  #rk-loop-guide .rk-loop-note.rk-loop-warning {
    background: var(--rk-yellow-soft);
    border-left-color: var(--rk-yellow);
  }

  #rk-loop-guide .rk-loop-note.rk-loop-danger {
    background: var(--rk-red-soft);
    border-left-color: var(--rk-red);
  }

  #rk-loop-guide .rk-loop-route {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 10px;
    align-items: stretch;
    margin: 30px 0;
  }

  #rk-loop-guide .rk-loop-route-item {
    position: relative;
    display: flex;
    min-height: 115px;
    flex-direction: column;
    justify-content: center;
    padding: 18px 16px;
    color: var(--rk-dark);
    text-align: center;
    background: var(--rk-soft);
    border: 1px solid var(--rk-line);
    border-radius: 16px;
  }

  #rk-loop-guide .rk-loop-route-item:not(:last-child)::after {
    position: absolute;
    top: 50%;
    right: -15px;
    z-index: 2;
    width: 20px;
    height: 20px;
    color: var(--rk-blue);
    background: var(--rk-white);
    border-radius: 50%;
    content: "›";
    font-size: 1.5rem;
    font-weight: 900;
    line-height: 17px;
  }

  #rk-loop-guide .rk-loop-route-item b {
    display: block;
    margin-bottom: 5px;
    color: var(--rk-navy);
    font-size: 0.92rem;
  }

  #rk-loop-guide .rk-loop-route-item span {
    color: var(--rk-muted);
    font-size: 0.76rem;
    line-height: 1.45;
  }

  #rk-loop-guide .rk-loop-sequence {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 12px;
    margin: 28px 0;
  }

  #rk-loop-guide .rk-loop-sequence article {
    padding: 20px 17px;
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-top: 4px solid var(--rk-cyan);
    border-radius: 15px;
  }

  #rk-loop-guide .rk-loop-sequence b {
    display: inline-grid;
    width: 31px;
    height: 31px;
    margin-bottom: 11px;
    place-items: center;
    color: var(--rk-white);
    background: var(--rk-navy);
    border-radius: 10px;
    font-size: 0.8rem;
  }

  #rk-loop-guide .rk-loop-sequence strong {
    display: block;
    margin-bottom: 6px;
    color: var(--rk-dark);
    font-size: 0.9rem;
    line-height: 1.35;
  }

  #rk-loop-guide .rk-loop-sequence span {
    display: block;
    color: var(--rk-muted);
    font-size: 0.76rem;
    line-height: 1.45;
  }

  #rk-loop-guide .rk-loop-table-wrap {
    margin: 28px 0;
  }

  #rk-loop-guide table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    overflow: hidden;
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-radius: 17px;
    font-size: 0.88rem;
  }

  #rk-loop-guide thead {
    color: var(--rk-white);
    background: var(--rk-navy);
  }

  #rk-loop-guide th,
  #rk-loop-guide td {
    padding: 15px 17px;
    text-align: left;
    vertical-align: top;
  }

  #rk-loop-guide th {
    font-size: 0.76rem;
    font-weight: 850;
    letter-spacing: 0.025em;
    line-height: 1.35;
  }

  #rk-loop-guide td {
    color: var(--rk-text);
    border-top: 1px solid var(--rk-line);
    line-height: 1.5;
  }

  #rk-loop-guide tbody tr:first-child td {
    border-top: 0;
  }

  #rk-loop-guide tbody tr:nth-child(even) {
    background: #f8fbfc;
  }

  #rk-loop-guide .rk-loop-tool-section {
    padding: 0;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 90% 10%, rgba(39, 200, 217, 0.18), transparent 31%),
      linear-gradient(155deg, #0d2b3d 0%, #12384d 58%, #102d3f 100%);
  }

  #rk-loop-guide .rk-loop-tool-head {
    padding: 58px 58px 31px;
  }

  #rk-loop-guide .rk-loop-tool-head .rk-loop-kicker {
    color: #7ff1ff;
  }

  #rk-loop-guide .rk-loop-tool-head h2 {
    margin-bottom: 16px;
    color: var(--rk-white);
  }

  #rk-loop-guide .rk-loop-tool-head p {
    max-width: 930px;
    margin-bottom: 0;
    color: #c3dce6;
  }

  #rk-loop-guide .rk-loop-tool {
    padding: 0 34px 45px;
  }

  #rk-loop-guide .rk-loop-tool-panel {
    padding: 29px;
    background: rgba(255, 255, 255, 0.045);
    border: 1px solid rgba(157, 221, 235, 0.24);
    border-radius: 21px;
  }

  #rk-loop-guide .rk-loop-tool-panel + .rk-loop-tool-panel {
    margin-top: 20px;
  }

  #rk-loop-guide .rk-loop-tool-panel h3 {
    margin-bottom: 7px;
    color: var(--rk-white);
  }

  #rk-loop-guide .rk-loop-tool-panel > p {
    margin-bottom: 23px;
    color: #b8d2dd;
    font-size: 0.84rem;
  }

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

  #rk-loop-guide .rk-loop-fieldset {
    min-width: 0;
    margin: 0;
    padding: 22px;
    border: 1px solid rgba(166, 220, 233, 0.25);
    border-radius: 17px;
  }

  #rk-loop-guide .rk-loop-fieldset legend {
    padding: 0 9px;
    color: #86f2ff;
    font-size: 0.79rem;
    font-weight: 900;
    letter-spacing: 0.055em;
    text-transform: uppercase;
  }

  #rk-loop-guide .rk-loop-field {
    display: block;
    margin-bottom: 16px;
  }

  #rk-loop-guide .rk-loop-field:last-child {
    margin-bottom: 0;
  }

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

  #rk-loop-guide .rk-loop-field small {
    display: block;
    margin-top: 6px;
    color: #8fb3c1;
    font-size: 0.69rem;
    line-height: 1.42;
  }

  #rk-loop-guide .rk-loop-input-row {
    position: relative;
  }

  #rk-loop-guide .rk-loop-input-row input,
  #rk-loop-guide .rk-loop-input-row select {
    width: 100%;
    min-height: 48px;
    padding: 10px 48px 10px 13px;
    color: var(--rk-dark);
    background: var(--rk-white);
    border: 1px solid #bed3dc;
    border-radius: 10px;
    font-size: 0.91rem;
    font-weight: 750;
  }

  #rk-loop-guide .rk-loop-input-row select {
    padding-right: 13px;
  }

  #rk-loop-guide .rk-loop-input-row input:disabled {
    color: #78909b;
    background: #dbe6ea;
    cursor: not-allowed;
  }

  #rk-loop-guide .rk-loop-unit {
    position: absolute;
    top: 50%;
    right: 13px;
    color: #667d88;
    font-size: 0.69rem;
    font-weight: 850;
    transform: translateY(-50%);
    pointer-events: none;
  }

  #rk-loop-guide .rk-loop-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 22px;
  }

  #rk-loop-guide .rk-loop-button {
    min-height: 48px;
    padding: 11px 20px;
    color: var(--rk-dark);
    background: var(--rk-cyan);
    border: 0;
    border-radius: 11px;
    cursor: pointer;
    font-size: 0.82rem;
    font-weight: 900;
  }

  #rk-loop-guide .rk-loop-button:hover,
  #rk-loop-guide .rk-loop-button:focus-visible {
    background: #72e9f4;
  }

  #rk-loop-guide .rk-loop-button-secondary {
    color: #d9edf4;
    background: transparent;
    border: 1px solid #53778a;
  }

  #rk-loop-guide .rk-loop-button-secondary:hover,
  #rk-loop-guide .rk-loop-button-secondary:focus-visible {
    color: var(--rk-white);
    background: rgba(255, 255, 255, 0.08);
  }

  #rk-loop-guide .rk-loop-results {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 13px;
    margin-top: 23px;
  }

  #rk-loop-guide .rk-loop-result {
    min-width: 0;
    padding: 18px;
    background: rgba(6, 29, 42, 0.48);
    border: 1px solid rgba(152, 218, 232, 0.2);
    border-radius: 14px;
  }

  #rk-loop-guide .rk-loop-result span {
    display: block;
    margin-bottom: 7px;
    color: #91b7c5;
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.045em;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-loop-guide .rk-loop-result strong {
    display: block;
    overflow-wrap: anywhere;
    color: var(--rk-white);
    font-size: 1.32rem;
    font-weight: 900;
    line-height: 1.15;
  }

  #rk-loop-guide .rk-loop-result small {
    display: block;
    margin-top: 6px;
    color: #759cab;
    font-size: 0.65rem;
    line-height: 1.35;
  }

  #rk-loop-guide .rk-loop-status {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 15px;
    align-items: start;
    margin-top: 18px;
    padding: 19px 21px;
    background: rgba(23, 132, 109, 0.19);
    border: 1px solid rgba(96, 224, 186, 0.4);
    border-left: 5px solid #4fd5af;
    border-radius: 14px;
  }

  #rk-loop-guide .rk-loop-status.rk-loop-status-warning {
    background: rgba(231, 173, 47, 0.16);
    border-color: rgba(239, 195, 94, 0.42);
    border-left-color: var(--rk-yellow);
  }

  #rk-loop-guide .rk-loop-status.rk-loop-status-danger {
    background: rgba(217, 75, 61, 0.17);
    border-color: rgba(235, 118, 104, 0.42);
    border-left-color: var(--rk-red);
  }

  #rk-loop-guide .rk-loop-status-icon {
    display: grid;
    width: 38px;
    height: 38px;
    place-items: center;
    color: var(--rk-dark);
    background: #5addb7;
    border-radius: 12px;
    font-weight: 950;
  }

  #rk-loop-guide .rk-loop-status-warning .rk-loop-status-icon {
    background: var(--rk-yellow);
  }

  #rk-loop-guide .rk-loop-status-danger .rk-loop-status-icon {
    color: var(--rk-white);
    background: var(--rk-red);
  }

  #rk-loop-guide .rk-loop-status strong {
    display: block;
    margin-bottom: 4px;
    color: var(--rk-white);
    font-size: 0.96rem;
  }

  #rk-loop-guide .rk-loop-status p {
    margin: 0;
    color: #c4dce5;
    font-size: 0.8rem;
    line-height: 1.55;
  }

  #rk-loop-guide .rk-loop-chart-wrap {
    padding: 20px;
    background: var(--rk-white);
    border-radius: 17px;
  }

  #rk-loop-guide .rk-loop-chart {
    display: block;
    width: 100%;
    min-height: 350px;
  }

  #rk-loop-guide .rk-loop-chart-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 18px;
    margin-top: 13px;
    color: #52707d;
    font-size: 0.72rem;
    font-weight: 780;
  }

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

  #rk-loop-guide .rk-loop-legend-line {
    width: 23px;
    height: 4px;
    border-radius: 4px;
  }

  #rk-loop-guide .rk-loop-chart-note {
    margin: 14px 0 0;
    color: #657c87;
    font-size: 0.72rem;
    line-height: 1.5;
  }

  #rk-loop-guide .rk-loop-tool-table table {
    background: rgba(255, 255, 255, 0.04);
    border-color: rgba(161, 218, 231, 0.22);
  }

  #rk-loop-guide .rk-loop-tool-table thead {
    background: rgba(6, 29, 42, 0.65);
  }

  #rk-loop-guide .rk-loop-tool-table td {
    color: #d1e5ec;
    border-color: rgba(161, 218, 231, 0.18);
  }

  #rk-loop-guide .rk-loop-tool-table tbody tr:nth-child(even) {
    background: rgba(255, 255, 255, 0.025);
  }

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

  #rk-loop-guide .rk-loop-diagnostic {
    padding: 17px;
    color: #c4dce5;
    background: rgba(6, 29, 42, 0.36);
    border: 1px solid rgba(155, 214, 228, 0.18);
    border-radius: 13px;
    font-size: 0.74rem;
    line-height: 1.5;
  }

  #rk-loop-guide .rk-loop-diagnostic b {
    display: block;
    margin-bottom: 5px;
    color: #8af2ff;
    font-size: 0.76rem;
  }

  #rk-loop-guide .rk-loop-tool-disclaimer {
    margin: 22px 0 0;
    padding: 18px 20px;
    color: #b5d0da;
    background: rgba(255, 255, 255, 0.05);
    border-left: 4px solid var(--rk-orange);
    border-radius: 12px;
    font-size: 0.75rem;
    line-height: 1.55;
  }

  #rk-loop-guide .rk-loop-cta,
  #rk-loop-guide .rk-loop-final-cta {
    padding: 48px 52px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 90% 12%, rgba(39, 200, 217, 0.22), transparent 32%),
      linear-gradient(135deg, var(--rk-dark), var(--rk-navy));
  }

  #rk-loop-guide .rk-loop-cta {
    margin: 0;
    border-top: 1px solid rgba(160, 220, 233, 0.18);
  }

  #rk-loop-guide .rk-loop-cta-title {
    max-width: 860px;
    margin: 0 0 13px;
    color: var(--rk-white);
    font-size: clamp(1.65rem, 3vw, 2.35rem);
    font-weight: 900;
    letter-spacing: -0.035em;
    line-height: 1.15;
  }

  #rk-loop-guide .rk-loop-cta p,
  #rk-loop-guide .rk-loop-final-cta p {
    max-width: 900px;
    color: #c5dfe8;
  }

  #rk-loop-guide .rk-loop-cta-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 52px;
    padding: 12px 23px;
    margin-top: 8px;
    color: var(--rk-dark);
    background: var(--rk-cyan);
    border: 0;
    border-radius: 12px;
    box-shadow: 0 10px 28px rgba(39, 200, 217, 0.19);
    font-size: 0.84rem;
    font-weight: 900;
    line-height: 1.35;
    text-align: center;
    text-decoration: none;
  }

  #rk-loop-guide .rk-loop-cta-button:hover,
  #rk-loop-guide .rk-loop-cta-button:focus-visible {
    color: var(--rk-dark);
    background: #7cf0fa;
    transform: translateY(-1px);
  }

  #rk-loop-guide .rk-loop-disclosure {
    display: block;
    margin-top: 13px;
    color: #87adbc;
    font-size: 0.67rem;
    line-height: 1.45;
  }

  #rk-loop-guide .rk-loop-steps {
    display: grid;
    gap: 13px;
    margin: 28px 0;
    counter-reset: rk-loop-step;
  }

  #rk-loop-guide .rk-loop-step {
    position: relative;
    display: grid;
    grid-template-columns: 48px minmax(0, 1fr);
    gap: 17px;
    padding: 21px 23px;
    background: var(--rk-white);
    counter-increment: rk-loop-step;
  }

  #rk-loop-guide .rk-loop-step::before {
    display: grid;
    width: 44px;
    height: 44px;
    place-items: center;
    color: var(--rk-white);
    background: var(--rk-blue);
    border-radius: 13px;
    content: counter(rk-loop-step, decimal-leading-zero);
    font-size: 0.76rem;
    font-weight: 900;
  }

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

  #rk-loop-guide .rk-loop-error {
    padding: 23px;
    background: var(--rk-white);
    border-left: 5px solid var(--rk-red);
  }

  #rk-loop-guide .rk-loop-error b {
    display: inline-flex;
    margin-bottom: 10px;
    color: var(--rk-red);
    font-size: 0.73rem;
    font-weight: 900;
    letter-spacing: 0.07em;
    text-transform: uppercase;
  }

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

  #rk-loop-guide .rk-loop-faq details {
    overflow: hidden;
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-radius: 15px;
  }

  #rk-loop-guide .rk-loop-faq summary {
    position: relative;
    padding: 19px 55px 19px 21px;
    color: var(--rk-dark);
    cursor: pointer;
    font-size: 0.94rem;
    font-weight: 850;
    line-height: 1.4;
    list-style: none;
  }

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

  #rk-loop-guide .rk-loop-faq summary::after {
    position: absolute;
    top: 50%;
    right: 20px;
    display: grid;
    width: 29px;
    height: 29px;
    place-items: center;
    color: var(--rk-white);
    background: var(--rk-blue);
    border-radius: 9px;
    content: "+";
    font-size: 1.15rem;
    transform: translateY(-50%);
  }

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

  #rk-loop-guide .rk-loop-faq-answer {
    padding: 0 21px 20px;
  }

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

  #rk-loop-guide .rk-loop-sources {
    display: grid;
    gap: 12px;
    margin-top: 26px;
  }

  #rk-loop-guide .rk-loop-source {
    padding: 19px 21px;
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-radius: 14px;
  }

  #rk-loop-guide .rk-loop-source b {
    display: block;
    margin-bottom: 5px;
    color: var(--rk-dark);
  }

  #rk-loop-guide .rk-loop-source p {
    margin-bottom: 7px;
    font-size: 0.82rem;
  }

  #rk-loop-guide .rk-loop-source a {
    overflow-wrap: anywhere;
    font-size: 0.79rem;
    font-weight: 800;
  }

  #rk-loop-guide .rk-loop-update {
    margin-top: 25px;
    color: var(--rk-muted);
    font-size: 0.72rem;
    font-weight: 750;
  }

  #rk-loop-guide .rk-loop-author {
    position: relative;
    padding: 0;
    background: #f4f9fb;
    border-top: 1px solid var(--rk-line);
    scroll-margin-top: 24px;
  }

  #rk-loop-guide .rk-loop-author > input {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    opacity: 0;
    pointer-events: none;
  }

  #rk-loop-guide .rk-loop-author-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 20px;
    padding: 42px 50px 28px;
    background: var(--rk-white);
    border-bottom: 1px solid var(--rk-line);
  }

  #rk-loop-guide .rk-loop-author-head h2 {
    margin: 0 0 5px;
    font-size: 2rem;
  }

  #rk-loop-guide .rk-loop-author-head p {
    margin: 0;
    font-size: 0.84rem;
  }

  #rk-loop-guide .rk-loop-author-mark {
    flex: 0 0 auto;
    padding: 8px 12px;
    color: var(--rk-dark);
    background: var(--rk-cyan-soft);
    border-radius: 999px;
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.065em;
  }

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

  #rk-loop-guide .rk-loop-author-side {
    padding: 38px 31px;
    color: var(--rk-white);
    text-align: center;
    background: var(--rk-dark);
  }

  #rk-loop-guide .rk-loop-author-photo {
    width: 158px;
    height: 158px;
    margin: 0 auto 20px;
    overflow: hidden;
    background: var(--rk-white);
    border: 6px solid rgba(255, 255, 255, 0.18);
    border-radius: 50%;
  }

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

  #rk-loop-guide .rk-loop-author-name {
    color: var(--rk-white);
    font-size: 1.23rem;
    font-weight: 900;
  }

  #rk-loop-guide .rk-loop-author-name a {
    color: inherit;
    text-decoration: none;
  }

  #rk-loop-guide .rk-loop-author-role {
    margin-top: 7px;
    color: #b7d0db;
    font-size: 0.76rem;
    line-height: 1.55;
  }

  #rk-loop-guide .rk-loop-author-social-label {
    margin-top: 27px;
    color: #89a9b7;
    font-size: 0.65rem;
    font-weight: 850;
    letter-spacing: 0.07em;
    text-transform: uppercase;
  }

  #rk-loop-guide .rk-loop-author-social {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-top: 12px;
  }

  #rk-loop-guide .rk-loop-author-social a {
    display: grid;
    width: 43px;
    height: 43px;
    place-items: center;
    color: #d7edf5;
    border: 1px solid #456879;
    border-radius: 50%;
  }

  #rk-loop-guide .rk-loop-author-social a:hover,
  #rk-loop-guide .rk-loop-author-social a:focus-visible {
    color: var(--rk-dark);
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
  }

  #rk-loop-guide .rk-loop-author-social svg {
    width: 20px;
    height: 20px;
    fill: currentColor;
  }

  #rk-loop-guide .rk-loop-author-main {
    padding: 36px 40px 42px;
  }

  #rk-loop-guide .rk-loop-author-quote {
    position: relative;
    margin: 0 0 24px;
    padding: 25px 28px 25px 68px;
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-radius: 17px;
  }

  #rk-loop-guide .rk-loop-author-quote::before {
    position: absolute;
    top: 18px;
    left: 22px;
    color: var(--rk-cyan);
    content: "“";
    font-family: Georgia, serif;
    font-size: 3.8rem;
    font-weight: 900;
    line-height: 1;
  }

  #rk-loop-guide .rk-loop-author-quote p {
    margin: 0;
    color: var(--rk-dark);
    font-size: 0.92rem;
    font-weight: 780;
  }

  #rk-loop-guide .rk-loop-author-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-bottom: 19px;
  }

  #rk-loop-guide .rk-loop-author-tab {
    padding: 9px 15px;
    color: #69808b;
    background: #e6eff3;
    border-radius: 999px;
    cursor: pointer;
    font-size: 0.72rem;
    font-weight: 850;
  }

  #rk-loop-guide .rk-loop-author-panel {
    display: none;
    padding: 20px 22px;
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-radius: 15px;
  }

  #rk-loop-guide .rk-loop-author-panel p {
    font-size: 0.85rem;
  }

  #rk-loop-guide .rk-loop-author-panel p:last-child {
    margin-bottom: 0;
  }

  #rk-loop-author-about:checked ~ .rk-loop-author-layout .rk-loop-author-panel-about,
  #rk-loop-author-exp:checked ~ .rk-loop-author-layout .rk-loop-author-panel-exp,
  #rk-loop-author-sites:checked ~ .rk-loop-author-layout .rk-loop-author-panel-sites {
    display: block;
  }

  #rk-loop-author-about:checked ~ .rk-loop-author-layout label[for="rk-loop-author-about"],
  #rk-loop-author-exp:checked ~ .rk-loop-author-layout label[for="rk-loop-author-exp"],
  #rk-loop-author-sites:checked ~ .rk-loop-author-layout label[for="rk-loop-author-sites"] {
    color: var(--rk-white);
    background: var(--rk-blue);
  }

  #rk-loop-guide .rk-loop-site-links {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-top: 14px;
  }

  #rk-loop-guide .rk-loop-site-links a {
    padding: 7px 11px;
    background: var(--rk-soft);
    border-radius: 9px;
    font-size: 0.73rem;
    font-weight: 820;
    text-decoration: none;
  }

  #rk-loop-guide .rk-loop-final-cta {
    border-top: 1px solid rgba(161, 220, 233, 0.2);
  }

  @media (max-width: 960px) {
    #rk-loop-guide .rk-loop-input-grid,
    #rk-loop-guide .rk-loop-grid-3,
    #rk-loop-guide .rk-loop-grid-4,
    #rk-loop-guide .rk-loop-results,
    #rk-loop-guide .rk-loop-diagnostics {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

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

    #rk-loop-guide .rk-loop-route-item:not(:last-child)::after {
      display: none;
    }

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

  @media (max-width: 760px) {
    #rk-loop-guide {
      margin: 16px auto 48px;
      font-size: 16px;
    }

    #rk-loop-guide .rk-loop-shell {
      border-radius: 20px;
    }

    #rk-loop-guide .rk-loop-hero,
    #rk-loop-guide .rk-loop-section {
      padding: 45px 24px;
    }

    #rk-loop-guide .rk-loop-tool-head {
      padding: 45px 24px 25px;
    }

    #rk-loop-guide .rk-loop-tool {
      padding: 0 16px 30px;
    }

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

    #rk-loop-guide .rk-loop-nav strong {
      grid-column: 1 / -1;
      margin: 0 0 2px;
    }

    #rk-loop-guide .rk-loop-nav a {
      justify-content: center;
      min-height: 44px;
      padding: 8px 10px;
      border-radius: 11px;
      text-align: center;
    }

    #rk-loop-guide .rk-loop-answer,
    #rk-loop-guide .rk-loop-grid-2,
    #rk-loop-guide .rk-loop-grid-3,
    #rk-loop-guide .rk-loop-grid-4,
    #rk-loop-guide .rk-loop-input-grid,
    #rk-loop-guide .rk-loop-results,
    #rk-loop-guide .rk-loop-diagnostics,
    #rk-loop-guide .rk-loop-errors,
    #rk-loop-guide .rk-loop-route,
    #rk-loop-guide .rk-loop-sequence,
    #rk-loop-guide .rk-loop-author-layout {
      grid-template-columns: 1fr;
    }

    #rk-loop-guide .rk-loop-fieldset {
      padding: 18px;
    }

    #rk-loop-guide .rk-loop-tool-panel {
      padding: 20px;
    }

    #rk-loop-guide .rk-loop-chart-wrap {
      padding: 10px;
    }

    #rk-loop-guide .rk-loop-chart {
      min-height: 300px;
    }

    #rk-loop-guide .rk-loop-cta,
    #rk-loop-guide .rk-loop-final-cta {
      padding: 40px 24px;
    }

    #rk-loop-guide .rk-loop-author-head {
      align-items: flex-start;
      flex-direction: column;
      padding: 34px 24px 23px;
    }

    #rk-loop-guide .rk-loop-author-side,
    #rk-loop-guide .rk-loop-author-main {
      padding: 32px 24px;
    }

    #rk-loop-guide .rk-loop-author-quote {
      padding: 58px 20px 22px;
    }

    #rk-loop-guide .rk-loop-author-quote::before {
      top: 11px;
      left: 18px;
    }

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

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

    #rk-loop-guide table {
      background: transparent;
      border: 0;
      border-radius: 0;
    }

    #rk-loop-guide tbody {
      display: grid;
      gap: 13px;
    }

    #rk-loop-guide tbody tr,
    #rk-loop-guide .rk-loop-tool-table tbody tr {
      padding: 9px 15px;
      background: var(--rk-white);
      border: 1px solid var(--rk-line);
      border-radius: 15px;
    }

    #rk-loop-guide .rk-loop-tool-table tbody tr {
      background: rgba(255, 255, 255, 0.055);
      border-color: rgba(161, 218, 231, 0.22);
    }

    #rk-loop-guide td,
    #rk-loop-guide .rk-loop-tool-table td {
      display: grid;
      grid-template-columns: minmax(110px, 0.9fr) minmax(0, 1.1fr);
      gap: 12px;
      padding: 10px 0;
      border-top: 1px solid var(--rk-line);
    }

    #rk-loop-guide .rk-loop-tool-table td {
      border-color: rgba(161, 218, 231, 0.18);
    }

    #rk-loop-guide td:first-child {
      border-top: 0;
    }

    #rk-loop-guide td::before {
      color: var(--rk-dark);
      content: attr(data-label);
      font-size: 0.69rem;
      font-weight: 850;
      letter-spacing: 0.025em;
      line-height: 1.4;
      text-transform: uppercase;
    }

    #rk-loop-guide .rk-loop-tool-table td::before {
      color: #8ec2d2;
    }
  }

  @media (max-width: 500px) {
    #rk-loop-guide .rk-loop-nav {
      grid-template-columns: 1fr;
    }

    #rk-loop-guide .rk-loop-hero-title {
      font-size: 2.05rem;
    }

    #rk-loop-guide .rk-loop-meta {
      align-items: flex-start;
      flex-direction: column;
    }

    #rk-loop-guide .rk-loop-results,
    #rk-loop-guide .rk-loop-diagnostics {
      grid-template-columns: 1fr;
    }

    #rk-loop-guide .rk-loop-actions {
      flex-direction: column;
    }

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

    #rk-loop-guide .rk-loop-status {
      grid-template-columns: 1fr;
    }

    #rk-loop-guide .rk-loop-step {
      grid-template-columns: 1fr;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    #rk-loop-guide *,
    #rk-loop-guide *::before,
    #rk-loop-guide *::after {
      scroll-behavior: auto !important;
      transition: none !important;
      animation: none !important;
    }
  }
</style>

<article id="rk-loop-guide" aria-label="Maksymalna długość pętli ogrzewania podłogowego">
  <div class="rk-loop-shell">
    <header class="rk-loop-hero">
      <div class="rk-loop-hero-inner">
        <span class="rk-loop-eyebrow"><b aria-hidden="true"></b> Hydraulika pętli • aktualizacja 2026</span>
        <div class="rk-loop-hero-title">100 metrów to punkt kontrolny, a nie uniwersalna granica</div>
        <p class="rk-loop-hero-lead">Maksymalna długość pętli wynika z przepływu, średnicy wewnętrznej, właściwości medium, oporów armatury i dostępnego budżetu ciśnienia. Sprawdź konkretny obwód zamiast dobierać go z jednej tabeli.</p>
        <div class="rk-loop-meta">
          <span><i aria-hidden="true"></i> Model Darcy’ego-Weisbacha</span>
          <span><i aria-hidden="true"></i> Analizator hydrauliczny i wykres</span>
          <span><i aria-hidden="true"></i> Aktualizacja: 1 września 2026 r.</span>
        </div>
      </div>
    </header>

    <nav class="rk-loop-nav" aria-label="Nawigacja po wszystkich nagłówkach H2">
      <strong>Na skróty — wszystkie H2</strong>
      <a href="#rk-loop-answer">Szybka odpowiedź</a>
      <a href="#rk-loop-100m">Dlaczego nie zawsze 100 m</a>
      <a href="#rk-loop-total">Długość całkowita</a>
      <a href="#rk-loop-hydraulics">Przepływ i opory</a>
      <a href="#rk-loop-analyzer">Analizator</a>
      <a href="#rk-loop-parallel">Pętle równoległe</a>
      <a href="#rk-loop-diameters">Średnice rur</a>
      <a href="#rk-loop-balancing">Różne długości</a>
      <a href="#rk-loop-split">Podział na pętle</a>
      <a href="#rk-loop-diagnosis">Pętla 120–140 m</a>
      <a href="#rk-loop-errors">Błędy</a>
      <a href="#rk-loop-checklist">Checklista</a>
      <a href="#rk-loop-faq">FAQ</a>
      <a href="#rk-loop-sources">Źródła</a>
      <a href="#rk-loop-author">Autor</a>
    </nav>

    <main>
      <section class="rk-loop-section" id="rk-loop-answer">
        <span class="rk-loop-kicker">Odpowiedź w 60 sekund</span>
        <h2>Jaka jest maksymalna długość pętli ogrzewania podłogowego?</h2>
        <p class="rk-loop-intro">Nie istnieje jedna długość właściwa dla każdego obwodu. Dla popularnej rury 16 × 2 mm zakres około 80–100 m jest rozsądnym punktem wstępnej kontroli, ale poprawność pętli trzeba potwierdzić przy projektowym przepływie oraz rzeczywistym budżecie ciśnienia.</p>

        <div class="rk-loop-answer">
          <div class="rk-loop-answer-main">
            <h3>Najważniejsza zasada</h3>
            <p><strong>Maksymalna długość jest wynikiem obliczenia, a nie daną wejściową.</strong> Najpierw ustala się moc pętli i przepływ, następnie średnicę wewnętrzną, stratę ciśnienia oraz opory elementów wspólnych. Dopiero później ocenia się, czy pompa zapewni wymagany przepływ.</p>
          </div>
          <div class="rk-loop-answer-side">
            <h3>80–100 m dla 16 × 2</h3>
            <p>Traktuj ten zakres jako praktyczny alarm kontrolny. Nie oznacza on, że 99 m zawsze działa, a 101 m zawsze przestaje działać.</p>
          </div>
        </div>

        <div class="rk-loop-grid-3">
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Długość</span>
            <h3>Cały obwód od belki do belki</h3>
            <p>Wlicza się rurę w polu grzewczym, zasilający dobieg do pomieszczenia oraz powrót do rozdzielacza.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Przepływ</span>
            <h3>Wynika z mocy i ΔT</h3>
            <p>Ta sama rura przy 0,8 l/min stawia zdecydowanie mniejszy opór niż przy 2,5 l/min.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Ocena</span>
            <h3>Dotyczy całej drogi krytycznej</h3>
            <p>Do pętli dochodzą opory rozdzielacza, zaworów, magistrali, filtrów i pozostałych elementów obiegu.</p>
          </article>
        </div>

        <p>Jeżeli chcesz najpierw wyznaczyć ilość rury z powierzchni, rozstawu oraz dobiegów, skorzystaj z osobnego poradnika <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">ile metrów podłogówki można zaplanować na jednej pętli</a>. Ten artykuł odpowiada na inne pytanie: czy wskazana długość jest hydraulicznie możliwa przy konkretnym przepływie.</p>
      </section>

      <section class="rk-loop-section" id="rk-loop-100m">
        <span class="rk-loop-kicker">Bez „magicznej” liczby</span>
        <h2>Dlaczego 100 m nie jest uniwersalną granicą pętli?</h2>
        <p class="rk-loop-intro">Opór nie wykonuje skoku pomiędzy 100 a 101 metrem. Rośnie wraz z długością, ale jego wartość zależy jednocześnie od przepływu, średnicy wewnętrznej, lepkości medium i oporów miejscowych.</p>

        <div class="rk-loop-grid-3">
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Przykład A</span>
            <h3>100 m przy małym przepływie</h3>
            <p>Obwód obsługujący niewielką moc może wymagać małego przepływu. Jego strata ciśnienia może mieścić się w przyjętym budżecie mimo długości wynoszącej 100 m.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Przykład B</span>
            <h3>80 m przy dużym przepływie</h3>
            <p>Krótsza pętla o dużej mocy i wysokim przepływie może stawiać większy opór niż dłuższy obwód pracujący przy spokojniejszych warunkach.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Przykład C</span>
            <h3>Ta sama średnica zewnętrzna</h3>
            <p>Rury 16 × 2 i 16 × 2,2 mm nie mają tej samej średnicy wewnętrznej. Nie wolno przypisywać im identycznej charakterystyki hydraulicznej.</p>
          </article>
        </div>

        <div class="rk-loop-note rk-loop-warning">
          <h3>Co wynika z norm?</h3>
          <p>Dokumenty z serii ISO 11855 i EN 1264 dotyczą określania wydajności, projektowania oraz wymiarowania wodnych systemów powierzchniowych. Nie będziemy przypisywać im uniwersalnej tabeli „16 mm = 100 m”, ponieważ jedna liczba nie zastępuje obliczenia konkretnego obwodu.</p>
        </div>

        <p>W praktyce projektowej długość kontrolna nadal jest przydatna. Pozwala szybko zauważyć obwód wymagający dokładniejszego sprawdzenia, ale nie może być jedynym kryterium akceptacji.</p>
      </section>

      <section class="rk-loop-section" id="rk-loop-total">
        <span class="rk-loop-kicker">Od zasilania do powrotu</span>
        <h2>Co wlicza się do całkowitej długości pętli?</h2>
        <p class="rk-loop-intro">Pętla zaczyna się na belce zasilającej rozdzielacza i kończy na belce powrotnej. Rura biegnąca przez korytarz nie znika z hydrauliki tylko dlatego, że nie ogrzewa docelowego pomieszczenia.</p>

        <div class="rk-loop-route" aria-label="Droga rury w pętli ogrzewania podłogowego">
          <div class="rk-loop-route-item"><b>Belka zasilająca</b><span>Początek analizowanego obwodu</span></div>
          <div class="rk-loop-route-item"><b>Dobieg zasilający</b><span>Droga od szafki do pola grzewczego</span></div>
          <div class="rk-loop-route-item"><b>Pole grzewcze</b><span>Rura ułożona w pomieszczeniu lub strefie</span></div>
          <div class="rk-loop-route-item"><b>Dobieg powrotny</b><span>Powrót z pola do szafki</span></div>
          <div class="rk-loop-route-item"><b>Belka powrotna</b><span>Koniec analizowanego obwodu</span></div>
        </div>

        <div class="rk-loop-formula">
          <strong>L całkowita = L pola + L dobiegu zasilającego + L dobiegu powrotnego</strong>
          <span>Jeżeli rozdzielacz znajduje się 8 m od początku pola, same dobiegi mogą zużyć około 16 m rury.</span>
        </div>

        <div class="rk-loop-grid-2">
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Geometria</span>
            <h3>Rozstaw nie wyznacza sam hydrauliki</h3>
            <p>Gęstszy rozstaw zwiększa ilość rury w polu i zwykle wymaga większej liczby obwodów. Najpierw trzeba jednak sprawdzić, czy wybrany rozstaw zapewni wymaganą moc cieplną. Zobacz porównanie <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstawu rur 10 i 15 cm</a>.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Lokalizacja szafki</span>
            <h3>Długie dobiegi zmieniają podział pętli</h3>
            <p>Położenie rozdzielacza nie musi być geometrycznie centralne za wszelką cenę, ale powinno zostać ocenione razem z przebiegiem rur, długościami obwodów, strefami tranzytowymi i możliwością regulacji.</p>
          </article>
        </div>
      </section>

      <section class="rk-loop-section" id="rk-loop-hydraulics">
        <span class="rk-loop-kicker">Właściwa kolejność obliczeń</span>
        <h2>Jak przepływ i średnica wyznaczają opór pętli?</h2>
        <p class="rk-loop-intro">Nie zaczynamy od wyboru maksymalnej liczby metrów. Zaczynamy od mocy, którą obwód ma przekazać, oraz od projektowej różnicy temperatury wody.</p>

        <div class="rk-loop-sequence">
          <article><b>1</b><strong>Moc pętli</strong><span>Wynika ze strat ciepła i udziału obwodu w ogrzewaniu strefy.</span></article>
          <article><b>2</b><strong>Przepływ</strong><span>Obliczany z mocy i przyjętego ΔT.</span></article>
          <article><b>3</b><strong>Prędkość</strong><span>Zależy od przepływu oraz średnicy wewnętrznej.</span></article>
          <article><b>4</b><strong>Spadek ciśnienia</strong><span>Rura i elementy miejscowe tworzą opór obwodu.</span></article>
          <article><b>5</b><strong>Weryfikacja</strong><span>Wynik porównujemy z dostępnym budżetem ciśnienia.</span></article>
        </div>

        <div class="rk-loop-formula">
          <strong>V̇ [l/min] ≈ Q [W] ÷ (69,8 × ΔT [K])</strong>
          <span>Orientacyjna zależność dla wody w typowych temperaturach ogrzewania podłogowego.</span>
        </div>

        <div class="rk-loop-formula">
          <strong>Δp = λ × (L ÷ dᵢ) × (ρv² ÷ 2) + ΣΔp miejscowe</strong>
          <span>Model Darcy’ego-Weisbacha łączy długość, średnicę wewnętrzną, prędkość, gęstość, współczynnik tarcia oraz dodatkowe opory.</span>
        </div>

        <div class="rk-loop-note">
          <h3>Budżet 20 kPa nie jest uniwersalną normą</h3>
          <p>Może być przyjętym celem projektowym dla pętli, ale analizator pozostawia tę wartość edytowalną. Ostateczna ocena wymaga charakterystyki pompy i uwzględnienia wszystkich elementów wspólnych instalacji.</p>
        </div>
      </section>

      <section class="rk-loop-tool-section" id="rk-loop-analyzer">
        <div class="rk-loop-tool-head">
          <span class="rk-loop-kicker">Narzędzie interaktywne</span>
          <h2>Analizator hydraulicznej długości pętli</h2>
          <p>Wpisz dane jednego kompletnego obwodu. Narzędzie obliczy przepływ, prędkość, spadek ciśnienia i długość odpowiadającą wprowadzonemu budżetowi. Wynik nie jest normowym limitem — dotyczy wyłącznie podanych założeń.</p>
        </div>

        <div class="rk-loop-tool" id="rk-loop-tool">
          <div class="rk-loop-tool-panel">
            <h3>Dane do analizy</h3>
            <p>Jeżeli znasz przepływ z projektu, wybierz tryb „Znany przepływ”. W przeciwnym razie analizator obliczy go z mocy pętli i ΔT.</p>

            <div class="rk-loop-input-grid">
              <fieldset class="rk-loop-fieldset">
                <legend>1. Moc i przepływ</legend>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Sposób określenia przepływu</span>
                  <span class="rk-loop-input-row">
                    <select id="rk-loop-mode">
                      <option value="power" selected>Z mocy pętli i ΔT</option>
                      <option value="flow">Znany przepływ z projektu</option>
                    </select>
                  </span>
                </label>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Projektowa moc pętli</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-power" type="number" min="50" max="4000" step="10" value="600" inputmode="decimal">
                    <span class="rk-loop-unit">W</span>
                  </span>
                  <small>Moc przypisana do jednego obwodu, nie do całego budynku.</small>
                </label>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Projektowa różnica temperatur ΔT</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-delta" type="number" min="1" max="20" step="0.1" value="5" inputmode="decimal">
                    <span class="rk-loop-unit">K</span>
                  </span>
                </label>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Znany przepływ pętli</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-known-flow" type="number" min="0.1" max="8" step="0.01" value="1.72" inputmode="decimal" disabled>
                    <span class="rk-loop-unit">l/min</span>
                  </span>
                  <small>Aktywny tylko w trybie przepływu z projektu.</small>
                </label>
              </fieldset>

              <fieldset class="rk-loop-fieldset">
                <legend>2. Rura i medium</legend>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Wymiar rury</span>
                  <span class="rk-loop-input-row">
                    <select id="rk-loop-pipe">
                      <option value="12" selected>16 × 2,0 mm — dᵢ 12,0 mm</option>
                      <option value="11.6">16 × 2,2 mm — dᵢ 11,6 mm</option>
                      <option value="13">17 × 2,0 mm — dᵢ 13,0 mm</option>
                      <option value="16">20 × 2,0 mm — dᵢ 16,0 mm</option>
                      <option value="custom">Własna średnica wewnętrzna</option>
                    </select>
                  </span>
                </label>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Własna średnica wewnętrzna</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-custom-id" type="number" min="6" max="30" step="0.1" value="12" inputmode="decimal" disabled>
                    <span class="rk-loop-unit">mm</span>
                  </span>
                  <small>Wpisz wartość z dokumentacji konkretnej rury.</small>
                </label>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Średnia temperatura wody</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-water-temp" type="number" min="10" max="60" step="1" value="30" inputmode="decimal">
                    <span class="rk-loop-unit">°C</span>
                  </span>
                  <small>Model interpoluje gęstość i lepkość wody w zakresie 10–60°C.</small>
                </label>
              </fieldset>

              <fieldset class="rk-loop-fieldset">
                <legend>3. Długość i budżet</legend>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Całkowita długość pętli</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-length" type="number" min="5" max="220" step="1" value="90" inputmode="decimal">
                    <span class="rk-loop-unit">m</span>
                  </span>
                  <small>Łącznie z dobiegami od rozdzielacza i do rozdzielacza.</small>
                </label>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Dodatkowe opory obwodu</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-extra" type="number" min="0" max="50" step="0.1" value="3" inputmode="decimal">
                    <span class="rk-loop-unit">kPa</span>
                  </span>
                  <small>Rozdzielacz, zawór, przyłącza i inne elementy przypisane do pętli.</small>
                </label>

                <label class="rk-loop-field">
                  <span class="rk-loop-field-label">Przyjęty budżet ciśnienia dla pętli</span>
                  <span class="rk-loop-input-row">
                    <input id="rk-loop-budget" type="number" min="1" max="100" step="0.5" value="20" inputmode="decimal">
                    <span class="rk-loop-unit">kPa</span>
                  </span>
                  <small>Edytowalne założenie projektowe, a nie limit normowy.</small>
                </label>
              </fieldset>
            </div>

            <div class="rk-loop-actions">
              <button class="rk-loop-button" id="rk-loop-calculate" type="button">Przelicz analizę</button>
              <button class="rk-loop-button rk-loop-button-secondary" id="rk-loop-reset" type="button">Przywróć przykład</button>
            </div>
          </div>

          <div class="rk-loop-tool-panel" aria-live="polite">
            <h3>Wynik dla wprowadzonych danych</h3>
            <p>Wartości dotyczą wody i gładkiej rury tworzywowej o referencyjnej chropowatości. Dla mieszaniny z glikolem należy użyć właściwości konkretnego medium.</p>

            <div class="rk-loop-results">
              <div class="rk-loop-result"><span>Przepływ pętli</span><strong id="rk-loop-result-flow">—</strong><small id="rk-loop-result-flow-hour">—</small></div>
              <div class="rk-loop-result"><span>Prędkość w rurze</span><strong id="rk-loop-result-velocity">—</strong><small>wartość kontrolna</small></div>
              <div class="rk-loop-result"><span>Gradient ciśnienia</span><strong id="rk-loop-result-gradient">—</strong><small>strata liniowa</small></div>
              <div class="rk-loop-result"><span>Strata na rurze</span><strong id="rk-loop-result-pipe-loss">—</strong><small>bez oporów dodatkowych</small></div>
              <div class="rk-loop-result"><span>Strata całej pętli</span><strong id="rk-loop-result-total-loss">—</strong><small>rura i wpisane dodatki</small></div>
              <div class="rk-loop-result"><span>Rezerwa budżetu</span><strong id="rk-loop-result-reserve">—</strong><small>wartość może być ujemna</small></div>
              <div class="rk-loop-result"><span>Długość z budżetu</span><strong id="rk-loop-result-max-length">—</strong><small>dla niezmienionego przepływu</small></div>
              <div class="rk-loop-result"><span>Liczba Reynoldsa</span><strong id="rk-loop-result-reynolds">—</strong><small id="rk-loop-result-regime">—</small></div>
            </div>

            <div class="rk-loop-status" id="rk-loop-status">
              <span class="rk-loop-status-icon" id="rk-loop-status-icon">✓</span>
              <div>
                <strong id="rk-loop-status-title">Trwa obliczanie</strong>
                <p id="rk-loop-status-copy">Wynik pojawi się po przeliczeniu danych.</p>
              </div>
            </div>

            <div class="rk-loop-diagnostics" id="rk-loop-diagnostics"></div>
          </div>

          <div class="rk-loop-tool-panel">
            <h3>Spadek ciśnienia a długość pętli</h3>
            <p>Krzywe porównują popularne średnice przy tym samym przepływie. Pozioma linia pokazuje wpisany budżet, a punkt — analizowaną długość i wybraną rurę.</p>
            <div class="rk-loop-chart-wrap">
              <svg class="rk-loop-chart" id="rk-loop-chart" viewBox="0 0 920 430" role="img" aria-label="Wykres spadku ciśnienia w zależności od długości pętli"></svg>
              <div class="rk-loop-chart-legend" aria-hidden="true">
                <span class="rk-loop-legend-item"><i class="rk-loop-legend-line" style="background:#078fbe"></i>16 × 2,0</span>
                <span class="rk-loop-legend-item"><i class="rk-loop-legend-line" style="background:#17846d"></i>17 × 2,0</span>
                <span class="rk-loop-legend-item"><i class="rk-loop-legend-line" style="background:#ff6f3d"></i>20 × 2,0</span>
                <span class="rk-loop-legend-item"><i class="rk-loop-legend-line" style="height:2px;background:#d94b3d"></i>budżet ciśnienia</span>
              </div>
              <p class="rk-loop-chart-note">Wykres nie pokazuje charakterystyki pompy ani oporów wspólnej magistrali. Te elementy trzeba dodać podczas oceny najbardziej wymagającej drogi przepływu.</p>
            </div>
          </div>

          <div class="rk-loop-tool-panel rk-loop-tool-table">
            <h3>Te same warunki, różne średnice</h3>
            <p>Porównanie zachowuje identyczny przepływ, długość, temperaturę wody, opory dodatkowe i budżet ciśnienia. Dzięki temu widać wpływ samej średnicy wewnętrznej.</p>
            <div class="rk-loop-table-wrap">
              <table>
                <thead>
                  <tr>
                    <th>Rura</th>
                    <th>Średnica wewnętrzna</th>
                    <th>Prędkość</th>
                    <th>Gradient</th>
                    <th>Strata całkowita</th>
                    <th>Długość z budżetu</th>
                  </tr>
                </thead>
                <tbody id="rk-loop-comparison-body"></tbody>
              </table>
            </div>
          </div>

          <p class="rk-loop-tool-disclaimer"><strong>Zakres modelu:</strong> wynik jest wstępną analizą referencyjną jednego obwodu. Nie sprawdza mocy powierzchni grzewczej, temperatury posadzki, charakterystyki pompy, oporów magistrali, filtrów, źródła ciepła ani zachowania zaworów przy częściowo zamkniętych pętlach. Nie zastępuje projektu i dokumentacji konkretnego systemu.</p>
        </div>
      </section>

      <aside class="rk-loop-cta" aria-label="Projekt z obliczoną hydrauliką pętli">
        <span class="rk-loop-kicker" style="color:#7ff1ff">Wynik jednej pętli to dopiero początek</span>
        <div class="rk-loop-cta-title" role="heading" aria-level="2">Analizator nie zna całej drogi krytycznej Twojej instalacji</div>
        <p>Narzędzie sprawdza jeden obwód dla wprowadzonych danych, ale nie zna przebiegu wszystkich pętli, oporów magistrali, rozdzielacza, zaworów, krzywej pompy ani wymaganych nastaw. Jeżeli chcesz otrzymać pętle naniesione na rzut wraz z długościami, przepływami, stratami ciśnienia i nastawami rozdzielacza, potrzebny jest indywidualny projekt.</p>
        <a class="rk-loop-cta-button rk-loop-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt z obliczoną hydrauliką pętli</a>
        <small class="rk-loop-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
      </aside>

      <section class="rk-loop-section" id="rk-loop-parallel">
        <span class="rk-loop-kicker">Rozdzielacz i pompa</span>
        <h2>Jak pracują równoległe pętle i droga krytyczna?</h2>
        <p class="rk-loop-intro">Pętle podłączone do wspólnego rozdzielacza są gałęziami równoległymi. Nie dodajemy do siebie ich strat ciśnienia. Sumujemy natomiast przepływy obwodów pracujących jednocześnie.</p>

        <div class="rk-loop-grid-3">
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Ciśnienie</span>
            <h3>Każda pętla ma tę samą różnicę pomiędzy belkami</h3>
            <p>Przepływ w gałęzi wynika z jej oporu i położenia zaworu. Nie opisujemy tego jako „uciekania całego ciśnienia” do krótkiej pętli.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Przepływ całkowity</span>
            <h3>Pompa obsługuje sumę aktywnych obwodów</h3>
            <p>Jeżeli dziesięć pętli wymaga po 1,5 l/min, przepływ rozdzielacza wynosi łącznie około 15 l/min.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Wysokość podnoszenia</span>
            <h3>Liczy się najbardziej wymagająca droga</h3>
            <p>Do krytycznej pętli dodaje się opory wspólnej magistrali, źródła, filtrów, zaworów i rozdzielacza.</p>
          </article>
        </div>

        <p>Dobór całego urządzenia możesz prześledzić w osobnym <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulatorze pompy obiegowej do ogrzewania podłogowego</a>. Nie należy dobierać pompy wyłącznie do liczby sekcji rozdzielacza ani zwiększać jej biegu bez sprawdzenia punktu pracy.</p>
      </section>

      <section class="rk-loop-section" id="rk-loop-diameters">
        <span class="rk-loop-kicker">Liczy się światło przepływu</span>
        <h2>Rura 16 × 2, 16 × 2,2, 17 × 2 i 20 × 2 — co się zmienia?</h2>
        <p class="rk-loop-intro">Porównanie rur musi opierać się na rzeczywistej średnicy wewnętrznej oraz danych konkretnego wyrobu. Oznaczenie handlowe nie jest kompletną charakterystyką hydrauliczną.</p>

        <div class="rk-loop-table-wrap">
          <table>
            <thead>
              <tr>
                <th>Wymiar nominalny</th>
                <th>Średnica wewnętrzna z geometrii</th>
                <th>Znaczenie hydrauliczne</th>
                <th>Wniosek projektowy</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td data-label="Wymiar nominalny"><strong>16 × 2,0 mm</strong></td>
                <td data-label="Średnica wewnętrzna">około 12,0 mm</td>
                <td data-label="Znaczenie">Popularny punkt odniesienia dla pętli podłogowych.</td>
                <td data-label="Wniosek">Zakres 80–100 m może być kontrolą wstępną, ale wymaga obliczenia przepływu i oporów.</td>
              </tr>
              <tr>
                <td data-label="Wymiar nominalny"><strong>16 × 2,2 mm</strong></td>
                <td data-label="Średnica wewnętrzna">około 11,6 mm</td>
                <td data-label="Znaczenie">Mniejsze światło zwiększa prędkość i opór przy tym samym przepływie.</td>
                <td data-label="Wniosek">Nie wolno kopiować wyniku obliczonego dla rury 16 × 2,0 mm.</td>
              </tr>
              <tr>
                <td data-label="Wymiar nominalny"><strong>17 × 2,0 mm</strong></td>
                <td data-label="Średnica wewnętrzna">około 13,0 mm</td>
                <td data-label="Znaczenie">Większe światło może zmniejszyć spadek ciśnienia.</td>
                <td data-label="Wniosek">Nie oznacza automatycznego pozwolenia na konkretną długość bez pozostałych danych.</td>
              </tr>
              <tr>
                <td data-label="Wymiar nominalny"><strong>20 × 2,0 mm</strong></td>
                <td data-label="Średnica wewnętrzna">około 16,0 mm</td>
                <td data-label="Znaczenie">Znacznie mniejszy opór przy tym samym przepływie.</td>
                <td data-label="Wniosek">Trzeba równocześnie uwzględnić system podłogi, promień gięcia, wysokość konstrukcji i sposób wykonania.</td>
              </tr>
            </tbody>
          </table>
        </div>

        <div class="rk-loop-note rk-loop-warning">
          <h3>Wymiary geometryczne nie zastępują dokumentacji</h3>
          <p>Rzeczywista średnica, tolerancje, dopuszczalne promienie gięcia, temperatura i ciśnienie pracy muszą pochodzić z dokumentacji zastosowanej rury. W artykule nie linkujemy do producentów ani sklepów.</p>
        </div>
      </section>

      <section class="rk-loop-section" id="rk-loop-balancing">
        <span class="rk-loop-kicker">Nie wyrównuj metrów na siłę</span>
        <h2>Czy pętle na jednym rozdzielaczu muszą mieć podobną długość?</h2>
        <p class="rk-loop-intro">Podobne długości mogą ułatwić regulację, ale nie istnieje uniwersalna zasada, że różnica musi zawsze mieścić się w 10, 15 albo 20%. Każdy obwód powinien otrzymać przepływ wynikający z przypisanej mu mocy i ΔT.</p>

        <div class="rk-loop-grid-2">
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Dobra praktyka</span>
            <h3>Projektuj pętle możliwe do wyregulowania</h3>
            <p>Trzeba sprawdzić wymagany przepływ, opór gałęzi, zakres rotametru lub zaworu oraz dostępne ciśnienie. Krótszą pętlę można zdławić do wartości projektowej, jeżeli armatura pozwala na stabilną regulację.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Zła praktyka</span>
            <h3>Nie dodawaj rury tylko dla równej liczby metrów</h3>
            <p>Niepotrzebne prowadzenie przewodu zwiększa materiał, pojemność i opór. Celem nie są identyczne długości, lecz poprawne przepływy i równomierna praca instalacji.</p>
          </article>
        </div>

        <p>Do regulacji służą przepływomierze i zawory. Zobacz, jak prawidłowo <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">odczytać i ustawić rotametr na rozdzielaczu</a>.</p>
      </section>

      <section class="rk-loop-section" id="rk-loop-split">
        <span class="rk-loop-kicker">Podział wynika z kilku kryteriów</span>
        <h2>Kiedy pomieszczenie trzeba podzielić na dwie lub więcej pętli?</h2>
        <p class="rk-loop-intro">O liczbie obwodów nie decyduje wyłącznie metraż. Podział powinien jednocześnie spełnić wymagania cieplne, geometryczne i hydrauliczne.</p>

        <div class="rk-loop-grid-3">
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Kryterium 1</span>
            <h3>Za duża ilość rury</h3>
            <p>Powierzchnia czynna i rozstaw prowadzą do długości, która przy wymaganym przepływie przekracza przyjęty budżet ciśnienia.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Kryterium 2</span>
            <h3>Za duża moc jednej pętli</h3>
            <p>Duża moc przy niewielkim ΔT wymaga przepływu powodującego wysoką prędkość albo stratę ciśnienia.</p>
          </article>
          <article class="rk-loop-card">
            <span class="rk-loop-card-number">Kryterium 3</span>
            <h3>Geometria i dylatacje</h3>
            <p>Układ pomieszczenia, strefy bez rur, przejścia przez drzwi i pola jastrychu mogą wymagać osobnych obwodów niezależnie od samej hydrauliki.</p>
          </article>
        </div>

        <p>Dla dużej otwartej strefy warto przejść do praktycznego poradnika <a href="https://projekt-ogrzewania.pl/salon-ile-petli-podlogowki/">ile pętli podłogówki zaplanować w salonie</a>. Liczbę obwodów należy ustalić przed wykonaniem jastrychu, gdy można jeszcze bezpiecznie zmienić przebieg instalacji.</p>
      </section>

      <section class="rk-loop-section" id="rk-loop-diagnosis">
        <span class="rk-loop-kicker">Najpierw pomiar, później decyzja</span>
        <h2>Czy istniejąca pętla 120 albo 140 m może działać?</h2>
        <p class="rk-loop-intro">Sama długość nie pozwala wydać wiarygodnego wyroku. Długi obwód może mieć problem z osiągnięciem projektowego przepływu, ale diagnoza powinna zacząć się od danych, a nie od automatycznej wymiany pompy.</p>

        <div class="rk-loop-steps">
          <article class="rk-loop-step">
            <div><h3>Ustal rzeczywistą długość i średnicę wewnętrzną</h3><p>Sprawdź dokumentację powykonawczą, oznaczenie rury i przebieg dobiegów. Bez tych informacji obliczenie będzie tylko zgadywaniem.</p></div>
          </article>
          <article class="rk-loop-step">
            <div><h3>Sprawdź wymagany oraz rzeczywisty przepływ</h3><p>Odczytaj rotametr przy otwartej pętli, stabilnej pracy pompy i odpowietrzonej instalacji. Porównaj odczyt z wartością projektową.</p></div>
          </article>
          <article class="rk-loop-step">
            <div><h3>Zmierz temperaturę zasilania i powrotu</h3><p>ΔT pomaga ocenić, czy obwód przenosi zakładaną moc. Nie przypisuj długiej pętli z góry różnicy 10 K.</p></div>
          </article>
          <article class="rk-loop-step">
            <div><h3>Sprawdź zawory, siłownik, filtr i zapowietrzenie</h3><p>Brak przepływu może wynikać z zamknięcia, zanieczyszczenia, powietrza albo nieprawidłowej nastawy, a nie wyłącznie z długości rury.</p></div>
          </article>
          <article class="rk-loop-step">
            <div><h3>Porównaj punkt pracy pompy z drogą krytyczną</h3><p>Nie zwiększaj biegu w ciemno. Oceń wymagany przepływ całkowity, wysokość podnoszenia oraz zachowanie pozostałych obwodów.</p></div>
          </article>
        </div>

        <div class="rk-loop-note rk-loop-danger">
          <h3>Mocniejsza pompa nie jest automatycznym „ratunkiem”</h3>
          <p>Może zwiększyć dostępne ciśnienie, ale również zmienić przepływy wszystkich gałęzi, zwiększyć hałas i pobór energii. Jeżeli problemem jest zbyt mała powierzchnia grzewcza albo błędny rozstaw, sama pompa tego nie naprawi. Więcej objawów znajdziesz w opracowaniu o <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/">za długiej pętli podłogówki</a>.</p>
        </div>
      </section>

      <section class="rk-loop-section" id="rk-loop-errors">
        <span class="rk-loop-kicker">Bez skrótów projektowych</span>
        <h2>Najczęstsze błędy przy ustalaniu maksymalnej długości pętli</h2>

        <div class="rk-loop-errors">
          <article class="rk-loop-error"><b>Błąd 01</b><h3>„Norma pozwala na 100 m”</h3><p>Jedna długość nie zastępuje wyznaczenia przepływu, oporów i dostępnego ciśnienia.</p></article>
          <article class="rk-loop-error"><b>Błąd 02</b><h3>Pomijanie dobiegów</h3><p>Odcinki od rozdzielacza do pola i z powrotem należą do tej samej drogi przepływu.</p></article>
          <article class="rk-loop-error"><b>Błąd 03</b><h3>Dobór z samej średnicy zewnętrznej</h3><p>O hydraulice decyduje między innymi rzeczywista średnica wewnętrzna.</p></article>
          <article class="rk-loop-error"><b>Błąd 04</b><h3>Przypisywanie stałego ΔT do długości</h3><p>Różnica temperatur wynika z mocy oddawanej przez obwód i rzeczywistego przepływu.</p></article>
          <article class="rk-loop-error"><b>Błąd 05</b><h3>Sumowanie strat równoległych pętli</h3><p>Sumuje się przepływy gałęzi, natomiast ciśnienie sprawdza się na najbardziej wymagającej drodze.</p></article>
          <article class="rk-loop-error"><b>Błąd 06</b><h3>Jednakowy przepływ na wszystkich rotametrach</h3><p>Każda pętla może mieć inną moc i inną wartość projektową.</p></article>
          <article class="rk-loop-error"><b>Błąd 07</b><h3>Większa pompa bez obliczeń</h3><p>Zmiana urządzenia może zamaskować część problemów i rozregulować pozostałe obwody.</p></article>
          <article class="rk-loop-error"><b>Błąd 08</b><h3>Wyrównywanie długości zbędną rurą</h3><p>Nie projektujemy dodatkowych metrów wyłącznie po to, aby wszystkie obwody wyglądały podobnie w tabeli.</p></article>
        </div>
      </section>

      <section class="rk-loop-section" id="rk-loop-checklist">
        <span class="rk-loop-kicker">Przed ułożeniem rur</span>
        <h2>Checklista weryfikacji długości pętli</h2>
        <p class="rk-loop-intro">Poniższa kolejność ogranicza ryzyko, że długość zostanie wybrana z przyzwyczajenia zamiast z obliczeń.</p>

        <div class="rk-loop-steps">
          <article class="rk-loop-step"><div><h3>Oblicz stratę ciepła pomieszczenia</h3><p>Bez wymaganej mocy nie da się uczciwie wyznaczyć przepływu ani sprawdzić, czy powierzchnia podłogi wystarczy.</p></div></article>
          <article class="rk-loop-step"><div><h3>Wyznacz powierzchnię czynną i rozstaw rur</h3><p>Odejmij trwałą zabudowę oraz pola wyłączone z ogrzewania. Rozstaw sprawdź cieplnie.</p></div></article>
          <article class="rk-loop-step"><div><h3>Rozrysuj rzeczywisty przebieg wraz z dobiegami</h3><p>Uwzględnij przejścia przez drzwi, dylatacje, strefy brzegowe i drogę powrotną do rozdzielacza.</p></div></article>
          <article class="rk-loop-step"><div><h3>Przypisz moc i ΔT do każdego obwodu</h3><p>Na tej podstawie oblicz wymagany przepływ, zamiast ustawiać wszystkim pętlom jedną wartość.</p></div></article>
          <article class="rk-loop-step"><div><h3>Policz opór rury oraz elementów miejscowych</h3><p>Użyj średnicy wewnętrznej, właściwości medium, rzeczywistej długości i danych armatury.</p></div></article>
          <article class="rk-loop-step"><div><h3>Sprawdź drogę krytyczną i pompę</h3><p>Dodaj opory elementów wspólnych i porównaj wymagany punkt Q/H z charakterystyką urządzenia.</p></div></article>
          <article class="rk-loop-step"><div><h3>Przygotuj tabelę przepływów i nastaw</h3><p>Każda pętla powinna mieć numer, pomieszczenie, długość, moc, przepływ i wartość do ustawienia na rozdzielaczu.</p></div></article>
          <article class="rk-loop-step"><div><h3>Zweryfikuj układ przed jastrychem</h3><p>Po próbie szczelności porównaj wykonanie z projektem i nanieś zmiany do dokumentacji powykonawczej.</p></div></article>
        </div>
      </section>

      <section class="rk-loop-section" id="rk-loop-faq">
        <span class="rk-loop-kicker">Najczęstsze pytania</span>
        <h2>FAQ — maksymalna długość pętli podłogówki</h2>

        <div class="rk-loop-faq">
          <details>
            <summary>Ile maksymalnie metrów może mieć pętla z rury 16 × 2 mm?</summary>
            <div class="rk-loop-faq-answer"><p>Zakres około 80–100 m jest często stosowany jako praktyczny punkt kontroli, ale nie jest uniwersalnym limitem. Poprawność pętli zależy od wymaganego przepływu, średnicy wewnętrznej, temperatury i rodzaju medium, oporów armatury oraz dostępnego ciśnienia.</p></div>
          </details>
          <details>
            <summary>Czy pętla 120 m z rury 16 mm będzie grzać?</summary>
            <div class="rk-loop-faq-answer"><p>Może działać, ale sama długość nie wystarcza do oceny. Trzeba obliczyć wymagany przepływ, prędkość, spadek ciśnienia i sprawdzić całą drogę krytyczną wraz z pompą. Przy dużym przepływie taki obwód może być trudny do prawidłowej regulacji.</p></div>
          </details>
          <details>
            <summary>Co zrobić, jeśli wykonano już pętlę 140 m?</summary>
            <div class="rk-loop-faq-answer"><p>Najpierw należy ustalić rzeczywisty przepływ, temperaturę zasilania i powrotu, opór obwodu, ustawienie zaworów, odpowietrzenie oraz punkt pracy pompy. Większa pompa nie jest automatycznie właściwym rozwiązaniem. Sposób naprawy zależy od przyczyny i etapu wykonania podłogi.</p></div>
          </details>
          <details>
            <summary>Czy dobiegi wliczają się do długości pętli?</summary>
            <div class="rk-loop-faq-answer"><p>Tak. Do całkowitej długości wlicza się odcinek od belki zasilającej do pola grzewczego, rurę w polu oraz powrót do belki powrotnej. Każdy z tych odcinków powoduje stratę ciśnienia.</p></div>
          </details>
          <details>
            <summary>Czy norma PN-EN 1264 ustala 100 m dla rury 16 mm?</summary>
            <div class="rk-loop-faq-answer"><p>Nie należy przedstawiać 100 m jako uniwersalnego limitu normowego. Projektowanie wymaga uwzględnienia wydajności powierzchni, przepływu, temperatur, oporów hydraulicznych i warunków konkretnego systemu.</p></div>
          </details>
          <details>
            <summary>Czy wszystkie pętle powinny mieć jednakową długość?</summary>
            <div class="rk-loop-faq-answer"><p>Nie. Podobne długości mogą ułatwiać regulację, lecz każda pętla powinna otrzymać przepływ wynikający z jej mocy i ΔT. Możliwość regulacji zależy od oporów oraz zakresu zastosowanych zaworów i rotametrów.</p></div>
          </details>
          <details>
            <summary>Czy większa średnica pozwala zawsze ułożyć dłuższą pętlę?</summary>
            <div class="rk-loop-faq-answer"><p>Większa średnica wewnętrzna zmniejsza prędkość i zwykle ogranicza spadek ciśnienia przy tym samym przepływie. Nie wyznacza jednak samodzielnie dopuszczalnej długości. Trzeba uwzględnić cały system, konstrukcję podłogi i warunki wykonania.</p></div>
          </details>
          <details>
            <summary>Czy długa pętla zawsze ma zimny koniec?</summary>
            <div class="rk-loop-faq-answer"><p>Nie. Spadek temperatury wody zależy od mocy oddawanej przez obwód i rzeczywistego przepływu. Nadmierny opór może ograniczyć przepływ i zwiększyć ΔT, ale sama liczba metrów nie narzuca jednej temperatury końca.</p></div>
          </details>
          <details>
            <summary>Czy mocniejsza pompa rozwiąże problem za długiej pętli?</summary>
            <div class="rk-loop-faq-answer"><p>Tylko w niektórych przypadkach i po obliczeniu całego punktu pracy. Zwiększenie ciśnienia wpływa na wszystkie obwody, może zwiększyć hałas i nie naprawi niewystarczającej powierzchni grzewczej, błędnego rozstawu ani problemu z zaworem lub zapowietrzeniem.</p></div>
          </details>
          <details>
            <summary>Czy można połączyć rurę pod jastrychem, aby wydłużyć pętlę?</summary>
            <div class="rk-loop-faq-answer"><p>Pętle projektuje się jako ciągłe odcinki od rozdzielacza do rozdzielacza. Każde połączenie pod jastrychem musi być ocenione zgodnie z wymaganiami zastosowanego systemu i dokumentacją techniczną. Wydłużanie obwodu złączką nie rozwiązuje problemu hydraulicznego.</p></div>
          </details>
        </div>
      </section>

      <section class="rk-loop-section" id="rk-loop-sources">
        <span class="rk-loop-kicker">Dokumenty odniesienia</span>
        <h2>Źródła i zakres techniczny opracowania</h2>
        <p class="rk-loop-intro">Linki zewnętrzne prowadzą wyłącznie do oficjalnych organizacji normalizacyjnych. Artykuł nie odsyła do producentów, sklepów ani konkurencyjnych serwisów.</p>

        <div class="rk-loop-sources">
          <article class="rk-loop-source">
            <b>ISO 11855-3:2021</b>
            <p>Projektowanie i wymiarowanie wbudowanych systemów ogrzewania oraz chłodzenia płaszczyznowego.</p>
            <a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">Oficjalna karta standardu ISO 11855-3:2021</a>
          </article>
          <article class="rk-loop-source">
            <b>ISO 11855-2:2021</b>
            <p>Wyznaczanie projektowej wydajności grzewczej i chłodniczej systemów płaszczyznowych.</p>
            <a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">Oficjalna karta standardu ISO 11855-2:2021</a>
          </article>
          <article class="rk-loop-source">
            <b>BS EN 1264-3:2021</b>
            <p>Wymiarowanie wodnych systemów ogrzewania i chłodzenia wbudowanych w powierzchnie przegród.</p>
            <a href="https://knowledge.bsigroup.com/products/water-based-surface-embedded-heating-and-cooling-systems-dimensioning-1" target="_blank" rel="nofollow noopener noreferrer">Oficjalna karta BS EN 1264-3:2021</a>
          </article>
        </div>

        <div class="rk-loop-note">
          <h3>Zakres odpowiedzialności</h3>
          <p>Analizator jest modelem edukacyjnym. W projekcie wykonawczym należy użyć danych konkretnej rury, rozdzielacza, zaworów, medium i pompy oraz sprawdzić wymagania systemu, warunki budynku i rzeczywisty przebieg instalacji.</p>
        </div>

        <div class="rk-loop-update">Ostatnia aktualizacja merytoryczna: 1 września 2026 r.</div>
      </section>
    </main>

    <section class="rk-loop-author" id="rk-loop-author" aria-label="Autor opracowania">
      <input type="radio" name="rk-loop-author-tabs" id="rk-loop-author-about" checked>
      <input type="radio" name="rk-loop-author-tabs" id="rk-loop-author-exp">
      <input type="radio" name="rk-loop-author-tabs" id="rk-loop-author-sites">

      <header class="rk-loop-author-head">
        <div>
          <span class="rk-loop-kicker">Autor opracowania</span>
          <h2>Robert Kucharski</h2>
          <p>Projektant instalacji sanitarnych • specjalista HVAC i ogrzewania podłogowego</p>
        </div>
        <span class="rk-loop-author-mark">HYDRAULIKA • HVAC</span>
      </header>

      <div class="rk-loop-author-layout">
        <aside class="rk-loop-author-side">
          <div class="rk-loop-author-photo">
            <img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji ogrzewania podłogowego" width="600" height="600" loading="lazy" decoding="async">
          </div>
          <div class="rk-loop-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <div class="rk-loop-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
          <div class="rk-loop-author-social-label">Profile autora</div>
          <div class="rk-loop-author-social" aria-label="Profile Roberta Kucharskiego w mediach społecznościowych">
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Robert Kucharski na LinkedIn" title="LinkedIn">
              <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5.2 7.7H1.6V22h3.6V7.7ZM3.4 2A2.1 2.1 0 1 0 3.4 6.2 2.1 2.1 0 0 0 3.4 2ZM22.4 13.8c0-4.3-2.3-6.3-5.4-6.3a4.7 4.7 0 0 0-4.2 2.3V7.7H9.2V22h3.6v-7.1c0-1.9.4-3.7 2.7-3.7 2.3 0 2.3 2.1 2.3 3.8v7h3.6l1-8.2Z"></path></svg>
            </a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Projekt-Ogrzewania.pl na Facebooku" title="Facebook">
              <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M14.2 22v-9h3l.5-3.5h-3.5V7.3c0-1 .3-1.7 1.8-1.7h1.9V2.5c-.3 0-1.5-.1-2.8-.1-2.8 0-4.7 1.7-4.7 4.8v2.3H7.2V13h3.2v9h3.8Z"></path></svg>
            </a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Projekt HVAC w serwisie X" title="X">
              <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 2H22l-6.8 7.8L23.2 22H17l-4.9-6.4L6.5 22H3.3l7.3-8.4L2.8 2h6.4l4.4 5.8L18.9 2Zm-1.1 17.8h1.7L8.3 4.1H6.5l11.3 15.7Z"></path></svg>
            </a>
          </div>
        </aside>

        <div class="rk-loop-author-main">
          <blockquote class="rk-loop-author-quote">
            <p>„Długość pętli jest tylko jednym z parametrów. Dopiero połączenie mocy, przepływu, średnicy, oporów i dostępnego ciśnienia pozwala ocenić, czy obwód będzie pracował prawidłowo.”</p>
          </blockquote>

          <div class="rk-loop-author-tabs" role="tablist" aria-label="Informacje o autorze">
            <label class="rk-loop-author-tab" for="rk-loop-author-about">O autorze</label>
            <label class="rk-loop-author-tab" for="rk-loop-author-exp">Doświadczenie</label>
            <label class="rk-loop-author-tab" for="rk-loop-author-sites">Portale</label>
          </div>

          <div class="rk-loop-author-panel rk-loop-author-panel-about">
            <p>Robert Kucharski opracowuje projekty wodnego ogrzewania podłogowego dla domów nowych i modernizowanych. Łączy obliczenia strat ciepła z doborem temperatury zasilania i powrotu, rozstawów rur, powierzchni czynnej, długości obwodów oraz przepływów.</p>
            <p>Materiały edukacyjne przygotowuje z perspektywy dokumentacji, którą musi później wykorzystać instalator na budowie. Dlatego w poradnikach oddziela założenia wstępne od parametrów wymagających obliczenia konkretnego układu.</p>
          </div>

          <div class="rk-loop-author-panel rk-loop-author-panel-exp">
            <p>W praktyce projektowej analizuje nie tylko pojedynczą pętlę, ale całą drogę krytyczną: magistralę, rozdzielacz, zawory, przepływy wszystkich równoległych obwodów, straty ciśnienia i wymagany punkt pracy pompy.</p>
            <p>Dokumentacja zawiera przebieg pętli naniesiony na rzut, długości, przypisane moce, przepływy, nastawy rozdzielacza oraz dane potrzebne do uruchomienia i późniejszej kontroli instalacji.</p>
          </div>

          <div class="rk-loop-author-panel rk-loop-author-panel-sites">
            <p>Robert Kucharski jest właścicielem trzech serwisów branżowych. Informacja o powiązaniu portali jest podawana jawnie, aby czytelnik znał autorstwo, doświadczenie i kontekst publikowanych materiałów.</p>
            <div class="rk-loop-site-links">
              <a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a>
              <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a>
              <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>
            </div>
          </div>
        </div>
      </div>
    </section>

    <section class="rk-loop-final-cta" aria-label="Końcowe zamówienie projektu ogrzewania podłogowego">
      <span class="rk-loop-kicker" style="color:#7ff1ff">Zamknij długości i przepływy przed wykonaniem jastrychu</span>
      <div class="rk-loop-cta-title" role="heading" aria-level="2">Otrzymaj projekt z każdą pętlą rozrysowaną i policzoną</div>
      <p>Projekt obejmuje straty ciepła, powierzchnie czynne, rozstawy rur, długości obwodów, przepływy, spadki ciśnienia, dobór rozdzielaczy i nastawy. Instalator otrzymuje konkretne wartości zamiast jednej ogólnej zasady „maksymalnie 100 m”.</p>
      <a class="rk-loop-cta-button rk-loop-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
      <small class="rk-loop-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#article",
      "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/",
      "headline": "Maksymalna długość pętli ogrzewania podłogowego – od czego naprawdę zależy?",
      "description": "Techniczny poradnik i analizator długości pętli ogrzewania podłogowego uwzględniający przepływ, średnicę wewnętrzną, spadek ciśnienia i budżet hydrauliczny.",
      "inLanguage": "pl-PL",
      "dateModified": "2026-09-01",
      "mainEntityOfPage": {"@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#webpage"},
      "author": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"},
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "proficiencyLevel": "Expert",
      "about": [
        {"@type": "Thing", "name": "Maksymalna długość pętli ogrzewania podłogowego"},
        {"@type": "Thing", "name": "Opory hydrauliczne"},
        {"@type": "Thing", "name": "Spadek ciśnienia"},
        {"@type": "Thing", "name": "Równoważenie hydrauliczne"},
        {"@type": "Thing", "name": "Ogrzewanie podłogowe"}
      ],
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"}
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#webpage",
      "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/",
      "name": "Maksymalna długość pętli ogrzewania podłogowego",
      "description": "Jak sprawdzić maksymalną długość pętli podłogówki z przepływu, średnicy i spadku ciśnienia.",
      "inLanguage": "pl-PL",
      "dateModified": "2026-09-01",
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"},
      "breadcrumb": {"@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#breadcrumb"},
      "mainEntity": [
        {"@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#application"},
        {"@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#howto"},
        {"@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#faq"}
      ]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#breadcrumb",
      "itemListElement": [
        {"@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/"},
        {"@type": "ListItem", "position": 2, "name": "Hydraulika", "item": "https://projekt-ogrzewania.pl/category/hydraulika/"},
        {"@type": "ListItem", "position": 3, "name": "Maksymalna długość pętli ogrzewania podłogowego", "item": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/"}
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#application",
      "name": "Analizator hydraulicznej długości pętli",
      "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#rk-loop-analyzer",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "Obsługa JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "description": "Narzędzie oblicza przepływ, prędkość, spadek ciśnienia oraz hydrauliczną długość pętli dla wprowadzonego budżetu ciśnienia."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#howto",
      "name": "Jak sprawdzić maksymalną długość pętli ogrzewania podłogowego?",
      "description": "Kolejność weryfikacji cieplnej, geometrycznej i hydraulicznej pętli przed wykonaniem jastrychu.",
      "inLanguage": "pl-PL",
      "step": [
        {"@type": "HowToStep", "position": 1, "name": "Oblicz stratę ciepła pomieszczenia", "text": "Ustal wymaganą moc cieplną pomieszczenia i udział analizowanej pętli."},
        {"@type": "HowToStep", "position": 2, "name": "Wyznacz powierzchnię czynną i rozstaw rur", "text": "Odejmij trwałą zabudowę i sprawdź cieplnie wybrany rozstaw."},
        {"@type": "HowToStep", "position": 3, "name": "Rozrysuj przebieg wraz z dobiegami", "text": "Uwzględnij całą długość od belki zasilającej do belki powrotnej."},
        {"@type": "HowToStep", "position": 4, "name": "Przypisz moc i delta T", "text": "Oblicz wymagany przepływ każdego obwodu z jego mocy i projektowej różnicy temperatur."},
        {"@type": "HowToStep", "position": 5, "name": "Policz opory", "text": "Uwzględnij średnicę wewnętrzną, medium, długość oraz opory rozdzielacza i armatury."},
        {"@type": "HowToStep", "position": 6, "name": "Sprawdź drogę krytyczną i pompę", "text": "Dodaj elementy wspólne i porównaj wymagany punkt pracy z charakterystyką pompy."},
        {"@type": "HowToStep", "position": 7, "name": "Przygotuj tabelę przepływów", "text": "Zapisz dla każdej pętli długość, moc, przepływ i wymaganą nastawę rozdzielacza."},
        {"@type": "HowToStep", "position": 8, "name": "Zweryfikuj wykonanie przed jastrychem", "text": "Porównaj rzeczywisty przebieg z projektem i nanieś zmiany do dokumentacji powykonawczej."}
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {"@type": "Question", "name": "Ile maksymalnie metrów może mieć pętla z rury 16 × 2 mm?", "acceptedAnswer": {"@type": "Answer", "text": "Zakres około 80–100 m jest często stosowany jako praktyczny punkt kontroli, ale nie jest uniwersalnym limitem. Poprawność pętli zależy od wymaganego przepływu, średnicy wewnętrznej, temperatury i rodzaju medium, oporów armatury oraz dostępnego ciśnienia."}},
        {"@type": "Question", "name": "Czy pętla 120 m z rury 16 mm będzie grzać?", "acceptedAnswer": {"@type": "Answer", "text": "Może działać, ale sama długość nie wystarcza do oceny. Trzeba obliczyć wymagany przepływ, prędkość, spadek ciśnienia i sprawdzić całą drogę krytyczną wraz z pompą."}},
        {"@type": "Question", "name": "Co zrobić, jeśli wykonano już pętlę 140 m?", "acceptedAnswer": {"@type": "Answer", "text": "Najpierw należy ustalić rzeczywisty przepływ, temperaturę zasilania i powrotu, opór obwodu, ustawienie zaworów, odpowietrzenie oraz punkt pracy pompy. Większa pompa nie jest automatycznie właściwym rozwiązaniem."}},
        {"@type": "Question", "name": "Czy dobiegi wliczają się do długości pętli?", "acceptedAnswer": {"@type": "Answer", "text": "Tak. Do całkowitej długości wlicza się odcinek od belki zasilającej do pola grzewczego, rurę w polu oraz powrót do belki powrotnej."}},
        {"@type": "Question", "name": "Czy norma PN-EN 1264 ustala 100 m dla rury 16 mm?", "acceptedAnswer": {"@type": "Answer", "text": "Nie należy przedstawiać 100 m jako uniwersalnego limitu normowego. Projektowanie wymaga uwzględnienia wydajności powierzchni, przepływu, temperatur, oporów hydraulicznych i warunków konkretnego systemu."}},
        {"@type": "Question", "name": "Czy wszystkie pętle powinny mieć jednakową długość?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Podobne długości mogą ułatwiać regulację, lecz każda pętla powinna otrzymać przepływ wynikający z jej mocy i delta T."}},
        {"@type": "Question", "name": "Czy większa średnica pozwala zawsze ułożyć dłuższą pętlę?", "acceptedAnswer": {"@type": "Answer", "text": "Większa średnica wewnętrzna zwykle ogranicza spadek ciśnienia przy tym samym przepływie, ale nie wyznacza samodzielnie dopuszczalnej długości."}},
        {"@type": "Question", "name": "Czy długa pętla zawsze ma zimny koniec?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Spadek temperatury wody zależy od mocy oddawanej przez obwód i rzeczywistego przepływu. Sama liczba metrów nie narzuca jednej temperatury końca."}},
        {"@type": "Question", "name": "Czy mocniejsza pompa rozwiąże problem za długiej pętli?", "acceptedAnswer": {"@type": "Answer", "text": "Tylko w niektórych przypadkach i po obliczeniu całego punktu pracy. Zwiększenie ciśnienia wpływa na wszystkie obwody i nie naprawi błędów cieplnych ani wykonawczych."}},
        {"@type": "Question", "name": "Czy można połączyć rurę pod jastrychem, aby wydłużyć pętlę?", "acceptedAnswer": {"@type": "Answer", "text": "Pętle projektuje się jako ciągłe odcinki od rozdzielacza do rozdzielacza. Każde połączenie pod jastrychem musi być ocenione zgodnie z wymaganiami zastosowanego systemu. Wydłużanie obwodu złączką nie rozwiązuje problemu hydraulicznego."}}
      ]
    },
    {
      "@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, specjalista HVAC i ogrzewania podłogowego",
      "worksFor": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "affiliation": [
        {"@id": "https://projekt-ogrzewania.pl/#organization"},
        {"@id": "https://remont.biz.pl/#organization"},
        {"@id": "https://sobir.pl/#organization"}
      ],
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "hydraulika instalacji grzewczych",
        "obliczenia strat ciepła",
        "dobór pomp obiegowych",
        "równoważenie hydrauliczne",
        "projektowanie instalacji sanitarnych"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"}
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"}
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"}
    },
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt-Ogrzewania.pl",
      "inLanguage": "pl-PL",
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"}
    }
  ]
}
</script>

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

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

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

  function readNumber(id, fallback) {
    var element = byId(id);
    var raw;
    var value;
    if (!element) {
      return fallback;
    }
    raw = String(element.value).replace(",", ".");
    value = parseFloat(raw);
    if (!isFinite(value)) {
      return fallback;
    }
    return value;
  }

  function clamp(value, minimum, maximum) {
    if (value < minimum) {
      return minimum;
    }
    if (value > maximum) {
      return maximum;
    }
    return value;
  }

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

  function waterProperties(temperature) {
    var points = [
      {t: 10, rho: 999.7, mu: 0.001307},
      {t: 20, rho: 998.2, mu: 0.001002},
      {t: 30, rho: 995.7, mu: 0.000798},
      {t: 40, rho: 992.2, mu: 0.000653},
      {t: 50, rho: 988.1, mu: 0.000547},
      {t: 60, rho: 983.2, mu: 0.000466}
    ];
    var temp = clamp(temperature, 10, 60);
    var i;
    var low;
    var high;
    var fraction;

    for (i = 0; i < points.length - 1; i += 1) {
      low = points[i];
      high = points[i + 1];
      if (temp >= low.t) {
        if (temp <= high.t) {
          fraction = (temp - low.t) / (high.t - low.t);
          return {
            rho: low.rho + fraction * (high.rho - low.rho),
            mu: low.mu + fraction * (high.mu - low.mu)
          };
        }
      }
    }
    return {rho: points[5].rho, mu: points[5].mu};
  }

  function frictionFactor(reynolds, diameterM) {
    var roughnessM = 0.000007;
    var term;
    var logValue;
    if (reynolds <= 0) {
      return 0;
    }
    if (reynolds < 2300) {
      return 64 / reynolds;
    }
    term = roughnessM / (3.7 * diameterM) + 5.74 / Math.pow(reynolds, 0.9);
    logValue = Math.log(term) / Math.LN10;
    return 0.25 / Math.pow(logValue, 2);
  }

  function calculateHydraulics(flowLMin, diameterMm, lengthM, waterTemp, extraKpa, budgetKpa) {
    var props = waterProperties(waterTemp);
    var diameterM = diameterMm / 1000;
    var area = Math.PI * diameterM * diameterM / 4;
    var flowM3S = flowLMin / 60000;
    var velocity = flowM3S / area;
    var reynolds = props.rho * velocity * diameterM / props.mu;
    var factor = frictionFactor(reynolds, diameterM);
    var gradientPaM = factor / diameterM * props.rho * velocity * velocity / 2;
    var pipeLossKpa = gradientPaM * lengthM / 1000;
    var totalLossKpa = pipeLossKpa + extraKpa;
    var remainingKpa = budgetKpa - totalLossKpa;
    var availableForPipeKpa = budgetKpa - extraKpa;
    var maxLengthM = 0;

    if (availableForPipeKpa > 0) {
      if (gradientPaM > 0) {
        maxLengthM = availableForPipeKpa * 1000 / gradientPaM;
      }
    }

    return {
      rho: props.rho,
      mu: props.mu,
      diameterMm: diameterMm,
      velocity: velocity,
      reynolds: reynolds,
      factor: factor,
      gradientPaM: gradientPaM,
      pipeLossKpa: pipeLossKpa,
      totalLossKpa: totalLossKpa,
      remainingKpa: remainingKpa,
      maxLengthM: maxLengthM
    };
  }

  function getSelectedDiameter() {
    var pipe = byId("rk-loop-pipe");
    if (!pipe) {
      return 12;
    }
    if (pipe.value === "custom") {
      return clamp(readNumber("rk-loop-custom-id", 12), 6, 30);
    }
    return clamp(parseFloat(pipe.value), 6, 30);
  }

  function getFlow() {
    var mode = byId("rk-loop-mode").value;
    var power;
    var delta;
    if (mode === "flow") {
      return clamp(readNumber("rk-loop-known-flow", 1.72), 0.1, 8);
    }
    power = clamp(readNumber("rk-loop-power", 600), 50, 4000);
    delta = clamp(readNumber("rk-loop-delta", 5), 1, 20);
    return power / (69.78 * delta);
  }

  function updateFieldStates() {
    var mode = byId("rk-loop-mode").value;
    var custom = byId("rk-loop-pipe").value === "custom";
    byId("rk-loop-power").disabled = mode === "flow";
    byId("rk-loop-delta").disabled = mode === "flow";
    byId("rk-loop-known-flow").disabled = mode !== "flow";
    byId("rk-loop-custom-id").disabled = !custom;
  }

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

  function regimeLabel(reynolds) {
    if (reynolds < 2300) {
      return "przepływ laminarny";
    }
    if (reynolds < 4000) {
      return "obszar przejściowy";
    }
    return "przepływ turbulentny";
  }

  function setStatus(result, budgetKpa, lengthM) {
    var box = byId("rk-loop-status");
    var title = byId("rk-loop-status-title");
    var copy = byId("rk-loop-status-copy");
    var icon = byId("rk-loop-status-icon");
    var ratio = result.totalLossKpa / budgetKpa;

    box.className = "rk-loop-status";
    if (result.totalLossKpa <= budgetKpa) {
      if (ratio <= 0.85) {
        icon.textContent = "✓";
        title.textContent = "Pętla mieści się w przyjętym budżecie";
        copy.textContent = "Dla wpisanych danych całkowita strata jest niższa od założonego budżetu. To nie kończy doboru — trzeba jeszcze dodać elementy wspólne i sprawdzić punkt pracy pompy.";
      } else {
        box.className += " rk-loop-status-warning";
        icon.textContent = "!";
        title.textContent = "Wariant graniczny względem wpisanego budżetu";
        copy.textContent = "Obwód mieści się w założeniu, ale rezerwa jest mała. Zweryfikuj dane konkretnej rury, armatury, magistrali i pompy oraz rzeczywisty przebieg na rzucie.";
      }
    } else {
      box.className += " rk-loop-status-danger";
      icon.textContent = "×";
      title.textContent = "Pętla przekracza przyjęty budżet ciśnienia";
      copy.textContent = "Przy niezmienionym przepływie, średnicy i oporach dodatkowych długość " + formatNumber(lengthM, 0) + " m wymaga większej różnicy ciśnienia niż wpisano. Sprawdź podział obwodu i całą drogę krytyczną.";
    }
  }

  function diagnosticCard(title, copy) {
    var card = document.createElement("div");
    var heading = document.createElement("b");
    var text = document.createTextNode(copy);
    card.className = "rk-loop-diagnostic";
    heading.textContent = title;
    card.appendChild(heading);
    card.appendChild(text);
    return card;
  }

  function renderDiagnostics(result, budgetKpa, extraKpa, diameterMm, flowLMin) {
    var container = byId("rk-loop-diagnostics");
    var velocityCopy;
    var budgetCopy;
    var diameterCopy;

    while (container.firstChild) {
      container.removeChild(container.firstChild);
    }

    if (result.velocity < 0.15) {
      velocityCopy = "Prędkość jest niższa niż orientacyjny zakres kontrolny 0,15–0,60 m/s. Nie jest to automatyczny błąd, ale wymaga oceny odpowietrzania, regulacji i rzeczywistych warunków pracy.";
    } else {
      if (result.velocity > 0.60) {
        velocityCopy = "Prędkość przekracza orientacyjny poziom kontrolny 0,60 m/s. Sprawdź hałas, opory i możliwość podziału mocy na więcej obwodów.";
      } else {
        velocityCopy = "Prędkość mieści się w orientacyjnym zakresie kontrolnym 0,15–0,60 m/s. Nadal trzeba ocenić cały układ i dane zastosowanej armatury.";
      }
    }

    if (extraKpa >= budgetKpa) {
      budgetCopy = "Same wpisane opory dodatkowe wykorzystują cały budżet lub go przekraczają. Długość rury nie może wtedy otrzymać dodatniej rezerwy w tym modelu.";
    } else {
      budgetCopy = "Po odjęciu oporów dodatkowych na samą rurę pozostaje " + formatNumber(budgetKpa - extraKpa, 1) + " kPa.";
    }

    diameterCopy = "Dla średnicy wewnętrznej " + formatNumber(diameterMm, 1) + " mm i przepływu " + formatNumber(flowLMin, 2) + " l/min analizator obliczył gradient " + formatNumber(result.gradientPaM, 0) + " Pa/m.";

    container.appendChild(diagnosticCard("Prędkość przepływu", velocityCopy));
    container.appendChild(diagnosticCard("Podział budżetu", budgetCopy));
    container.appendChild(diagnosticCard("Warunki porównania", diameterCopy));
  }

  function renderComparison(flowLMin, lengthM, waterTemp, extraKpa, budgetKpa) {
    var tbody = byId("rk-loop-comparison-body");
    var pipes = [
      {name: "16 × 2,0", diameter: 12},
      {name: "16 × 2,2", diameter: 11.6},
      {name: "17 × 2,0", diameter: 13},
      {name: "20 × 2,0", diameter: 16}
    ];
    var i;
    var result;
    var row;
    var values;
    var labels = ["Rura", "Średnica wewnętrzna", "Prędkość", "Gradient", "Strata całkowita", "Długość z budżetu"];
    var j;
    var cell;

    while (tbody.firstChild) {
      tbody.removeChild(tbody.firstChild);
    }

    for (i = 0; i < pipes.length; i += 1) {
      result = calculateHydraulics(flowLMin, pipes[i].diameter, lengthM, waterTemp, extraKpa, budgetKpa);
      values = [
        pipes[i].name + " mm",
        formatNumber(pipes[i].diameter, 1) + " mm",
        formatNumber(result.velocity, 2) + " m/s",
        formatNumber(result.gradientPaM, 0) + " Pa/m",
        formatNumber(result.totalLossKpa, 1) + " kPa",
        result.maxLengthM > 0 ? formatNumber(result.maxLengthM, 0) + " m" : "brak rezerwy"
      ];
      row = document.createElement("tr");
      for (j = 0; j < values.length; j += 1) {
        cell = document.createElement("td");
        cell.setAttribute("data-label", labels[j]);
        cell.textContent = values[j];
        row.appendChild(cell);
      }
      tbody.appendChild(row);
    }
  }

  function svgText(x, y, value, options) {
    var anchor = options.anchor || "middle";
    var size = options.size || 12;
    var fill = options.fill || "#58717d";
    var weight = options.weight || 650;
    var rotate = options.rotate || 0;
    var transform = "";
    if (rotate !== 0) {
      transform = ' transform="rotate(' + rotate + " " + x + " " + y + ')"';
    }
    return '<text x="' + x + '" y="' + y + '" text-anchor="' + anchor + '" font-size="' + size + '" font-weight="' + weight + '" fill="' + fill + '"' + transform + ">" + value + "</text>";
  }

  function renderChart(flowLMin, selectedDiameter, lengthM, waterTemp, extraKpa, budgetKpa, selectedResult) {
    var svg = byId("rk-loop-chart");
    var width = 920;
    var height = 430;
    var left = 78;
    var right = 25;
    var top = 24;
    var bottom = 62;
    var plotWidth = width - left - right;
    var plotHeight = height - top - bottom;
    var xMax = 160;
    var maxCandidate = selectedResult.maxLengthM;
    var curves = [
      {name: "16 × 2,0", diameter: 12, color: "#078fbe"},
      {name: "17 × 2,0", diameter: 13, color: "#17846d"},
      {name: "20 × 2,0", diameter: 16, color: "#ff6f3d"}
    ];
    var i;
    var x;
    var result;
    var maxLoss = budgetKpa;
    var yMax;
    var parts = [];
    var gridCountY = 5;
    var gridCountX = 8;
    var gx;
    var gy;
    var tickValue;
    var path;
    var step;
    var px;
    var py;
    var selectedX;
    var selectedY;
    var budgetY;

    if (lengthM * 1.25 > xMax) {
      xMax = Math.ceil(lengthM * 1.25 / 20) * 20;
    }
    if (maxCandidate > xMax) {
      if (maxCandidate < 220) {
        xMax = Math.ceil(maxCandidate / 20) * 20;
      }
    }
    xMax = clamp(xMax, 120, 220);

    for (i = 0; i < curves.length; i += 1) {
      result = calculateHydraulics(flowLMin, curves[i].diameter, xMax, waterTemp, extraKpa, budgetKpa);
      if (result.totalLossKpa > maxLoss) {
        maxLoss = result.totalLossKpa;
      }
    }
    if (selectedResult.totalLossKpa > maxLoss) {
      maxLoss = selectedResult.totalLossKpa;
    }
    yMax = Math.ceil(maxLoss * 1.14 / 10) * 10;
    if (yMax < 20) {
      yMax = 20;
    }

    parts.push('<rect x="0" y="0" width="' + width + '" height="' + height + '" rx="12" fill="#ffffff"></rect>');

    for (i = 0; i <= gridCountY; i += 1) {
      gy = top + plotHeight - i * plotHeight / gridCountY;
      tickValue = i * yMax / gridCountY;
      parts.push('<line x1="' + left + '" y1="' + gy + '" x2="' + (width - right) + '" y2="' + gy + '" stroke="#dce8ed" stroke-width="1"></line>');
      parts.push(svgText(left - 12, gy + 4, formatNumber(tickValue, 0), {anchor: "end", size: 11}));
    }

    for (i = 0; i <= gridCountX; i += 1) {
      gx = left + i * plotWidth / gridCountX;
      tickValue = i * xMax / gridCountX;
      parts.push('<line x1="' + gx + '" y1="' + top + '" x2="' + gx + '" y2="' + (height - bottom) + '" stroke="#e5eef2" stroke-width="1"></line>');
      parts.push(svgText(gx, height - bottom + 23, formatNumber(tickValue, 0), {size: 11}));
    }

    parts.push('<line x1="' + left + '" y1="' + (height - bottom) + '" x2="' + (width - right) + '" y2="' + (height - bottom) + '" stroke="#78909b" stroke-width="1.4"></line>');
    parts.push('<line x1="' + left + '" y1="' + top + '" x2="' + left + '" y2="' + (height - bottom) + '" stroke="#78909b" stroke-width="1.4"></line>');

    budgetY = top + plotHeight - budgetKpa / yMax * plotHeight;
    if (budgetY >= top) {
      if (budgetY <= height - bottom) {
        parts.push('<line x1="' + left + '" y1="' + budgetY + '" x2="' + (width - right) + '" y2="' + budgetY + '" stroke="#d94b3d" stroke-width="2.2" stroke-dasharray="8 7"></line>');
        parts.push(svgText(width - right - 4, budgetY - 8, "budżet " + formatNumber(budgetKpa, 1) + " kPa", {anchor: "end", size: 11, fill: "#c13d31", weight: 800}));
      }
    }

    for (i = 0; i < curves.length; i += 1) {
      path = "";
      for (step = 0; step <= 48; step += 1) {
        x = step * xMax / 48;
        result = calculateHydraulics(flowLMin, curves[i].diameter, x, waterTemp, extraKpa, budgetKpa);
        px = left + x / xMax * plotWidth;
        py = top + plotHeight - result.totalLossKpa / yMax * plotHeight;
        if (step === 0) {
          path += "M " + px.toFixed(2) + " " + py.toFixed(2);
        } else {
          path += " L " + px.toFixed(2) + " " + py.toFixed(2);
        }
      }
      parts.push('<path d="' + path + '" fill="none" stroke="' + curves[i].color + '" stroke-width="3.3" stroke-linecap="round"></path>');
    }

    selectedX = left + clamp(lengthM, 0, xMax) / xMax * plotWidth;
    selectedY = top + plotHeight - clamp(selectedResult.totalLossKpa, 0, yMax) / yMax * plotHeight;
    parts.push('<line x1="' + selectedX + '" y1="' + top + '" x2="' + selectedX + '" y2="' + (height - bottom) + '" stroke="#695ac9" stroke-width="1.8" stroke-dasharray="5 6"></line>');
    parts.push('<circle cx="' + selectedX + '" cy="' + selectedY + '" r="7" fill="#695ac9" stroke="#ffffff" stroke-width="3"></circle>');
    parts.push(svgText(selectedX, Math.max(top + 14, selectedY - 13), formatNumber(lengthM, 0) + " m • " + formatNumber(selectedResult.totalLossKpa, 1) + " kPa", {size: 11, fill: "#5447aa", weight: 850}));

    parts.push(svgText(left + plotWidth / 2, height - 13, "całkowita długość pętli [m]", {size: 12, fill: "#3e5966", weight: 800}));
    parts.push(svgText(20, top + plotHeight / 2, "całkowity spadek ciśnienia [kPa]", {size: 12, fill: "#3e5966", weight: 800, rotate: -90}));

    svg.innerHTML = parts.join("");
    svg.setAttribute("aria-label", "Wykres spadku ciśnienia. Wybrana średnica wewnętrzna " + formatNumber(selectedDiameter, 1) + " mm, długość " + formatNumber(lengthM, 0) + " m, wynik " + formatNumber(selectedResult.totalLossKpa, 1) + " kPa.");
  }

  function calculate() {
    var flowLMin = getFlow();
    var diameterMm = getSelectedDiameter();
    var lengthM = clamp(readNumber("rk-loop-length", 90), 5, 220);
    var waterTemp = clamp(readNumber("rk-loop-water-temp", 30), 10, 60);
    var extraKpa = clamp(readNumber("rk-loop-extra", 3), 0, 50);
    var budgetKpa = clamp(readNumber("rk-loop-budget", 20), 1, 100);
    var result = calculateHydraulics(flowLMin, diameterMm, lengthM, waterTemp, extraKpa, budgetKpa);
    var reservePrefix = result.remainingKpa >= 0 ? "+" : "";

    setText("rk-loop-result-flow", formatNumber(flowLMin, 2) + " l/min");
    setText("rk-loop-result-flow-hour", formatNumber(flowLMin * 60, 0) + " l/h");
    setText("rk-loop-result-velocity", formatNumber(result.velocity, 2) + " m/s");
    setText("rk-loop-result-gradient", formatNumber(result.gradientPaM, 0) + " Pa/m");
    setText("rk-loop-result-pipe-loss", formatNumber(result.pipeLossKpa, 1) + " kPa");
    setText("rk-loop-result-total-loss", formatNumber(result.totalLossKpa, 1) + " kPa");
    setText("rk-loop-result-reserve", reservePrefix + formatNumber(result.remainingKpa, 1) + " kPa");
    setText("rk-loop-result-max-length", result.maxLengthM > 0 ? formatNumber(result.maxLengthM, 0) + " m" : "brak");
    setText("rk-loop-result-reynolds", formatNumber(result.reynolds, 0));
    setText("rk-loop-result-regime", regimeLabel(result.reynolds));

    setStatus(result, budgetKpa, lengthM);
    renderDiagnostics(result, budgetKpa, extraKpa, diameterMm, flowLMin);
    renderComparison(flowLMin, lengthM, waterTemp, extraKpa, budgetKpa);
    renderChart(flowLMin, diameterMm, lengthM, waterTemp, extraKpa, budgetKpa, result);
  }

  function resetExample() {
    byId("rk-loop-mode").value = "power";
    byId("rk-loop-power").value = "600";
    byId("rk-loop-delta").value = "5";
    byId("rk-loop-known-flow").value = "1.72";
    byId("rk-loop-pipe").value = "12";
    byId("rk-loop-custom-id").value = "12";
    byId("rk-loop-water-temp").value = "30";
    byId("rk-loop-length").value = "90";
    byId("rk-loop-extra").value = "3";
    byId("rk-loop-budget").value = "20";
    updateFieldStates();
    calculate();
  }

  var interactiveInputs = root.querySelectorAll("#rk-loop-tool input, #rk-loop-tool select");
  var i;
  for (i = 0; i < interactiveInputs.length; i += 1) {
    interactiveInputs[i].addEventListener("input", function () {
      updateFieldStates();
      calculate();
    });
    interactiveInputs[i].addEventListener("change", function () {
      updateFieldStates();
      calculate();
    });
  }

  byId("rk-loop-calculate").addEventListener("click", calculate);
  byId("rk-loop-reset").addEventListener("click", resetExample);

  var faqItems = root.querySelectorAll(".rk-loop-faq details");
  for (i = 0; i < faqItems.length; i += 1) {
    faqItems[i].addEventListener("toggle", function () {
      var current = this;
      var j;
      if (!current.open) {
        return;
      }
      for (j = 0; j < faqItems.length; j += 1) {
        if (faqItems[j] !== current) {
          faqItems[j].open = false;
        }
      }
    });
  }

  updateFieldStates();
  calculate();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">Maksymalna długość pętli ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
