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

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa ekologia - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/ekologia/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką.</title>
		<link>https://projekt-ogrzewania.pl/kociol-na-pellet/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 10:09:49 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Hydraulika budowlana]]></category>
		<category><![CDATA[Instalacje domowe]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Koszty instalacji grzewczych]]></category>
		<category><![CDATA[Koszty ogrzewania]]></category>
		<category><![CDATA[Kotły na pellet]]></category>
		<category><![CDATA[Modernizacja ogrzewania]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Technologie grzewcze]]></category>
		<category><![CDATA[bufor ciepła]]></category>
		<category><![CDATA[ekologia]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[kocioł na pellet]]></category>
		<category><![CDATA[koszty ogrzewania]]></category>
		<category><![CDATA[niskotemperaturowe ogrzewanie]]></category>
		<category><![CDATA[ogrzewanie domu]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pellet drzewny]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3170</guid>

					<description><![CDATA[<p>Planując nowoczesny i ekonomiczny system grzewczy, coraz więcej inwestorów zwraca uwagę na kocioł na pellet jako stabilne, ekologiczne i przewidywalne źródło ciepła. W połączeniu z wodnym ogrzewaniem podłogowym tworzy on układ, który doskonale wykorzystuje niskotemperaturowy charakter instalacji i pozwala osiągnąć bardzo dobre parametry eksploatacyjne. W artykule szczegółowo omawiamy, dlaczego kocioł na pellet idealnie współpracuje z podłogówką, jakie komponenty są kluczowe, jak wygląda projektowanie takiego systemu oraz jakie realne koszty inwestycyjne i eksploatacyjne należy wziąć pod uwagę.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kociol-na-pellet/">Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-pellet-guide {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #25c7d8;
    --rk-cyan-soft: #e8fbff;
    --rk-orange: #ff6a3d;
    --rk-orange-soft: #fff1eb;
    --rk-green: #16836b;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #d89c19;
    --rk-yellow-soft: #fff8df;
    --rk-red: #d94b3d;
    --rk-red-soft: #fff0ee;
    --rk-purple: #695ac9;
    --rk-purple-soft: #f1efff;
    --rk-brown: #8a5d2c;
    --rk-brown-soft: #f8f0e7;
    --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-pellet-guide,
  #rk-pellet-guide * { box-sizing: border-box; }
  #rk-pellet-guide img,
  #rk-pellet-guide svg,
  #rk-pellet-guide canvas { max-width: 100%; }
  #rk-pellet-guide button,
  #rk-pellet-guide input,
  #rk-pellet-guide select,
  #rk-pellet-guide label,
  #rk-pellet-guide summary,
  #rk-pellet-guide a { font: inherit; -webkit-tap-highlight-color: transparent; }
  #rk-pellet-guide button,
  #rk-pellet-guide input,
  #rk-pellet-guide select { max-width: 100%; }
  #rk-pellet-guide a {
    color: var(--rk-blue);
    font-weight: 780;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }
  #rk-pellet-guide a:hover,
  #rk-pellet-guide a:focus-visible { color: var(--rk-red); }
  #rk-pellet-guide p,
  #rk-pellet-guide ul,
  #rk-pellet-guide ol { margin-top: 0; margin-bottom: 1.08em; }
  #rk-pellet-guide h2,
  #rk-pellet-guide h3,
  #rk-pellet-guide h4 {
    margin-top: 0;
    color: var(--rk-dark);
    font-weight: 920;
    letter-spacing: -.035em;
    line-height: 1.15;
  }
  #rk-pellet-guide h2 { margin-bottom: 18px; font-size: clamp(1.72rem, 4vw, 2.68rem); }
  #rk-pellet-guide h3 { margin-bottom: 11px; font-size: clamp(1.12rem, 2.35vw, 1.46rem); }
  #rk-pellet-guide h4 { margin-bottom: 8px; font-size: 1.02rem; }
  #rk-pellet-guide strong { color: var(--rk-dark); }

  #rk-pellet-guide .rk-pellet-progress {
    position: fixed;
    z-index: 9999;
    top: 0;
    left: 0;
    width: 0;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-cyan), var(--rk-orange));
    box-shadow: 0 0 12px rgba(37, 199, 216, .5);
    pointer-events: none;
  }

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

  #rk-pellet-guide .rk-pellet-hero {
    position: relative;
    overflow: hidden;
    padding: clamp(38px, 7vw, 78px) clamp(25px, 6vw, 76px) 42px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 91% 4%, rgba(37, 199, 216, .28), transparent 28%),
      radial-gradient(circle at 8% 100%, rgba(255, 106, 61, .25), transparent 30%),
      linear-gradient(135deg, #0d2332 0%, #143e53 55%, #175b62 100%);
  }
  #rk-pellet-guide .rk-pellet-hero::after {
    position: absolute;
    right: -55px;
    bottom: -120px;
    width: 350px;
    height: 350px;
    border: 46px solid rgba(255, 255, 255, .05);
    border-radius: 50%;
    content: "";
  }
  #rk-pellet-guide .rk-pellet-kicker {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 15px;
    color: #78efff;
    font-size: .69rem;
    font-weight: 950;
    letter-spacing: .09em;
    line-height: 1.2;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-kicker::before {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: var(--rk-orange);
    box-shadow: 0 0 0 6px rgba(255, 106, 61, .14);
    content: "";
  }
  #rk-pellet-guide .rk-pellet-hero-title {
    position: relative;
    z-index: 1;
    max-width: 960px;
    margin: 0 0 19px;
    color: var(--rk-white);
    font-size: clamp(2.05rem, 5.4vw, 4.35rem);
    font-weight: 950;
    letter-spacing: -.055em;
    line-height: 1.01;
  }
  #rk-pellet-guide .rk-pellet-hero-title span { color: #78efff; }
  #rk-pellet-guide .rk-pellet-lead {
    position: relative;
    z-index: 1;
    max-width: 900px;
    margin-bottom: 25px;
    color: #d8e9ef;
    font-size: clamp(1.02rem, 2vw, 1.24rem);
    line-height: 1.68;
  }
  #rk-pellet-guide .rk-pellet-hero-tags {
    position: relative;
    z-index: 1;
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-bottom: 28px;
  }
  #rk-pellet-guide .rk-pellet-hero-tag {
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    padding: 8px 13px;
    border: 1px solid rgba(255, 255, 255, .18);
    border-radius: 999px;
    color: #eefcff;
    background: rgba(255, 255, 255, .075);
    font-size: .72rem;
    font-weight: 850;
    line-height: 1.3;
  }
  #rk-pellet-guide .rk-pellet-byline {
    position: relative;
    z-index: 1;
    display: flex;
    flex-wrap: wrap;
    gap: 8px 18px;
    color: #bad3dc;
    font-size: .72rem;
    font-weight: 720;
  }
  #rk-pellet-guide .rk-pellet-byline strong { color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-hero-metrics {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin-top: 34px;
  }
  #rk-pellet-guide .rk-pellet-hero-metric {
    padding: 17px 18px;
    border: 1px solid rgba(255, 255, 255, .14);
    border-radius: 16px;
    background: rgba(5, 24, 36, .28);
    backdrop-filter: blur(6px);
  }
  #rk-pellet-guide .rk-pellet-hero-metric b {
    display: block;
    margin-bottom: 4px;
    color: #7af0ff;
    font-size: 1.04rem;
    font-weight: 950;
  }
  #rk-pellet-guide .rk-pellet-hero-metric span {
    display: block;
    color: #d5e7ec;
    font-size: .7rem;
    line-height: 1.45;
  }

  #rk-pellet-guide .rk-pellet-nav {
    position: relative;
    z-index: 20;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: start;
    gap: 10px;
    padding: 11px clamp(14px, 3vw, 28px);
    border-bottom: 1px solid var(--rk-line);
    background: rgba(255, 255, 255, .97);
    box-shadow: 0 8px 24px rgba(16, 37, 54, .07);
    backdrop-filter: blur(10px);
  }
  #rk-pellet-guide .rk-pellet-nav-label {
    padding-top: 9px;
    color: var(--rk-dark);
    font-size: .62rem;
    font-weight: 950;
    letter-spacing: .06em;
    text-transform: uppercase;
    white-space: nowrap;
  }
  #rk-pellet-guide .rk-pellet-nav-track {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 7px;
    overflow: visible;
    padding: 2px;
  }
  #rk-pellet-guide .rk-pellet-nav-track a {
    flex: 0 0 auto;
    padding: 7px 11px;
    border-radius: 999px;
    color: var(--rk-navy);
    background: var(--rk-soft);
    font-size: .64rem;
    font-weight: 900;
    line-height: 1.2;
    text-decoration: none;
    white-space: nowrap;
  }
  #rk-pellet-guide .rk-pellet-nav-track a:hover,
  #rk-pellet-guide .rk-pellet-nav-track a:focus-visible { color: var(--rk-white); background: var(--rk-blue); }

  #rk-pellet-guide .rk-pellet-content { padding: clamp(26px, 5.5vw, 64px); }
  #rk-pellet-guide .rk-pellet-section {
    margin-bottom: clamp(48px, 8vw, 86px);
    scroll-margin-top: 88px;
  }
  #rk-pellet-guide .rk-pellet-section:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-section-head { max-width: 910px; margin-bottom: 24px; }
  #rk-pellet-guide .rk-pellet-section-head > p:last-child { margin-bottom: 0; color: var(--rk-text); font-size: 1.02rem; }
  #rk-pellet-guide .rk-pellet-eyebrow {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-blue);
    font-size: .67rem;
    font-weight: 950;
    letter-spacing: .08em;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-grid-2,
  #rk-pellet-guide .rk-pellet-grid-3,
  #rk-pellet-guide .rk-pellet-grid-4 { display: grid; gap: 18px; }
  #rk-pellet-guide .rk-pellet-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #rk-pellet-guide .rk-pellet-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-pellet-guide .rk-pellet-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  #rk-pellet-guide .rk-pellet-card {
    padding: clamp(21px, 3.5vw, 31px);
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: var(--rk-white);
    box-shadow: 0 10px 28px rgba(16, 37, 54, .065);
  }
  #rk-pellet-guide .rk-pellet-card p:last-child,
  #rk-pellet-guide .rk-pellet-card ul:last-child,
  #rk-pellet-guide .rk-pellet-card ol:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-card-accent { border-top: 5px solid var(--rk-cyan); }
  #rk-pellet-guide .rk-pellet-card-orange { border-top: 5px solid var(--rk-orange); }
  #rk-pellet-guide .rk-pellet-card-green { border-top: 5px solid var(--rk-green); }
  #rk-pellet-guide .rk-pellet-card-purple { border-top: 5px solid var(--rk-purple); }
  #rk-pellet-guide .rk-pellet-card-brown { border-top: 5px solid var(--rk-brown); }
  #rk-pellet-guide .rk-pellet-number {
    display: grid;
    place-items: center;
    width: 42px;
    height: 42px;
    margin-bottom: 15px;
    border-radius: 13px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: .85rem;
    font-weight: 950;
  }
  #rk-pellet-guide .rk-pellet-answer {
    position: relative;
    overflow: hidden;
    padding: clamp(27px, 5vw, 45px);
    border-radius: 22px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-dark), #18516a);
  }
  #rk-pellet-guide .rk-pellet-answer::after {
    position: absolute;
    right: -72px;
    bottom: -86px;
    width: 225px;
    height: 225px;
    border: 32px solid rgba(255,255,255,.05);
    border-radius: 50%;
    content: "";
  }
  #rk-pellet-guide .rk-pellet-answer h3 { position: relative; z-index: 1; color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-answer p { position: relative; z-index: 1; color: #d9ebf0; }
  #rk-pellet-guide .rk-pellet-answer p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-answer strong { color: #7af0ff; }
  #rk-pellet-guide .rk-pellet-note,
  #rk-pellet-guide .rk-pellet-warning,
  #rk-pellet-guide .rk-pellet-good {
    padding: 19px 21px;
    border-left: 5px solid;
    border-radius: 0 14px 14px 0;
  }
  #rk-pellet-guide .rk-pellet-note { border-color: var(--rk-blue); background: var(--rk-cyan-soft); }
  #rk-pellet-guide .rk-pellet-warning { border-color: var(--rk-orange); background: var(--rk-orange-soft); }
  #rk-pellet-guide .rk-pellet-good { border-color: var(--rk-green); background: var(--rk-green-soft); }
  #rk-pellet-guide .rk-pellet-note p:last-child,
  #rk-pellet-guide .rk-pellet-warning p:last-child,
  #rk-pellet-guide .rk-pellet-good p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-formula {
    overflow-x: auto;
    margin: 22px 0;
    padding: 19px 22px;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    color: var(--rk-dark);
    background: var(--rk-soft);
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
    font-size: clamp(.82rem, 2vw, 1rem);
    font-weight: 800;
    text-align: center;
    white-space: nowrap;
  }
  #rk-pellet-guide .rk-pellet-mini-label {
    display: inline-block;
    margin-bottom: 7px;
    color: var(--rk-blue);
    font-size: .63rem;
    font-weight: 950;
    letter-spacing: .06em;
    text-transform: uppercase;
  }

  #rk-pellet-guide .rk-pellet-table-wrap {
    overflow-x: auto;
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: var(--rk-white);
    box-shadow: 0 10px 28px rgba(16,37,54,.055);
  }
  #rk-pellet-guide .rk-pellet-table { width: 100%; border-collapse: collapse; }
  #rk-pellet-guide .rk-pellet-table th,
  #rk-pellet-guide .rk-pellet-table td { padding: 15px 16px; border-bottom: 1px solid var(--rk-line); text-align: left; vertical-align: top; }
  #rk-pellet-guide .rk-pellet-table tr:last-child td { border-bottom: 0; }
  #rk-pellet-guide .rk-pellet-table th {
    color: var(--rk-white);
    background: var(--rk-navy);
    font-size: .69rem;
    font-weight: 900;
    letter-spacing: .025em;
    line-height: 1.35;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-table td { color: var(--rk-text); font-size: .84rem; }
  #rk-pellet-guide .rk-pellet-table tbody tr:nth-child(even) td { background: #f8fbfc; }

  #rk-pellet-guide .rk-pellet-tool {
    overflow: hidden;
    border: 1px solid #345d70;
    border-radius: 24px;
    color: var(--rk-white);
    background: #102b3b;
    box-shadow: 0 22px 58px rgba(16,37,54,.18);
  }
  #rk-pellet-guide .rk-pellet-tool-head {
    padding: clamp(27px, 5vw, 45px);
    background:
      radial-gradient(circle at 94% 8%, rgba(37,199,216,.24), transparent 33%),
      radial-gradient(circle at 6% 110%, rgba(255,106,61,.18), transparent 30%),
      linear-gradient(135deg, #123044, #17566b);
  }
  #rk-pellet-guide .rk-pellet-tool-head h3 { margin-bottom: 10px; color: var(--rk-white); font-size: clamp(1.45rem, 3.5vw, 2.35rem); }
  #rk-pellet-guide .rk-pellet-tool-head p { max-width: 900px; margin-bottom: 0; color: #d3e8ee; }
  #rk-pellet-guide .rk-pellet-tool-body { display: grid; gap: 18px; padding: clamp(18px, 3.5vw, 32px); }
  #rk-pellet-guide .rk-pellet-tool-panel {
    padding: clamp(19px, 3vw, 29px);
    border: 1px solid #3b6375;
    border-radius: 18px;
    background: #173545;
  }
  #rk-pellet-guide .rk-pellet-tool-panel h4 { margin-bottom: 7px; color: var(--rk-white); font-size: 1.13rem; }
  #rk-pellet-guide .rk-pellet-tool-panel > p { color: #bed5de; font-size: .75rem; }
  #rk-pellet-guide .rk-pellet-input-group + .rk-pellet-input-group {
    margin-top: 24px;
    padding-top: 22px;
    border-top: 1px solid #3b6375;
  }
  #rk-pellet-guide .rk-pellet-input-title {
    display: block;
    margin-bottom: 12px;
    color: #6feafa;
    font-size: .64rem;
    font-weight: 950;
    letter-spacing: .07em;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-fields {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 14px;
  }
  #rk-pellet-guide .rk-pellet-field { min-width: 0; }
  #rk-pellet-guide .rk-pellet-field.is-hidden { display: none; }
  #rk-pellet-guide .rk-pellet-field label {
    display: block;
    margin-bottom: 6px;
    color: #eaf8fb;
    font-size: .7rem;
    font-weight: 850;
    line-height: 1.35;
  }
  #rk-pellet-guide .rk-pellet-field input,
  #rk-pellet-guide .rk-pellet-field select {
    width: 100%;
    min-height: 46px;
    padding: 10px 11px;
    border: 1px solid #88a8b5;
    border-radius: 10px;
    color: var(--rk-dark);
    background: var(--rk-white);
    font-size: .86rem;
    outline: 0;
  }
  #rk-pellet-guide .rk-pellet-field input:focus,
  #rk-pellet-guide .rk-pellet-field select:focus { border-color: var(--rk-cyan); box-shadow: 0 0 0 3px rgba(37,199,216,.18); }
  #rk-pellet-guide .rk-pellet-field small { display: block; margin-top: 5px; color: #9dbac5; font-size: .61rem; line-height: 1.4; }
  #rk-pellet-guide .rk-pellet-tool-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 11px; margin-top: 22px; }
  #rk-pellet-guide .rk-pellet-calc-button,
  #rk-pellet-guide .rk-pellet-reset-button {
    min-height: 47px;
    padding: 11px 18px;
    border-radius: 11px;
    cursor: pointer;
    font-weight: 900;
    line-height: 1.2;
  }
  #rk-pellet-guide .rk-pellet-calc-button { border: 1px solid var(--rk-cyan); color: var(--rk-dark); background: var(--rk-cyan); }
  #rk-pellet-guide .rk-pellet-reset-button { border: 1px solid #7093a2; color: #eaf8fb; background: transparent; }
  #rk-pellet-guide .rk-pellet-calc-button:hover,
  #rk-pellet-guide .rk-pellet-calc-button:focus-visible { background: #75effa; }
  #rk-pellet-guide .rk-pellet-reset-button:hover,
  #rk-pellet-guide .rk-pellet-reset-button:focus-visible { border-color: var(--rk-white); color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-error {
    display: none;
    margin-top: 17px;
    padding: 13px 15px;
    border-left: 4px solid var(--rk-orange);
    border-radius: 0 10px 10px 0;
    color: #ffe8df;
    background: rgba(217,75,61,.19);
    font-size: .74rem;
  }
  #rk-pellet-guide .rk-pellet-error.is-visible { display: block; }
  #rk-pellet-guide .rk-pellet-results { display: grid; gap: 18px; }
  #rk-pellet-guide .rk-pellet-result-lead {
    padding: clamp(23px, 4vw, 35px);
    border: 1px solid #3d6e7e;
    border-radius: 18px;
    background: linear-gradient(135deg, #173c4e, #195a6c);
  }
  #rk-pellet-guide .rk-pellet-result-lead span {
    display: block;
    margin-bottom: 5px;
    color: #8aedfa;
    font-size: .64rem;
    font-weight: 950;
    letter-spacing: .07em;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-result-lead strong {
    display: block;
    color: var(--rk-white);
    font-size: clamp(2rem, 6vw, 4rem);
    font-weight: 950;
    letter-spacing: -.055em;
    line-height: 1;
  }
  #rk-pellet-guide .rk-pellet-result-lead p { margin: 12px 0 0; color: #d6eaf0; font-size: .8rem; }
  #rk-pellet-guide .rk-pellet-metrics {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
  }
  #rk-pellet-guide .rk-pellet-metric {
    min-width: 0;
    padding: 17px;
    border: 1px solid #3d6272;
    border-radius: 14px;
    background: #122f3f;
  }
  #rk-pellet-guide .rk-pellet-metric span { display: block; margin-bottom: 6px; color: #9dbdc8; font-size: .59rem; font-weight: 850; line-height: 1.35; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-metric strong { display: block; color: var(--rk-white); font-size: 1.22rem; font-weight: 950; line-height: 1.15; overflow-wrap: anywhere; }
  #rk-pellet-guide .rk-pellet-metric small { display: block; margin-top: 5px; color: #89aab6; font-size: .57rem; line-height: 1.35; }
  #rk-pellet-guide .rk-pellet-result-status {
    padding: 17px 19px;
    border-left: 5px solid var(--rk-green);
    border-radius: 0 13px 13px 0;
    color: #d9f5eb;
    background: rgba(22,131,107,.19);
    font-size: .78rem;
  }
  #rk-pellet-guide .rk-pellet-result-status.is-borderline { border-color: var(--rk-yellow); color: #fff2c4; background: rgba(216,156,25,.16); }
  #rk-pellet-guide .rk-pellet-result-status strong { color: inherit; }
  #rk-pellet-guide .rk-pellet-visual-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    align-items: stretch;
  }
  #rk-pellet-guide .rk-pellet-chart-card,
  #rk-pellet-guide .rk-pellet-cost-card,
  #rk-pellet-guide .rk-pellet-storage-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid #3d6272;
    border-radius: 16px;
    background: #122f3f;
  }
  #rk-pellet-guide .rk-pellet-chart-card h4,
  #rk-pellet-guide .rk-pellet-cost-card h4,
  #rk-pellet-guide .rk-pellet-storage-card h4 { color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-chart-card p,
  #rk-pellet-guide .rk-pellet-cost-card p,
  #rk-pellet-guide .rk-pellet-storage-card p { color: #a9c5cf; font-size: .67rem; }
  #rk-pellet-guide .rk-pellet-canvas-wrap {
    position: relative;
    width: 100%;
    min-height: 280px;
    border-radius: 12px;
    background: #f7fbfc;
  }
  #rk-pellet-guide .rk-pellet-canvas-wrap canvas { display: block; width: 100%; height: 280px; }
  #rk-pellet-guide .rk-pellet-cost-bars { display: grid; gap: 15px; padding: 9px 0 2px; }
  #rk-pellet-guide .rk-pellet-cost-row { display: grid; grid-template-columns: 105px minmax(0, 1fr) 88px; align-items: center; gap: 10px; }
  #rk-pellet-guide .rk-pellet-cost-row span { color: #c7dde4; font-size: .65rem; font-weight: 800; }
  #rk-pellet-guide .rk-pellet-cost-row strong { color: var(--rk-white); font-size: .69rem; text-align: right; }
  #rk-pellet-guide .rk-pellet-bar-track { overflow: hidden; height: 13px; border-radius: 999px; background: #284d5e; }
  #rk-pellet-guide .rk-pellet-bar-fill { width: 0; height: 100%; border-radius: inherit; background: var(--rk-cyan); transition: width .25s ease; }
  #rk-pellet-guide .rk-pellet-bar-fill.is-electric { background: var(--rk-purple); }
  #rk-pellet-guide .rk-pellet-bar-fill.is-service { background: var(--rk-orange); }
  #rk-pellet-guide .rk-pellet-bar-fill.is-delivery { background: var(--rk-yellow); }
  #rk-pellet-guide .rk-pellet-bar-fill.is-chimney { background: var(--rk-green); }
  #rk-pellet-guide .rk-pellet-storage-layout { display: grid; grid-template-columns: 250px minmax(0, 1fr); gap: 24px; align-items: center; }
  #rk-pellet-guide .rk-pellet-storage-svg { display: block; width: 100%; min-height: 250px; border-radius: 12px; background: #f7fbfc; }
  #rk-pellet-guide .rk-pellet-storage-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  #rk-pellet-guide .rk-pellet-storage-fact { padding: 14px; border: 1px solid #3d6272; border-radius: 12px; background: #102b3b; }
  #rk-pellet-guide .rk-pellet-storage-fact span { display: block; color: #93b3bf; font-size: .58rem; font-weight: 850; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-storage-fact strong { display: block; margin-top: 5px; color: var(--rk-white); font-size: 1.12rem; }
  #rk-pellet-guide .rk-pellet-scenario-wrap { overflow-x: auto; border: 1px solid #3d6272; border-radius: 15px; }
  #rk-pellet-guide .rk-pellet-scenario { width: 100%; border-collapse: collapse; min-width: 660px; }
  #rk-pellet-guide .rk-pellet-scenario th,
  #rk-pellet-guide .rk-pellet-scenario td { padding: 13px 14px; border-bottom: 1px solid #3d6272; text-align: left; }
  #rk-pellet-guide .rk-pellet-scenario tr:last-child td { border-bottom: 0; }
  #rk-pellet-guide .rk-pellet-scenario th { color: #a9cad4; background: #102b3b; font-size: .61rem; font-weight: 900; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-scenario td { color: #e6f3f6; font-size: .72rem; }
  #rk-pellet-guide .rk-pellet-scenario tr.is-base td { color: var(--rk-white); background: rgba(37,199,216,.13); font-weight: 850; }
  #rk-pellet-guide .rk-pellet-badge {
    display: inline-flex;
    padding: 5px 8px;
    border-radius: 999px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: .56rem;
    font-weight: 950;
    line-height: 1.2;
  }
  #rk-pellet-guide .rk-pellet-diagnostics { display: grid; gap: 10px; }
  #rk-pellet-guide .rk-pellet-diagnostic {
    padding: 13px 15px;
    border-left: 4px solid var(--rk-cyan);
    border-radius: 0 10px 10px 0;
    color: #d8edf2;
    background: rgba(37,199,216,.08);
    font-size: .7rem;
  }
  #rk-pellet-guide .rk-pellet-diagnostic.is-warn { border-color: var(--rk-orange); background: rgba(255,106,61,.1); }
  #rk-pellet-guide .rk-pellet-tool-foot { padding: 0 clamp(18px, 3.5vw, 32px) 25px; color: #8eacb7; font-size: .61rem; }

  #rk-pellet-guide .rk-pellet-cta {
    position: relative;
    overflow: hidden;
    margin: clamp(50px, 8vw, 84px) 0;
    padding: clamp(28px, 5vw, 48px);
    border-radius: 23px;
    color: var(--rk-white);
    background: linear-gradient(135deg, #123044, #12647d);
    box-shadow: 0 20px 52px rgba(16,37,54,.17);
  }
  #rk-pellet-guide .rk-pellet-cta::after {
    position: absolute;
    right: -75px;
    bottom: -105px;
    width: 255px;
    height: 255px;
    border: 35px solid rgba(255,255,255,.055);
    border-radius: 50%;
    content: "";
  }
  #rk-pellet-guide .rk-pellet-cta-title { position: relative; z-index: 1; max-width: 880px; margin-bottom: 13px; color: var(--rk-white); font-size: clamp(1.4rem, 3.5vw, 2.3rem); font-weight: 950; letter-spacing: -.035em; line-height: 1.15; }
  #rk-pellet-guide .rk-pellet-cta p { position: relative; z-index: 1; max-width: 930px; color: #d7eaf0; }
  #rk-pellet-guide .rk-pellet-cta-button {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 50px;
    padding: 12px 19px;
    border-radius: 11px;
    color: var(--rk-dark);
    background: var(--rk-cyan);
    box-shadow: 0 9px 23px rgba(0,0,0,.13);
    font-weight: 950;
    line-height: 1.25;
    text-align: center;
    text-decoration: none;
  }
  #rk-pellet-guide .rk-pellet-cta-button:hover,
  #rk-pellet-guide .rk-pellet-cta-button:focus-visible { color: var(--rk-dark); background: #79f1fb; transform: translateY(-1px); }

  #rk-pellet-guide .rk-pellet-flow {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    align-items: stretch;
  }
  #rk-pellet-guide .rk-pellet-flow-item {
    position: relative;
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    background: var(--rk-white);
  }
  #rk-pellet-guide .rk-pellet-flow-item:not(:last-child)::after {
    position: absolute;
    top: 50%;
    right: -18px;
    z-index: 2;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-blue);
    content: "→";
    font-size: .75rem;
    font-weight: 950;
    line-height: 24px;
    text-align: center;
    transform: translateY(-50%);
  }
  #rk-pellet-guide .rk-pellet-flow-item p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-steps { display: grid; gap: 13px; counter-reset: rk-pellet-step; }
  #rk-pellet-guide .rk-pellet-step {
    position: relative;
    padding: 20px 20px 20px 73px;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    background: var(--rk-white);
  }
  #rk-pellet-guide .rk-pellet-step::before {
    position: absolute;
    top: 19px;
    left: 20px;
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border-radius: 11px;
    color: var(--rk-white);
    background: var(--rk-blue);
    content: counter(rk-pellet-step);
    counter-increment: rk-pellet-step;
    font-size: .75rem;
    font-weight: 950;
  }
  #rk-pellet-guide .rk-pellet-step h3 { margin-bottom: 5px; font-size: 1.05rem; }
  #rk-pellet-guide .rk-pellet-step p { margin-bottom: 0; color: var(--rk-text); font-size: .88rem; }
  #rk-pellet-guide .rk-pellet-checklist { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; padding: 0; list-style: none; }
  #rk-pellet-guide .rk-pellet-checklist li {
    position: relative;
    margin: 0;
    padding: 16px 17px 16px 47px;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    background: var(--rk-white);
    color: var(--rk-text);
  }
  #rk-pellet-guide .rk-pellet-checklist li::before {
    position: absolute;
    top: 17px;
    left: 17px;
    display: grid;
    place-items: center;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-green);
    content: "✓";
    font-size: .65rem;
    font-weight: 950;
  }

  #rk-pellet-guide .rk-pellet-faq { display: grid; gap: 11px; }
  #rk-pellet-guide .rk-pellet-faq details { overflow: hidden; border: 1px solid var(--rk-line); border-radius: 14px; background: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-faq summary {
    position: relative;
    padding: 18px 54px 18px 20px;
    color: var(--rk-dark);
    cursor: pointer;
    font-weight: 900;
    line-height: 1.4;
    list-style: none;
  }
  #rk-pellet-guide .rk-pellet-faq summary::-webkit-details-marker { display: none; }
  #rk-pellet-guide .rk-pellet-faq summary::after {
    position: absolute;
    top: 50%;
    right: 19px;
    display: grid;
    place-items: center;
    width: 27px;
    height: 27px;
    border-radius: 8px;
    color: var(--rk-blue);
    background: var(--rk-cyan-soft);
    content: "+";
    font-size: 1.1rem;
    transform: translateY(-50%);
  }
  #rk-pellet-guide .rk-pellet-faq details[open] summary::after { content: "−"; }
  #rk-pellet-guide .rk-pellet-faq-answer { padding: 0 20px 19px; color: var(--rk-text); }
  #rk-pellet-guide .rk-pellet-faq-answer p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-sources { padding: 0; list-style: none; counter-reset: rk-pellet-source; }
  #rk-pellet-guide .rk-pellet-sources li {
    position: relative;
    margin-bottom: 11px;
    padding: 15px 16px 15px 54px;
    border: 1px solid var(--rk-line);
    border-radius: 13px;
    background: var(--rk-soft);
    color: var(--rk-text);
  }
  #rk-pellet-guide .rk-pellet-sources li::before {
    position: absolute;
    top: 15px;
    left: 15px;
    display: grid;
    place-items: center;
    width: 27px;
    height: 27px;
    border-radius: 8px;
    color: var(--rk-white);
    background: var(--rk-blue);
    content: counter(rk-pellet-source);
    counter-increment: rk-pellet-source;
    font-size: .64rem;
    font-weight: 950;
  }

  #rk-pellet-guide .rk-pellet-author {
    overflow: hidden;
    margin-top: clamp(50px, 8vw, 82px);
    border: 1px solid var(--rk-line);
    border-radius: 23px;
    background: var(--rk-white);
    box-shadow: 0 18px 48px rgba(16,37,54,.1);
    scroll-margin-top: 88px;
  }
  #rk-pellet-guide .rk-pellet-author > input { position: absolute; opacity: 0; pointer-events: none; }
  #rk-pellet-guide .rk-pellet-author-head { display: flex; align-items: center; justify-content: space-between; gap: 19px; padding: 27px clamp(22px, 5vw, 46px); color: var(--rk-white); background: var(--rk-dark); }
  #rk-pellet-guide .rk-pellet-author-head h2 { margin-bottom: 7px; color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-author-head p { margin-bottom: 0; color: #d1e5ec; }
  #rk-pellet-guide .rk-pellet-author-mark { display: inline-flex; flex: 0 0 auto; padding: 9px 13px; border: 1px solid rgba(255,255,255,.18); border-radius: 999px; color: #7af0ff; font-size: .63rem; font-weight: 950; letter-spacing: .06em; white-space: nowrap; }
  #rk-pellet-guide .rk-pellet-author-layout { display: grid; grid-template-columns: 295px minmax(0, 1fr); }
  #rk-pellet-guide .rk-pellet-author-side { padding: 35px 27px; border-right: 1px solid var(--rk-line); background: #f8fbfc; text-align: center; }
  #rk-pellet-guide .rk-pellet-author-photo { overflow: hidden; width: 156px; height: 156px; margin: 0 auto 18px; border: 7px solid var(--rk-white); border-radius: 50%; box-shadow: 0 10px 28px rgba(16,37,54,.14); }
  #rk-pellet-guide .rk-pellet-author-photo img { width: 100%; height: 100%; object-fit: cover; }
  #rk-pellet-guide .rk-pellet-author-name { color: var(--rk-dark); font-size: 1.25rem; font-weight: 950; }
  #rk-pellet-guide .rk-pellet-author-role { margin-top: 7px; color: var(--rk-blue); font-size: .68rem; font-weight: 950; line-height: 1.45; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-author-social-label { margin-top: 26px; color: var(--rk-muted); font-size: .64rem; font-weight: 900; letter-spacing: .05em; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-author-social { display: flex; justify-content: center; gap: 9px; margin-top: 10px; }
  #rk-pellet-guide .rk-pellet-author-social a { display: grid; place-items: center; width: 42px; height: 42px; border: 1px solid var(--rk-line); border-radius: 12px; color: var(--rk-navy); background: var(--rk-white); transition: .2s ease; }
  #rk-pellet-guide .rk-pellet-author-social a:hover,
  #rk-pellet-guide .rk-pellet-author-social a:focus-visible { border-color: var(--rk-cyan); color: var(--rk-blue); transform: translateY(-2px); }
  #rk-pellet-guide .rk-pellet-author-social svg { width: 20px; height: 20px; fill: currentColor; }
  #rk-pellet-guide .rk-pellet-author-main { min-width: 0; padding: 38px clamp(25px, 5vw, 48px); }
  #rk-pellet-guide .rk-pellet-author-quote { position: relative; margin: 0 0 22px; padding: 30px 25px 25px 70px; border-radius: 16px; background: var(--rk-cyan-soft); }
  #rk-pellet-guide .rk-pellet-author-quote::before { position: absolute; top: 3px; left: 24px; color: var(--rk-cyan); content: "“"; font-size: 4.8rem; font-weight: 950; line-height: 1; }
  #rk-pellet-guide .rk-pellet-author-quote p { margin-bottom: 0; color: var(--rk-dark); font-size: .98rem; font-style: italic; font-weight: 800; }
  #rk-pellet-guide .rk-pellet-author-tabs { display: grid; grid-template-columns: repeat(3, 1fr); border: 1px solid var(--rk-line); border-radius: 14px 14px 0 0; background: var(--rk-soft); }
  #rk-pellet-guide .rk-pellet-author-tab { padding: 13px 8px; border-right: 1px solid var(--rk-line); color: var(--rk-muted); cursor: pointer; font-size: .68rem; font-weight: 950; text-align: center; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-author-tab:last-child { border-right: 0; }
  #rk-pellet-guide .rk-pellet-author-panel { display: none; padding: 23px; border: 1px solid var(--rk-line); border-top: 0; border-radius: 0 0 14px 14px; color: var(--rk-text); }
  #rk-pellet-guide .rk-pellet-author-panel p:last-child { margin-bottom: 0; }
  #rk-pellet-author-about:checked ~ .rk-pellet-author-layout .rk-pellet-author-panel-about,
  #rk-pellet-author-exp:checked ~ .rk-pellet-author-layout .rk-pellet-author-panel-exp,
  #rk-pellet-author-method:checked ~ .rk-pellet-author-layout .rk-pellet-author-panel-method { display: block; }
  #rk-pellet-author-about:checked ~ .rk-pellet-author-layout label[for="rk-pellet-author-about"],
  #rk-pellet-author-exp:checked ~ .rk-pellet-author-layout label[for="rk-pellet-author-exp"],
  #rk-pellet-author-method:checked ~ .rk-pellet-author-layout label[for="rk-pellet-author-method"] { color: var(--rk-blue); background: var(--rk-white); box-shadow: inset 0 -4px 0 var(--rk-blue); }
  #rk-pellet-guide .rk-pellet-site-links { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 13px; }
  #rk-pellet-guide .rk-pellet-site-links a { padding: 7px 10px; border: 1px solid var(--rk-line); border-radius: 9px; background: var(--rk-white); font-size: .72rem; text-decoration: none; }
  #rk-pellet-guide .rk-pellet-final-cta { margin-bottom: 0; background: linear-gradient(135deg, #0e2433, #174d63); }
  #rk-pellet-guide .rk-pellet-disclaimer { margin-top: 18px; color: var(--rk-muted); font-size: .69rem; }

  @media (max-width: 980px) {
    #rk-pellet-guide .rk-pellet-grid-4,
    #rk-pellet-guide .rk-pellet-fields,
    #rk-pellet-guide .rk-pellet-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-pellet-guide .rk-pellet-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-pellet-guide .rk-pellet-author-layout { grid-template-columns: 1fr; }
    #rk-pellet-guide .rk-pellet-author-side { border-right: 0; border-bottom: 1px solid var(--rk-line); }
  }

  @media (max-width: 760px) {
    #rk-pellet-guide { margin: 18px auto 44px; font-size: 16px; }
    #rk-pellet-guide .rk-pellet-shell { border-radius: 18px; }
    #rk-pellet-guide .rk-pellet-hero-metrics,
    #rk-pellet-guide .rk-pellet-grid-2,
    #rk-pellet-guide .rk-pellet-grid-3,
    #rk-pellet-guide .rk-pellet-grid-4,
    #rk-pellet-guide .rk-pellet-visual-grid,
    #rk-pellet-guide .rk-pellet-flow,
    #rk-pellet-guide .rk-pellet-checklist,
    #rk-pellet-guide .rk-pellet-storage-layout { grid-template-columns: 1fr; }
    #rk-pellet-guide .rk-pellet-flow-item:not(:last-child)::after { top: auto; right: auto; bottom: -18px; left: 50%; content: "↓"; transform: translateX(-50%); }
    #rk-pellet-guide .rk-pellet-nav { grid-template-columns: 1fr; gap: 5px; }
    #rk-pellet-guide .rk-pellet-nav-label { padding: 0 0 4px 2px; }
    #rk-pellet-guide .rk-pellet-table-wrap { overflow: visible; border: 0; box-shadow: none; background: transparent; }
    #rk-pellet-guide .rk-pellet-table,
    #rk-pellet-guide .rk-pellet-table tbody,
    #rk-pellet-guide .rk-pellet-table tr,
    #rk-pellet-guide .rk-pellet-table td { display: block; width: 100%; }
    #rk-pellet-guide .rk-pellet-table thead { display: none; }
    #rk-pellet-guide .rk-pellet-table tr { overflow: hidden; margin-bottom: 12px; border: 1px solid var(--rk-line); border-radius: 14px; background: var(--rk-white); box-shadow: 0 8px 22px rgba(16,37,54,.055); }
    #rk-pellet-guide .rk-pellet-table td,
    #rk-pellet-guide .rk-pellet-table tbody tr:nth-child(even) td { display: grid; grid-template-columns: minmax(116px, 42%) minmax(0, 1fr); gap: 12px; padding: 12px 14px; background: var(--rk-white); }
    #rk-pellet-guide .rk-pellet-table td::before { color: var(--rk-muted); content: attr(data-label); font-size: .65rem; font-weight: 900; line-height: 1.35; text-transform: uppercase; }
    #rk-pellet-guide .rk-pellet-table tr:last-child td { border-bottom: 1px solid var(--rk-line); }
    #rk-pellet-guide .rk-pellet-table tr td:last-child { border-bottom: 0; }
    #rk-pellet-guide .rk-pellet-scenario-wrap { overflow: visible; border: 0; }
    #rk-pellet-guide .rk-pellet-scenario,
    #rk-pellet-guide .rk-pellet-scenario tbody,
    #rk-pellet-guide .rk-pellet-scenario tr,
    #rk-pellet-guide .rk-pellet-scenario td { display: block; width: 100%; min-width: 0; }
    #rk-pellet-guide .rk-pellet-scenario thead { display: none; }
    #rk-pellet-guide .rk-pellet-scenario tr { overflow: hidden; margin-bottom: 12px; border: 1px solid #3d6272; border-radius: 13px; background: #102b3b; }
    #rk-pellet-guide .rk-pellet-scenario td,
    #rk-pellet-guide .rk-pellet-scenario tr.is-base td { display: grid; grid-template-columns: minmax(118px, 43%) minmax(0, 1fr); gap: 11px; padding: 11px 13px; background: transparent; }
    #rk-pellet-guide .rk-pellet-scenario tr.is-base { background: rgba(37,199,216,.13); }
    #rk-pellet-guide .rk-pellet-scenario td::before { color: #9dbdc8; content: attr(data-label); font-size: .58rem; font-weight: 900; line-height: 1.35; text-transform: uppercase; }
    #rk-pellet-guide .rk-pellet-scenario tr:last-child td { border-bottom: 1px solid #3d6272; }
    #rk-pellet-guide .rk-pellet-scenario tr td:last-child { border-bottom: 0; }
  }

  @media (max-width: 560px) {
    #rk-pellet-guide .rk-pellet-content { padding: 23px 15px; }
    #rk-pellet-guide .rk-pellet-hero { padding: 32px 20px 30px; }
    #rk-pellet-guide .rk-pellet-fields,
    #rk-pellet-guide .rk-pellet-metrics,
    #rk-pellet-guide .rk-pellet-storage-facts { grid-template-columns: 1fr; }
    #rk-pellet-guide .rk-pellet-tool-body { padding: 14px; }
    #rk-pellet-guide .rk-pellet-tool-panel { padding: 18px 14px; }
    #rk-pellet-guide .rk-pellet-tool-actions { display: grid; }
    #rk-pellet-guide .rk-pellet-calc-button,
    #rk-pellet-guide .rk-pellet-reset-button { width: 100%; }
    #rk-pellet-guide .rk-pellet-cost-row { grid-template-columns: 82px minmax(0, 1fr) 75px; }
    #rk-pellet-guide .rk-pellet-author-head { display: block; }
    #rk-pellet-guide .rk-pellet-author-mark { margin-top: 17px; white-space: normal; }
    #rk-pellet-guide .rk-pellet-author-main { padding: 24px 18px; }
    #rk-pellet-guide .rk-pellet-author-quote { padding: 65px 20px 22px; }
    #rk-pellet-guide .rk-pellet-author-quote::before { left: 20px; }
    #rk-pellet-guide .rk-pellet-author-tab { font-size: .56rem; }
    #rk-pellet-guide .rk-pellet-step { padding-left: 64px; }
    #rk-pellet-guide .rk-pellet-step::before { left: 15px; }
  }

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

<article id="rk-pellet-guide" itemscope itemtype="https://schema.org/TechArticle">
  <div class="rk-pellet-progress" aria-hidden="true"></div>
  <div class="rk-pellet-shell">
    <header class="rk-pellet-hero">
      <span class="rk-pellet-kicker">Pellet bez uproszczeń</span>
      <div class="rk-pellet-hero-title">Kocioł na pellet: <span>koszty, dobór mocy i współpraca z podłogówką</span></div>
      <p class="rk-pellet-lead">Sprawdź, ile paliwa może zużyć Twój budynek, z czego powstaje koszt sezonu oraz kiedy pellet jest rozsądnym wyborem. Osobno omawiamy moc minimalną kotła, bufor, ochronę powrotu, hydraulikę podłogówki i aktualne wymagania.</p>
      <div class="rk-pellet-hero-tags" aria-label="Zakres opracowania">
        <span class="rk-pellet-hero-tag">kalkulator kosztów</span>
        <span class="rk-pellet-hero-tag">zużycie i liczba worków</span>
        <span class="rk-pellet-hero-tag">moc nominalna i minimalna</span>
        <span class="rk-pellet-hero-tag">bufor bez stałego l/kW</span>
        <span class="rk-pellet-hero-tag">Ecodesign, ZUM i CEEB</span>
      </div>
      <div class="rk-pellet-byline">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Aktualizacja techniczna: <strong>31 sierpnia 2026 r.</strong></span>
        <span>Czas czytania: <strong>około 22 minut</strong></span>
      </div>
      <div class="rk-pellet-hero-metrics" aria-label="Najważniejsze zasady">
        <div class="rk-pellet-hero-metric"><b>Koszt z energii</b><span>Nie z samego metrażu domu ani jednej ceny za tonę.</span></div>
        <div class="rk-pellet-hero-metric"><b>Moc z OZC</b><span>Liczy się także najniższa stabilna moc kotła poza mrozem.</span></div>
        <div class="rk-pellet-hero-metric"><b>Bufor z analizy</b><span>Nie ma jednej pojemności w litrach na kW dla każdego układu.</span></div>
      </div>
    </header>

    <nav class="rk-pellet-nav" aria-label="Skróty do wszystkich części artykułu">
      <span class="rk-pellet-nav-label">Na skróty</span>
      <div class="rk-pellet-nav-track">
        <a href="#rk-pellet-szybka">Szybka odpowiedź</a>
        <a href="#rk-pellet-dzialanie">Jak działa</a>
        <a href="#rk-pellet-kalkulator">Kalkulator kosztów</a>
        <a href="#rk-pellet-wynik">Interpretacja wyniku</a>
        <a href="#rk-pellet-przyklady">100–200 m²</a>
        <a href="#rk-pellet-koszty">Składniki kosztu</a>
        <a href="#rk-pellet-moc">Dobór mocy</a>
        <a href="#rk-pellet-podlogowka">Pellet i podłogówka</a>
        <a href="#rk-pellet-temperatury">Temperatury</a>
        <a href="#rk-pellet-bufor">Czy potrzebny bufor</a>
        <a href="#rk-pellet-hydraulika">Hydraulika</a>
        <a href="#rk-pellet-paliwo">Jakość pelletu</a>
        <a href="#rk-pellet-magazyn">Magazyn paliwa</a>
        <a href="#rk-pellet-obsluga">Obsługa i serwis</a>
        <a href="#rk-pellet-wymagania">Klasa 5 i Ecodesign</a>
        <a href="#rk-pellet-dotacje">ZUM, przepisy i CEEB</a>
        <a href="#rk-pellet-plusy">Zalety i wady</a>
        <a href="#rk-pellet-kiedy-nie">Kiedy nie wybierać</a>
        <a href="#rk-pellet-bledy">Błędy</a>
        <a href="#rk-pellet-checklista">Checklista</a>
        <a href="#rk-pellet-faq">FAQ</a>
        <a href="#rk-pellet-zrodla">Źródła</a>
        <a href="#rk-pellet-autor">Autor</a>
      </div>
    </nav>

    <div class="rk-pellet-content">
      <section class="rk-pellet-section" id="rk-pellet-szybka">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Odpowiedź w 30 sekund</span>
          <h2>Czy kocioł na pellet ma sens?</h2>
          <p>Może mieć sens, gdy budynek nie ma wygodnego dostępu do sieci ciepłowniczej, inwestor akceptuje dostawy i magazynowanie paliwa, a instalacja jest przygotowana do regularnej obsługi urządzenia spalającego biomasę.</p>
        </div>
        <div class="rk-pellet-answer">
          <h3>Pellet nie jest ogrzewaniem bezobsługowym</h3>
          <p>Automatyczne podawanie paliwa ogranicza pracę użytkownika, ale nie usuwa konieczności uzupełniania zasobnika, odbioru dostaw, przechowywania pelletu w suchym miejscu, opróżniania popiołu, czyszczenia i serwisu.</p>
          <p>O opłacalności decydują przede wszystkim <strong>roczne zapotrzebowanie na ciepło, sezonowa sprawność całego układu, cena i jakość paliwa oraz koszty dodatkowe</strong>. Sama powierzchnia 150 m² nie wystarcza do obliczenia zużycia.</p>
        </div>
        <div class="rk-pellet-grid-3" style="margin-top:18px">
          <div class="rk-pellet-card rk-pellet-card-green"><span class="rk-pellet-mini-label">Dobry kierunek</span><h3>Jest miejsce i logistyka</h3><p>Kotłownia, komin, dostęp dla dostawy i suchy magazyn paliwa są możliwe do wykonania bez prowizorki.</p></div>
          <div class="rk-pellet-card rk-pellet-card-accent"><span class="rk-pellet-mini-label">Warunek techniczny</span><h3>Moc wynika z obliczeń</h3><p>Kocioł ma pasować nie tylko mocą nominalną, lecz również najniższą stabilną mocą do budynku.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><span class="rk-pellet-mini-label">Sygnał ostrzegawczy</span><h3>Oczekujesz pełnej autonomii</h3><p>Jeśli nie chcesz zamawiać paliwa, czyścić urządzenia ani kontrolować popiołu, pellet może nie odpowiadać Twoim oczekiwaniom.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-dzialanie">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Od granulatu do ciepłej podłogi</span>
          <h2>Jak działa kocioł na pellet?</h2>
          <p>Pellet jest transportowany z zasobnika do palnika, spalany przy kontrolowanym dopływie powietrza, a uzyskane ciepło trafia do wody instalacyjnej. Automatyka steruje podajnikiem, wentylatorem, zapłonem i pompami.</p>
        </div>
        <div class="rk-pellet-flow" aria-label="Droga energii od paliwa do pomieszczeń">
          <div class="rk-pellet-flow-item"><span class="rk-pellet-mini-label">1. Paliwo</span><h3>Zasobnik i podajnik</h3><p>Jakość, wilgotność i ilość drobnej frakcji wpływają na podawanie oraz spalanie.</p></div>
          <div class="rk-pellet-flow-item"><span class="rk-pellet-mini-label">2. Źródło</span><h3>Palnik i wymiennik</h3><p>Kocioł zamienia energię chemiczną paliwa na energię przekazaną wodzie.</p></div>
          <div class="rk-pellet-flow-item"><span class="rk-pellet-mini-label">3. Instalacja</span><h3>Obiegi grzewcze</h3><p>Pompy, zawory i automatyka dostarczają wymaganą moc do podłogówki, grzejników lub zasobnika CWU.</p></div>
        </div>
        <p>Sprawność przy mocy znamionowej nie jest tym samym co sprawność sezonowa. Na wynik roczny wpływają rozpalanie, wygaszanie, praca częściowa, straty postojowe, temperatura instalacji, czystość wymiennika i energia elektryczna osprzętu.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-kalkulator">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Jawne dane zamiast ceny „za metr”</span>
          <h2>Kalkulator kosztów ogrzewania pelletem</h2>
          <p>Najdokładniejszy tryb wykorzystuje roczne zapotrzebowanie na energię użyteczną z audytu, charakterystyki lub wiarygodnych obliczeń. Jeśli go nie znasz, możesz użyć powierzchni i własnego wskaźnika kWh/m²/rok jako wstępnego scenariusza.</p>
        </div>

        <div class="rk-pellet-tool" data-rk-pellet-calculator>
          <div class="rk-pellet-tool-head">
            <span class="rk-pellet-kicker">Model rocznego kosztu</span>
            <h3>Policz tony pelletu, liczbę worków i pełny koszt sezonu</h3>
            <p>Wartości przykładowe nie są aktualnym cennikiem. Wpisz własną cenę paliwa, sprawność sezonową, koszty prądu i serwisu. Narzędzie pokaże również, jak wynik zmieni się przy wzroście lub spadku ceny pelletu.</p>
          </div>

          <div class="rk-pellet-tool-body">
            <div class="rk-pellet-tool-panel">
              <h4>Dane energetyczne, paliwo i koszty dodatkowe</h4>
              <p>Nie mieszaj projektowej mocy w kW z roczną energią w kWh. Moc służy do doboru kotła, a energia do oszacowania zużycia paliwa.</p>

              <div class="rk-pellet-input-group">
                <span class="rk-pellet-input-title">1. Roczna energia użyteczna</span>
                <div class="rk-pellet-fields">
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-energy-mode">Sposób określenia energii CO</label>
                    <select id="rk-pellet-energy-mode">
                      <option value="direct" selected>Znam roczną energię [kWh]</option>
                      <option value="indicator">Powierzchnia × wskaźnik</option>
                    </select>
                    <small>Tryb bezpośredni jest dokładniejszy.</small>
                  </div>
                  <div class="rk-pellet-field" id="rk-pellet-direct-field">
                    <label for="rk-pellet-heat-energy">Ogrzewanie pomieszczeń [kWh/rok]</label>
                    <input id="rk-pellet-heat-energy" type="number" min="100" max="200000" step="100" value="12000" inputmode="numeric">
                    <small>Energia użyteczna, nie energia paliwa.</small>
                  </div>
                  <div class="rk-pellet-field is-hidden" id="rk-pellet-area-field">
                    <label for="rk-pellet-area">Powierzchnia ogrzewana [m²]</label>
                    <input id="rk-pellet-area" type="number" min="10" max="2000" step="1" value="150" inputmode="decimal">
                    <small>Powierzchnia objęta bilansem.</small>
                  </div>
                  <div class="rk-pellet-field is-hidden" id="rk-pellet-indicator-field">
                    <label for="rk-pellet-indicator">Wskaźnik energii [kWh/m²/rok]</label>
                    <input id="rk-pellet-indicator" type="number" min="5" max="500" step="1" value="80" inputmode="decimal">
                    <small>Wpisz wartość z własnej analizy.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-dhw-energy">CWU [kWh/rok]</label>
                    <input id="rk-pellet-dhw-energy" type="number" min="0" max="50000" step="100" value="2500" inputmode="numeric">
                    <small>Wpisz 0, jeśli kocioł nie przygotowuje CWU.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-heating-days">Dni sezonu grzewczego</label>
                    <input id="rk-pellet-heating-days" type="number" min="30" max="365" step="1" value="220" inputmode="numeric">
                    <small>Do średniego zużycia pelletu na dzień CO.</small>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-input-group">
                <span class="rk-pellet-input-title">2. Parametry paliwa i sprawność</span>
                <div class="rk-pellet-fields">
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-efficiency">Sprawność sezonowa układu [%]</label>
                    <input id="rk-pellet-efficiency" type="number" min="30" max="100" step="0.5" value="85" inputmode="decimal">
                    <small>Nie przepisuj bezrefleksyjnie sprawności znamionowej.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-calorific">Wartość opałowa [kWh/kg]</label>
                    <input id="rk-pellet-calorific" type="number" min="2" max="7" step="0.05" value="4.8" inputmode="decimal">
                    <small>Użyj deklaracji dostawcy paliwa.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-price">Cena pelletu [zł/t]</label>
                    <input id="rk-pellet-price" type="number" min="100" max="10000" step="10" value="1500" inputmode="decimal">
                    <small>Wartość przykładowa — wpisz swoją ofertę.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-bag-mass">Masa worka [kg]</label>
                    <input id="rk-pellet-bag-mass" type="number" min="5" max="1000" step="1" value="15" inputmode="decimal">
                    <small>Do obliczenia liczby worków.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-density">Gęstość nasypowa [kg/m³]</label>
                    <input id="rk-pellet-density" type="number" min="300" max="900" step="10" value="650" inputmode="decimal">
                    <small>Do orientacyjnej kubatury samego paliwa.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-storage-margin">Rezerwa magazynu [%]</label>
                    <input id="rk-pellet-storage-margin" type="number" min="0" max="100" step="1" value="15" inputmode="decimal">
                    <small>Wolna przestrzeń i niedoskonałe wykorzystanie kubatury.</small>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-input-group">
                <span class="rk-pellet-input-title">3. Prąd, dostawa i obsługa</span>
                <div class="rk-pellet-fields">
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-electric-use">Energia elektryczna [kWh/rok]</label>
                    <input id="rk-pellet-electric-use" type="number" min="0" max="20000" step="10" value="450" inputmode="decimal">
                    <small>Kocioł, podajniki, pompy i automatyka.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-electric-price">Cena prądu [zł/kWh]</label>
                    <input id="rk-pellet-electric-price" type="number" min="0" max="10" step="0.01" value="1.10" inputmode="decimal">
                    <small>Całkowita cena przyjęta do obliczenia.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-delivery">Transport pelletu [zł/rok]</label>
                    <input id="rk-pellet-delivery" type="number" min="0" max="20000" step="10" value="300" inputmode="decimal">
                    <small>Roczny koszt dostaw i rozładunku.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-service">Serwis i części [zł/rok]</label>
                    <input id="rk-pellet-service" type="number" min="0" max="30000" step="10" value="800" inputmode="decimal">
                    <small>Własny budżet eksploatacyjny.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-chimney">Komin i przeglądy [zł/rok]</label>
                    <input id="rk-pellet-chimney" type="number" min="0" max="10000" step="10" value="250" inputmode="decimal">
                    <small>Wpisz rzeczywisty koszt dla obiektu.</small>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-tool-actions">
                <button class="rk-pellet-calc-button" type="button" id="rk-pellet-calculate">Przelicz koszt ogrzewania</button>
                <button class="rk-pellet-reset-button" type="button" id="rk-pellet-reset">Przywróć dane przykładowe</button>
              </div>
              <div class="rk-pellet-error" id="rk-pellet-error" role="alert"></div>
            </div>

            <div class="rk-pellet-results" id="rk-pellet-results" aria-live="polite">
              <div class="rk-pellet-result-lead">
                <span>Orientacyjny pełny koszt roczny</span>
                <strong id="rk-pellet-total-cost">—</strong>
                <p id="rk-pellet-result-summary">Wprowadź własne dane lub pozostaw wartości przykładowe.</p>
              </div>

              <div class="rk-pellet-metrics" aria-label="Najważniejsze wyniki kalkulatora">
                <div class="rk-pellet-metric"><span>Energia użyteczna</span><strong id="rk-pellet-useful-energy">—</strong><small>CO i CWU</small></div>
                <div class="rk-pellet-metric"><span>Energia w paliwie</span><strong id="rk-pellet-fuel-energy">—</strong><small>po uwzględnieniu sprawności</small></div>
                <div class="rk-pellet-metric"><span>Zużycie pelletu</span><strong id="rk-pellet-mass">—</strong><small>wartość obliczeniowa</small></div>
                <div class="rk-pellet-metric"><span>Liczba worków</span><strong id="rk-pellet-bags">—</strong><small>zaokrąglona w górę</small></div>
                <div class="rk-pellet-metric"><span>Koszt pelletu</span><strong id="rk-pellet-fuel-cost">—</strong><small>bez kosztów dodatkowych</small></div>
                <div class="rk-pellet-metric"><span>Koszt 1 kWh ciepła</span><strong id="rk-pellet-unit-cost">—</strong><small>pełny koszt / energia użyteczna</small></div>
                <div class="rk-pellet-metric"><span>Średnia miesięczna</span><strong id="rk-pellet-monthly-cost">—</strong><small>średnia księgowa z 12 miesięcy</small></div>
                <div class="rk-pellet-metric"><span>Średnio na dzień CO</span><strong id="rk-pellet-daily-mass">—</strong><small>tylko część ogrzewania pomieszczeń</small></div>
              </div>

              <div class="rk-pellet-result-status" id="rk-pellet-status">Wynik pojawi się po obliczeniu.</div>

              <div class="rk-pellet-visual-grid">
                <div class="rk-pellet-chart-card">
                  <h4>Wrażliwość kosztu na cenę pelletu</h4>
                  <p>Wykres pokazuje roczny koszt całkowity dla ceny paliwa niższej i wyższej od wpisanej wartości. Pozostałe dane nie zmieniają się.</p>
                  <div class="rk-pellet-canvas-wrap"><canvas id="rk-pellet-price-chart" width="600" height="280" role="img" aria-label="Wykres rocznego kosztu ogrzewania dla kilku cen pelletu"></canvas></div>
                </div>
                <div class="rk-pellet-cost-card">
                  <h4>Z czego powstaje koszt roczny?</h4>
                  <p>Paski pokazują udział paliwa, energii elektrycznej, serwisu, transportu i kosztów kominowych.</p>
                  <div class="rk-pellet-cost-bars">
                    <div class="rk-pellet-cost-row"><span>Pellet</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill" id="rk-pellet-bar-fuel"></div></div><strong id="rk-pellet-label-fuel">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Prąd</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-electric" id="rk-pellet-bar-electric"></div></div><strong id="rk-pellet-label-electric">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Serwis</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-service" id="rk-pellet-bar-service"></div></div><strong id="rk-pellet-label-service">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Transport</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-delivery" id="rk-pellet-bar-delivery"></div></div><strong id="rk-pellet-label-delivery">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Komin</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-chimney" id="rk-pellet-bar-chimney"></div></div><strong id="rk-pellet-label-chimney">—</strong></div>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-storage-card">
                <h4>Orientacyjna przestrzeń na paliwo</h4>
                <p>Objętość wynika z masy, gęstości nasypowej i wpisanej rezerwy. Worek, paleta, ściany zasobnika oraz dostęp obsługowy zajmują dodatkowe miejsce.</p>
                <div class="rk-pellet-storage-layout">
                  <svg class="rk-pellet-storage-svg" id="rk-pellet-storage-svg" viewBox="0 0 250 250" role="img" aria-label="Schemat orientacyjnej objętości magazynu pelletu"></svg>
                  <div class="rk-pellet-storage-facts">
                    <div class="rk-pellet-storage-fact"><span>Objętość samego pelletu</span><strong id="rk-pellet-bulk-volume">—</strong></div>
                    <div class="rk-pellet-storage-fact"><span>Objętość z rezerwą</span><strong id="rk-pellet-storage-volume">—</strong></div>
                    <div class="rk-pellet-storage-fact"><span>Pellet na samo CO</span><strong id="rk-pellet-heating-mass">—</strong></div>
                    <div class="rk-pellet-storage-fact"><span>Pellet na CWU</span><strong id="rk-pellet-dhw-mass">—</strong></div>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-tool-panel">
                <h4>Scenariusze ceny pelletu</h4>
                <p>Tabela używa dokładnie tych samych danych energetycznych i kosztów dodatkowych. Zmienia się wyłącznie cena jednej tony.</p>
                <div class="rk-pellet-scenario-wrap">
                  <table class="rk-pellet-scenario">
                    <thead><tr><th>Scenariusz</th><th>Cena pelletu</th><th>Koszt paliwa</th><th>Koszt całkowity</th><th>Koszt 1 kWh</th></tr></thead>
                    <tbody id="rk-pellet-scenario-body"></tbody>
                  </table>
                </div>
              </div>

              <div class="rk-pellet-tool-panel">
                <h4>Diagnostyka wyniku</h4>
                <p>Komunikaty wskazują założenia, które mają największy wpływ na wynik i wymagają potwierdzenia.</p>
                <div class="rk-pellet-diagnostics" id="rk-pellet-diagnostics"></div>
              </div>
            </div>
          </div>
          <div class="rk-pellet-tool-foot">Kalkulator jest modelem edukacyjnym. Nie prognozuje pogody, jakości każdej partii paliwa, rzeczywistej sprawności konkretnego kotła ani zachowania użytkowników. Nie dobiera mocy źródła, komina, bufora, pomp i armatury bezpieczeństwa.</div>
        </div>
      </section>

      <aside class="rk-pellet-cta" aria-label="Projekt instalacji z kotłem na pellet">
        <div class="rk-pellet-cta-title">Kalkulator policzył paliwo i koszt, ale nie zaprojektował kotłowni</div>
        <p>Kalkulator potrafi przeliczyć roczne zapotrzebowanie na tony pelletu i złotówki, ale nie wie, czy wybrany kocioł ma odpowiednią moc minimalną, jak zachowa się po zamknięciu części pętli ani czy instalacja wymaga bufora. Nie sprawdzi ochrony powrotu, komina, średnic przewodów, przepływów, nastaw rozdzielaczy ani rzeczywistego schematu hydraulicznego. Te elementy wymagają obliczeń cieplnych i projektu instalacji.</p>
        <a class="rk-pellet-cta-button rk-pellet-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt podłogówki do kotła na pellet</a>
      </aside>

      <section class="rk-pellet-section" id="rk-pellet-wynik">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Co oznaczają liczby</span>
          <h2>Jak interpretować koszt i zużycie pelletu?</h2>
          <p>Wynik jest scenariuszem opartym na wpisanych danych. Nie należy go czytać jako gwarancji rachunku ani jako prognozy dla każdego domu o podobnej powierzchni.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card rk-pellet-card-accent"><h3>Energia użyteczna</h3><p>To ciepło potrzebne budynkowi i CWU. Nie jest równe energii zawartej w paliwie, ponieważ część energii tracimy.</p></div>
          <div class="rk-pellet-card rk-pellet-card-green"><h3>Sprawność sezonowa</h3><p>Uwzględnia cały rok pracy. Powinna być niższa lub co najwyżej porównywalna z wynikami uzyskiwanymi w kontrolowanych warunkach badań.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Koszty stałe</h3><p>Serwis, komin i transport nie znikają, gdy budynek zużywa mniej paliwa. Dlatego pełny koszt jednej kWh może rosnąć w małym zapotrzebowaniu.</p></div>
        </div>
        <div class="rk-pellet-warning" style="margin-top:18px"><p><strong>Nie myl dwóch wielkości:</strong> roczne zapotrzebowanie 12 000 kWh mówi o ilości energii w sezonie. Projektowe obciążenie 7 kW mówi o mocy potrzebnej w określonych warunkach obliczeniowych. Pierwsza wartość służy do kosztu, druga do doboru kotła.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-przyklady">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Jednakowe i jawne założenia</span>
          <h2>Ile pelletu na sezon dla domu 100, 120, 150 i 200 m²?</h2>
          <p>Poniższa tabela jest porównaniem matematycznym, nie prognozą dla konkretnego budynku. Zakładamy 80 kWh/m²/rok energii użytecznej na CO, dodatkowo 2500 kWh/rok na CWU, wartość opałową 4,8 kWh/kg oraz sprawność sezonową 85%.</p>
        </div>
        <div class="rk-pellet-table-wrap">
          <table class="rk-pellet-table">
            <thead><tr><th>Powierzchnia</th><th>Energia CO</th><th>CO + CWU</th><th>Pellet na CO</th><th>Pellet łącznie</th><th>Worki 15 kg</th></tr></thead>
            <tbody>
              <tr><td data-label="Powierzchnia">100 m²</td><td data-label="Energia CO">8000 kWh/rok</td><td data-label="CO + CWU">10 500 kWh/rok</td><td data-label="Pellet na CO">około 1,96 t</td><td data-label="Pellet łącznie">około 2,57 t</td><td data-label="Worki 15 kg">około 172</td></tr>
              <tr><td data-label="Powierzchnia">120 m²</td><td data-label="Energia CO">9600 kWh/rok</td><td data-label="CO + CWU">12 100 kWh/rok</td><td data-label="Pellet na CO">około 2,35 t</td><td data-label="Pellet łącznie">około 2,97 t</td><td data-label="Worki 15 kg">około 198</td></tr>
              <tr><td data-label="Powierzchnia">150 m²</td><td data-label="Energia CO">12 000 kWh/rok</td><td data-label="CO + CWU">14 500 kWh/rok</td><td data-label="Pellet na CO">około 2,94 t</td><td data-label="Pellet łącznie">około 3,55 t</td><td data-label="Worki 15 kg">około 237</td></tr>
              <tr><td data-label="Powierzchnia">200 m²</td><td data-label="Energia CO">16 000 kWh/rok</td><td data-label="CO + CWU">18 500 kWh/rok</td><td data-label="Pellet na CO">około 3,92 t</td><td data-label="Pellet łącznie">około 4,53 t</td><td data-label="Worki 15 kg">około 303</td></tr>
            </tbody>
          </table>
        </div>
        <p class="rk-pellet-disclaimer">Dom 150 m² może potrzebować znacznie mniej lub więcej energii niż przyjęte 80 kWh/m²/rok. Wynik zmienią między innymi izolacja, szczelność, wentylacja, temperatura wewnętrzna, klimat, zyski słoneczne i sposób przygotowania CWU.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-koszty">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Cena tony to nie cały rachunek</span>
          <h2>Od czego zależy koszt ogrzewania pelletem?</h2>
          <p>Pełny koszt roczny jest sumą paliwa, prądu i obsługi. Porównywanie samej ceny tony pelletu z ceną kWh energii elektrycznej prowadzi do błędnych wniosków.</p>
        </div>
        <div class="rk-pellet-formula">m<sub>pelletu</sub> = Q<sub>użyteczne</sub> / (H<sub>u</sub> × η<sub>sezonowa</sub>)</div>
        <div class="rk-pellet-formula">K<sub>roczny</sub> = K<sub>paliwa</sub> + K<sub>prądu</sub> + K<sub>serwisu</sub> + K<sub>transportu</sub> + K<sub>komina</sub></div>
        <div class="rk-pellet-grid-4">
          <div class="rk-pellet-card"><h3>Budynek</h3><p>Roczne zapotrzebowanie na ciepło zwykle ma większy wpływ niż niewielka różnica sprawności dwóch urządzeń.</p></div>
          <div class="rk-pellet-card"><h3>Paliwo</h3><p>Wartość opałowa, wilgotność i cena dostawy zmieniają ilość energii uzyskanej z jednej tony.</p></div>
          <div class="rk-pellet-card"><h3>Eksploatacja</h3><p>Podajnik, wentylator, zapalarka, pompy i automatyka pobierają energię elektryczną.</p></div>
          <div class="rk-pellet-card"><h3>Obsługa</h3><p>Serwis, komin, czyszczenie, części i logistyka paliwa są częścią ekonomii systemu.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-moc">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Kilowaty z obliczeń</span>
          <h2>Jak dobrać moc kotła na pellet?</h2>
          <p>Podstawą jest projektowe obciążenie cieplne budynku, a nie powierzchnia pomnożona przez jeden wskaźnik. Osobno analizuje się sposób przygotowania ciepłej wody użytkowej.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-green">
            <h3>Moc nominalna</h3>
            <p>Powinna pokrywać projektowe obciążenie cieplne z uwzględnieniem przyjętej koncepcji CWU i warunków pracy instalacji. Nie dodajemy automatycznie 15 lub 30% „na wszelki wypadek”.</p>
          </div>
          <div class="rk-pellet-card rk-pellet-card-orange">
            <h3>Moc minimalna</h3>
            <p>Decyduje o zachowaniu kotła przez większą część sezonu, gdy budynek potrzebuje znacznie mniej ciepła niż podczas mrozu. Zbyt wysoka moc minimalna zwiększa ryzyko częstego wygaszania.</p>
          </div>
        </div>
        <p>Wartość z OZC opisuje warunki obliczeniowe. Nie oznacza, że przez cały sezon kocioł pracuje z taką mocą. Zobacz opracowanie <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a>.</p>
        <div class="rk-pellet-note"><p><strong>Dobór źródła to nie dobór tylko jednego punktu.</strong> Trzeba porównać zapotrzebowanie budynku z zakresem stabilnej pracy urządzenia, sposobem sterowania, zładem i możliwością magazynowania nadwyżki energii.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-podlogowka">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Dwa różne poziomy temperatur</span>
          <h2>Czy kocioł na pellet nadaje się do ogrzewania podłogowego?</h2>
          <p>Tak, pod warunkiem że układ zapewnia warunki wymagane przez kocioł i jednocześnie dostarcza do podłogi wodę o temperaturze wynikającej z projektu powierzchni grzewczej.</p>
        </div>
        <div class="rk-pellet-flow" aria-label="Rozdzielenie funkcji kotła i ogrzewania podłogowego">
          <div class="rk-pellet-flow-item"><h3>Obieg kotłowy</h3><p>Zapewnia przepływ, temperaturę i ochronę powrotu wymaganą przez konkretne źródło.</p></div>
          <div class="rk-pellet-flow-item"><h3>Połączenie hydrauliczne</h3><p>Może wykorzystywać bufor, sprzęgło lub inne rozwiązanie wynikające z projektu i dokumentacji kotła.</p></div>
          <div class="rk-pellet-flow-item"><h3>Obieg podłogówki</h3><p>Pracuje z temperaturą pogodową, obliczonym przepływem i nastawami poszczególnych pętli.</p></div>
        </div>
        <p>Rodzaj źródła nie wyznacza automatycznie rozstawu 10 lub 15 cm. Rozstaw rur wynika z wymaganej mocy, temperatury wody, konstrukcji podłogi i oporu okładziny. Szerzej opisujemy to w artykule <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur w ogrzewaniu podłogowym</a>.</p>
        <div class="rk-pellet-warning"><p>Bezpośrednie połączenie wysokotemperaturowego obiegu kotłowego z rozdzielaczem nie jest właściwą zasadą projektową. Sposób obniżenia i regulowania temperatury musi uwzględniać automatykę, hydraulikę i zabezpieczenia całego układu.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-temperatury">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Nie jedna stała dla całej instalacji</span>
          <h2>Temperatura kotła, powrotu i zasilania podłogówki</h2>
          <p>W artykule nie przypisujemy jednej uniwersalnej temperatury powrotu wszystkim kotłom ani jednej maksymalnej temperatury zasilania wszystkim podłogom.</p>
        </div>
        <div class="rk-pellet-table-wrap">
          <table class="rk-pellet-table">
            <thead><tr><th>Parametr</th><th>Od czego zależy?</th><th>Gdzie go sprawdzić?</th><th>Najczęstszy błąd</th></tr></thead>
            <tbody>
              <tr><td data-label="Parametr">Temperatura kotła</td><td data-label="Zależność">Konstrukcja źródła, spalanie i automatyka.</td><td data-label="Weryfikacja">Dokumentacja kotła i projekt kotłowni.</td><td data-label="Błąd">Obniżenie jej bez sprawdzenia warunków pracy urządzenia.</td></tr>
              <tr><td data-label="Parametr">Temperatura powrotu</td><td data-label="Zależność">Wymagania konkretnego wymiennika i sposób ochrony.</td><td data-label="Weryfikacja">Dokumentacja urządzenia i schemat hydrauliczny.</td><td data-label="Błąd">Przyjęcie 55°C jako wartości dla każdego kotła.</td></tr>
              <tr><td data-label="Parametr">Zasilanie podłogówki</td><td data-label="Zależność">Strata ciepła, rozstaw, okładzina i konstrukcja.</td><td data-label="Weryfikacja">Obliczenia wydajności podłogi i krzywa grzewcza.</td><td data-label="Błąd">Ustawienie jednej stałej temperatury na cały sezon.</td></tr>
              <tr><td data-label="Parametr">Powierzchnia podłogi</td><td data-label="Zależność">Moc, temperatura pomieszczenia i opór wykończenia.</td><td data-label="Weryfikacja">Projekt oraz wymagania okładziny.</td><td data-label="Błąd">Mylenie temperatury wody z temperaturą posadzki.</td></tr>
            </tbody>
          </table>
        </div>
        <p>Osobne opracowanie wyjaśnia <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalną temperaturę zasilania podłogówki</a>, a regulację sezonową opisuje artykuł <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywa grzewcza w ogrzewaniu podłogowym</a>.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-bufor">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Magazyn energii, nie magiczne l/kW</span>
          <h2>Czy kocioł na pellet musi mieć bufor?</h2>
          <p>Nie można odpowiedzieć jednym przelicznikiem. Bufor może być wymagany przez koncepcję, dokumentację urządzenia lub program dotacyjny, a w innych układach jego funkcję i pojemność analizuje się indywidualnie.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-green">
            <h3>Bufor jest szczególnie użyteczny, gdy</h3>
            <ul>
              <li>minimalna moc kotła przewyższa chwilowy odbiór budynku,</li>
              <li>automatyka strefowa zamyka wiele obiegów,</li>
              <li>potrzebne jest rozdzielenie przepływów i temperatur,</li>
              <li>chcemy wydłużyć cykl pracy źródła,</li>
              <li>układ łączy kilka obiegów o różnych parametrach.</li>
            </ul>
          </div>
          <div class="rk-pellet-card rk-pellet-card-orange">
            <h3>Nie dobieraj bufora wyłącznie przez</h3>
            <ul>
              <li>mnożenie mocy nominalnej przez 50 lub 60 l/kW,</li>
              <li>samą powierzchnię domu,</li>
              <li>pojemność rur ogrzewania podłogowego,</li>
              <li>jedną wartość z niesprawdzonego poradnika,</li>
              <li>założenie, że większy zbiornik zawsze jest lepszy.</li>
            </ul>
          </div>
        </div>
        <h3 style="margin-top:26px">Wstępny bilans nadwyżki energii</h3>
        <div class="rk-pellet-formula">V [l] = P<sub>nadmiar</sub> [kW] × t [h] × 1000 / (1,163 × ΔT<sub>bufora</sub> [K])</div>
        <p>Wzór pokazuje ilość wody potrzebną do przejęcia określonej nadwyżki energii przez zadany czas i zakres temperatur. Nie uwzględnia strat zbiornika, warstwowania, króćców, sterowania ani wymagań konkretnego kotła.</p>
        <p>Szczegóły znajdziesz w opracowaniu <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła w ogrzewaniu podłogowym</a>.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-hydraulika">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Ta sama moc, różne przepływy</span>
          <h2>Obieg kotłowy i podłogówka — jak liczyć przepływ?</h2>
          <p>Przepływ wynika z przenoszonej mocy i projektowej różnicy temperatur. Dlatego obieg kotłowy oraz instalacyjny mogą mieć różne wartości mimo przekazywania tej samej mocy.</p>
        </div>
        <div class="rk-pellet-formula">V̇ [m³/h] = Q [kW] / (1,163 × ΔT [K])</div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-brown"><h3>Przykład po stronie kotła</h3><p>Dla 10 kW i różnicy temperatur 20 K otrzymujemy około 0,43 m³/h.</p></div>
          <div class="rk-pellet-card rk-pellet-card-accent"><h3>Przykład po stronie podłogówki</h3><p>Dla 10 kW i różnicy temperatur 5 K otrzymujemy około 1,72 m³/h.</p></div>
        </div>
        <p>Nie oznacza to automatycznie, że zawsze potrzebne jest sprzęgło. Sposób połączenia zależy od pomp, oporów, zaworów, bufora, wymaganych przepływów i sterowania. Zobacz <a href="https://projekt-ogrzewania.pl/sprzeglo-hydrauliczne-w-instalacji-ogrzewania-podlogowego/">sprzęgło hydrauliczne w instalacji podłogowej</a> oraz <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulator doboru pompy obiegowej</a>.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-paliwo">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Parametry zamiast samego logo</span>
          <h2>Jak ocenić jakość pelletu?</h2>
          <p>Paliwo powinno odpowiadać klasie i parametrom dopuszczonym w dokumentacji kotła. Sam znak handlowy na opakowaniu nie zwalnia z oceny deklarowanych właściwości i zachowania konkretnej partii.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card"><h3>Energia</h3><p>Wartość opałowa mówi, ile energii chemicznej przypada na kilogram paliwa. Kalkulator pozwala wpisać wartość z deklaracji.</p></div>
          <div class="rk-pellet-card"><h3>Wilgoć i popiół</h3><p>Wpływają na ilość użytecznego ciepła, częstotliwość obsługi oraz pozostałości po spalaniu.</p></div>
          <div class="rk-pellet-card"><h3>Mechanika paliwa</h3><p>Wymiary granulatu, trwałość i zawartość drobnej frakcji wpływają na transport oraz stabilność podawania.</p></div>
        </div>
        <p>ISO 17225-2 określa klasy jakościowe i specyfikacje klasyfikowanego pelletu drzewnego. Nie przesądza jednak, że każdy pellet danej klasy będzie właściwy dla każdego urządzenia.</p>
        <div class="rk-pellet-warning"><p>Pellet musi być przechowywany w warunkach chroniących go przed wilgocią. Paliwo zawilgocone podczas składowania może nie odpowiadać parametrom podanym przy zakupie.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-magazyn">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Tony trzeba dostarczyć i przechować</span>
          <h2>Ile miejsca potrzeba na pellet?</h2>
          <p>Objętość samego paliwa można oszacować z masy i gęstości nasypowej. Rzeczywista przestrzeń magazynowa musi być większa, ponieważ obejmuje opakowania, palety, przejścia i dostęp do obsługi.</p>
        </div>
        <div class="rk-pellet-formula">V<sub>pelletu</sub> [m³] = m<sub>pelletu</sub> [kg] / ρ<sub>nasypowa</sub> [kg/m³]</div>
        <div class="rk-pellet-grid-4">
          <div class="rk-pellet-card"><h3>Sucho</h3><p>Pomieszczenie musi chronić paliwo przed wilgocią i wodą.</p></div>
          <div class="rk-pellet-card"><h3>Dostęp</h3><p>Trasa od rozładunku do magazynu powinna być możliwa do obsługi.</p></div>
          <div class="rk-pellet-card"><h3>Nośność</h3><p>Kilka ton paliwa stanowi rzeczywiste obciążenie podłoża i konstrukcji.</p></div>
          <div class="rk-pellet-card"><h3>Rezerwa</h3><p>Geometryczna objętość zasobnika nie jest w pełni wykorzystywana przez paliwo.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-obsluga">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Koszt czasu i konserwacji</span>
          <h2>Prąd, czyszczenie i serwis kotła pelletowego</h2>
          <p>Częstotliwość obsługi zależy od konstrukcji urządzenia, automatycznego czyszczenia, jakości paliwa, obciążenia i liczby godzin pracy. Nie ma jednej liczby tygodni lub ton dla wszystkich kotłów.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card rk-pellet-card-purple"><h3>Energia elektryczna</h3><p>Podajnik, wentylator, zapalarka, pompy i sterowanie wymagają prądu. Brak zasilania zatrzymuje automatykę i transport paliwa.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Czyszczenie bieżące</h3><p>Użytkownik kontroluje popiół, palnik, wymiennik i zasobnik zgodnie z instrukcją oraz rzeczywistym stanem urządzenia.</p></div>
          <div class="rk-pellet-card rk-pellet-card-green"><h3>Przeglądy</h3><p>Serwis kotła nie zastępuje wymaganej kontroli przewodów kominowych, wentylacji i pozostałych zabezpieczeń kotłowni.</p></div>
        </div>
        <p>Do porównania kosztów trzeba dodać wartość własnego czasu lub przynajmniej świadomie zaakceptować zakres obsługi. Pellet może być wygodniejszy od kotła zasypowego, ale nie jest odpowiednikiem bezobsługowej dostawy energii z sieci.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-wymagania">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Cztery różne poziomy oceny</span>
          <h2>Klasa 5, Ecodesign, etykieta energetyczna i lista ZUM</h2>
          <p>Tych pojęć nie należy używać zamiennie. Każde odpowiada na inne pytanie dotyczące urządzenia.</p>
        </div>
        <div class="rk-pellet-table-wrap">
          <table class="rk-pellet-table">
            <thead><tr><th>Pojęcie</th><th>Co opisuje?</th><th>Czego nie potwierdza samo w sobie?</th></tr></thead>
            <tbody>
              <tr><td data-label="Pojęcie">EN 303-5 / klasa kotła</td><td data-label="Opis">Wymagania, badania i oznakowanie kotłów na paliwa stałe.</td><td data-label="Nie potwierdza">Zgodności montażu z lokalną uchwałą lub warunkami dotacji.</td></tr>
              <tr><td data-label="Pojęcie">Ecodesign</td><td data-label="Opis">Wymagania produktowe dotyczące efektywności i emisji przy wprowadzaniu urządzenia na rynek.</td><td data-label="Nie potwierdza">Prawidłowego doboru mocy i hydrauliki do budynku.</td></tr>
              <tr><td data-label="Pojęcie">Etykieta energetyczna</td><td data-label="Opis">Informację o klasie efektywności energetycznej urządzenia w objętym zakresie.</td><td data-label="Nie potwierdza">Rocznego kosztu w konkretnym domu.</td></tr>
              <tr><td data-label="Pojęcie">Lista ZUM</td><td data-label="Opis">Kwalifikowanie wskazanych urządzeń i materiałów do programu Czyste Powietrze.</td><td data-label="Nie potwierdza">Możliwości montażu pod każdym adresem ani jakości projektu.</td></tr>
            </tbody>
          </table>
        </div>
        <p>EN 303-5:2021+A1:2022 jest normą zharmonizowaną wskazaną w oficjalnej decyzji Unii Europejskiej dla kotłów na paliwa stałe. Weryfikacja dokumentów urządzenia powinna dotyczyć dokładnie oferowanego modelu i mocy.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-dotacje">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Adres budynku ma znaczenie</span>
          <h2>Kocioł na pellet, lista ZUM, uchwała antysmogowa i CEEB</h2>
          <p>Spełnienie Ecodesign nie oznacza automatycznie, że kocioł można zamontować w dowolnym miejscu ani że otrzyma dofinansowanie.</p>
        </div>
        <div class="rk-pellet-steps">
          <div class="rk-pellet-step"><h3>Sprawdź przepisy lokalne</h3><p>Zweryfikuj aktualną uchwałę antysmogową, program ochrony powietrza i ewentualne ograniczenia obowiązujące pod konkretnym adresem.</p></div>
          <div class="rk-pellet-step"><h3>Sprawdź aktualne warunki programu</h3><p>Przy dofinansowaniu nie wystarczy ogólna nazwa urządzenia. Trzeba spełnić wymagania aktualnej edycji oraz zweryfikować wpis na liście ZUM w wymaganym terminie.</p></div>
          <div class="rk-pellet-step"><h3>Zweryfikuj komin i kotłownię</h3><p>Projekt musi uwzględnić odprowadzenie spalin, dopływ powietrza, wentylację, zabezpieczenia i wymagane odległości.</p></div>
          <div class="rk-pellet-step"><h3>Zaktualizuj CEEB</h3><p>Po uruchomieniu lub zmianie źródła ciepła właściciel albo zarządca powinien dopełnić obowiązku dotyczącego deklaracji CEEB.</p></div>
        </div>
        <div class="rk-pellet-warning" style="margin-top:18px"><p>Warunki dotacji zmieniają się szybciej niż parametry hydrauliczne. Dlatego w kodzie linkujemy do aktualnej strony programu, zamiast wpisywać kwotę dofinansowania jako stałą część artykułu.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-plusy">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Bilans bez marketingu</span>
          <h2>Zalety i wady kotła na pellet</h2>
          <p>Ocena powinna obejmować nie tylko koszt paliwa, lecz także komfort obsługi, dostępność miejsca, emisję lokalną i odporność systemu na przerwy w dostawie energii elektrycznej.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-green">
            <h3>Zalety</h3>
            <ul>
              <li>automatyczne dawkowanie paliwa,</li>
              <li>możliwość współpracy z instalacją wodną i CWU,</li>
              <li>paliwo możliwe do magazynowania na posesji,</li>
              <li>mniejszy zakres ręcznej obsługi niż w wielu kotłach zasypowych,</li>
              <li>możliwość zasilania grzejników i podłogówki przez odpowiednio zaprojektowane obiegi.</li>
            </ul>
          </div>
          <div class="rk-pellet-card rk-pellet-card-orange">
            <h3>Wady</h3>
            <ul>
              <li>potrzeba miejsca na kotłownię i paliwo,</li>
              <li>regularne dostawy, popiół, czyszczenie i serwis,</li>
              <li>zależność automatyki i podajnika od prądu,</li>
              <li>emisja zanieczyszczeń w miejscu użytkowania,</li>
              <li>ryzyko przewymiarowania w budynku o małym zapotrzebowaniu,</li>
              <li>lokalne ograniczenia prawne mogące zmieniać opłacalność inwestycji.</li>
            </ul>
          </div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-kiedy-nie">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Technologia musi pasować do użytkownika</span>
          <h2>Kiedy nie wybierać kotła na pellet?</h2>
          <p>Nawet dobry kocioł nie będzie dobrym wyborem, jeżeli nie pasuje do warunków budynku i sposobu życia mieszkańców.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak miejsca</h3><p>Nie ma bezpiecznej kotłowni, magazynu ani wygodnej trasy dostaw. Paliwo miałoby stać w wilgoci lub utrudniać komunikację.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak akceptacji obsługi</h3><p>Użytkownik oczekuje źródła, które nie wymaga zamawiania paliwa, usuwania popiołu i kontroli urządzenia.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Bardzo małe obciążenie</h3><p>Dostępne kotły mają moc minimalną wyraźnie większą od zapotrzebowania budynku przez większość sezonu.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Ograniczenia lokalne</h3><p>Uchwała antysmogowa, plan modernizacji źródeł lub warunki budynku ograniczają zastosowanie paliwa stałego.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Nieodpowiedni komin</h3><p>Dostosowanie przewodu spalinowego i kotłowni jest niemożliwe albo nieproporcjonalnie kosztowne.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak stabilnego paliwa</h3><p>Nie ma możliwości zapewnienia suchego magazynu i powtarzalnych dostaw pelletu zgodnego z wymaganiami urządzenia.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-bledy">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Co psuje koszty i komfort</span>
          <h2>Najczęstsze błędy przy kotle na pellet</h2>
          <p>Najdroższe problemy powstają przed montażem: przy wyborze mocy, pominięciu hydrauliki i założeniu, że każdy certyfikat rozwiązuje wszystkie kwestie prawne.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Moc dobrana tylko z m²</h3><p>Nie uwzględnia rzeczywistego obciążenia ani mocy minimalnej urządzenia.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Bufor z jednego przelicznika</h3><p>Pomija nadwyżkę mocy, czas akumulacji, różnicę temperatur i wymagania sterowania.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Pomieszane temperatury</h3><p>Temperatura kotła, powrotu, zasilania podłogi i powierzchni posadzki są traktowane jak jedna wartość.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Koszt tylko z ceny tony</h3><p>Pomija sprawność sezonową, prąd, dostawę, serwis, komin i różną wartość opałową paliwa.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak miejsca na paliwo</h3><p>Magazyn i logistyka są analizowane dopiero po montażu kotła.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Ecodesign zamiast sprawdzenia prawa</h3><p>Wymagania produktu są mylone z lokalną uchwałą, listą ZUM i prawidłowym projektem kotłowni.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-checklista">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Przed zamówieniem urządzenia</span>
          <h2>Checklista wyboru kotła na pellet</h2>
          <p>Jeżeli kilku punktów nie możesz potwierdzić, wybór konkretnego modelu jest przedwczesny.</p>
        </div>
        <ul class="rk-pellet-checklist">
          <li>Znam projektowe obciążenie cieplne budynku.</li>
          <li>Znam roczne zapotrzebowanie na energię do analizy kosztów.</li>
          <li>Porównałem moc minimalną kotła z pracą budynku poza mrozem.</li>
          <li>Ustaliłem sposób przygotowania CWU.</li>
          <li>Sprawdziłem wymagania temperatury i ochrony powrotu.</li>
          <li>Analiza bufora wynika z układu, a nie jednej wartości l/kW.</li>
          <li>Mam schemat połączenia obiegu kotłowego i instalacyjnego.</li>
          <li>Znam wymagane przepływy i wysokość podnoszenia pomp.</li>
          <li>Komin, dopływ powietrza i wentylacja zostały zweryfikowane.</li>
          <li>Mam suche miejsce na obliczoną ilość pelletu.</li>
          <li>Sprawdziłem uchwałę antysmogową dla dokładnego adresu.</li>
          <li>Przy dotacji zweryfikowałem aktualne warunki oraz listę ZUM.</li>
          <li>Uwzględniłem prąd, serwis, transport i komin w kosztach.</li>
          <li>Wiem, kto będzie czyścił urządzenie i uzupełniał paliwo.</li>
        </ul>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-faq">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Pytania inwestorów</span>
          <h2>Kocioł na pellet — FAQ</h2>
          <p>Krótkie odpowiedzi na pytania o koszt, zużycie, bufor, podłogówkę i wymagania formalne.</p>
        </div>
        <div class="rk-pellet-faq">
          <details><summary>Ile pelletu zużywa dom 150 m²?</summary><div class="rk-pellet-faq-answer"><p>Nie da się tego ustalić z samej powierzchni. W przykładzie przy 80 kWh/m²/rok na CO, 2500 kWh na CWU, wartości opałowej 4,8 kWh/kg i sprawności 85% wychodzi około 3,55 t rocznie. Inny budynek 150 m² może zużyć wyraźnie mniej lub więcej.</p></div></details>
          <details><summary>Ile kosztuje ogrzewanie domu pelletem?</summary><div class="rk-pellet-faq-answer"><p>Koszt zależy od zapotrzebowania na energię, ceny i wartości opałowej pelletu, sprawności sezonowej, prądu, transportu, serwisu i komina. Kalkulator w artykule pozwala wpisać wszystkie te wartości.</p></div></details>
          <details><summary>Czy kocioł na pellet nadaje się do podłogówki?</summary><div class="rk-pellet-faq-answer"><p>Tak. Trzeba jednak zapewnić warunki wymagane przez kocioł oraz osobno regulować temperaturę i przepływ podłogówki zgodnie z projektem. Sposób połączenia obiegów nie powinien wynikać z jednego uniwersalnego schematu.</p></div></details>
          <details><summary>Czy kocioł na pellet zawsze wymaga bufora?</summary><div class="rk-pellet-faq-answer"><p>Nie należy przyjmować takiego twierdzenia bez analizy. Bufor może być wymagany lub uzasadniony przez dokumentację urządzenia, minimalną moc kotła, zład, sterowanie, wymagany czas pracy i sposób połączenia obiegów.</p></div></details>
          <details><summary>Ile litrów bufora na 1 kW kotła pelletowego?</summary><div class="rk-pellet-faq-answer"><p>Nie ma jednej wartości pasującej do każdego układu. Pojemność można analizować z nadwyżki mocy, czasu jej magazynowania i użytecznej różnicy temperatur, a następnie skonfrontować z dokumentacją kotła oraz koncepcją hydrauliczną.</p></div></details>
          <details><summary>Jaka temperatura powrotu jest potrzebna?</summary><div class="rk-pellet-faq-answer"><p>Minimalna temperatura powrotu i sposób jej ochrony zależą od konstrukcji oraz wymagań konkretnego kotła. Nie powinno się przypisywać wszystkim urządzeniom jednej wartości 55°C.</p></div></details>
          <details><summary>Jak dobrać moc kotła na pellet?</summary><div class="rk-pellet-faq-answer"><p>Moc nominalną dobiera się na podstawie projektowego obciążenia cieplnego i koncepcji CWU. Trzeba również sprawdzić moc minimalną, ponieważ przez większość sezonu budynek potrzebuje mniej ciepła niż podczas temperatury projektowej.</p></div></details>
          <details><summary>Czy cena tony pelletu wystarczy do porównania ogrzewania?</summary><div class="rk-pellet-faq-answer"><p>Nie. Potrzebna jest jeszcze wartość opałowa, sprawność sezonowa, roczne zapotrzebowanie na ciepło oraz koszty prądu, transportu, serwisu i komina.</p></div></details>
          <details><summary>Ile miejsca zajmuje tona pelletu?</summary><div class="rk-pellet-faq-answer"><p>Objętość zależy od gęstości nasypowej. Przy 650 kg/m³ sama tona zajmuje około 1,54 m³, ale rzeczywisty magazyn musi uwzględniać opakowania, palety, rezerwę przestrzeni oraz dostęp obsługowy.</p></div></details>
          <details><summary>Czy kocioł z Ecodesign automatycznie kwalifikuje się do dotacji?</summary><div class="rk-pellet-faq-answer"><p>Nie. Ecodesign jest wymaganiem produktowym. Program dotacyjny może dodatkowo wymagać określonego standardu, wpisu na listę ZUM, dokumentów i zgodności inwestycji z aktualnymi zasadami.</p></div></details>
          <details><summary>Czy po montażu kotła trzeba zaktualizować CEEB?</summary><div class="rk-pellet-faq-answer"><p>Zmiana lub uruchomienie źródła ciepła wymaga dopełnienia obowiązku dotyczącego deklaracji CEEB przez właściciela albo zarządcę budynku zgodnie z aktualną procedurą.</p></div></details>
          <details><summary>Czy kalkulator zastępuje projekt kotłowni?</summary><div class="rk-pellet-faq-answer"><p>Nie. Kalkulator szacuje paliwo i koszty. Nie dobiera mocy minimalnej, bufora, komina, pomp, zaworów, zabezpieczeń, średnic przewodów ani parametrów ogrzewania podłogowego.</p></div></details>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-zrodla">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Dokumenty publiczne i normalizacyjne</span>
          <h2>Źródła i podstawa techniczna opracowania</h2>
          <p>Linki zewnętrzne prowadzą wyłącznie do instytucji publicznych i organizacji normalizacyjnych. Parametry konkretnego urządzenia należy dodatkowo potwierdzić w jego dokumentacji, bez linkowania z tego artykułu do producentów.</p>
        </div>
        <ol class="rk-pellet-sources">
          <li><a href="https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1189" target="_blank" rel="noopener nofollow">Rozporządzenie Komisji (UE) 2015/1189</a> — wymagania dotyczące ekoprojektu dla kotłów na paliwo stałe.</li>
          <li><a href="https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1187" target="_blank" rel="noopener nofollow">Rozporządzenie delegowane Komisji (UE) 2015/1187</a> — etykietowanie energetyczne kotłów na paliwo stałe w określonym zakresie.</li>
          <li><a href="https://eur-lex.europa.eu/eli/dec_impl/2024/564/oj" target="_blank" rel="noopener nofollow">Decyzja wykonawcza Komisji (UE) 2024/564</a> — publikacja odniesienia do EN 303-5:2021+A1:2022 jako normy zharmonizowanej.</li>
          <li><a href="https://www.iso.org/standard/76088.html" target="_blank" rel="noopener nofollow">ISO 17225-2:2021</a> — klasy jakościowe i specyfikacje klasyfikowanego pelletu drzewnego.</li>
          <li><a href="https://czystepowietrze.gov.pl/wez-dofinansowanie/na-co-i-ile" target="_blank" rel="noopener nofollow">Program Czyste Powietrze — aktualny zakres dofinansowania</a>. Warunki należy sprawdzać dla obowiązującej edycji i daty inwestycji.</li>
          <li><a href="https://czystepowietrze.gov.pl/wazne-komunikaty/dotacja-z-programu-czyste-powietrze-na-kotly-pellet-wylacznie-bez-rusztu-awaryjnego" target="_blank" rel="noopener nofollow">NFOŚiGW — komunikat dotyczący kotłów na pellet i rusztu awaryjnego</a>.</li>
          <li><a href="https://www.gov.pl/web/gov/zloz-deklaracje-do-centralnej-ewidencji-emisyjnosci-budynkow" target="_blank" rel="noopener nofollow">Gov.pl — złożenie deklaracji CEEB</a>.</li>
        </ol>
        <div class="rk-pellet-warning"><p><strong>Zakres opracowania:</strong> artykuł nie zastępuje lokalnej analizy prawnej, projektu komina, instrukcji kotła ani projektu instalacji grzewczej. Wymagania dotacyjne i uchwały antysmogowe należy weryfikować na dzień podejmowania decyzji.</p></div>
      </section>

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

        <header class="rk-pellet-author-head">
          <div>
            <span class="rk-pellet-kicker">Autor i odpowiedzialność merytoryczna</span>
            <h2>Robert Kucharski</h2>
            <p>Projektant instalacji sanitarnych • specjalista HVAC i ogrzewania podłogowego</p>
          </div>
          <span class="rk-pellet-author-mark">ŹRÓDŁA CIEPŁA • HYDRAULIKA • KOSZTY</span>
        </header>

        <div class="rk-pellet-author-layout">
          <aside class="rk-pellet-author-side">
            <div class="rk-pellet-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="600" height="600" loading="lazy" decoding="async"></div>
            <div class="rk-pellet-author-name">Robert Kucharski</div>
            <div class="rk-pellet-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
            <div class="rk-pellet-author-social-label">Profile autora</div>
            <div class="rk-pellet-author-social" aria-label="Profile Roberta Kucharskiego w mediach społecznościowych">
              <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener nofollow me" aria-label="Robert Kucharski na LinkedIn"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5.3 3.6A2.3 2.3 0 1 1 .7 3.6a2.3 2.3 0 0 1 4.6 0ZM1.1 8h4.3v13H1.1V8Zm6.9 0h4.1v1.8h.1c.6-1.1 2-2.3 4.1-2.3 4.4 0 5.2 2.9 5.2 6.7V21h-4.3v-6c0-1.4 0-3.3-2-3.3s-2.3 1.6-2.3 3.2V21H8V8Z"/></svg></a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="noopener nofollow me" aria-label="Projekt Ogrzewania na Facebooku"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M24 12.1C24 5.4 18.6 0 12 0S0 5.4 0 12.1C0 18.1 4.4 23 10.1 24v-8.4H7.1v-3.5h3V9.5c0-3 1.8-4.7 4.5-4.7 1.3 0 2.7.2 2.7.2v3h-1.5c-1.5 0-1.9.9-1.9 1.8v2.2h3.3l-.5 3.5h-2.8V24C19.6 23 24 18.1 24 12.1Z"/></svg></a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="noopener nofollow me" aria-label="Projekt HVAC w serwisie X"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 2H22l-6.8 7.8L23.2 22h-6.3L12 15.6 6.4 22H3.3l7.2-8.2L.8 2h6.5l4.4 5.8L18.9 2Zm-1.1 17.9h1.7L6.4 4H4.6l13.2 15.9Z"/></svg></a>
            </div>
          </aside>

          <div class="rk-pellet-author-main">
            <blockquote class="rk-pellet-author-quote"><p>„Przy kotle na pellet cena tony paliwa jest dopiero początkiem obliczeń. Dobry projekt musi połączyć moc minimalną źródła, roczne zapotrzebowanie, przepływy, temperatury, sterowanie i realny zakres obsługi użytkownika.”</p></blockquote>
            <div class="rk-pellet-author-tabs" role="tablist" aria-label="Informacje o autorze">
              <label class="rk-pellet-author-tab" for="rk-pellet-author-about">O autorze</label>
              <label class="rk-pellet-author-tab" for="rk-pellet-author-exp">Praktyka</label>
              <label class="rk-pellet-author-tab" for="rk-pellet-author-method">Metodyka</label>
            </div>
            <div class="rk-pellet-author-panel rk-pellet-author-panel-about">
              <p>Robert Kucharski opracowuje projekty wodnego ogrzewania podłogowego i instalacji grzewczych dla domów nowych oraz modernizowanych. Łączy obliczenia strat ciepła z doborem temperatur, rozstawów rur, długości pętli, przepływów, spadków ciśnienia, źródeł ciepła i nastaw rozdzielaczy.</p>
              <p>W materiałach edukacyjnych oddziela moc projektową w kW od rocznego zużycia energii w kWh. Dzięki temu koszt ogrzewania nie jest wyprowadzany z samego metrażu, a dobór urządzenia nie opiera się wyłącznie na jednej wartości znamionowej.</p>
              <p><a href="https://projekt-ogrzewania.pl/author/robert-kucharski/">Zobacz profil autora i pozostałe opracowania</a>.</p>
            </div>
            <div class="rk-pellet-author-panel rk-pellet-author-panel-exp">
              <p>Przy projektowaniu układu z kotłem na pellet Robert analizuje jednocześnie obieg kotłowy oraz instalacyjny: wymagania temperatury powrotu, moc minimalną palnika, przepływy, sposób przygotowania CWU, zamykanie obiegów grzewczych i zasadność magazynowania nadwyżki energii.</p>
              <p>Dokumentacja wykonawcza powinna pokazywać źródło ciepła w kontekście całej instalacji, a nie jako osobne urządzenie dobrane z tabeli powierzchni. W podłogówce obejmuje to również rzeczywiste trasy pętli, długości, przepływy i nastawy rozdzielacza.</p>
            </div>
            <div class="rk-pellet-author-panel rk-pellet-author-panel-method">
              <p>Kalkulator w tym artykule korzysta z jawnego bilansu energii: zapotrzebowania użytecznego, wartości opałowej, sprawności sezonowej oraz kosztów dodatkowych. Nie wykorzystuje jednej ceny za m² ani sztywnej ilości ton przypisanej do powierzchni domu.</p>
              <p>Robert jest właścicielem i autorem trzech serwisów branżowych, których powiązanie podaje jawnie:</p>
              <div class="rk-pellet-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>

      <aside class="rk-pellet-cta rk-pellet-final-cta" aria-label="Zamówienie projektu ogrzewania podłogowego">
        <div class="rk-pellet-cta-title">Otrzymaj projekt podłogówki dopasowany do kotła na pellet</div>
        <p>Projekt obejmuje obliczenia cieplne i hydrauliczne, rozrysowane pętle, długości rur, przepływy oraz nastawy rozdzielaczy. Parametry ogrzewania podłogowego zostaną skoordynowane z planowanym źródłem ciepła i koncepcją kotłowni.</p>
        <a class="rk-pellet-cta-button rk-pellet-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt ogrzewania podłogowego</a>
      </aside>
    </div>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "inLanguage": "pl-PL",
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"}
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {"@type": "ImageObject", "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp"},
      "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": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/robert-kucharski/",
      "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"},
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "kotły na pellet",
        "obliczenia strat ciepła",
        "hydraulika instalacji grzewczych",
        "koszty ogrzewania"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webpage",
      "url": "https://projekt-ogrzewania.pl/kociol-na-pellet/",
      "name": "Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką",
      "description": "Sprawdź, kiedy kocioł na pellet ma sens. Oblicz zużycie pelletu, koszt sezonu i miejsce na paliwo. Dobór mocy, bufor, podłogówka i przepisy.",
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"},
      "breadcrumb": {"@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#breadcrumb"},
      "mainEntity": {"@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article"},
      "inLanguage": "pl-PL",
      "dateModified": "2026-08-31"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#breadcrumb",
      "itemListElement": [
        {"@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/"},
        {"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://projekt-ogrzewania.pl/blog/"},
        {"@type": "ListItem", "position": 3, "name": "Kocioł na pellet", "item": "https://projekt-ogrzewania.pl/kociol-na-pellet/"}
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#calculator",
      "name": "Kalkulator kosztów ogrzewania pelletem",
      "url": "https://projekt-ogrzewania.pl/kociol-na-pellet/#rk-pellet-kalkulator",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "offers": {"@type": "Offer", "price": "0", "priceCurrency": "PLN"},
      "creator": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"},
      "description": "Narzędzie oblicza roczne zużycie pelletu, liczbę worków, zapotrzebowanie na magazyn oraz pełny koszt ogrzewania na podstawie jawnych danych użytkownika."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#howto",
      "name": "Jak obliczyć koszt ogrzewania pelletem",
      "description": "Kolejność obliczeń uwzględniająca energię użyteczną, wartość opałową, sprawność sezonową i koszty dodatkowe.",
      "totalTime": "PT15M",
      "step": [
        {"@type": "HowToStep", "position": 1, "name": "Ustal roczną energię użyteczną", "text": "Odczytaj zapotrzebowanie na energię do ogrzewania oraz przygotowania ciepłej wody."},
        {"@type": "HowToStep", "position": 2, "name": "Wpisz sprawność sezonową", "text": "Użyj realistycznej sprawności całego sezonu, a nie tylko sprawności przy mocy znamionowej."},
        {"@type": "HowToStep", "position": 3, "name": "Wpisz parametry pelletu", "text": "Podaj wartość opałową, cenę, masę worka i gęstość nasypową."},
        {"@type": "HowToStep", "position": 4, "name": "Dodaj koszty dodatkowe", "text": "Uwzględnij energię elektryczną, transport, serwis oraz koszty kominowe."},
        {"@type": "HowToStep", "position": 5, "name": "Porównaj scenariusze ceny", "text": "Sprawdź, jak koszt roczny zmieni się przy niższej lub wyższej cenie pelletu."},
        {"@type": "HowToStep", "position": 6, "name": "Zweryfikuj ograniczenia", "text": "Oddziel analizę kosztu od doboru mocy kotła, bufora, komina i hydrauliki instalacji."}
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#faq",
      "mainEntity": [
        {"@type": "Question", "name": "Ile pelletu zużywa dom 150 m²?", "acceptedAnswer": {"@type": "Answer", "text": "Nie da się tego ustalić z samej powierzchni. W przykładzie przy 80 kWh/m²/rok na CO, 2500 kWh na CWU, wartości opałowej 4,8 kWh/kg i sprawności 85% wychodzi około 3,55 t rocznie."}},
        {"@type": "Question", "name": "Ile kosztuje ogrzewanie domu pelletem?", "acceptedAnswer": {"@type": "Answer", "text": "Koszt zależy od zapotrzebowania na energię, ceny i wartości opałowej pelletu, sprawności sezonowej, prądu, transportu, serwisu i komina."}},
        {"@type": "Question", "name": "Czy kocioł na pellet nadaje się do podłogówki?", "acceptedAnswer": {"@type": "Answer", "text": "Tak. Trzeba zapewnić warunki wymagane przez kocioł oraz osobno regulować temperaturę i przepływ podłogówki zgodnie z projektem."}},
        {"@type": "Question", "name": "Czy kocioł na pellet zawsze wymaga bufora?", "acceptedAnswer": {"@type": "Answer", "text": "Nie należy przyjmować takiego twierdzenia bez analizy. Bufor może być wymagany lub uzasadniony przez dokumentację urządzenia, minimalną moc kotła, zład, sterowanie i sposób połączenia obiegów."}},
        {"@type": "Question", "name": "Ile litrów bufora na 1 kW kotła pelletowego?", "acceptedAnswer": {"@type": "Answer", "text": "Nie ma jednej wartości pasującej do każdego układu. Pojemność analizuje się z nadwyżki mocy, czasu jej magazynowania i użytecznej różnicy temperatur."}},
        {"@type": "Question", "name": "Jaka temperatura powrotu jest potrzebna?", "acceptedAnswer": {"@type": "Answer", "text": "Minimalna temperatura powrotu i sposób jej ochrony zależą od konstrukcji oraz wymagań konkretnego kotła."}},
        {"@type": "Question", "name": "Jak dobrać moc kotła na pellet?", "acceptedAnswer": {"@type": "Answer", "text": "Moc nominalną dobiera się na podstawie projektowego obciążenia cieplnego i koncepcji CWU. Trzeba również sprawdzić moc minimalną urządzenia."}},
        {"@type": "Question", "name": "Czy cena tony pelletu wystarczy do porównania ogrzewania?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Potrzebna jest wartość opałowa, sprawność sezonowa, roczne zapotrzebowanie na ciepło oraz koszty prądu, transportu, serwisu i komina."}},
        {"@type": "Question", "name": "Ile miejsca zajmuje tona pelletu?", "acceptedAnswer": {"@type": "Answer", "text": "Objętość zależy od gęstości nasypowej. Przy 650 kg/m³ sama tona zajmuje około 1,54 m³, ale rzeczywisty magazyn musi być większy."}},
        {"@type": "Question", "name": "Czy kocioł z Ecodesign automatycznie kwalifikuje się do dotacji?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Program dotacyjny może dodatkowo wymagać określonego standardu, wpisu na listę ZUM, dokumentów i zgodności inwestycji z aktualnymi zasadami."}},
        {"@type": "Question", "name": "Czy po montażu kotła trzeba zaktualizować CEEB?", "acceptedAnswer": {"@type": "Answer", "text": "Zmiana lub uruchomienie źródła ciepła wymaga dopełnienia obowiązku dotyczącego deklaracji CEEB przez właściciela albo zarządcę budynku zgodnie z aktualną procedurą."}},
        {"@type": "Question", "name": "Czy kalkulator zastępuje projekt kotłowni?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Kalkulator szacuje paliwo i koszty. Nie dobiera mocy minimalnej, bufora, komina, pomp, zaworów, zabezpieczeń ani parametrów podłogówki."}}
      ]
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article",
      "headline": "Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką",
      "description": "Sprawdź, kiedy kocioł na pellet ma sens. Oblicz zużycie pelletu, koszt sezonu i miejsce na paliwo. Dobór mocy, bufor, podłogówka i przepisy.",
      "url": "https://projekt-ogrzewania.pl/kociol-na-pellet/",
      "mainEntityOfPage": {"@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webpage"},
      "author": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"},
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "dateModified": "2026-08-31",
      "inLanguage": "pl-PL",
      "articleSection": "Źródła ciepła i ogrzewanie podłogowe",
      "keywords": [
        "kocioł na pellet",
        "koszt ogrzewania pelletem",
        "kalkulator zużycia pelletu",
        "kocioł na pellet do podłogówki",
        "bufor do kotła na pellet",
        "lista ZUM kocioł na pellet"
      ],
      "isBasedOn": [
        "https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1189",
        "https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1187",
        "https://eur-lex.europa.eu/eli/dec_impl/2024/564/oj",
        "https://www.iso.org/standard/76088.html",
        "https://czystepowietrze.gov.pl/wez-dofinansowanie/na-co-i-ile"
      ],
      "about": [
        {"@type": "Thing", "name": "Kocioł na pellet"},
        {"@type": "Thing", "name": "Koszty ogrzewania"},
        {"@type": "Thing", "name": "Ogrzewanie podłogowe"}
      ]
    }
  ]
}
</script>

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

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

  var defaults = {
    "rk-pellet-energy-mode": "direct",
    "rk-pellet-heat-energy": 12000,
    "rk-pellet-area": 150,
    "rk-pellet-indicator": 80,
    "rk-pellet-dhw-energy": 2500,
    "rk-pellet-heating-days": 220,
    "rk-pellet-efficiency": 85,
    "rk-pellet-calorific": 4.8,
    "rk-pellet-price": 1500,
    "rk-pellet-bag-mass": 15,
    "rk-pellet-density": 650,
    "rk-pellet-storage-margin": 15,
    "rk-pellet-electric-use": 450,
    "rk-pellet-electric-price": 1.10,
    "rk-pellet-delivery": 300,
    "rk-pellet-service": 800,
    "rk-pellet-chimney": 250
  };

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

  function numberValue(id, fallback) {
    var element = byId(id);
    if (!element) { return fallback; }
    var parsed = Number.parseFloat(String(element.value).replace(",", "."));
    if (!Number.isFinite(parsed)) { return fallback; }
    return parsed;
  }

  function stringValue(id, fallback) {
    var element = byId(id);
    if (!element) { return fallback; }
    return String(element.value || fallback);
  }

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

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

  function formatMoney(value, digits) {
    if (!Number.isFinite(value)) { return "—"; }
    return value.toLocaleString("pl-PL", {minimumFractionDigits: digits, maximumFractionDigits: digits}) + " zł";
  }

  function readData() {
    return {
      mode: stringValue("rk-pellet-energy-mode", defaults["rk-pellet-energy-mode"]),
      heatEnergy: numberValue("rk-pellet-heat-energy", defaults["rk-pellet-heat-energy"]),
      area: numberValue("rk-pellet-area", defaults["rk-pellet-area"]),
      indicator: numberValue("rk-pellet-indicator", defaults["rk-pellet-indicator"]),
      dhwEnergy: numberValue("rk-pellet-dhw-energy", defaults["rk-pellet-dhw-energy"]),
      heatingDays: numberValue("rk-pellet-heating-days", defaults["rk-pellet-heating-days"]),
      efficiency: numberValue("rk-pellet-efficiency", defaults["rk-pellet-efficiency"]),
      calorific: numberValue("rk-pellet-calorific", defaults["rk-pellet-calorific"]),
      pelletPrice: numberValue("rk-pellet-price", defaults["rk-pellet-price"]),
      bagMass: numberValue("rk-pellet-bag-mass", defaults["rk-pellet-bag-mass"]),
      density: numberValue("rk-pellet-density", defaults["rk-pellet-density"]),
      storageMargin: numberValue("rk-pellet-storage-margin", defaults["rk-pellet-storage-margin"]),
      electricUse: numberValue("rk-pellet-electric-use", defaults["rk-pellet-electric-use"]),
      electricPrice: numberValue("rk-pellet-electric-price", defaults["rk-pellet-electric-price"]),
      delivery: numberValue("rk-pellet-delivery", defaults["rk-pellet-delivery"]),
      service: numberValue("rk-pellet-service", defaults["rk-pellet-service"]),
      chimney: numberValue("rk-pellet-chimney", defaults["rk-pellet-chimney"])
    };
  }

  function validateData(data) {
    var errors = [];
    if (data.mode === "direct") {
      if (!(data.heatEnergy > 0)) { errors.push("Roczna energia na ogrzewanie musi być większa od zera."); }
    } else {
      if (!(data.area > 0)) { errors.push("Powierzchnia ogrzewana musi być większa od zera."); }
      if (!(data.indicator > 0)) { errors.push("Wskaźnik energii musi być większy od zera."); }
    }
    if (data.dhwEnergy < 0) { errors.push("Energia na CWU nie może być ujemna."); }
    if (!(data.heatingDays > 0)) { errors.push("Liczba dni sezonu musi być większa od zera."); }
    if (!(data.efficiency > 0)) { errors.push("Sprawność musi być większa od zera."); }
    if (data.efficiency > 100) { errors.push("Sprawność w tym modelu nie może przekraczać 100%."); }
    if (!(data.calorific > 0)) { errors.push("Wartość opałowa musi być większa od zera."); }
    if (!(data.pelletPrice > 0)) { errors.push("Cena pelletu musi być większa od zera."); }
    if (!(data.bagMass > 0)) { errors.push("Masa worka musi być większa od zera."); }
    if (!(data.density > 0)) { errors.push("Gęstość nasypowa musi być większa od zera."); }
    if (data.storageMargin < 0) { errors.push("Rezerwa magazynu nie może być ujemna."); }
    if (data.electricUse < 0) { errors.push("Zużycie prądu nie może być ujemne."); }
    if (data.electricPrice < 0) { errors.push("Cena prądu nie może być ujemna."); }
    if (data.delivery < 0) { errors.push("Koszt transportu nie może być ujemny."); }
    if (data.service < 0) { errors.push("Koszt serwisu nie może być ujemny."); }
    if (data.chimney < 0) { errors.push("Koszt komina nie może być ujemny."); }
    return errors;
  }

  function calculateModel(data) {
    var heatingEnergy = data.mode === "direct" ? data.heatEnergy : data.area * data.indicator;
    var usefulEnergy = heatingEnergy + data.dhwEnergy;
    var efficiencyDecimal = data.efficiency / 100;
    var heatingMass = heatingEnergy / (data.calorific * efficiencyDecimal);
    var dhwMass = data.dhwEnergy / (data.calorific * efficiencyDecimal);
    var totalMass = heatingMass + dhwMass;
    var tonnes = totalMass / 1000;
    var fuelEnergy = usefulEnergy / efficiencyDecimal;
    var bags = Math.ceil(totalMass / data.bagMass);
    var bulkVolume = totalMass / data.density;
    var storageVolume = bulkVolume * (1 + data.storageMargin / 100);
    var fuelCost = tonnes * data.pelletPrice;
    var electricCost = data.electricUse * data.electricPrice;
    var totalCost = fuelCost + electricCost + data.delivery + data.service + data.chimney;
    var unitCost = totalCost / usefulEnergy;
    var monthlyCost = totalCost / 12;
    var dailyMass = heatingMass / data.heatingDays;

    var scenarioChanges = [-30, -15, 0, 15, 30];
    var scenarios = scenarioChanges.map(function (change) {
      var price = data.pelletPrice * (1 + change / 100);
      var scenarioFuelCost = tonnes * price;
      var scenarioTotal = scenarioFuelCost + electricCost + data.delivery + data.service + data.chimney;
      return {
        change: change,
        price: price,
        fuelCost: scenarioFuelCost,
        totalCost: scenarioTotal,
        unitCost: scenarioTotal / usefulEnergy
      };
    });

    return {
      heatingEnergy: heatingEnergy,
      usefulEnergy: usefulEnergy,
      fuelEnergy: fuelEnergy,
      heatingMass: heatingMass,
      dhwMass: dhwMass,
      totalMass: totalMass,
      tonnes: tonnes,
      bags: bags,
      bulkVolume: bulkVolume,
      storageVolume: storageVolume,
      fuelCost: fuelCost,
      electricCost: electricCost,
      totalCost: totalCost,
      unitCost: unitCost,
      monthlyCost: monthlyCost,
      dailyMass: dailyMass,
      scenarios: scenarios
    };
  }

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

  function setBar(id, labelId, cost, totalCost) {
    var bar = byId(id);
    var share = totalCost > 0 ? cost / totalCost * 100 : 0;
    if (bar) { bar.style.width = clamp(share, 0, 100) + "%"; }
    setText(labelId, formatNumber(share, 0) + "%");
  }

  function renderScenarios(model) {
    var body = byId("rk-pellet-scenario-body");
    if (!body) { return; }
    body.innerHTML = model.scenarios.map(function (scenario) {
      var rowClass = scenario.change === 0 ? " class=\"is-base\"" : "";
      var scenarioName = scenario.change === 0 ? "Wpisana cena" : (scenario.change > 0 ? "+" + scenario.change + "%" : scenario.change + "%");
      var badge = scenario.change === 0 ? " <span class=\"rk-pellet-badge\">bazowy</span>" : "";
      return "<tr" + rowClass + ">" +
        "<td data-label=\"Scenariusz\">" + scenarioName + badge + "</td>" +
        "<td data-label=\"Cena pelletu\">" + formatMoney(scenario.price, 0) + "/t</td>" +
        "<td data-label=\"Koszt paliwa\">" + formatMoney(scenario.fuelCost, 0) + "</td>" +
        "<td data-label=\"Koszt całkowity\">" + formatMoney(scenario.totalCost, 0) + "</td>" +
        "<td data-label=\"Koszt 1 kWh\">" + formatMoney(scenario.unitCost, 2) + "/kWh</td>" +
        "</tr>";
    }).join("");
  }

  function renderDiagnostics(data, model) {
    var container = byId("rk-pellet-diagnostics");
    if (!container) { return; }
    var items = [];

    if (data.mode === "indicator") {
      items.push({warn: true, text: "Energia CO została oszacowana jako powierzchnia × wskaźnik: " + formatNumber(data.area, 0) + " m² × " + formatNumber(data.indicator, 0) + " kWh/m²/rok. Zastąp ją wartością z audytu lub wiarygodnych obliczeń, gdy będzie dostępna."});
    } else {
      items.push({warn: false, text: "Kalkulator korzysta z bezpośrednio wpisanej energii na ogrzewanie: " + formatNumber(model.heatingEnergy, 0) + " kWh/rok."});
    }

    if (data.efficiency > 92) {
      items.push({warn: true, text: "Wpisana sprawność sezonowa przekracza 92%. Sprawdź, czy nie przepisano sprawności laboratoryjnej przy jednym punkcie pracy zamiast wyniku sezonowego całego układu."});
    } else {
      items.push({warn: false, text: "Przyjęta sprawność sezonowa wynosi " + formatNumber(data.efficiency, 1) + "%. Zmiana o kilka punktów procentowych wpływa bezpośrednio na ilość paliwa."});
    }

    items.push({warn: false, text: "Każda tona pelletu przy wpisanej wartości opałowej i sprawności dostarcza około " + formatNumber(data.calorific * data.efficiency / 100 * 1000, 0) + " kWh użytecznego ciepła."});

    if (model.storageVolume > 6) {
      items.push({warn: true, text: "Obliczona przestrzeń z rezerwą przekracza " + formatNumber(model.storageVolume, 1) + " m³. Zweryfikuj nośność, wilgotność, dostęp do rozładunku oraz rzeczywistą geometrię magazynu."});
    } else {
      items.push({warn: false, text: "Orientacyjna przestrzeń z rezerwą wynosi " + formatNumber(model.storageVolume, 1) + " m³. Opakowania, palety i przejścia mogą zwiększyć wymagane miejsce."});
    }

    var fixedCosts = model.electricCost + data.delivery + data.service + data.chimney;
    var fixedShare = model.totalCost > 0 ? fixedCosts / model.totalCost * 100 : 0;
    if (fixedShare > 35) {
      items.push({warn: true, text: "Prąd i koszty stałe stanowią około " + formatNumber(fixedShare, 0) + "% wyniku. Porównywanie wyłącznie ceny pelletu z innym nośnikiem byłoby szczególnie mylące."});
    } else {
      items.push({warn: false, text: "Prąd, transport, serwis i komin stanowią około " + formatNumber(fixedShare, 0) + "% pełnego kosztu rocznego."});
    }

    items.push({warn: true, text: "Wynik kosztowy nie dobiera mocy kotła, bufora ani komina. Moc źródła musi wynikać z projektowego obciążenia cieplnego, a nie z rocznej liczby kWh."});

    container.innerHTML = items.map(function (item) {
      var className = item.warn ? "rk-pellet-diagnostic is-warn" : "rk-pellet-diagnostic";
      return "<div class=\"" + className + "\">" + item.text + "</div>";
    }).join("");
  }

  function drawPriceChart(model) {
    var canvas = byId("rk-pellet-price-chart");
    if (!canvas) { return; }
    var context = canvas.getContext("2d");
    if (!context) { return; }
    var wrapperWidth = canvas.parentElement ? canvas.parentElement.clientWidth : 600;
    var width = Math.max(300, wrapperWidth);
    var height = 280;
    var pixelRatio = window.devicePixelRatio || 1;
    canvas.width = Math.round(width * pixelRatio);
    canvas.height = Math.round(height * pixelRatio);
    canvas.style.width = width + "px";
    canvas.style.height = height + "px";
    context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
    context.clearRect(0, 0, width, height);

    var padding = {left: 62, right: 22, top: 28, bottom: 48};
    var plotWidth = width - padding.left - padding.right;
    var plotHeight = height - padding.top - padding.bottom;
    var values = model.scenarios.map(function (item) { return item.totalCost; });
    var minimum = Math.min.apply(Math, values) * 0.92;
    var maximum = Math.max.apply(Math, values) * 1.08;
    if (maximum <= minimum) { maximum = minimum + 1; }

    context.font = "11px system-ui, sans-serif";
    context.lineWidth = 1;
    for (var grid = 0; grid <= 4; grid += 1) {
      var y = padding.top + plotHeight * grid / 4;
      context.strokeStyle = "#d8e6eb";
      context.beginPath();
      context.moveTo(padding.left, y);
      context.lineTo(width - padding.right, y);
      context.stroke();
      var value = maximum - (maximum - minimum) * grid / 4;
      context.fillStyle = "#617784";
      context.textAlign = "right";
      context.fillText(formatNumber(value, 0), padding.left - 8, y + 4);
    }

    var step = plotWidth / (model.scenarios.length - 1);
    var points = model.scenarios.map(function (scenario, index) {
      var x = padding.left + step * index;
      var ratio = (scenario.totalCost - minimum) / (maximum - minimum);
      var y = padding.top + plotHeight * (1 - ratio);
      return {x: x, y: y, scenario: scenario};
    });

    context.strokeStyle = "#078fbe";
    context.lineWidth = 3;
    context.beginPath();
    points.forEach(function (point, index) {
      if (index === 0) { context.moveTo(point.x, point.y); }
      else { context.lineTo(point.x, point.y); }
    });
    context.stroke();

    points.forEach(function (point) {
      var isBase = point.scenario.change === 0;
      context.fillStyle = isBase ? "#ff6a3d" : "#078fbe";
      context.beginPath();
      context.arc(point.x, point.y, isBase ? 6 : 5, 0, Math.PI * 2);
      context.fill();
      context.fillStyle = "#203744";
      context.textAlign = "center";
      var changeLabel = point.scenario.change === 0 ? "bazowa" : (point.scenario.change > 0 ? "+" + point.scenario.change + "%" : point.scenario.change + "%");
      context.fillText(changeLabel, point.x, height - 25);
      context.fillText(formatNumber(point.scenario.totalCost, 0) + " zł", point.x, point.y - 11);
    });

    context.save();
    context.translate(15, padding.top + plotHeight / 2);
    context.rotate(-Math.PI / 2);
    context.fillStyle = "#47606d";
    context.textAlign = "center";
    context.fillText("koszt roczny [zł]", 0, 0);
    context.restore();
  }

  function svgElement(name, attributes) {
    var element = document.createElementNS("http://www.w3.org/2000/svg", name);
    Object.keys(attributes).forEach(function (key) { element.setAttribute(key, String(attributes[key])); });
    return element;
  }

  function drawStorage(model) {
    var svg = byId("rk-pellet-storage-svg");
    if (!svg) { return; }
    while (svg.firstChild) { svg.removeChild(svg.firstChild); }
    var maximumDisplay = Math.max(8, Math.ceil(model.storageVolume));
    var fillRatio = clamp(model.storageVolume / maximumDisplay, 0.04, 1);
    var tankX = 62;
    var tankY = 28;
    var tankWidth = 126;
    var tankHeight = 175;
    var fillHeight = tankHeight * fillRatio;
    var fillY = tankY + tankHeight - fillHeight;

    svg.appendChild(svgElement("rect", {x: tankX, y: tankY, width: tankWidth, height: tankHeight, rx: 18, fill: "#edf4f6", stroke: "#14384d", "stroke-width": 3}));
    svg.appendChild(svgElement("rect", {x: tankX + 5, y: fillY, width: tankWidth - 10, height: fillHeight - 5, rx: 13, fill: "#c7904d"}));

    for (var dot = 0; dot < 28; dot += 1) {
      var column = dot % 7;
      var row = Math.floor(dot / 7);
      var cx = tankX + 18 + column * 15;
      var cy = fillY + 14 + row * 17;
      if (cy < tankY + tankHeight - 7) {
        svg.appendChild(svgElement("ellipse", {cx: cx, cy: cy, rx: 5, ry: 2.4, fill: "#8a5d2c", transform: "rotate(-18 " + cx + " " + cy + ")"}));
      }
    }

    var valueText = svgElement("text", {x: 125, y: 224, fill: "#102536", "font-size": 18, "font-weight": 900, "text-anchor": "middle"});
    valueText.textContent = formatNumber(model.storageVolume, 1) + " m³";
    svg.appendChild(valueText);
    var noteText = svgElement("text", {x: 125, y: 242, fill: "#607783", "font-size": 10, "text-anchor": "middle"});
    noteText.textContent = "objętość obliczeniowa z rezerwą";
    svg.appendChild(noteText);
  }

  function renderModel(data, model) {
    setText("rk-pellet-total-cost", formatMoney(model.totalCost, 0));
    setText("rk-pellet-result-summary", "Dla " + formatNumber(model.usefulEnergy, 0) + " kWh energii użytecznej, ceny " + formatMoney(data.pelletPrice, 0) + "/t i sprawności sezonowej " + formatNumber(data.efficiency, 1) + "%.");
    setText("rk-pellet-useful-energy", formatNumber(model.usefulEnergy, 0) + " kWh");
    setText("rk-pellet-fuel-energy", formatNumber(model.fuelEnergy, 0) + " kWh");
    setText("rk-pellet-mass", formatNumber(model.tonnes, 2) + " t");
    setText("rk-pellet-bags", formatNumber(model.bags, 0) + " szt.");
    setText("rk-pellet-fuel-cost", formatMoney(model.fuelCost, 0));
    setText("rk-pellet-unit-cost", formatMoney(model.unitCost, 2) + "/kWh");
    setText("rk-pellet-monthly-cost", formatMoney(model.monthlyCost, 0));
    setText("rk-pellet-daily-mass", formatNumber(model.dailyMass, 1) + " kg/dzień");
    setText("rk-pellet-bulk-volume", formatNumber(model.bulkVolume, 1) + " m³");
    setText("rk-pellet-storage-volume", formatNumber(model.storageVolume, 1) + " m³");
    setText("rk-pellet-heating-mass", formatNumber(model.heatingMass / 1000, 2) + " t");
    setText("rk-pellet-dhw-mass", formatNumber(model.dhwMass / 1000, 2) + " t");

    setBar("rk-pellet-bar-fuel", "rk-pellet-label-fuel", model.fuelCost, model.totalCost);
    setBar("rk-pellet-bar-electric", "rk-pellet-label-electric", model.electricCost, model.totalCost);
    setBar("rk-pellet-bar-service", "rk-pellet-label-service", data.service, model.totalCost);
    setBar("rk-pellet-bar-delivery", "rk-pellet-label-delivery", data.delivery, model.totalCost);
    setBar("rk-pellet-bar-chimney", "rk-pellet-label-chimney", data.chimney, model.totalCost);

    var status = byId("rk-pellet-status");
    if (status) {
      status.className = "rk-pellet-result-status";
      if (data.mode === "indicator") {
        status.className += " is-borderline";
        status.innerHTML = "<strong>Wynik opiera się na wskaźniku powierzchniowym.</strong> Traktuj go jako scenariusz wstępny. Największą poprawę dokładności da zastąpienie powierzchni i wskaźnika roczną energią z audytu lub wiarygodnych obliczeń.";
      } else {
        status.innerHTML = "<strong>Wynik wykorzystuje bezpośrednio wpisaną energię.</strong> Sprawdź jeszcze, czy podana sprawność jest sezonowa, cena obejmuje rzeczywiste paliwo z dostawą, a koszty serwisu odpowiadają lokalnym warunkom.";
      }
    }

    renderScenarios(model);
    renderDiagnostics(data, model);
    drawPriceChart(model);
    drawStorage(model);
  }

  function updateEnergyMode() {
    var mode = stringValue("rk-pellet-energy-mode", "direct");
    var directField = byId("rk-pellet-direct-field");
    var areaField = byId("rk-pellet-area-field");
    var indicatorField = byId("rk-pellet-indicator-field");
    if (mode === "direct") {
      if (directField) { directField.classList.remove("is-hidden"); }
      if (areaField) { areaField.classList.add("is-hidden"); }
      if (indicatorField) { indicatorField.classList.add("is-hidden"); }
    } else {
      if (directField) { directField.classList.add("is-hidden"); }
      if (areaField) { areaField.classList.remove("is-hidden"); }
      if (indicatorField) { indicatorField.classList.remove("is-hidden"); }
    }
  }

  function calculate() {
    updateEnergyMode();
    var data = readData();
    var errors = validateData(data);
    var errorBox = byId("rk-pellet-error");
    if (errors.length > 0) {
      if (errorBox) {
        errorBox.textContent = errors.join(" ");
        errorBox.classList.add("is-visible");
      }
      return;
    }
    if (errorBox) {
      errorBox.textContent = "";
      errorBox.classList.remove("is-visible");
    }
    renderModel(data, calculateModel(data));
  }

  function resetCalculator() {
    Object.keys(defaults).forEach(function (id) {
      var element = byId(id);
      if (element) { element.value = String(defaults[id]); }
    });
    calculate();
  }

  var calculateButton = byId("rk-pellet-calculate");
  var resetButton = byId("rk-pellet-reset");
  if (calculateButton) { calculateButton.addEventListener("click", calculate); }
  if (resetButton) { resetButton.addEventListener("click", resetCalculator); }

  var calculator = root.querySelector("[data-rk-pellet-calculator]");
  if (calculator) {
    calculator.querySelectorAll("input, select").forEach(function (field) {
      field.addEventListener("change", calculate);
      field.addEventListener("input", function () {
        window.clearTimeout(field.rkPelletTimer);
        field.rkPelletTimer = window.setTimeout(calculate, 220);
      });
    });
  }

  var navLinks = root.querySelectorAll(".rk-pellet-nav-track a[href^='#']");
  navLinks.forEach(function (link) {
    link.addEventListener("click", function (event) {
      var target = root.querySelector(link.getAttribute("href"));
      if (!target) { return; }
      event.preventDefault();
      target.scrollIntoView({behavior: "smooth", block: "start"});
    });
  });

  function updateProgress() {
    var progress = root.querySelector(".rk-pellet-progress");
    if (!progress) { return; }
    var documentElement = document.documentElement;
    var scrollTop = window.pageYOffset || documentElement.scrollTop || 0;
    var scrollable = documentElement.scrollHeight - documentElement.clientHeight;
    var percentage = scrollable > 0 ? scrollTop / scrollable * 100 : 0;
    progress.style.width = clamp(percentage, 0, 100) + "%";
  }

  var resizeTimer = 0;
  window.addEventListener("scroll", updateProgress, {passive: true});
  window.addEventListener("resize", function () {
    window.clearTimeout(resizeTimer);
    resizeTimer = window.setTimeout(calculate, 140);
  });

  calculate();
  updateProgress();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kociol-na-pellet/">Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką.</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>Czy ogrzewanie podłogowe jest zdrowe? Temperatura, kurz, alergia i krążenie.</title>
		<link>https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/</link>
					<comments>https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 13 Oct 2024 18:24:56 +0000</pubDate>
				<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Porady dla domu]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Rozwiązania ekologiczne]]></category>
		<category><![CDATA[Technologia w budownictwie]]></category>
		<category><![CDATA[Zdrowie alergików]]></category>
		<category><![CDATA[Zdrowie i komfort]]></category>
		<category><![CDATA[alergie]]></category>
		<category><![CDATA[ciepło]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[ekologia]]></category>
		<category><![CDATA[energia]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[zdrowie]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=1387</guid>

					<description><![CDATA[<p>Ogrzewanie podłogowe zyskuje coraz większą popularność, nie tylko ze względu na wygodę i estetykę, ale także z uwagi na jego wpływ na zdrowie. Dzięki równomiernemu rozkładowi ciepła, ogrzewanie podłogowe zapewnia komfort cieplny, ogranicza unoszenie się kurzu i poprawia jakość powietrza w pomieszczeniach. To idealne rozwiązanie dla alergików oraz osób dbających o zdrowie. Dowiedz się, jakie korzyści zdrowotne niesie za sobą podłogówka i czy warto w nią zainwestować. Zapraszamy do lektury!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/">Czy ogrzewanie podłogowe jest zdrowe? Temperatura, kurz, alergia i krążenie.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-health-guide {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #25c7d8;
    --rk-cyan-soft: #e8fbff;
    --rk-orange: #ff6a3d;
    --rk-orange-soft: #fff0e9;
    --rk-green: #16836b;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #e8ad2c;
    --rk-yellow-soft: #fff8df;
    --rk-red: #c7443a;
    --rk-red-soft: #fff0ee;
    --rk-purple: #6659c7;
    --rk-purple-soft: #f1efff;
    --rk-ink: #1d2b36;
    --rk-text: #465b6b;
    --rk-muted: #667b8b;
    --rk-line: #d7e6ec;
    --rk-soft: #f4f9fb;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
    font-size: 18px;
    line-height: 1.72;
    margin: 0 auto;
    max-width: 1240px;
    overflow: hidden;
    width: 100%;
  }

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

  #rk-health-guide * {
    min-width: 0;
  }

  #rk-health-guide .rk-hlth-shell {
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    border-radius: 28px;
    box-shadow: 0 24px 70px rgba(16, 37, 54, 0.10);
    overflow: hidden;
  }

  #rk-health-guide a {
    color: var(--rk-blue);
    font-weight: 750;
    text-decoration-thickness: 2px;
    text-underline-offset: 3px;
  }

  #rk-health-guide a:hover,
  #rk-health-guide a:focus-visible {
    color: #056f91;
  }

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

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

  #rk-health-guide p,
  #rk-health-guide ul,
  #rk-health-guide ol {
    margin: 0 0 1.15em;
  }

  #rk-health-guide li + li {
    margin-top: 0.55em;
  }

  #rk-health-guide h2,
  #rk-health-guide h3,
  #rk-health-guide h4,
  #rk-health-guide .rk-hlth-hero-title,
  #rk-health-guide .rk-hlth-author-title,
  #rk-health-guide .rk-hlth-cta-title {
    color: var(--rk-dark);
    font-weight: 900;
    letter-spacing: -0.025em;
    line-height: 1.12;
    overflow-wrap: break-word;
  }

  #rk-health-guide h2 {
    font-size: clamp(1.75rem, 4vw, 2.45rem);
    margin: 0 0 0.75em;
  }

  #rk-health-guide h3 {
    font-size: clamp(1.25rem, 2.4vw, 1.55rem);
    margin: 0 0 0.55em;
  }

  #rk-health-guide h4 {
    font-size: 1.05rem;
    margin: 0 0 0.45em;
  }

  #rk-health-guide .rk-hlth-hero {
    background:
      radial-gradient(circle at 92% 108%, rgba(37, 199, 216, 0.18) 0 150px, transparent 151px),
      radial-gradient(circle at 92% 108%, transparent 0 205px, rgba(37, 199, 216, 0.10) 206px 255px, transparent 256px),
      linear-gradient(125deg, var(--rk-dark) 0%, #12384c 55%, #146479 100%);
    color: #effcff;
    padding: clamp(38px, 7vw, 78px) clamp(24px, 7vw, 76px) clamp(34px, 6vw, 64px);
    position: relative;
  }

  #rk-health-guide .rk-hlth-hero-inner {
    max-width: 1050px;
    position: relative;
    z-index: 1;
  }

  #rk-health-guide .rk-hlth-eyebrow,
  #rk-health-guide .rk-hlth-kicker {
    color: var(--rk-cyan);
    display: inline-flex;
    font-size: 0.78rem;
    font-weight: 900;
    gap: 9px;
    letter-spacing: 0.12em;
    margin-bottom: 14px;
    text-transform: uppercase;
  }

  #rk-health-guide .rk-hlth-eyebrow b {
    background: var(--rk-orange);
    border: 7px solid rgba(255, 106, 61, 0.16);
    border-radius: 50%;
    box-sizing: content-box;
    height: 10px;
    width: 10px;
  }

  #rk-health-guide .rk-hlth-hero-title {
    color: #ffffff;
    font-size: clamp(2.2rem, 7vw, 5.2rem);
    max-width: 1080px;
  }

  #rk-health-guide .rk-hlth-hero-title span {
    color: #6cecff;
  }

  #rk-health-guide .rk-hlth-hero-lead {
    color: #e4f5f8;
    font-size: clamp(1.05rem, 2.2vw, 1.42rem);
    line-height: 1.55;
    margin: 24px 0 22px;
    max-width: 1000px;
  }

  #rk-health-guide .rk-hlth-hero-tags,
  #rk-health-guide .rk-hlth-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
  }

  #rk-health-guide .rk-hlth-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: 850;
    padding: 7px 14px;
  }

  #rk-health-guide .rk-hlth-meta {
    border-top: 1px solid rgba(255, 255, 255, 0.18);
    margin-top: 23px;
    padding-top: 18px;
  }

  #rk-health-guide .rk-hlth-meta span {
    color: #d2e8ed;
    font-size: 0.82rem;
    font-weight: 750;
    margin-right: 18px;
  }

  #rk-health-guide .rk-hlth-nav {
    align-items: center;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    padding: 22px clamp(18px, 5vw, 48px);
  }

  #rk-health-guide .rk-hlth-nav strong {
    color: var(--rk-dark);
    font-size: 0.76rem;
    letter-spacing: 0.08em;
    margin-right: 4px;
    text-transform: uppercase;
  }

  #rk-health-guide .rk-hlth-nav a {
    background: var(--rk-soft);
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--rk-dark);
    font-size: 0.78rem;
    font-weight: 850;
    line-height: 1.25;
    padding: 9px 14px;
    text-decoration: none;
    white-space: normal;
  }

  #rk-health-guide .rk-hlth-nav a:hover,
  #rk-health-guide .rk-hlth-nav a:focus-visible {
    background: var(--rk-cyan-soft);
    border-color: var(--rk-cyan);
    color: var(--rk-dark);
  }

  #rk-health-guide .rk-hlth-section {
    border-bottom: 1px solid var(--rk-line);
    padding: clamp(38px, 6vw, 68px) clamp(24px, 7vw, 76px);
    scroll-margin-top: 24px;
  }

  #rk-health-guide .rk-hlth-section:nth-of-type(even) {
    background: #fbfdfe;
  }

  #rk-health-guide .rk-hlth-intro {
    color: var(--rk-text);
    font-size: 1.12rem;
    max-width: 980px;
  }

  #rk-health-guide .rk-hlth-lead {
    font-size: 1.08rem;
  }

  #rk-health-guide .rk-hlth-answer {
    display: grid;
    gap: 18px;
    grid-template-columns: minmax(0, 1.45fr) minmax(0, 0.8fr);
    margin-top: 26px;
  }

  #rk-health-guide .rk-hlth-answer-main,
  #rk-health-guide .rk-hlth-answer-side {
    border-radius: 20px;
    padding: clamp(22px, 4vw, 34px);
  }

  #rk-health-guide .rk-hlth-answer-main {
    background: linear-gradient(135deg, var(--rk-dark), #17445a);
    color: #eaf9fc;
  }

  #rk-health-guide .rk-hlth-answer-main h3 {
    color: #ffffff;
  }

  #rk-health-guide .rk-hlth-answer-side {
    background: var(--rk-cyan-soft);
    border: 1px solid #a9e8ef;
  }

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

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

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

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

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

  #rk-health-guide .rk-hlth-card-number {
    color: var(--rk-blue);
    display: block;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.09em;
    margin-bottom: 9px;
    text-transform: uppercase;
  }

  #rk-health-guide .rk-hlth-card p:last-child,
  #rk-health-guide .rk-hlth-note p:last-child,
  #rk-health-guide .rk-hlth-callout p:last-child,
  #rk-health-guide .rk-hlth-answer p:last-child {
    margin-bottom: 0;
  }

  #rk-health-guide .rk-hlth-note,
  #rk-health-guide .rk-hlth-callout {
    border-radius: 16px;
    margin: 24px 0;
    padding: 20px 22px;
  }

  #rk-health-guide .rk-hlth-note {
    background: var(--rk-yellow-soft);
    border-left: 5px solid var(--rk-yellow);
    color: #594817;
  }

  #rk-health-guide .rk-hlth-callout {
    background: var(--rk-green-soft);
    border-left: 5px solid var(--rk-green);
    color: #164d41;
  }

  #rk-health-guide .rk-hlth-medical {
    background: var(--rk-purple-soft);
    border: 1px solid #d6d0ff;
    border-radius: 18px;
    color: #34305f;
    margin-top: 25px;
    padding: 22px 24px;
  }

  #rk-health-guide .rk-hlth-medical strong {
    color: #302a6c;
  }

  #rk-health-guide .rk-hlth-formula {
    background: var(--rk-dark);
    border-radius: 18px;
    color: #e8f8fb;
    margin: 25px 0;
    padding: 23px 26px;
  }

  #rk-health-guide .rk-hlth-formula strong {
    color: #72e8f6;
    display: block;
    font-size: clamp(1.28rem, 3vw, 1.8rem);
    margin-bottom: 8px;
  }

  #rk-health-guide .rk-hlth-table-wrap {
    margin-top: 24px;
    overflow: hidden;
  }

  #rk-health-guide .rk-hlth-table {
    border-collapse: separate;
    border-spacing: 0;
    overflow: hidden;
    width: 100%;
  }

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

  #rk-health-guide .rk-hlth-table th {
    background: var(--rk-dark);
    color: #ffffff;
    font-size: 0.82rem;
    letter-spacing: 0.02em;
  }

  #rk-health-guide .rk-hlth-table th:first-child {
    border-radius: 14px 0 0 0;
  }

  #rk-health-guide .rk-hlth-table th:last-child {
    border-radius: 0 14px 0 0;
  }

  #rk-health-guide .rk-hlth-table td {
    background: #ffffff;
    color: var(--rk-text);
  }

  #rk-health-guide .rk-hlth-table tbody tr:nth-child(even) td {
    background: var(--rk-soft);
  }

  #rk-health-guide .rk-hlth-table-caption {
    color: var(--rk-muted);
    font-size: 0.78rem;
    margin: 10px 0 0;
  }

  #rk-health-guide .rk-hlth-tool {
    background: var(--rk-dark);
    border-radius: 24px;
    color: #e8f7fa;
    margin-top: 26px;
    overflow: hidden;
  }

  #rk-health-guide .rk-hlth-tool-head {
    background: linear-gradient(115deg, #153c51, #176579);
    padding: clamp(24px, 5vw, 40px);
  }

  #rk-health-guide .rk-hlth-tool-head h3 {
    color: #ffffff;
    font-size: clamp(1.55rem, 4vw, 2.35rem);
  }

  #rk-health-guide .rk-hlth-tool-head p {
    color: #ccecf2;
    margin-bottom: 0;
    max-width: 930px;
  }

  #rk-health-guide .rk-hlth-tool-body {
    padding: clamp(20px, 4vw, 34px);
  }

  #rk-health-guide .rk-hlth-scenarios {
    display: grid;
    gap: 10px;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-bottom: 22px;
  }

  #rk-health-guide .rk-hlth-mode {
    background: #1a4256;
    border: 1px solid #3a6678;
    border-radius: 14px;
    color: #eaf8fb;
    cursor: pointer;
    font-size: 0.83rem;
    font-weight: 850;
    line-height: 1.25;
    min-height: 58px;
    padding: 11px 13px;
  }

  #rk-health-guide .rk-hlth-mode:hover,
  #rk-health-guide .rk-hlth-mode:focus-visible {
    border-color: var(--rk-cyan);
    outline: 2px solid transparent;
  }

  #rk-health-guide .rk-hlth-mode.is-active {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    color: #082535;
  }

  #rk-health-guide .rk-hlth-controls {
    background: #173449;
    border: 1px solid #31586a;
    border-radius: 17px;
    display: grid;
    gap: 20px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-bottom: 20px;
    padding: 20px;
  }

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

  #rk-health-guide .rk-hlth-control-head label {
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 850;
  }

  #rk-health-guide .rk-hlth-control-head output {
    background: #ffffff;
    border-radius: 999px;
    color: var(--rk-dark);
    font-size: 0.82rem;
    font-weight: 900;
    padding: 4px 10px;
  }

  #rk-health-guide .rk-hlth-control input[type="range"] {
    accent-color: var(--rk-cyan);
    cursor: pointer;
    width: 100%;
  }

  #rk-health-guide .rk-hlth-control-scale {
    color: #a8cad3;
    display: flex;
    font-size: 0.68rem;
    justify-content: space-between;
    margin-top: 4px;
  }

  #rk-health-guide .rk-hlth-viz-grid {
    display: grid;
    gap: 18px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  #rk-health-guide .rk-hlth-viz-panel {
    background: #173449;
    border: 1px solid #31586a;
    border-radius: 18px;
    padding: 18px;
  }

  #rk-health-guide .rk-hlth-viz-panel h4 {
    color: #ffffff;
  }

  #rk-health-guide .rk-hlth-viz-panel > p {
    color: #aed0d9;
    font-size: 0.76rem;
  }

  #rk-health-guide .rk-hlth-viz-canvas {
    background: #f7fbfc;
    border-radius: 14px;
    overflow: hidden;
  }

  #rk-health-guide .rk-hlth-results {
    display: grid;
    gap: 10px;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-top: 18px;
  }

  #rk-health-guide .rk-hlth-result {
    background: #173449;
    border: 1px solid #31586a;
    border-radius: 14px;
    padding: 14px;
  }

  #rk-health-guide .rk-hlth-result span {
    color: #a9cad3;
    display: block;
    font-size: 0.67rem;
    font-weight: 800;
    letter-spacing: 0.05em;
    margin-bottom: 4px;
    text-transform: uppercase;
  }

  #rk-health-guide .rk-hlth-result strong {
    color: #ffffff;
    font-size: 1.18rem;
  }

  #rk-health-guide .rk-hlth-tool-status {
    background: rgba(37, 199, 216, 0.12);
    border-left: 5px solid var(--rk-cyan);
    border-radius: 13px;
    color: #eefcff;
    margin-top: 17px;
    padding: 16px 18px;
  }

  #rk-health-guide .rk-hlth-tool-status.is-warning {
    background: rgba(255, 106, 61, 0.13);
    border-color: var(--rk-orange);
  }

  #rk-health-guide .rk-hlth-tool-note {
    color: #a9c7d0;
    font-size: 0.72rem;
    margin: 14px 2px 0;
  }

  #rk-health-guide .rk-hlth-mid-cta,
  #rk-health-guide .rk-hlth-final-cta {
    color: #eefcff;
    padding: clamp(32px, 6vw, 60px) clamp(24px, 7vw, 76px);
  }

  #rk-health-guide .rk-hlth-mid-cta {
    background: linear-gradient(120deg, #14384d, #175b70);
    border-bottom: 1px solid #2d6172;
  }

  #rk-health-guide .rk-hlth-final-cta {
    background: linear-gradient(120deg, #102536, #164e63);
  }

  #rk-health-guide .rk-hlth-mid-cta h3,
  #rk-health-guide .rk-hlth-cta-title {
    color: #ffffff;
  }

  #rk-health-guide .rk-hlth-cta-title {
    font-size: clamp(1.75rem, 4vw, 2.65rem);
    margin-bottom: 14px;
  }

  #rk-health-guide .rk-hlth-mid-cta p,
  #rk-health-guide .rk-hlth-final-cta p {
    color: #d6edf2;
    max-width: 970px;
  }

  #rk-health-guide .rk-hlth-cta-button {
    background: var(--rk-orange);
    border-radius: 14px;
    box-shadow: 0 12px 28px rgba(255, 106, 61, 0.24);
    color: #ffffff;
    display: inline-block;
    font-weight: 900;
    margin-top: 4px;
    padding: 15px 22px;
    text-decoration: none;
  }

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

  #rk-health-guide .rk-hlth-disclosure {
    color: #a9cbd4;
    display: block;
    font-size: 0.69rem;
    margin-top: 12px;
  }

  #rk-health-guide .rk-hlth-compare {
    display: grid;
    gap: 1px;
    grid-template-columns: 1fr 1fr;
    margin: 26px 0;
    overflow: hidden;
  }

  #rk-health-guide .rk-hlth-compare > div {
    background: var(--rk-soft);
    border: 1px solid var(--rk-line);
    padding: 24px;
  }

  #rk-health-guide .rk-hlth-compare > div:first-child {
    border-radius: 18px 0 0 18px;
  }

  #rk-health-guide .rk-hlth-compare > div:last-child {
    border-radius: 0 18px 18px 0;
  }

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

  #rk-health-guide .rk-hlth-error {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-left: 5px solid var(--rk-orange);
    border-radius: 15px;
    padding: 20px;
  }

  #rk-health-guide .rk-hlth-error b {
    color: var(--rk-orange);
    display: block;
    font-size: 0.72rem;
    letter-spacing: 0.08em;
    margin-bottom: 7px;
    text-transform: uppercase;
  }

  #rk-health-guide .rk-hlth-steps {
    counter-reset: rk-health-step;
    display: grid;
    gap: 13px;
    margin-top: 25px;
  }

  #rk-health-guide .rk-hlth-step {
    align-items: flex-start;
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    display: grid;
    gap: 17px;
    grid-template-columns: 46px minmax(0, 1fr);
    padding: 19px 21px;
  }

  #rk-health-guide .rk-hlth-step::before {
    align-items: center;
    background: var(--rk-cyan);
    border-radius: 12px;
    color: var(--rk-dark);
    content: counter(rk-health-step);
    counter-increment: rk-health-step;
    display: flex;
    font-weight: 900;
    height: 42px;
    justify-content: center;
    width: 42px;
  }

  #rk-health-guide .rk-hlth-step h3 {
    font-size: 1.1rem;
    margin-bottom: 5px;
  }

  #rk-health-guide .rk-hlth-step p {
    margin-bottom: 0;
  }

  #rk-health-guide .rk-hlth-faq {
    display: grid;
    gap: 12px;
    margin-top: 24px;
  }

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

  #rk-health-guide .rk-hlth-faq summary {
    color: var(--rk-dark);
    cursor: pointer;
    font-weight: 900;
    list-style: none;
    padding: 18px 54px 18px 20px;
    position: relative;
  }

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

  #rk-health-guide .rk-hlth-faq summary::after {
    background: var(--rk-cyan-soft);
    border-radius: 50%;
    color: var(--rk-blue);
    content: "+";
    font-size: 1.35rem;
    height: 30px;
    line-height: 28px;
    position: absolute;
    right: 16px;
    text-align: center;
    top: 15px;
    width: 30px;
  }

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

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

  #rk-health-guide .rk-hlth-source-box {
    background: var(--rk-soft);
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    padding: 25px;
  }

  #rk-health-guide .rk-hlth-source-box li {
    overflow-wrap: anywhere;
  }

  #rk-health-guide .rk-hlth-update {
    color: var(--rk-muted);
    font-size: 0.78rem;
    font-weight: 750;
    margin-top: 16px;
  }

  #rk-health-guide .rk-hlth-author {
    background: #eef6f9;
    border-bottom: 1px solid var(--rk-line);
  }

  #rk-health-guide .rk-hlth-author > input {
    left: -9999px;
    position: absolute;
  }

  #rk-health-guide .rk-hlth-author-head {
    align-items: center;
    background: linear-gradient(115deg, var(--rk-dark), #174e63);
    display: flex;
    gap: 25px;
    justify-content: space-between;
    padding: 28px clamp(24px, 7vw, 76px);
  }

  #rk-health-guide .rk-hlth-author-title {
    color: #ffffff;
    font-size: clamp(1.65rem, 4vw, 2.35rem);
    margin: 0;
  }

  #rk-health-guide .rk-hlth-author-head p {
    color: #c9e4ea;
    margin: 6px 0 0;
  }

  #rk-health-guide .rk-hlth-author-mark {
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 999px;
    color: #bfe9ef;
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    padding: 9px 14px;
    text-align: center;
  }

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

  #rk-health-guide .rk-hlth-author-side {
    background: var(--rk-dark);
    color: #d8edf1;
    padding: 32px 28px;
    text-align: center;
  }

  #rk-health-guide .rk-hlth-author-photo {
    border: 6px solid #395466;
    border-radius: 50%;
    height: 180px;
    margin: 0 auto 18px;
    overflow: hidden;
    width: 180px;
  }

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

  #rk-health-guide .rk-hlth-author-name a {
    color: #ffffff;
    font-size: 1.28rem;
    font-weight: 900;
    text-decoration: none;
  }

  #rk-health-guide .rk-hlth-author-role {
    color: #b8d2da;
    font-size: 0.78rem;
    margin-top: 8px;
  }

  #rk-health-guide .rk-hlth-author-social-label {
    color: #88a6b1;
    font-size: 0.68rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin: 25px 0 10px;
    text-transform: uppercase;
  }

  #rk-health-guide .rk-hlth-author-social {
    display: flex;
    gap: 10px;
    justify-content: center;
  }

  #rk-health-guide .rk-hlth-author-social a {
    align-items: center;
    border: 1px solid #486679;
    border-radius: 50%;
    color: #dff7fb;
    display: flex;
    height: 48px;
    justify-content: center;
    width: 48px;
  }

  #rk-health-guide .rk-hlth-author-social a:hover,
  #rk-health-guide .rk-hlth-author-social a:focus-visible {
    background: var(--rk-cyan);
    color: var(--rk-dark);
  }

  #rk-health-guide .rk-hlth-author-social svg {
    fill: currentColor;
    height: 21px;
    width: 21px;
  }

  #rk-health-guide .rk-hlth-author-main {
    padding: 34px clamp(24px, 5vw, 48px);
  }

  #rk-health-guide .rk-hlth-author-quote {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 17px;
    margin: 0 0 22px;
    padding: 24px 24px 24px 64px;
    position: relative;
  }

  #rk-health-guide .rk-hlth-author-quote::before {
    color: var(--rk-cyan);
    content: "“";
    font-family: Georgia, serif;
    font-size: 3.5rem;
    left: 22px;
    line-height: 1;
    position: absolute;
    top: 12px;
  }

  #rk-health-guide .rk-hlth-author-quote p {
    color: var(--rk-dark);
    font-weight: 800;
    margin: 0;
  }

  #rk-health-guide .rk-hlth-author-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-bottom: 18px;
  }

  #rk-health-guide .rk-hlth-author-tab {
    background: #dfeaf0;
    border-radius: 999px;
    color: #5c7180;
    cursor: pointer;
    font-size: 0.73rem;
    font-weight: 900;
    padding: 9px 15px;
  }

  #rk-health-guide .rk-hlth-author-panel {
    color: var(--rk-text);
    display: none;
  }

  #rk-health-guide #rk-hlth-author-about:checked ~ .rk-hlth-author-layout .rk-hlth-author-panel-about,
  #rk-health-guide #rk-hlth-author-exp:checked ~ .rk-hlth-author-layout .rk-hlth-author-panel-exp,
  #rk-health-guide #rk-hlth-author-method:checked ~ .rk-hlth-author-layout .rk-hlth-author-panel-method,
  #rk-health-guide #rk-hlth-author-sites:checked ~ .rk-hlth-author-layout .rk-hlth-author-panel-sites {
    display: block;
  }

  #rk-health-guide #rk-hlth-author-about:checked ~ .rk-hlth-author-layout label[for="rk-hlth-author-about"],
  #rk-health-guide #rk-hlth-author-exp:checked ~ .rk-hlth-author-layout label[for="rk-hlth-author-exp"],
  #rk-health-guide #rk-hlth-author-method:checked ~ .rk-hlth-author-layout label[for="rk-hlth-author-method"],
  #rk-health-guide #rk-hlth-author-sites:checked ~ .rk-hlth-author-layout label[for="rk-hlth-author-sites"] {
    background: var(--rk-blue);
    color: #ffffff;
  }

  #rk-health-guide .rk-hlth-site-links {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-top: 13px;
  }

  #rk-health-guide .rk-hlth-site-links a {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 999px;
    padding: 7px 12px;
    text-decoration: none;
  }

  #rk-health-guide .rk-hlth-screen-reader {
    clip: rect(1px, 1px, 1px, 1px);
    clip-path: inset(50%);
    height: 1px;
    overflow: hidden;
    position: absolute;
    white-space: nowrap;
    width: 1px;
  }

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

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

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

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

  @media (max-width: 760px) {
    #rk-health-guide {
      font-size: 16px;
      overflow: visible;
      width: 100%;
    }

    #rk-health-guide .rk-hlth-shell {
      border-radius: 18px;
      overflow: hidden;
      width: 100%;
    }

    #rk-health-guide .rk-hlth-hero,
    #rk-health-guide .rk-hlth-section,
    #rk-health-guide .rk-hlth-mid-cta,
    #rk-health-guide .rk-hlth-final-cta {
      padding-left: 20px;
      padding-right: 20px;
    }

    #rk-health-guide .rk-hlth-hero-title {
      font-size: clamp(2rem, 12vw, 3.35rem);
    }

    #rk-health-guide .rk-hlth-nav {
      align-items: stretch;
      display: flex;
      gap: 8px;
      padding: 18px;
    }

    #rk-health-guide .rk-hlth-nav strong {
      flex: 0 0 100%;
      margin-bottom: 3px;
    }

    #rk-health-guide .rk-hlth-nav a {
      flex: 1 1 145px;
      text-align: center;
    }

    #rk-health-guide .rk-hlth-answer,
    #rk-health-guide .rk-hlth-grid-2,
    #rk-health-guide .rk-hlth-grid-3,
    #rk-health-guide .rk-hlth-grid-4,
    #rk-health-guide .rk-hlth-controls,
    #rk-health-guide .rk-hlth-viz-grid,
    #rk-health-guide .rk-hlth-results,
    #rk-health-guide .rk-hlth-compare,
    #rk-health-guide .rk-hlth-errors,
    #rk-health-guide .rk-hlth-author-layout {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-health-guide .rk-hlth-compare > div:first-child,
    #rk-health-guide .rk-hlth-compare > div:last-child {
      border-radius: 16px;
    }

    #rk-health-guide .rk-hlth-scenarios {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-health-guide .rk-hlth-table,
    #rk-health-guide .rk-hlth-table tbody,
    #rk-health-guide .rk-hlth-table tr,
    #rk-health-guide .rk-hlth-table td {
      display: block;
      width: 100%;
    }

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

    #rk-health-guide .rk-hlth-table tr {
      background: #ffffff;
      border: 1px solid var(--rk-line);
      border-radius: 15px;
      margin-bottom: 13px;
      overflow: hidden;
    }

    #rk-health-guide .rk-hlth-table td,
    #rk-health-guide .rk-hlth-table tbody tr:nth-child(even) td {
      align-items: flex-start;
      background: #ffffff;
      border-bottom: 1px solid var(--rk-line);
      display: grid;
      gap: 12px;
      grid-template-columns: minmax(105px, 0.72fr) minmax(0, 1.28fr);
      padding: 13px 14px;
    }

    #rk-health-guide .rk-hlth-table td:last-child {
      border-bottom: 0;
    }

    #rk-health-guide .rk-hlth-table td::before {
      color: var(--rk-muted);
      content: attr(data-label);
      font-size: 0.68rem;
      font-weight: 900;
      letter-spacing: 0.04em;
      text-transform: uppercase;
    }

    #rk-health-guide .rk-hlth-author-head {
      align-items: flex-start;
      flex-direction: column;
      padding-left: 20px;
      padding-right: 20px;
    }

    #rk-health-guide .rk-hlth-author-side,
    #rk-health-guide .rk-hlth-author-main {
      width: 100%;
    }

    #rk-health-guide .rk-hlth-author-main {
      padding: 25px 20px 30px;
    }

    #rk-health-guide .rk-hlth-author-quote {
      padding: 50px 20px 22px;
    }

    #rk-health-guide .rk-hlth-author-quote::before {
      left: 18px;
      top: 7px;
    }

    #rk-health-guide #rk-hlth-room-svg .rk-hlth-room-heights text,
    #rk-health-guide #rk-hlth-room-label {
      font-size: 26px;
    }

    #rk-health-guide #rk-hlth-chart-svg .rk-hlth-chart-axis-labels text,
    #rk-health-guide #rk-hlth-chart-svg > text {
      font-size: 19px;
    }

    #rk-health-guide #rk-hlth-chart-svg .rk-hlth-chart-point-labels text {
      font-size: 22px;
    }

    #rk-health-guide .rk-hlth-cta-button {
      display: block;
      text-align: center;
      width: 100%;
    }
  }

  @media (max-width: 420px) {
    #rk-health-guide .rk-hlth-nav a {
      flex-basis: 100%;
    }

    #rk-health-guide .rk-hlth-table td,
    #rk-health-guide .rk-hlth-table tbody tr:nth-child(even) td {
      grid-template-columns: minmax(0, 1fr);
    }

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

    #rk-health-guide .rk-hlth-step::before {
      height: 38px;
      width: 38px;
    }

    #rk-health-guide .rk-hlth-tool-body {
      padding: 12px;
    }

    #rk-health-guide .rk-hlth-viz-panel {
      padding: 10px;
    }

    #rk-health-guide #rk-hlth-room-svg .rk-hlth-room-heights text {
      font-size: 30px;
    }

    #rk-health-guide #rk-hlth-room-label {
      display: none;
    }

    #rk-health-guide #rk-hlth-chart-svg .rk-hlth-chart-axis-labels text,
    #rk-health-guide #rk-hlth-chart-svg > text {
      font-size: 23px;
    }

    #rk-health-guide #rk-hlth-chart-svg .rk-hlth-chart-point-labels text {
      font-size: 25px;
    }
  }

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

<article id="rk-health-guide" aria-label="Czy ogrzewanie podłogowe jest zdrowe — fakty o komforcie i mikroklimacie">
  <div class="rk-hlth-shell">
    <header class="rk-hlth-hero">
      <div class="rk-hlth-hero-inner">
        <span class="rk-hlth-eyebrow"><b aria-hidden="true"></b> Komfort cieplny • aktualizacja 2026</span>
        <div class="rk-hlth-hero-title">Zdrowie nie zależy od samej <span>nazwy ogrzewania</span></div>
        <p class="rk-hlth-hero-lead">Prawidłowo zaprojektowana podłogówka może zapewnić równomierny komfort cieplny. Nie jest jednak leczeniem, ochroną przed infekcjami ani automatyczną gwarancją dobrej jakości powietrza. Oddzielamy fizykę budynku od medycznych obietnic.</p>
        <div class="rk-hlth-hero-tags" aria-label="Zakres artykułu">
          <span>temperatura powierzchni</span>
          <span>pionowy profil temperatury</span>
          <span>kurz i alergeny</span>
          <span>wilgotność i wentylacja</span>
          <span>krążenie i komfort</span>
        </div>
        <div class="rk-hlth-meta">
          <span>Autor: Robert Kucharski</span>
          <span>Czas czytania: około 23 minuty</span>
          <span>Aktualizacja techniczna: 8 września 2026 r.</span>
        </div>
      </div>
    </header>

    <nav class="rk-hlth-nav" aria-label="Spis treści artykułu">
      <strong>Na skróty</strong>
      <a href="#rk-hlth-answer">Szybka odpowiedź</a>
      <a href="#rk-hlth-comfort-health">Komfort a zdrowie</a>
      <a href="#rk-hlth-feeling">Jak odczuwamy ciepło?</a>
      <a href="#rk-hlth-surface">Temperatura podłogi</a>
      <a href="#rk-hlth-profile">Interaktywny profil</a>
      <a href="#rk-hlth-circulation">Krążenie i żylaki</a>
      <a href="#rk-hlth-joints">Stawy i reumatyzm</a>
      <a href="#rk-hlth-allergy">Alergia, kurz i roztocza</a>
      <a href="#rk-hlth-humidity">Wilgotność</a>
      <a href="#rk-hlth-ventilation">Wentylacja i pleśń</a>
      <a href="#rk-hlth-sleep">Sypialnia i sen</a>
      <a href="#rk-hlth-children">Małe dzieci</a>
      <a href="#rk-hlth-seniors">Seniorzy</a>
      <a href="#rk-hlth-finishes">Okładziny</a>
      <a href="#rk-hlth-furniture">Meble i dywany</a>
      <a href="#rk-hlth-radiators">Podłogówka a grzejniki</a>
      <a href="#rk-hlth-design">Projekt bez przegrzewania</a>
      <a href="#rk-hlth-signals">Sygnały ostrzegawcze</a>
      <a href="#rk-hlth-checklist">Checklista</a>
      <a href="#rk-hlth-faq">FAQ</a>
      <a href="#rk-hlth-sources">Źródła</a>
      <a href="#rk-hlth-author">Autor</a>
    </nav>

    <main>
      <section class="rk-hlth-section" id="rk-hlth-answer">
        <span class="rk-hlth-kicker">Odpowiedź w 60 sekund</span>
        <h2>Czy ogrzewanie podłogowe jest zdrowe?</h2>
        <p class="rk-hlth-intro"><strong>Nie ma podstaw, aby prawidłowo zaprojektowane ogrzewanie podłogowe uznawać z definicji za niezdrowe.</strong> Może ono zapewnić komfortowy i równomierny rozkład temperatury. Nie wolno jednak wyciągać z tego wniosku, że podłogówka leczy choroby, zapobiega infekcjom, usuwa alergeny albo jest właściwa dla każdej osoby i każdego pomieszczenia bez obliczeń.</p>

        <div class="rk-hlth-answer">
          <div class="rk-hlth-answer-main">
            <h3>Co można powiedzieć uczciwie?</h3>
            <p>O komforcie decydują temperatura powietrza i przegród, temperatura powierzchni, pionowy gradient, prędkość ruchu powietrza, aktywność, ubiór oraz indywidualne odczucia. System trzeba dobrać do strat ciepła i czynnej powierzchni każdego pomieszczenia.</p>
          </div>
          <div class="rk-hlth-answer-side">
            <h3>Czego system nie potwierdza?</h3>
            <p>Sama obecność rur w podłodze nie diagnozuje stanu żył, stawów, alergii ani jakości snu. Objawy zdrowotne wymagają oceny lekarza, a jakość powietrza — pomiarów i kontroli źródeł zanieczyszczeń.</p>
          </div>
        </div>

        <div class="rk-hlth-callout"><p>Jeżeli chcesz najpierw zrozumieć zasadę emisji przez dużą powierzchnię, zobacz poradnik <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">jak działa wodne ogrzewanie podłogowe</a>. Ten artykuł koncentruje się na komforcie człowieka i domowym mikroklimacie.</p></div>

        <div class="rk-hlth-medical"><strong>Ważne rozgraniczenie:</strong> materiał ma charakter techniczny i edukacyjny. Nie zastępuje badania, diagnozy ani zaleceń lekarza. Utrzymujące się obrzęki, ból, duszność, nasilone objawy alergii lub inne dolegliwości trzeba konsultować medycznie niezależnie od rodzaju ogrzewania.</div>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-comfort-health">
        <span class="rk-hlth-kicker">Dwie różne oceny</span>
        <h2>Komfort cieplny to nie diagnoza medyczna</h2>
        <p class="rk-hlth-intro">Normy komfortu cieplnego opisują, jak grupa ludzi może odbierać środowisko termiczne i kiedy pojawia się miejscowy dyskomfort. Nie rozstrzygają, czy instalacja leczy albo wywołuje konkretną chorobę.</p>

        <div class="rk-hlth-grid-3">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Warunki cieplne</span><h3>Temperatura operacyjna</h3><p>Odczucie zależy nie tylko od wskazania termometru. Znaczenie ma również promieniowanie od podłogi, ścian, szyb i innych powierzchni.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Miejscowy komfort</span><h3>Stopy, głowa i asymetria</h3><p>Nawet przy poprawnej średniej temperaturze można odczuwać zbyt ciepłą podłogę, chłód od okna albo nadmierną różnicę temperatur między stopami i głową.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Zdrowie</span><h3>Szerszy zestaw czynników</h3><p>WHO ocenia warunki mieszkaniowe szerzej: obejmują temperaturę, wilgoć, jakość powietrza, hałas, bezpieczeństwo i indywidualną podatność mieszkańców.</p></article>
        </div>

        <p>Aktualna <a href="https://www.iso.org/standard/85803.html" target="_blank" rel="nofollow noopener noreferrer">ISO 7730:2025</a> opisuje analityczną ocenę komfortu za pomocą wskaźników PMV i PPD oraz kryteriów miejscowego dyskomfortu. Z kolei <a href="https://www.who.int/publications/i/item/9789241550376" target="_blank" rel="nofollow noopener noreferrer">WHO Housing and health guidelines</a> pokazują, że warunków dla zdrowia nie wolno sprowadzać do jednego odbiornika ciepła.</p>

        <div class="rk-hlth-note"><p>W artykule rozdzielamy więc trzy pytania: czy jest komfortowo, czy instalacja pracuje zgodnie z projektem oraz czy występują objawy wymagające oceny medycznej. Odpowiedź na jedno z nich nie zastępuje pozostałych.</p></div>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-feeling">
        <span class="rk-hlth-kicker">Fizyka odczuwania</span>
        <h2>Jak człowiek odczuwa ciepło w pomieszczeniu?</h2>
        <p class="rk-hlth-intro">Ciało wymienia ciepło między innymi przez promieniowanie, konwekcję i przewodzenie. Dlatego dwa pokoje z taką samą temperaturą powietrza mogą być odbierane inaczej, jeśli różnią się temperaturą ścian, okien i podłogi.</p>

        <div class="rk-hlth-grid-4">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">01 • Powietrze</span><h3>Temperatura i ruch</h3><p>Na odczucie wpływa temperatura powietrza oraz jego ruch. Nie istnieje jedna prędkość konwekcji przypisana wszystkim podłogówkom albo wszystkim grzejnikom.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">02 • Powierzchnie</span><h3>Promieniowanie</h3><p>Ciepłe lub chłodne przegrody zmieniają bilans promieniowania. Duże przeszklenie może powodować dyskomfort mimo poprawnej temperatury w środku pokoju.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">03 • Człowiek</span><h3>Aktywność i ubiór</h3><p>Osoba siedząca, dziecko bawiące się na podłodze i ktoś wykonujący pracę fizyczną mogą inaczej oceniać te same warunki.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">04 • Czas</span><h3>Bezwładność systemu</h3><p>Jastrych reaguje wolniej niż lekki grzejnik. Komfort zależy więc również od sposobu sterowania i przewidywania zmian obciążenia.</p></article>
        </div>

        <p>Podłogówka może sprzyjać równomiernemu rozkładowi temperatury, lecz nie jest to automatyczne. Rezultat zależy od projektu, mocy wymaganej w pomieszczeniu, powierzchni aktywnej, rozstawu rur i temperatury wody. Techniczne porównanie sposobów emisji znajdziesz w opracowaniu o <a href="https://projekt-ogrzewania.pl/zalety-ogrzewania-podlogowego-w-porownaniu-do-tradycyjnych-grzejnikow/">ogrzewaniu podłogowym i tradycyjnych grzejnikach</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-surface">
        <span class="rk-hlth-kicker">Parametr projektowy</span>
        <h2>Temperatura powierzchni podłogi — co naprawdę oznacza?</h2>
        <p class="rk-hlth-intro">Temperatura powierzchni jest wynikiem współpracy całego układu: temperatury wody, rozstawu rur, konstrukcji jastrychu, oporu okładziny, wymaganej mocy i temperatury pomieszczenia. Nie jest prostą kopią temperatury zasilania.</p>

        <div class="rk-hlth-formula" aria-label="Zależność wymaganej mocy jednostkowej podłogi">
          <strong>q<sub>wym</sub> = Q<sub>pomieszczenia</sub> ÷ A<sub>czynna</sub></strong>
          <span>Najpierw ustala się stratę ciepła pomieszczenia i rzeczywiście ogrzewaną powierzchnię. Dopiero później sprawdza się temperaturę powierzchni oraz parametry instalacji.</span>
        </div>

        <div class="rk-hlth-table-wrap">
          <table class="rk-hlth-table">
            <thead><tr><th>Wartość lub sytuacja</th><th>Jak ją rozumieć?</th><th>Czego nie dowodzi?</th></tr></thead>
            <tbody>
              <tr><td data-label="Wartość"><strong>29°C w strefie stałego pobytu</strong></td><td data-label="Znaczenie">To często stosowana projektowa wartość graniczna dla typowej strefy użytkowanej, wymagająca odniesienia do właściwej normy i przeznaczenia pomieszczenia.</td><td data-label="Nie dowodzi">Nie jest medycznym przełącznikiem, poniżej którego każda osoba zawsze czuje się dobrze.</td></tr>
              <tr><td data-label="Wartość"><strong>Łazienka i strefa brzegowa</strong></td><td data-label="Znaczenie">Dopuszczalne wartości projektowe mogą być inne niż w strefie stałego pobytu, ponieważ zmienia się sposób użytkowania i funkcja strefy.</td><td data-label="Nie dowodzi">Nie pozwala automatycznie podnieść temperatury całej podłogi bez sprawdzenia mocy i komfortu.</td></tr>
              <tr><td data-label="Wartość"><strong>Drewno lub panele</strong></td><td data-label="Znaczenie">Producent okładziny może określić niższą temperaturę powierzchni i wymagany opór całego zestawu.</td><td data-label="Nie dowodzi">Sama nazwa materiału nie określa właściwej temperatury wody ani rozstawu rur.</td></tr>
            </tbody>
          </table>
          <p class="rk-hlth-table-caption">Wartości projektowe trzeba zawsze odczytywać w kontekście strefy, konstrukcji i aktualnej dokumentacji. Nie są zaleceniami medycznymi.</p>
        </div>

        <p>Szczegółowe omówienie limitów znajdziesz w poradniku o <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/">optymalnej temperaturze ogrzewania podłogowego</a>. Nie należy też mylić jej z <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalną temperaturą zasilania podłogówki</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-profile">
        <span class="rk-hlth-kicker">Zobacz różnicę</span>
        <h2>Interaktywny profil temperatury w pomieszczeniu</h2>
        <p class="rk-hlth-intro">Przełącz scenariusz i obserwuj poglądowy rozkład temperatury od podłogi do sufitu. Grafika nie ocenia zdrowia i nie zastępuje pomiaru. Pokazuje, dlaczego sama nazwa systemu nie wystarcza do przewidzenia komfortu.</p>

        <div class="rk-hlth-tool" role="group" aria-label="Interaktywna grafika pionowego rozkładu temperatury">
          <div class="rk-hlth-tool-head">
            <span class="rk-hlth-kicker" style="color:#78edf7">Model poglądowy • bez diagnozy medycznej</span>
            <h3>Porównaj cztery sposoby rozłożenia ciepła</h3>
            <p>Ustaw temperaturę powierzchni i temperaturę powietrza, a następnie porównaj orientacyjny profil na czterech wysokościach. W prawdziwym pomieszczeniu wynik zależy także od strat, przegród, geometrii, wentylacji, wyposażenia i sterowania.</p>
          </div>

          <div class="rk-hlth-tool-body">
            <div class="rk-hlth-scenarios" aria-label="Wybór scenariusza">
              <button class="rk-hlth-mode is-active" type="button" data-mode="floor" aria-pressed="true">Prawidłowo wyregulowana podłoga</button>
              <button class="rk-hlth-mode" type="button" data-mode="overheated" aria-pressed="false">Przegrzana powierzchnia</button>
              <button class="rk-hlth-mode" type="button" data-mode="radiator" aria-pressed="false">Grzejnik przy ścianie</button>
              <button class="rk-hlth-mode" type="button" data-mode="blocked" aria-pressed="false">Podłoga pod dywanem</button>
            </div>

            <div class="rk-hlth-controls">
              <div class="rk-hlth-control">
                <div class="rk-hlth-control-head"><label for="rk-hlth-floor-temp">Temperatura powierzchni</label><output id="rk-hlth-floor-output" for="rk-hlth-floor-temp">26°C</output></div>
                <input id="rk-hlth-floor-temp" type="range" min="18" max="34" step="1" value="26">
                <div class="rk-hlth-control-scale"><span>18°C</span><span>26°C</span><span>34°C</span></div>
              </div>
              <div class="rk-hlth-control">
                <div class="rk-hlth-control-head"><label for="rk-hlth-air-temp">Temperatura powietrza odniesienia</label><output id="rk-hlth-air-output" for="rk-hlth-air-temp">21°C</output></div>
                <input id="rk-hlth-air-temp" type="range" min="17" max="25" step="1" value="21">
                <div class="rk-hlth-control-scale"><span>17°C</span><span>21°C</span><span>25°C</span></div>
              </div>
            </div>

            <div class="rk-hlth-viz-grid">
              <div class="rk-hlth-viz-panel">
                <h4>Przekrój pomieszczenia</h4>
                <p>Kolory pokazują względny rozkład ciepła w wybranym scenariuszu.</p>
                <div class="rk-hlth-viz-canvas">
                  <svg id="rk-hlth-room-svg" viewBox="0 0 620 420" role="img" aria-labelledby="rk-hlth-room-title rk-hlth-room-desc">
                    <title id="rk-hlth-room-title">Poglądowy przekrój temperatury w pomieszczeniu</title>
                    <desc id="rk-hlth-room-desc">Zmieniająca się mapa kolorów dla ogrzewania podłogowego, przegrzanej podłogi, grzejnika i podłogi zasłoniętej dywanem.</desc>
                    <defs>
                      <linearGradient id="rk-hlth-room-gradient" x1="0" y1="1" x2="0" y2="0">
                        <stop id="rk-hlth-stop-floor" offset="0%" stop-color="#ff8058"></stop>
                        <stop id="rk-hlth-stop-mid" offset="48%" stop-color="#f8df9b"></stop>
                        <stop id="rk-hlth-stop-top" offset="100%" stop-color="#c9ecf2"></stop>
                      </linearGradient>
                      <pattern id="rk-hlth-floor-pattern" width="44" height="18" patternUnits="userSpaceOnUse">
                        <path d="M0 9 C10 0 20 18 30 9 S50 0 60 9" fill="none" stroke="#ff6a3d" stroke-width="4"></path>
                      </pattern>
                    </defs>
                    <rect x="46" y="28" width="526" height="330" rx="12" fill="url(#rk-hlth-room-gradient)" stroke="#9bb7c1" stroke-width="2"></rect>
                    <g opacity="0.34" stroke="#ffffff" stroke-width="1">
                      <line x1="46" y1="105" x2="572" y2="105"></line>
                      <line x1="46" y1="190" x2="572" y2="190"></line>
                      <line x1="46" y1="275" x2="572" y2="275"></line>
                    </g>
                    <rect x="46" y="342" width="526" height="16" fill="#d2dce0"></rect>
                    <rect id="rk-hlth-coils" x="46" y="352" width="526" height="28" fill="url(#rk-hlth-floor-pattern)"></rect>
                    <rect x="46" y="380" width="526" height="20" fill="#5c6870"></rect>
                    <g id="rk-hlth-radiator" visibility="hidden">
                      <rect x="70" y="222" width="36" height="112" rx="6" fill="#ff6a3d" stroke="#b93f24" stroke-width="2"></rect>
                      <line x1="79" y1="234" x2="79" y2="322" stroke="#ffd3c5" stroke-width="3"></line>
                      <line x1="89" y1="234" x2="89" y2="322" stroke="#ffd3c5" stroke-width="3"></line>
                      <line x1="99" y1="234" x2="99" y2="322" stroke="#ffd3c5" stroke-width="3"></line>
                      <path d="M90 214 C130 170 115 112 165 70" fill="none" stroke="#ff8a61" stroke-width="11" stroke-linecap="round" opacity="0.55"></path>
                    </g>
                    <g id="rk-hlth-rug" visibility="hidden">
                      <rect x="155" y="332" width="265" height="14" rx="6" fill="#695ac9"></rect>
                      <rect x="182" y="310" width="210" height="22" rx="11" fill="#ff7048" opacity="0.68"></rect>
                      <text x="287" y="326" text-anchor="middle" fill="#ffffff" font-size="13" font-weight="800">strefa ograniczonej emisji</text>
                    </g>
                    <g fill="#16364a" stroke="#ffffff" stroke-width="3">
                      <circle cx="392" cy="112" r="27"></circle>
                      <path d="M365 151 Q392 132 419 151 L432 258 Q392 280 352 258 Z"></path>
                      <line x1="370" y1="173" x2="322" y2="226" stroke-linecap="round" stroke-width="15"></line>
                      <line x1="414" y1="173" x2="458" y2="226" stroke-linecap="round" stroke-width="15"></line>
                      <line x1="374" y1="261" x2="358" y2="334" stroke-linecap="round" stroke-width="18"></line>
                      <line x1="410" y1="261" x2="424" y2="334" stroke-linecap="round" stroke-width="18"></line>
                    </g>
                    <g class="rk-hlth-room-heights" fill="#17364a" font-size="13" font-weight="800">
                      <text x="54" y="50">1,7 m • okolice głowy</text>
                      <text x="54" y="125">1,1 m • tułów</text>
                      <text x="54" y="210">0,6 m • kolana</text>
                      <text x="54" y="295">0,1 m • stopy</text>
                    </g>
                    <text id="rk-hlth-room-label" x="548" y="52" text-anchor="end" fill="#17364a" font-size="14" font-weight="900">Równomierna emisja</text>
                  </svg>
                </div>
              </div>

              <div class="rk-hlth-viz-panel">
                <h4>Pionowy profil temperatury powietrza</h4>
                <p>Linia przedstawia model edukacyjny, a nie wynik pomiaru konkretnego budynku.</p>
                <div class="rk-hlth-viz-canvas">
                  <svg id="rk-hlth-chart-svg" viewBox="0 0 520 420" role="img" aria-labelledby="rk-hlth-chart-title rk-hlth-chart-desc">
                    <title id="rk-hlth-chart-title">Poglądowy wykres temperatury wraz z wysokością</title>
                    <desc id="rk-hlth-chart-desc">Temperatura orientacyjna na wysokości stóp, kolan, tułowia i głowy.</desc>
                    <rect x="0" y="0" width="520" height="420" fill="#f7fbfc"></rect>
                    <g stroke="#cfdee4" stroke-width="1">
                      <line x1="74" y1="62" x2="475" y2="62"></line>
                      <line x1="74" y1="142" x2="475" y2="142"></line>
                      <line x1="74" y1="222" x2="475" y2="222"></line>
                      <line x1="74" y1="302" x2="475" y2="302"></line>
                      <line x1="74" y1="362" x2="475" y2="362"></line>
                      <line x1="74" y1="42" x2="74" y2="362"></line>
                      <line x1="174" y1="42" x2="174" y2="362"></line>
                      <line x1="274" y1="42" x2="274" y2="362"></line>
                      <line x1="374" y1="42" x2="374" y2="362"></line>
                      <line x1="474" y1="42" x2="474" y2="362"></line>
                    </g>
                    <g class="rk-hlth-chart-axis-labels" fill="#607784" font-size="12" font-weight="700">
                      <text x="57" y="66" text-anchor="end">1,7 m</text>
                      <text x="57" y="146" text-anchor="end">1,1 m</text>
                      <text x="57" y="226" text-anchor="end">0,6 m</text>
                      <text x="57" y="306" text-anchor="end">0,1 m</text>
                      <text x="74" y="385" text-anchor="middle">16°C</text>
                      <text x="174" y="385" text-anchor="middle">20°C</text>
                      <text x="274" y="385" text-anchor="middle">24°C</text>
                      <text x="374" y="385" text-anchor="middle">28°C</text>
                      <text x="474" y="385" text-anchor="middle">32°C</text>
                    </g>
                    <text x="275" y="408" text-anchor="middle" fill="#17364a" font-size="12" font-weight="800">temperatura poglądowa</text>
                    <polyline id="rk-hlth-profile-line" points="192,302 187,222 182,142 177,62" fill="none" stroke="#078fbe" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"></polyline>
                    <g fill="#ffffff" stroke="#078fbe" stroke-width="4">
                      <circle id="rk-hlth-point-feet" cx="192" cy="302" r="7"></circle>
                      <circle id="rk-hlth-point-knees" cx="187" cy="222" r="7"></circle>
                      <circle id="rk-hlth-point-body" cx="182" cy="142" r="7"></circle>
                      <circle id="rk-hlth-point-head" cx="177" cy="62" r="7"></circle>
                    </g>
                    <g class="rk-hlth-chart-point-labels" fill="#102536" font-size="12" font-weight="900">
                      <text id="rk-hlth-text-feet" x="208" y="294">20,7°C</text>
                      <text id="rk-hlth-text-knees" x="203" y="214">20,5°C</text>
                      <text id="rk-hlth-text-body" x="198" y="134">20,3°C</text>
                      <text id="rk-hlth-text-head" x="193" y="54">20,1°C</text>
                    </g>
                  </svg>
                </div>
              </div>
            </div>

            <div class="rk-hlth-results" aria-live="polite">
              <div class="rk-hlth-result"><span>Scenariusz</span><strong id="rk-hlth-result-mode">Podłogówka</strong></div>
              <div class="rk-hlth-result"><span>Powierzchnia</span><strong id="rk-hlth-result-surface">26°C</strong></div>
              <div class="rk-hlth-result"><span>Różnica stopy–głowa</span><strong id="rk-hlth-result-gradient">0,6 K</strong></div>
              <div class="rk-hlth-result"><span>Ocena modelu</span><strong id="rk-hlth-result-rating">Równomierny</strong></div>
            </div>

            <div class="rk-hlth-tool-status" id="rk-hlth-tool-status" aria-live="polite"><strong>Co pokazuje ten wariant?</strong> Duża aktywna powierzchnia może oddawać ciepło przy niewielkim pionowym gradiencie. Rzeczywisty wynik trzeba potwierdzić pomiarem i obliczeniami.</div>
            <p class="rk-hlth-tool-note">Model celowo upraszcza zjawiska. Nie uwzględnia temperatur ścian i szyb, infiltracji, nasłonecznienia, geometrii, mebli, sposobu użytkowania ani indywidualnej fizjologii. Nie służy do oceny chorób, bezpieczeństwa medycznego ani zgodności instalacji z normą.</p>
          </div>
        </div>
      </section>

      <aside class="rk-hlth-mid-cta" aria-label="Indywidualny projekt po analizie profilu temperatury">
        <span class="rk-hlth-kicker" style="color:#79edf7">Od grafiki do rzeczywistego budynku</span>
        <h3>Wizualizacja pokazuje zasadę, ale nie zna temperatury Twojej podłogi</h3>
        <p>Nie zna strat ciepła pomieszczeń, czynnej powierzchni, rozstawu rur, oporu okładziny ani nastaw instalacji. To właśnie te dane decydują, czy podłoga pokryje zapotrzebowanie bez niepotrzebnego podnoszenia temperatury powierzchni.</p>
        <p>W indywidualnym projekcie otrzymujesz temperatury pracy, rozstawy, pętle, przepływy i nastawy przypisane do rzeczywistego rzutu budynku.</p>
        <a class="rk-hlth-cta-button rk-hlth-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt z obliczoną temperaturą pracy</a>
        <small class="rk-hlth-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
      </aside>

      <section class="rk-hlth-section" id="rk-hlth-circulation">
        <span class="rk-hlth-kicker">Bez fałszywych obietnic</span>
        <h2>Ogrzewanie podłogowe a krążenie, żylaki i puchnięcie nóg</h2>
        <p class="rk-hlth-intro">Nie należy przedstawiać temperatury podłogi jako przyczyny ani jako zabezpieczenia przed żylakami. Choroby żylne mają własne mechanizmy i czynniki ryzyka, a sam artykuł techniczny nie może rozstrzygać sytuacji konkretnej osoby.</p>

        <div class="rk-hlth-grid-3">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Fakt techniczny</span><h3>Ciepło zmienia odczucie</h3><p>Zbyt ciepła powierzchnia może powodować dyskomfort i uczucie gorących stóp. Reakcja nie musi być taka sama u wszystkich użytkowników.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Granica wiedzy</span><h3>Instalacja nie diagnozuje żył</h3><p>Porównanie temperatury posadzki z temperaturą krwi nie wystarcza do oceny krążenia, obrzęków ani niewydolności żylnej.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Rozsądne działanie</span><h3>Eliminuj przegrzewanie</h3><p>Jeżeli podłoga stale wydaje się gorąca, trzeba sprawdzić nastawy, czujnik, temperaturę wody i zgodność z projektem. Dolegliwości należy omówić z lekarzem.</p></article>
        </div>

        <div class="rk-hlth-medical"><strong>Kiedy nie eksperymentować z ustawieniami?</strong> Jeśli występują nawracające obrzęki, ból, zaczerwienienie, jednostronna zmiana kończyny albo rozpoznana choroba naczyniowa, priorytetem jest konsultacja medyczna. Obniżenie temperatury podłogi może poprawić subiektywny komfort, ale nie jest leczeniem przyczyny.</div>

        <p>Od strony instalacyjnej warto sprawdzić, czy rozstaw i temperatura nie próbują kompensować zbyt małej powierzchni czynnej. Właściwy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur w wodnym ogrzewaniu podłogowym</a> wynika z obliczeń, a nie z obietnicy zdrowotnej.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-joints">
        <span class="rk-hlth-kicker">Komfort nie jest terapią</span>
        <h2>Podłogówka a stawy i choroby reumatyczne</h2>
        <p class="rk-hlth-intro">Ciepła powierzchnia może być przez część osób odbierana jako przyjemna, ale nie daje podstaw do stwierdzenia, że ogrzewanie podłogowe leczy reumatyzm, zmniejsza stan zapalny albo zapobiega chorobom stawów.</p>

        <div class="rk-hlth-compare">
          <div><h3>Co możemy ocenić technicznie?</h3><ul><li>temperaturę powierzchni i jej równomierność,</li><li>temperaturę powietrza w pomieszczeniu,</li><li>czas reakcji układu oraz nastawy,</li><li>miejscowe strefy przegrzania lub niedogrzania.</li></ul></div>
          <div><h3>Co wymaga wiedzy medycznej?</h3><ul><li>przyczyna bólu lub obrzęku,</li><li>rodzaj choroby stawów,</li><li>zalecane leczenie i rehabilitacja,</li><li>indywidualna tolerancja ciepła.</li></ul></div>
        </div>

        <p>Amerykański instytut NIAMS podkreśla, że istnieje wiele rodzajów zapalenia stawów o różnych przyczynach i metodach leczenia, a właściwe rozpoznanie powinien postawić lekarz. Zobacz oficjalne informacje: <a href="https://www.niams.nih.gov/health-topics/arthritis" target="_blank" rel="nofollow noopener noreferrer">NIAMS — Arthritis: overview and types</a>.</p>

        <div class="rk-hlth-note"><p>W nowej wersji artykułu usuwamy określenia „działanie terapeutyczne”, „ochrona stawów” i sztywną temperaturę, po której rzekomo zaczyna się uszkodzenie stawów. Takich wniosków nie można wyprowadzić z parametrów instalacji.</p></div>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-allergy">
        <span class="rk-hlth-kicker">Jakość powietrza</span>
        <h2>Ogrzewanie podłogowe a alergia, astma, kurz i roztocza</h2>
        <p class="rk-hlth-intro">Podłogówka nie jest filtrem powietrza i nie usuwa automatycznie roztoczy. Sposób ogrzewania może wpływać na ruch powietrza i temperaturę powierzchni, ale ekspozycja na alergeny zależy od znacznie większej liczby czynników.</p>

        <div class="rk-hlth-grid-4">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Kurz</span><h3>Nie ma jednej prędkości</h3><p>Ruch pyłu zależy od wentylacji, przeciągów, chodzenia, sprzątania, tekstyliów, filtracji i geometrii. Nie przypisujemy wszystkim grzejnikom i podłogom jednej stałej prędkości powietrza.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Roztocza</span><h3>Liczy się mikrośrodowisko</h3><p>Materace, pościel, dywany i tapicerka tworzą inne warunki niż odsłonięta posadzka. Sama temperatura jastrychu nie potwierdza eliminacji roztoczy.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Pleśń</span><h3>Najpierw wilgoć</h3><p>Rozwój pleśni wiąże się z wilgocią, przeciekami, kondensacją i niewłaściwą wentylacją. Ciepła podłoga nie naprawia mokrej przegrody.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Astma i alergia</span><h3>Kontroluj źródła</h3><p>Znaczenie mają także dym, sierść, pyłki, środki chemiczne, materiały wyposażenia i zanieczyszczenia powstające podczas spalania.</p></article>
        </div>

        <p>Amerykańska EPA wymienia pleśń i roztocza wśród domowych czynników mogących nasilać objawy astmy, ale zaleca działanie na wielu poziomach: ograniczanie źródeł, sprzątanie, kontrolę wilgoci, wentylację i właściwą filtrację. Zobacz <a href="https://www.epa.gov/indoor-air-quality-iaq/care-your-air-guide-indoor-air-quality" target="_blank" rel="nofollow noopener noreferrer">EPA — Care for Your Air</a>.</p>

        <p>Nie będziemy więc pisać, że podłogówka „zatrzymuje rozwój roztoczy” ani że grzejnik „działa jak odkurzacz”. Rzetelniejsze jest wskazanie, że charakter ruchu powietrza może być inny, ale o rzeczywistej ekspozycji decyduje całe pomieszczenie i sposób użytkowania.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-humidity">
        <span class="rk-hlth-kicker">Wilgoć nie znika</span>
        <h2>Czy ogrzewanie podłogowe wysusza powietrze?</h2>
        <p class="rk-hlth-intro">Żaden odbiornik ciepła nie „zużywa” wilgoci wyłącznie dlatego, że ogrzewa pomieszczenie. Gdy temperatura powietrza rośnie przy tej samej zawartości pary wodnej, jego wilgotność względna zwykle spada. Dotyczy to podłogówki, grzejników i innych systemów.</p>

        <div class="rk-hlth-formula" aria-label="Zależność wilgotności względnej od temperatury">
          <strong>Ta sama ilość pary wodnej + wyższa temperatura = niższa wilgotność względna</strong>
          <span>To nie oznacza automatycznie, że konkretny system „zabrał” wodę z powietrza. Trzeba sprawdzić temperaturę, wentylację, źródła wilgoci i szczelność budynku.</span>
        </div>

        <div class="rk-hlth-grid-3">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Pomiar</span><h3>Temperatura i RH razem</h3><p>Sam higrometr bez wiedzy o temperaturze może prowadzić do błędnych wniosków. Warto obserwować oba parametry przez kilka dni.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Wentylacja</span><h3>Wymiana powietrza</h3><p>Zimą powietrze zewnętrzne po ogrzaniu może mieć niską wilgotność względną. Intensywna wymiana usuwa wilgoć wytwarzaną przez domowników.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Eksploatacja</span><h3>Nie przegrzewaj pokoju</h3><p>Obniżenie nadmiernej temperatury może zwiększyć wilgotność względną i poprawić komfort bez zmiany źródła ogrzewania.</p></article>
        </div>

        <p>Pełne wyjaśnienie znajdziesz w poradnikach <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-wysusza-powietrze-w-pomieszczeniach/">czy ogrzewanie podłogowe wysusza powietrze</a> oraz <a href="https://projekt-ogrzewania.pl/jak-ogrzewanie-podlogowe-wplywa-na-wilgotnosc-powietrza-w-domu/">jak podłogówka wpływa na wilgotność w domu</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-ventilation">
        <span class="rk-hlth-kicker">Cały mikroklimat</span>
        <h2>Wentylacja, wilgotność i pleśń są ważniejsze niż etykieta systemu</h2>
        <p class="rk-hlth-intro">Dobre ogrzewanie nie zastępuje dopływu świeżego powietrza, usuwania zanieczyszczeń ani kontroli wilgoci. Można mieć poprawnie działającą podłogówkę i jednocześnie zły mikroklimat z powodu niesprawnej wentylacji, przecieków lub emisji z materiałów.</p>

        <div class="rk-hlth-grid-3">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Źródła wilgoci</span><h3>Kuchnia, łazienka i ludzie</h3><p>Gotowanie, kąpiel, suszenie prania, rośliny i obecność mieszkańców dostarczają parę wodną. Instalacja grzewcza nie usuwa jej sama.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Zimne powierzchnie</span><h3>Kondensacja</h3><p>Mostki cieplne i chłodne narożniki mogą osiągać warunki sprzyjające wykraplaniu wilgoci nawet wtedy, gdy środek pomieszczenia jest ciepły.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Wentylacja</span><h3>Kontrolowana wymiana</h3><p>Wydajność instalacji trzeba dopasować do użytkowania. Filtry, nawiewniki, wywiewy i kanały wymagają kontroli oraz konserwacji.</p></article>
        </div>

        <p>WHO wskazuje, że ograniczenie trwałego zawilgocenia i rozwoju mikroorganizmów jest podstawą ochrony jakości powietrza: <a href="https://www.who.int/publications/i/item/9789289041683" target="_blank" rel="nofollow noopener noreferrer">WHO — Indoor air quality: dampness and mould</a>. EPA podobnie podkreśla, że najskuteczniejszą kontrolą pleśni jest kontrola wilgoci: <a href="https://www.epa.gov/mold/mold-course-chapter-2" target="_blank" rel="nofollow noopener noreferrer">EPA — Why and where mold grows</a>.</p>

        <p>Jeżeli dom ma wentylację mechaniczną, warto sprawdzić, jak współpracują <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">rekuperacja i ogrzewanie podłogowe</a>. Są to dwa odrębne układy realizujące inne zadania.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-sleep">
        <span class="rk-hlth-kicker">Strefa nocna</span>
        <h2>Czy podłogówka w sypialni jest zdrowa i dobra dla snu?</h2>
        <p class="rk-hlth-intro">Podłogówka może pracować w sypialni, ale nie ma podstaw, aby przypisywać jej poprawę fazy NREM albo gwarancję braku porannego bólu głowy. Dla snu ważny jest cały zestaw warunków: temperatura, hałas, światło, wentylacja i indywidualne preferencje.</p>

        <div class="rk-hlth-grid-3">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Temperatura</span><h3>Unikaj przegrzania</h3><p>Ustawienie właściwe dla salonu nie musi odpowiadać sypialni. Temperatura powinna wynikać z komfortu użytkowników, a nie z jednej internetowej liczby.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Bezwładność</span><h3>Zmiany wymagają czasu</h3><p>Ciężka podłoga nie reaguje natychmiast na nocne obniżenie. Duże skoki nastaw mogą dać efekt dopiero wtedy, gdy nie jest już potrzebny.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Powietrze</span><h3>Sprawdź wentylację</h3><p>Duszność, wysoki poziom dwutlenku węgla, hałas albo suche powietrze nie są automatycznie skutkiem rur w podłodze.</p></article>
        </div>

        <p>Amerykański NHLBI zaleca utrzymywanie sypialni w warunkach chłodnych, cichych i ciemnych, ale nie przypisuje zdrowego snu jednemu systemowi grzewczemu. Zobacz <a href="https://www.nhlbi.nih.gov/health/sleep-deprivation/healthy-sleep-habits" target="_blank" rel="nofollow noopener noreferrer">NHLBI — Healthy Sleep Habits</a>.</p>

        <p>Przy podłodze z jastrychem ważne jest zrozumienie <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności cieplnej ogrzewania podłogowego</a>. Stabilne sterowanie może zapewnić <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">właściwie dobrany termostat</a>, a łagodne dopasowanie temperatury wody — <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowanie pogodowe podłogówką</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-children">
        <span class="rk-hlth-kicker">Kontakt z posadzką</span>
        <h2>Ogrzewanie podłogowe a niemowlęta i małe dzieci</h2>
        <p class="rk-hlth-intro">Dziecko bawiące się na podłodze ma dłuższy i większy kontakt z powierzchnią niż stojący dorosły. Nie oznacza to, że podłogówka jest automatycznie niebezpieczna albo „skrajnie bezpieczna”. Trzeba zadbać o temperaturę, czystość, materiały i brak miejscowych przegrzań.</p>

        <div class="rk-hlth-grid-4">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Powierzchnia</span><h3>Zmierz, nie zgaduj</h3><p>Jeżeli podłoga jest wyraźnie gorąca lub temperatura jest nierówna, potrzebny jest pomiar i kontrola ustawień.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Okładzina</span><h3>Sprawdź dokumentację</h3><p>Materiał, klej i podkład powinny być przeznaczone do ogrzewania podłogowego oraz eksploatowane w deklarowanym zakresie temperatur.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Czystość</span><h3>Usuń źródła alergenów</h3><p>Regularne sprzątanie i ograniczanie wilgoci pozostają ważne niezależnie od sposobu ogrzewania.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Objawy</span><h3>Nie diagnozuj instalacją</h3><p>Problemy skórne, oddechowe lub inne objawy dziecka trzeba omówić z pediatrą, zamiast przypisywać je wyłącznie podłodze.</p></article>
        </div>

        <p>Przy wyborze wykończenia pomocny będzie poradnik odpowiadający, <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">czy na ogrzewanie podłogowe nadają się panele, czy tylko płytki</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-seniors">
        <span class="rk-hlth-kicker">Indywidualna tolerancja</span>
        <h2>Podłogówka dla seniorów i osób szczególnie wrażliwych na ciepło</h2>
        <p class="rk-hlth-intro">Wiek sam w sobie nie przesądza o przydatności ogrzewania podłogowego. Ważniejsze są indywidualne odczucia, sprawność termoregulacji, choroby współistniejące, przyjmowane leki oraz możliwość łatwej kontroli temperatury.</p>

        <div class="rk-hlth-callout"><p><strong>Dobre rozwiązanie użytkowe:</strong> czytelny termostat, ograniczenie maksymalnej nastawy, stabilna regulacja pogodowa i możliwość sprawdzenia rzeczywistej temperatury powierzchni. Obsługa powinna być prostsza niż sam układ techniczny.</p></div>

        <div class="rk-hlth-grid-3">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Komfort</span><h3>Zapytaj użytkownika</h3><p>Nie projektuj wyłącznie dla „średniej osoby”. Ktoś stale przebywający w domu może inaczej odczuwać temperaturę niż osoba wracająca wieczorem.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Kontrola</span><h3>Ogranicz przypadkowe zmiany</h3><p>Skomplikowany interfejs sprzyja podnoszeniu i obniżaniu nastaw bez uwzględnienia bezwładności podłogi.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Medycyna</span><h3>Uwzględnij zalecenia lekarza</h3><p>Jeśli lekarz zalecił unikanie ciepła lub określonego zakresu temperatur, instalację należy użytkować zgodnie z tym zaleceniem.</p></article>
        </div>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-finishes">
        <span class="rk-hlth-kicker">Warstwa między rurą a człowiekiem</span>
        <h2>Płytki, panele, drewno i wykładzina a komfort użytkowania</h2>
        <p class="rk-hlth-intro">Okładzina wpływa na opór cieplny, temperaturę powierzchni, bezwładność i wymaganą temperaturę wody. Nie wybiera się jej wyłącznie według odczucia „ciepła w dotyku”. Trzeba sprawdzić cały zestaw: materiał, klej albo podkład, sposób montażu i ograniczenia producenta.</p>

        <div class="rk-hlth-table-wrap">
          <table class="rk-hlth-table">
            <thead><tr><th>Wykończenie</th><th>Co sprawdzić?</th><th>Najczęstszy błąd</th></tr></thead>
            <tbody>
              <tr><td data-label="Wykończenie"><strong>Płytki i kamień</strong></td><td data-label="Kontrola">Opór warstw, klej, dylatacje, dopuszczalną temperaturę oraz prawidłowe wygrzanie podkładu.</td><td data-label="Błąd">Założenie, że niski opór pozwala dowolnie podnosić temperaturę powierzchni.</td></tr>
              <tr><td data-label="Wykończenie"><strong>Panele</strong></td><td data-label="Kontrola">Deklarację przydatności, opór panelu z podkładem, sposób montażu i limit temperatury.</td><td data-label="Błąd">Dobór grubego podkładu akustycznego bez sprawdzenia jego oporu cieplnego.</td></tr>
              <tr><td data-label="Wykończenie"><strong>Drewno</strong></td><td data-label="Kontrola">Gatunek, budowę elementu, wilgotność, sposób klejenia, opór i zalecenia dotyczące temperatury.</td><td data-label="Błąd">Traktowanie każdego drewna jako materiału o takich samych właściwościach.</td></tr>
              <tr><td data-label="Wykończenie"><strong>Wykładzina i dywan</strong></td><td data-label="Kontrola">Łączny opór, przydatność do ogrzewania i rzeczywistą powierzchnię zasłonięcia.</td><td data-label="Błąd">Projektowanie pełnej emisji przez powierzchnię, która później zostaje trwale przykryta.</td></tr>
            </tbody>
          </table>
        </div>

        <p>Techniczne różnice opisujemy szerzej w artykułach o <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">wpływie okładziny na wydajność podłogówki</a>, <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">oporze cieplnym R</a> oraz porównaniu <a href="https://projekt-ogrzewania.pl/podlogi-drewniane-vs-panele-laminowane-co-wybrac-przy-ogrzewaniu-podlogowym/">podłogi drewnianej i paneli laminowanych</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-furniture">
        <span class="rk-hlth-kicker">Powierzchnia czynna</span>
        <h2>Meble, dywany i miejscowe ograniczenie emisji ciepła</h2>
        <p class="rk-hlth-intro">Nie istnieje uniwersalna zasada, że każde łóżko musi mieć nóżki o wysokości dokładnie 10 cm. Znaczenie ma rodzaj mebla, szczelina powietrzna, opór materiałów, układ rur oraz to, czy powierzchnia została uwzględniona jako czynna w projekcie.</p>

        <div class="rk-hlth-grid-3">
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Stała zabudowa</span><h3>Wyłącz ją z pola grzewczego</h3><p>Szafy w zabudowie, wanna, brodzik, ciąg kuchenny i inne stałe elementy zwykle powinny być znane przed wyznaczeniem aktywnej powierzchni.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Meble ruchome</span><h3>Zostaw elastyczność</h3><p>Stół, sofa i łóżko mogą zmienić położenie. Projekt powinien uwzględniać realny sposób użytkowania, ale nie tworzyć przypadkowych zimnych pasów.</p></article>
          <article class="rk-hlth-card"><span class="rk-hlth-card-number">Dywan</span><h3>Sprawdź opór i powierzchnię</h3><p>Mały dywan nie zachowuje się jak wykładzina zajmująca cały pokój. Ważny jest łączny opór oraz wpływ na możliwość oddania wymaganej mocy.</p></article>
        </div>

        <p>Zobacz osobny poradnik o tym, jak połączyć <a href="https://projekt-ogrzewania.pl/wodne-ogrzewanie-podlogowe-a-meble-jak-polaczyc-komfort-i-aranzacje/">ogrzewanie podłogowe z ustawieniem mebli</a>, oraz listę miejsc, <a href="https://projekt-ogrzewania.pl/gdzie-nie-ukladac-ogrzewania-podlogowego/">gdzie nie układać rur podłogówki</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-radiators">
        <span class="rk-hlth-kicker">Bez fałszywego pojedynku</span>
        <h2>Podłogówka a grzejniki — oba systemy można zaprojektować dobrze lub źle</h2>
        <p class="rk-hlth-intro">Nie będziemy przedstawiać grzejnika jako urządzenia „toksycznego”, a podłogówki jako systemu leczniczego. Obydwa rozwiązania mogą zapewnić komfort, jeżeli ich moc, rozmieszczenie, temperatura i sterowanie odpowiadają budynkowi.</p>

        <div class="rk-hlth-table-wrap">
          <table class="rk-hlth-table">
            <thead><tr><th>Cecha</th><th>Ogrzewanie podłogowe</th><th>Grzejniki</th><th>Co jest rozstrzygające?</th></tr></thead>
            <tbody>
              <tr><td data-label="Cecha"><strong>Powierzchnia emisji</strong></td><td data-label="Podłogówka">Duża powierzchnia i zwykle niższa temperatura.</td><td data-label="Grzejniki">Mniejsza powierzchnia i często wyższa temperatura.</td><td data-label="Rozstrzygające">Wymagana moc oraz warunki pracy źródła ciepła.</td></tr>
              <tr><td data-label="Cecha"><strong>Reakcja</strong></td><td data-label="Podłogówka">W systemie mokrym zwykle wolniejsza.</td><td data-label="Grzejniki">Zwykle szybsza przy małej pojemności.</td><td data-label="Rozstrzygające">Konstrukcja, regulacja i sposób użytkowania.</td></tr>
              <tr><td data-label="Cecha"><strong>Rozkład temperatury</strong></td><td data-label="Podłogówka">Może być równomierny przy prawidłowym projekcie.</td><td data-label="Grzejniki">Zależy od położenia, mocy, temperatury i przegród.</td><td data-label="Rozstrzygające">Pomiary i pełny model pomieszczenia, nie sama nazwa odbiornika.</td></tr>
              <tr><td data-label="Cecha"><strong>Kurz i powietrze</strong></td><td data-label="Podłogówka">Nie zastępuje sprzątania ani wentylacji.</td><td data-label="Grzejniki">Nie są automatycznie źródłem alergii.</td><td data-label="Rozstrzygające">Źródła zanieczyszczeń, wilgotność, filtracja i eksploatacja.</td></tr>
            </tbody>
          </table>
        </div>

        <p>W instalacjach mieszanych potrzebna jest osobna analiza temperatur i hydrauliki. Wyjaśniamy to w artykule <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-mozna-podlaczyc-do-grzejnikow/">czy ogrzewanie podłogowe można podłączyć do grzejników</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-design">
        <span class="rk-hlth-kicker">Inżynieria zamiast etykiety</span>
        <h2>Jak zaprojektować podłogówkę bez miejscowego przegrzewania?</h2>
        <p class="rk-hlth-intro">Punktem wyjścia nie jest wybór „zdrowej temperatury”, lecz bilans pomieszczenia. System powinien dostarczyć wymaganą moc z rzeczywiście dostępnej powierzchni, przy sprawdzonej konstrukcji i parametrach hydraulicznych.</p>

        <div class="rk-hlth-steps">
          <article class="rk-hlth-step"><div><h3>Oblicz projektową stratę ciepła każdego pomieszczenia</h3><p>Uwzględnij przegrody, mostki, wentylację, infiltrację i temperatury projektowe. Zobacz, czym jest <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a>.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Wyznacz rzeczywiście czynną powierzchnię podłogi</h3><p>Odejmij trwałą zabudowę i miejsca wyłączone. Mała powierzchnia czynna zwiększa wymaganą moc jednostkową.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Sprawdź konstrukcję oraz opór okładziny</h3><p>Wprowadź do modelu jastrych albo system suchy, warstwy wykończeniowe, opór cieplny i ograniczenia producenta.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Dobierz rozstaw i temperatury przy tych samych założeniach</h3><p>Porównuj warianty dla identycznej temperatury pomieszczenia, konstrukcji i okładziny. Pomocne jest zestawienie <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstawu rur 10 i 15 cm</a>.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Rozrysuj pętle i strefy</h3><p>Ustal przebieg rur, strefy brzegowe, dylatacje, dobiegi oraz podział powierzchni. Zobacz, <a href="https://projekt-ogrzewania.pl/jak-zaplanowac-rozmieszczenie-petli-grzewczych-w-ogrzewaniu-podlogowym/">jak planować rozmieszczenie pętli</a>.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Policz przepływy i opory hydrauliczne</h3><p>Długość, średnica wewnętrzna, przepływ, medium, rozdzielacz i armatura wpływają na stratę ciśnienia. Temperatura nie może maskować braku przepływu.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Zaprojektuj sterowanie i ograniczenia</h3><p>Źródło ciepła, krzywa grzewcza, termostaty, siłowniki i czujnik podłogowy powinny tworzyć jeden spójny układ.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Odbierz wykonanie przed zakryciem</h3><p>Sprawdź rozstaw, długości, dylatacje i próbę szczelności przed wykonaniem warstwy grzewczej. Konstrukcję omawia <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">przewodnik po wylewce na podłogówkę</a>.</p></div></article>
        </div>

        <p>W obliczeniach przegród przydaje się przewodnik <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty cieplne w budynkach</a>. Z kolei przy warstwie grzewczej trzeba uwzględnić <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolację brzegową i dylatacje</a>.</p>

        <p>Norma <a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021</a> opisuje wyznaczanie wydajności wbudowanych systemów płaszczyznowych, natomiast <a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021</a> obejmuje ich projektowanie i wymiarowanie. Polski kontekst systemowy omawiamy w poradniku o <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">obliczeniach ogrzewania podłogowego według EN 1264</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-signals">
        <span class="rk-hlth-kicker">Najpierw zmierz</span>
        <h2>Sygnały, że problemem mogą być ustawienia albo wykonanie instalacji</h2>
        <p class="rk-hlth-intro">Subiektywny dyskomfort nie mówi jeszcze, gdzie znajduje się przyczyna. Warto zebrać pomiary i rozdzielić problem cieplny, hydrauliczny, wentylacyjny oraz medyczny.</p>

        <div class="rk-hlth-errors">
          <article class="rk-hlth-error"><b>Sygnał 01</b><h3>Podłoga stale wydaje się gorąca</h3><p>Sprawdź temperaturę powierzchni w kilku miejscach, temperaturę zasilania, krzywą grzewczą, pracę zaworu mieszającego i ograniczenia okładziny.</p></article>
          <article class="rk-hlth-error"><b>Sygnał 02</b><h3>Duże różnice między fragmentami podłogi</h3><p>Przyczyną może być geometria rur, różny opór okładziny, zabudowa, dywan, brak przepływu albo wpływ przegród zewnętrznych.</p></article>
          <article class="rk-hlth-error"><b>Sygnał 03</b><h3>Pokój jest przegrzany mimo zamkniętego termostatu</h3><p>Sprawdź bezwładność, miejsce czujnika, pracę siłownika, przypisanie obwodu oraz możliwość przepływu przez niewłaściwą pętlę.</p></article>
          <article class="rk-hlth-error"><b>Sygnał 04</b><h3>Powietrze jest duszne albo bardzo suche</h3><p>Zmierz temperaturę, wilgotność i jakość wentylacji. Nie przypisuj problemu automatycznie sposobowi emisji ciepła.</p></article>
          <article class="rk-hlth-error"><b>Sygnał 05</b><h3>W narożnikach pojawia się kondensacja lub pleśń</h3><p>Sprawdź wilgoć, wentylację, mostki cieplne, temperaturę powierzchni i ewentualne przecieki. Sama zmiana nastawy podłogówki może nie usunąć przyczyny.</p></article>
          <article class="rk-hlth-error"><b>Sygnał 06</b><h3>Użytkownik ma utrzymujące się objawy zdrowotne</h3><p>Równolegle z kontrolą mikroklimatu należy skontaktować się z lekarzem. Instalacja nie powinna służyć do samodzielnego rozpoznawania choroby.</p></article>
        </div>

        <p>W ograniczeniu temperatury powierzchni może pomóc prawidłowo dobrany <a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/">czujnik podłogowy</a>. Jeśli układ ma wiele stref, warto również sprawdzić, <a href="https://projekt-ogrzewania.pl/czy-warto-montowac-sterowniki-do-ogrzewania-podlogowego/">czy sterowniki do ogrzewania podłogowego są właściwie zastosowane</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-checklist">
        <span class="rk-hlth-kicker">Do zapisania</span>
        <h2>Checklista komfortowego i zdrowego mikroklimatu</h2>
        <p class="rk-hlth-intro">Poniższa lista nie jest diagnozą. Pomaga uporządkować techniczne warunki, które można zmierzyć i zweryfikować w domu.</p>

        <div class="rk-hlth-steps">
          <article class="rk-hlth-step"><div><h3>Zmierz temperaturę powietrza i powierzchni</h3><p>Nie oceniaj instalacji wyłącznie dłonią albo stopą. Wykonaj pomiary w kilku miejscach i o różnych porach.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Sprawdź wilgotność względną w czasie</h3><p>Obserwuj wartość razem z temperaturą, najlepiej przez kilka dni. Jeden chwilowy odczyt może nie przedstawiać typowych warunków.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Skontroluj działanie wentylacji</h3><p>Nie zasłaniaj nawiewów i wywiewów. Wymieniaj filtry oraz sprawdzaj przepływy zgodnie z projektem i instrukcją instalacji.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Usuń źródła trwałej wilgoci</h3><p>Napraw przecieki, sprawdź kondensację i nie próbuj osuszać mokrych przegród samym podniesieniem temperatury ogrzewania.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Porównaj okładzinę z dokumentacją</h3><p>Zweryfikuj opór cieplny, sposób montażu, dopuszczalną temperaturę i przydatność do ogrzewania podłogowego.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Sprawdź meble i dywany</h3><p>Porównaj aktualne wyposażenie z powierzchnią czynną przyjętą w projekcie. Zwróć uwagę na trwałe zakrycie dużych fragmentów podłogi.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Ustal stabilne nastawy</h3><p>Nie zmieniaj co kilka godzin temperatury zasilania i regulatorów. Najpierw uwzględnij bezwładność, pogodę i czas reakcji pomieszczenia.</p></div></article>
          <article class="rk-hlth-step"><div><h3>Oddziel pomiar techniczny od oceny zdrowia</h3><p>Parametry instalacji omawiaj z projektantem lub serwisem, a utrzymujące się dolegliwości — z właściwym lekarzem.</p></div></article>
        </div>

        <p>Przed ingerencją w instalację sprawdź też listę <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstszych błędów montażowych</a>. Dla układu już eksploatowanego przydatny będzie poradnik, <a href="https://projekt-ogrzewania.pl/jak-czesto-trzeba-serwisowac-ogrzewanie-podlogowe/">jak często serwisować ogrzewanie podłogowe</a>.</p>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-faq">
        <span class="rk-hlth-kicker">Najczęstsze pytania</span>
        <h2>FAQ — ogrzewanie podłogowe a zdrowie</h2>
        <div class="rk-hlth-faq">
          <details><summary>Czy ogrzewanie podłogowe jest zdrowe?</summary><div class="rk-hlth-faq-answer"><p>Prawidłowo zaprojektowana i użytkowana podłogówka może zapewnić komfort cieplny i nie jest z definicji systemem niezdrowym. Nie oznacza to jednak działania leczniczego ani gwarancji dobrego mikroklimatu. Znaczenie mają temperatura powierzchni, wentylacja, wilgotność, jakość powietrza i indywidualne odczucia.</p></div></details>
          <details><summary>Czy podłogówka powoduje żylaki lub puchnięcie nóg?</summary><div class="rk-hlth-faq-answer"><p>Nie należy przypisywać samej podłogówce powstawania żylaków ani twierdzić, że przed nimi chroni. Nadmiernie ciepła powierzchnia może powodować dyskomfort, szczególnie u osób wrażliwych. Nawracające obrzęki i inne objawy wymagają konsultacji lekarskiej.</p></div></details>
          <details><summary>Czy ogrzewanie podłogowe szkodzi stawom?</summary><div class="rk-hlth-faq-answer"><p>Z parametrów instalacji nie można wyprowadzić wniosku, że podłogówka wywołuje albo leczy choroby stawów. Można ocenić komfort cieplny i temperaturę powierzchni, natomiast przyczynę bólu lub obrzęku powinien rozpoznać lekarz.</p></div></details>
          <details><summary>Czy ogrzewanie podłogowe jest dobre dla alergików?</summary><div class="rk-hlth-faq-answer"><p>Może być komfortowym sposobem ogrzewania, ale nie usuwa automatycznie alergenów. O ekspozycji decydują również wilgotność, pleśń, roztocza w tekstyliach, zwierzęta, wentylacja, filtracja i sposób sprzątania.</p></div></details>
          <details><summary>Czy podłogówka unosi mniej kurzu niż grzejniki?</summary><div class="rk-hlth-faq-answer"><p>Układy mogą wytwarzać inny ruch powietrza, lecz nie ma jednej uniwersalnej prędkości przypisanej wszystkim instalacjom. Rzeczywisty ruch pyłu zależy też od wentylacji, aktywności ludzi, wyposażenia, czyszczenia i geometrii pomieszczenia.</p></div></details>
          <details><summary>Czy podłogówka wysusza powietrze?</summary><div class="rk-hlth-faq-answer"><p>Ogrzewanie podnosi temperaturę, co przy niezmienionej ilości pary wodnej zwykle obniża wilgotność względną. Zjawisko nie jest charakterystyczne wyłącznie dla podłogówki. Trzeba sprawdzić temperaturę, wentylację i źródła wilgoci.</p></div></details>
          <details><summary>Jaka temperatura podłogi jest bezpieczna?</summary><div class="rk-hlth-faq-answer"><p>Temperaturę dobiera się według przeznaczenia strefy, norm projektowych, wymaganej mocy, okładziny i dokumentacji producenta. Często przywoływane 29°C dla strefy stałego pobytu jest wartością projektową, a nie medyczną gwarancją komfortu każdej osoby.</p></div></details>
          <details><summary>Czy można spać w sypialni z ogrzewaniem podłogowym?</summary><div class="rk-hlth-faq-answer"><p>Tak, jeśli pomieszczenie nie jest przegrzewane, wentylacja działa prawidłowo, a użytkownicy akceptują warunki. Podłogówka nie gwarantuje jednak poprawy faz snu i wymaga sterowania uwzględniającego bezwładność podłogi.</p></div></details>
          <details><summary>Czy ogrzewanie podłogowe jest odpowiednie dla małych dzieci?</summary><div class="rk-hlth-faq-answer"><p>Może być stosowane, lecz należy kontrolować temperaturę powierzchni, miejscową równomierność, czystość oraz przydatność okładziny. Dziecko spędza dużo czasu przy podłodze, dlatego nie należy opierać oceny na samej nazwie systemu.</p></div></details>
          <details><summary>Czy dywan na podłogówce powoduje przegrzewanie?</summary><div class="rk-hlth-faq-answer"><p>Dywan zwiększa opór cieplny i ogranicza emisję na zasłoniętej powierzchni. Skutek zależy od jego oporu, wielkości, temperatury wody, układu rur i sterowania. Duże trwałe przykrycie powinno zostać uwzględnione w projekcie.</p></div></details>
          <details><summary>Czy grzejniki są mniej zdrowe od podłogówki?</summary><div class="rk-hlth-faq-answer"><p>Nie da się uczciwie ocenić zdrowia wyłącznie na podstawie nazwy odbiornika. Podłogówkę i grzejniki można zaprojektować oraz użytkować poprawnie albo źle. Liczą się rzeczywiste temperatury, komfort, wentylacja i jakość powietrza.</p></div></details>
          <details><summary>Kiedy wezwać projektanta, serwis albo lekarza?</summary><div class="rk-hlth-faq-answer"><p>Projektant lub serwis powinien ocenić przegrzewanie, nierówną temperaturę, brak przepływu, błędne sterowanie i niezgodność z dokumentacją. Lekarz powinien ocenić utrzymujące się objawy zdrowotne. Jedna konsultacja nie zastępuje drugiej.</p></div></details>
        </div>
      </section>

      <section class="rk-hlth-section" id="rk-hlth-sources">
        <span class="rk-hlth-kicker">Źródła instytucjonalne</span>
        <h2>Podstawa techniczna i zdrowotna opracowania</h2>
        <div class="rk-hlth-source-box">
          <ul>
            <li><a href="https://www.iso.org/standard/85803.html" target="_blank" rel="nofollow noopener noreferrer">ISO 7730:2025</a> — ocena środowiska cieplnego, wskaźniki PMV i PPD oraz kryteria miejscowego dyskomfortu.</li>
            <li><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021</a> — wyznaczanie projektowej wydajności wbudowanych systemów ogrzewania i chłodzenia płaszczyznowego.</li>
            <li><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021</a> — metoda projektowania i wymiarowania systemów płaszczyznowych.</li>
            <li><a href="https://www.who.int/publications/i/item/9789241550376" target="_blank" rel="nofollow noopener noreferrer">WHO Housing and health guidelines</a> — szersze spojrzenie na temperaturę, jakość powietrza i warunki mieszkaniowe.</li>
            <li><a href="https://www.who.int/publications/i/item/9789289041683" target="_blank" rel="nofollow noopener noreferrer">WHO guidelines for indoor air quality: dampness and mould</a> — wpływ wilgoci i rozwoju mikroorganizmów na jakość środowiska wewnętrznego.</li>
            <li><a href="https://www.epa.gov/indoor-air-quality-iaq/care-your-air-guide-indoor-air-quality" target="_blank" rel="nofollow noopener noreferrer">US EPA — Care for Your Air</a> — źródła zanieczyszczeń, alergeny, wilgotność, wentylacja i działania ograniczające ekspozycję.</li>
            <li><a href="https://www.epa.gov/mold/mold-course-chapter-2" target="_blank" rel="nofollow noopener noreferrer">US EPA — Why and Where Mold Grows</a> — znaczenie kontroli wilgoci, wentylacji i kondensacji.</li>
            <li><a href="https://www.nhlbi.nih.gov/health/sleep-deprivation/healthy-sleep-habits" target="_blank" rel="nofollow noopener noreferrer">NHLBI — Healthy Sleep Habits</a> — ogólne zasady środowiska sprzyjającego snu.</li>
            <li><a href="https://www.niams.nih.gov/health-topics/arthritis" target="_blank" rel="nofollow noopener noreferrer">NIAMS — Arthritis</a> — różne rodzaje chorób stawów, ich zróżnicowane przyczyny oraz potrzeba właściwej diagnozy.</li>
          </ul>
          <p>Normy mogą być odpłatne i chronione prawem autorskim. Artykuł omawia ich zakres oraz zasady projektowe, ale nie zastępuje pełnego tekstu normy, projektu instalacji, pomiaru mikroklimatu ani porady medycznej.</p>
        </div>
        <div class="rk-hlth-update">Ostatnia aktualizacja merytoryczna: 8 września 2026 r.</div>
      </section>
    </main>

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

      <header class="rk-hlth-author-head">
        <div><span class="rk-hlth-kicker" style="color:#83f1fb">Autor opracowania technicznego</span><h2 class="rk-hlth-author-title">Robert Kucharski</h2><p>Projektant instalacji sanitarnych • specjalista HVAC i ogrzewania podłogowego</p></div>
        <span class="rk-hlth-author-mark">KOMFORT • PODŁOGÓWKA • HVAC</span>
      </header>

      <div class="rk-hlth-author-layout">
        <aside class="rk-hlth-author-side">
          <div class="rk-hlth-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant ogrzewania podłogowego" width="600" height="600" loading="lazy" decoding="async"></div>
          <div class="rk-hlth-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <div class="rk-hlth-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
          <div class="rk-hlth-author-social-label">Profile autora</div>
          <div class="rk-hlth-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-hlth-author-main">
          <blockquote class="rk-hlth-author-quote"><p>„Komfort cieplny można zaprojektować i zmierzyć. Zdrowia człowieka nie wolno jednak sprowadzać do jednej temperatury podłogi ani używać instalacji do stawiania diagnoz.”</p></blockquote>
          <div class="rk-hlth-author-tabs" role="tablist" aria-label="Informacje o autorze">
            <label class="rk-hlth-author-tab" for="rk-hlth-author-about">O autorze</label>
            <label class="rk-hlth-author-tab" for="rk-hlth-author-exp">Doświadczenie</label>
            <label class="rk-hlth-author-tab" for="rk-hlth-author-method">Metodyka</label>
            <label class="rk-hlth-author-tab" for="rk-hlth-author-sites">Portale</label>
          </div>
          <div class="rk-hlth-author-panel rk-hlth-author-panel-about"><p>Robert Kucharski opracowuje projekty wodnego ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W projektach łączy straty ciepła pomieszczeń z powierzchnią czynną, temperaturą wody, konstrukcją podłogi, rozstawem rur, długościami pętli, przepływami i nastawami rozdzielacza.</p></div>
          <div class="rk-hlth-author-panel rk-hlth-author-panel-exp"><p>Praktyka projektowa autora obejmuje analizę nowych i modernizowanych budynków, współpracę ogrzewania płaszczyznowego z pompami ciepła, kotłami oraz układami mieszanymi, a także weryfikację typowych błędów wykonawczych. Wnioski techniczne są oddzielane od zagadnień wymagających kwalifikacji medycznych.</p></div>
          <div class="rk-hlth-author-panel rk-hlth-author-panel-method"><p>Opracowanie opiera się na aktualnych źródłach instytucjonalnych, standardach komfortu cieplnego i zasadach projektowania systemów płaszczyznowych. Twierdzenia o komforcie nie są przedstawiane jako dowód działania leczniczego, a interaktywna grafika jest jawnie oznaczona jako model edukacyjny.</p></div>
          <div class="rk-hlth-author-panel rk-hlth-author-panel-sites"><p>Robert Kucharski jest właścicielem serwisów Projekt-Ogrzewania.pl, Remont.biz.pl oraz Sobir.pl. Powiązanie portali podajemy jawnie, aby czytelnik znał autorstwo i kontekst publikacji.</p><div class="rk-hlth-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-hlth-final-cta" aria-label="Projekt ogrzewania podłogowego z obliczonym komfortem cieplnym">
      <span class="rk-hlth-kicker" style="color:#83f1fb">Obliczenia zamiast przegrzewania</span>
      <div class="rk-hlth-cta-title">Zaprojektuj podłogówkę dla rzeczywistego budynku i sposobu użytkowania</div>
      <p>Projekt łączy straty ciepła, powierzchnie czynne, okładziny, temperaturę zasilania i powrotu, rozstawy, długości pętli, przepływy oraz nastawy. Dzięki temu temperatura podłogi jest wynikiem obliczeń, a nie próbą naprawiania instalacji po wykonaniu wylewki.</p>
      <a class="rk-hlth-cta-button rk-hlth-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów indywidualny projekt ogrzewania podłogowego</a>
      <small class="rk-hlth-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/czy-ogrzewanie-podlogowe-jest-zdrowe/#article",
      "url": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/",
      "headline": "Czy ogrzewanie podłogowe jest zdrowe? Temperatura, kurz, alergia i krążenie",
      "description": "Techniczny poradnik oddzielający komfort cieplny od medycznych obietnic, z interaktywnym profilem temperatury oraz omówieniem wilgotności, kurzu, snu i krążenia.",
      "inLanguage": "pl-PL",
      "datePublished": "2024-10-13",
      "dateModified": "2026-09-08",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/10/Czy-ogrzewanie-podlogowe-jest-zdrowe.webp",
      "mainEntityOfPage": {"@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#webpage"},
      "author": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"},
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "about": [
        {"@type": "Thing", "name": "Ogrzewanie podłogowe a zdrowie"},
        {"@type": "Thing", "name": "Komfort cieplny"},
        {"@type": "Thing", "name": "Temperatura powierzchni podłogi"},
        {"@type": "Thing", "name": "Jakość powietrza wewnętrznego"},
        {"@type": "Thing", "name": "Wilgotność względna"}
      ],
      "keywords": [
        "czy ogrzewanie podłogowe jest zdrowe",
        "ogrzewanie podłogowe a zdrowie",
        "podłogówka a żylaki",
        "ogrzewanie podłogowe a alergia",
        "podłogówka a kurz",
        "czy podłogówka wysusza powietrze",
        "ogrzewanie podłogowe w sypialni",
        "temperatura podłogi a zdrowie"
      ],
      "citation": [
        "https://www.iso.org/standard/85803.html",
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74684.html",
        "https://www.who.int/publications/i/item/9789241550376",
        "https://www.who.int/publications/i/item/9789289041683",
        "https://www.epa.gov/indoor-air-quality-iaq/care-your-air-guide-indoor-air-quality",
        "https://www.nhlbi.nih.gov/health/sleep-deprivation/healthy-sleep-habits"
      ],
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"}
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#webpage",
      "url": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/",
      "name": "Czy ogrzewanie podłogowe jest zdrowe? Temperatura, kurz, alergia i krążenie",
      "description": "Czy ogrzewanie podłogowe jest zdrowe? Fakty o temperaturze powierzchni, komforcie, krążeniu, alergii, wilgotności, dzieciach i śnie.",
      "inLanguage": "pl-PL",
      "datePublished": "2024-10-13",
      "dateModified": "2026-09-08",
      "primaryImageOfPage": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/10/Czy-ogrzewanie-podlogowe-jest-zdrowe.webp",
        "width": 1050,
        "height": 1050
      },
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"},
      "breadcrumb": {"@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#breadcrumb"},
      "mainEntity": [
        {"@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#application"},
        {"@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#howto"},
        {"@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#faq"}
      ]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#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": "Czy ogrzewanie podłogowe jest zdrowe?", "item": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/"}
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#application",
      "name": "Interaktywny profil temperatury w pomieszczeniu",
      "url": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#rk-hlth-profile",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "Obsługa JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "description": "Poglądowa wizualizacja pionowego rozkładu temperatury dla prawidłowo wyregulowanej i przegrzanej podłogi, grzejnika oraz podłogi częściowo zasłoniętej dywanem.",
      "author": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"}
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#howto",
      "name": "Jak sprawdzić komfort i mikroklimat przy ogrzewaniu podłogowym?",
      "description": "Osiem kroków technicznej kontroli temperatury, wilgotności, wentylacji, okładziny, wyposażenia i nastaw ogrzewania podłogowego.",
      "inLanguage": "pl-PL",
      "step": [
        {"@type": "HowToStep", "position": 1, "name": "Zmierz temperaturę powietrza i powierzchni", "text": "Wykonaj pomiary w kilku miejscach i o różnych porach, zamiast oceniać instalację wyłącznie dotykiem."},
        {"@type": "HowToStep", "position": 2, "name": "Sprawdź wilgotność względną w czasie", "text": "Obserwuj wilgotność razem z temperaturą przez kilka dni."},
        {"@type": "HowToStep", "position": 3, "name": "Skontroluj działanie wentylacji", "text": "Sprawdź nawiewy, wywiewy, filtry oraz przepływy zgodnie z projektem i instrukcją."},
        {"@type": "HowToStep", "position": 4, "name": "Usuń źródła trwałej wilgoci", "text": "Napraw przecieki i sprawdź kondensację, zamiast osuszać mokre przegrody samym ogrzewaniem."},
        {"@type": "HowToStep", "position": 5, "name": "Porównaj okładzinę z dokumentacją", "text": "Zweryfikuj opór cieplny, sposób montażu i dopuszczalną temperaturę materiału."},
        {"@type": "HowToStep", "position": 6, "name": "Sprawdź meble i dywany", "text": "Porównaj wyposażenie z powierzchnią czynną przyjętą w projekcie."},
        {"@type": "HowToStep", "position": 7, "name": "Ustal stabilne nastawy", "text": "Uwzględnij bezwładność podłogi, warunki pogodowe i czas reakcji pomieszczenia."},
        {"@type": "HowToStep", "position": 8, "name": "Oddziel pomiar techniczny od oceny zdrowia", "text": "Parametry instalacji omawiaj z projektantem lub serwisem, a utrzymujące się dolegliwości z lekarzem."}
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/#faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {"@type": "Question", "name": "Czy ogrzewanie podłogowe jest zdrowe?", "acceptedAnswer": {"@type": "Answer", "text": "Prawidłowo zaprojektowana i użytkowana podłogówka może zapewnić komfort cieplny i nie jest z definicji systemem niezdrowym. Nie oznacza to jednak działania leczniczego ani gwarancji dobrego mikroklimatu."}},
        {"@type": "Question", "name": "Czy podłogówka powoduje żylaki lub puchnięcie nóg?", "acceptedAnswer": {"@type": "Answer", "text": "Nie należy przypisywać samej podłogówce powstawania żylaków ani twierdzić, że przed nimi chroni. Nadmiernie ciepła powierzchnia może powodować dyskomfort, a nawracające objawy wymagają konsultacji lekarskiej."}},
        {"@type": "Question", "name": "Czy ogrzewanie podłogowe szkodzi stawom?", "acceptedAnswer": {"@type": "Answer", "text": "Z parametrów instalacji nie można wyprowadzić wniosku, że podłogówka wywołuje albo leczy choroby stawów. Temperaturę powierzchni można ocenić technicznie, natomiast przyczynę dolegliwości powinien rozpoznać lekarz."}},
        {"@type": "Question", "name": "Czy ogrzewanie podłogowe jest dobre dla alergików?", "acceptedAnswer": {"@type": "Answer", "text": "Może być komfortowym sposobem ogrzewania, ale nie usuwa automatycznie alergenów. Znaczenie mają też wilgotność, pleśń, roztocza w tekstyliach, wentylacja, filtracja i sprzątanie."}},
        {"@type": "Question", "name": "Czy podłogówka unosi mniej kurzu niż grzejniki?", "acceptedAnswer": {"@type": "Answer", "text": "Układy mogą wytwarzać inny ruch powietrza, lecz rzeczywisty ruch pyłu zależy również od wentylacji, aktywności ludzi, wyposażenia, czyszczenia i geometrii pomieszczenia."}},
        {"@type": "Question", "name": "Czy podłogówka wysusza powietrze?", "acceptedAnswer": {"@type": "Answer", "text": "Ogrzewanie podnosi temperaturę, co przy tej samej ilości pary wodnej zwykle obniża wilgotność względną. Zjawisko nie jest charakterystyczne wyłącznie dla podłogówki."}},
        {"@type": "Question", "name": "Jaka temperatura podłogi jest bezpieczna?", "acceptedAnswer": {"@type": "Answer", "text": "Temperaturę dobiera się według przeznaczenia strefy, norm projektowych, wymaganej mocy, okładziny i dokumentacji producenta. Często przywoływane 29 stopni Celsjusza dla strefy stałego pobytu jest wartością projektową, a nie medyczną gwarancją komfortu."}},
        {"@type": "Question", "name": "Czy można spać w sypialni z ogrzewaniem podłogowym?", "acceptedAnswer": {"@type": "Answer", "text": "Tak, jeśli pomieszczenie nie jest przegrzewane, wentylacja działa prawidłowo, a użytkownicy akceptują warunki. Podłogówka nie gwarantuje poprawy faz snu i wymaga sterowania uwzględniającego bezwładność."}},
        {"@type": "Question", "name": "Czy ogrzewanie podłogowe jest odpowiednie dla małych dzieci?", "acceptedAnswer": {"@type": "Answer", "text": "Może być stosowane, lecz należy kontrolować temperaturę powierzchni, równomierność, czystość oraz przydatność okładziny."}},
        {"@type": "Question", "name": "Czy dywan na podłogówce powoduje przegrzewanie?", "acceptedAnswer": {"@type": "Answer", "text": "Dywan zwiększa opór cieplny i ogranicza emisję na zasłoniętej powierzchni. Skutek zależy od jego oporu, wielkości, temperatury wody, układu rur i sterowania."}},
        {"@type": "Question", "name": "Czy grzejniki są mniej zdrowe od podłogówki?", "acceptedAnswer": {"@type": "Answer", "text": "Nie da się uczciwie ocenić zdrowia wyłącznie na podstawie nazwy odbiornika. Oba systemy można zaprojektować oraz użytkować poprawnie albo źle."}},
        {"@type": "Question", "name": "Kiedy wezwać projektanta, serwis albo lekarza?", "acceptedAnswer": {"@type": "Answer", "text": "Projektant lub serwis powinien ocenić przegrzewanie, nierówną temperaturę, błędne sterowanie i niezgodność z dokumentacją. Lekarz powinien ocenić utrzymujące się objawy zdrowotne."}}
      ]
    },
    {
      "@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",
      "description": "Autor projektów ogrzewania podłogowego, obliczeń cieplnych i hydraulicznych oraz opracowań edukacyjnych dla inwestorów i wykonawców.",
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "obliczenia cieplne budynków",
        "hydraulika instalacji grzewczych",
        "dobór temperatur zasilania",
        "rozstaw rur i długości pętli",
        "równoważenie hydrauliczne"
      ],
      "worksFor": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "affiliation": [
        {"@id": "https://projekt-ogrzewania.pl/#organization"},
        {"@id": "https://remont.biz.pl/#organization"},
        {"@id": "https://sobir.pl/#organization"}
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
        "width": 1024,
        "height": 1024
      },
      "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",
      "description": "Projektowanie ogrzewania podłogowego i techniczna wiedza o instalacjach grzewczych.",
      "inLanguage": "pl-PL",
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"}
    }
  ]
}
</script>

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

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

  var buttons = root.querySelectorAll(".rk-hlth-mode");
  var floorInput = document.getElementById("rk-hlth-floor-temp");
  var airInput = document.getElementById("rk-hlth-air-temp");
  var floorOutput = document.getElementById("rk-hlth-floor-output");
  var airOutput = document.getElementById("rk-hlth-air-output");
  var line = document.getElementById("rk-hlth-profile-line");
  var radiator = document.getElementById("rk-hlth-radiator");
  var rug = document.getElementById("rk-hlth-rug");
  var coils = document.getElementById("rk-hlth-coils");
  var roomLabel = document.getElementById("rk-hlth-room-label");
  var resultMode = document.getElementById("rk-hlth-result-mode");
  var resultSurface = document.getElementById("rk-hlth-result-surface");
  var resultGradient = document.getElementById("rk-hlth-result-gradient");
  var resultRating = document.getElementById("rk-hlth-result-rating");
  var status = document.getElementById("rk-hlth-tool-status");
  var stopFloor = document.getElementById("rk-hlth-stop-floor");
  var stopMid = document.getElementById("rk-hlth-stop-mid");
  var stopTop = document.getElementById("rk-hlth-stop-top");

  var pointIds = ["feet", "knees", "body", "head"];
  var pointY = [302, 222, 142, 62];
  var mode = "floor";

  var modes = {
    floor: {
      label: "Podłogówka",
      floor: 26,
      air: 21,
      deltas: [0.7, 0.5, 0.3, 0.1],
      rating: "Równomierny",
      room: "Równomierna emisja",
      colors: ["#ff8c62", "#f5dda1", "#c7e9f0"],
      text: "Duża aktywna powierzchnia może oddawać ciepło przy niewielkim pionowym gradiencie. Rzeczywisty wynik trzeba potwierdzić pomiarem i obliczeniami."
    },
    overheated: {
      label: "Przegrzana podłoga",
      floor: 32,
      air: 23,
      deltas: [1.8, 1.0, 0.4, 0.1],
      rating: "Sprawdź nastawy",
      room: "Silne ciepło przy podłodze",
      colors: ["#d94337", "#ff9a66", "#f0d5a3"],
      text: "Podwyższona temperatura powierzchni zwiększa odczucie ciepła przy stopach. Należy sprawdzić wymaganą moc, temperaturę wody, sterowanie i przeznaczenie strefy."
    },
    radiator: {
      label: "Grzejnik",
      floor: 19,
      air: 21,
      deltas: [-0.7, -0.2, 0.5, 1.1],
      rating: "Większy gradient",
      room: "Ciepła strefa przy ścianie",
      colors: ["#c7e9f0", "#f1d99d", "#ff9a66"],
      text: "W tym modelu podłoga jest chłodniejsza, a cieplejsze powietrze gromadzi się wyżej i przy grzejniku. To porównanie zasady, nie ocena wszystkich instalacji grzejnikowych."
    },
    blocked: {
      label: "Podłoga z dywanem",
      floor: 29,
      air: 22,
      deltas: [0.9, 0.5, 0.2, 0.0],
      rating: "Lokalne zaburzenie",
      room: "Ciepło pod przykryciem",
      colors: ["#ff7953", "#f2d99b", "#c8e8ef"],
      text: "Dywan zwiększa opór i ogranicza emisję na zasłoniętej powierzchni. Skutek zależy od oporu, powierzchni przykrycia, temperatury wody i układu rur."
    }
  };

  function numberWithComma(value) {
    return value.toFixed(1).replace(".", ",");
  }

  function chartX(value) {
    var limited = value;
    if (limited < 16) {
      limited = 16;
    }
    if (limited > 32) {
      limited = 32;
    }
    return 74 + ((limited - 16) / 16) * 400;
  }

  function setVisible(element, visible) {
    if (visible) {
      element.setAttribute("visibility", "visible");
    } else {
      element.setAttribute("visibility", "hidden");
    }
  }

  function setButtonState() {
    var index;
    for (index = 0; index < buttons.length; index += 1) {
      var active = buttons[index].getAttribute("data-mode") === mode;
      buttons[index].setAttribute("aria-pressed", active ? "true" : "false");
      if (active) {
        buttons[index].classList.add("is-active");
      } else {
        buttons[index].classList.remove("is-active");
      }
    }
  }

  function setPoint(index, temperature) {
    var x = chartX(temperature);
    var point = document.getElementById("rk-hlth-point-" + pointIds[index]);
    var textNode = document.getElementById("rk-hlth-text-" + pointIds[index]);
    point.setAttribute("cx", x.toFixed(1));
    textNode.textContent = numberWithComma(temperature) + "°C";
    if (x > 414) {
      textNode.setAttribute("x", (x - 14).toFixed(1));
      textNode.setAttribute("text-anchor", "end");
    } else {
      textNode.setAttribute("x", (x + 14).toFixed(1));
      textNode.setAttribute("text-anchor", "start");
    }
    return x.toFixed(1) + "," + pointY[index];
  }

  function render() {
    var config = modes[mode];
    var floorTemperature = Number(floorInput.value);
    var airTemperature = Number(airInput.value);
    var floorInfluence = (floorTemperature - config.floor) * 0.09;
    var values = [];
    values[0] = airTemperature + config.deltas[0] + floorInfluence;
    values[1] = airTemperature + config.deltas[1] + floorInfluence * 0.62;
    values[2] = airTemperature + config.deltas[2] + floorInfluence * 0.28;
    values[3] = airTemperature + config.deltas[3] + floorInfluence * 0.10;

    var points = [];
    var index;
    for (index = 0; index < values.length; index += 1) {
      points.push(setPoint(index, values[index]));
    }
    line.setAttribute("points", points.join(" "));

    floorOutput.textContent = floorTemperature + "°C";
    airOutput.textContent = airTemperature + "°C";
    resultMode.textContent = config.label;
    resultSurface.textContent = floorTemperature + "°C";
    resultGradient.textContent = numberWithComma(Math.abs(values[0] - values[3])) + " K";
    resultRating.textContent = config.rating;
    roomLabel.textContent = config.room;
    status.innerHTML = "<strong>Co pokazuje ten wariant?</strong> " + config.text;

    stopFloor.setAttribute("stop-color", config.colors[0]);
    stopMid.setAttribute("stop-color", config.colors[1]);
    stopTop.setAttribute("stop-color", config.colors[2]);

    setVisible(radiator, mode === "radiator");
    setVisible(rug, mode === "blocked");
    coils.setAttribute("opacity", mode === "radiator" ? "0.12" : "1");

    status.className = "rk-hlth-tool-status";
    if (mode === "overheated") {
      status.classList.add("is-warning");
    }
    if (floorTemperature > 29) {
      status.classList.add("is-warning");
      if (mode !== "overheated") {
        status.innerHTML = "<strong>Temperatura powierzchni przekroczyła 29°C.</strong> To nie jest diagnoza medyczna. Sprawdź przeznaczenie strefy, wymagane obciążenie, okładzinę oraz założenia projektu.";
        resultRating.textContent = "Wymaga kontroli";
      }
    }

    setButtonState();
  }

  function selectMode(event) {
    var selected = event.currentTarget.getAttribute("data-mode");
    if (!modes[selected]) {
      return;
    }
    mode = selected;
    floorInput.value = modes[selected].floor;
    airInput.value = modes[selected].air;
    render();
  }

  var buttonIndex;
  for (buttonIndex = 0; buttonIndex < buttons.length; buttonIndex += 1) {
    buttons[buttonIndex].addEventListener("click", selectMode);
  }

  floorInput.addEventListener("input", render);
  airInput.addEventListener("input", render);
  render();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/">Czy ogrzewanie podłogowe jest zdrowe? Temperatura, kurz, alergia i krążenie.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-jest-zdrowe/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
